From 23e736c8e14f6b97161e08ddb5944a8d1b0ef0da Mon Sep 17 00:00:00 2001 From: Brendan Burns Date: Tue, 17 Jun 2014 10:48:02 -0700 Subject: [PATCH] Added goauth2 and the google api client. --- third_party/deps.sh | 4 + .../p/goauth2/.hg/00changelog.i | Bin 0 -> 57 bytes .../src/code.google.com/p/goauth2/.hg/branch | 1 + .../p/goauth2/.hg/cache/branchheads-served | 2 + .../code.google.com/p/goauth2/.hg/cache/tags | 4 + .../code.google.com/p/goauth2/.hg/dirstate | Bin 0 -> 756 bytes .../src/code.google.com/p/goauth2/.hg/hgrc | 2 + .../code.google.com/p/goauth2/.hg/requires | 4 + .../p/goauth2/.hg/store/00changelog.i | Bin 0 -> 20348 bytes .../p/goauth2/.hg/store/00manifest.i | Bin 0 -> 11784 bytes .../p/goauth2/.hg/store/data/_a_u_t_h_o_r_s.i | Bin 0 -> 496 bytes .../.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i | Bin 0 -> 1377 bytes .../p/goauth2/.hg/store/data/_l_i_c_e_n_s_e.i | Bin 0 -> 854 bytes .../p/goauth2/.hg/store/data/_p_a_t_e_n_t_s.i | Bin 0 -> 712 bytes .../p/goauth2/.hg/store/data/_r_e_a_d_m_e.i | Bin 0 -> 275 bytes .../data/appengine/serviceaccount/cache.go.i | Bin 0 -> 568 bytes .../serviceaccount/serviceaccount.go.i | Bin 0 -> 1571 bytes .../serviceaccount/serviceaccount.go.i | Bin 0 -> 2121 bytes .../data/lib/codereview/codereview.cfg.i | Bin 0 -> 235 bytes .../goauth2/.hg/store/data/oauth/_makefile.i | Bin 0 -> 409 bytes .../.hg/store/data/oauth/example/_makefile.i | Bin 0 -> 393 bytes .../.hg/store/data/oauth/example/buzz.go.i | Bin 0 -> 3423 bytes .../store/data/oauth/example/oauthreq.go.i | Bin 0 -> 3685 bytes .../example/example.client__secrets.json.i | Bin 0 -> 255 bytes .../data/oauth/jwt/example/example.pem.i | Bin 0 -> 635 bytes .../store/data/oauth/jwt/example/main.go.i | Bin 0 -> 1775 bytes .../goauth2/.hg/store/data/oauth/jwt/jwt.go.i | Bin 0 -> 7881 bytes .../.hg/store/data/oauth/jwt/jwt__test.go.i | Bin 0 -> 6673 bytes .../p/goauth2/.hg/store/data/oauth/oauth.go.i | Bin 0 -> 15236 bytes .../.hg/store/data/oauth/oauth__test.go.i | Bin 0 -> 3591 bytes .../p/goauth2/.hg/store/data/~2ehgignore.i | Bin 0 -> 77 bytes .../p/goauth2/.hg/store/data/~2ehgtags.i | Bin 0 -> 653 bytes .../p/goauth2/.hg/store/fncache | 22 + .../p/goauth2/.hg/store/phaseroots | 0 .../code.google.com/p/goauth2/.hg/store/undo | Bin 0 -> 701 bytes .../p/goauth2/.hg/store/undo.phaseroots | 0 .../p/goauth2/.hg/undo.bookmarks | 0 .../code.google.com/p/goauth2/.hg/undo.branch | 1 + .../code.google.com/p/goauth2/.hg/undo.desc | 3 + .../p/goauth2/.hg/undo.dirstate | 0 .../src/code.google.com/p/goauth2/.hgignore | 1 + .../src/code.google.com/p/goauth2/.hgtags | 2 + .../src/code.google.com/p/goauth2/AUTHORS | 3 + .../code.google.com/p/goauth2/CONTRIBUTORS | 3 + .../src/code.google.com/p/goauth2/LICENSE | 27 + .../src/code.google.com/p/goauth2/PATENTS | 22 + .../src/code.google.com/p/goauth2/README | 7 + .../goauth2/appengine/serviceaccount/cache.go | 42 + .../serviceaccount/serviceaccount.go | 133 + .../p/goauth2/lib/codereview/codereview.cfg | 2 + .../p/google-api-go-client/.hg/00changelog.i | Bin 0 -> 57 bytes .../p/google-api-go-client/.hg/branch | 1 + .../.hg/cache/branchheads-served | 3 + .../p/google-api-go-client/.hg/cache/tags | 4 + .../p/google-api-go-client/.hg/dirstate | Bin 0 -> 11493 bytes .../p/google-api-go-client/.hg/hgrc | 2 + .../p/google-api-go-client/.hg/requires | 4 + .../.hg/store/00changelog.i | Bin 0 -> 44505 bytes .../.hg/store/00manifest.i | Bin 0 -> 112322 bytes .../.hg/store/data/_a_u_t_h_o_r_s.i | Bin 0 -> 285 bytes .../.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i | Bin 0 -> 1896 bytes .../.hg/store/data/_l_i_c_e_n_s_e.i | Bin 0 -> 843 bytes .../.hg/store/data/_makefile.i | Bin 0 -> 506 bytes .../.hg/store/data/_n_o_t_e_s.i | Bin 0 -> 279 bytes .../.hg/store/data/_r_e_a_d_m_e.i | Bin 0 -> 281 bytes .../.hg/store/data/_t_o_d_o.i | Bin 0 -> 340 bytes .../v1.1/adexchangebuyer-api.json.i | Bin 0 -> 6337 bytes .../v1.1/adexchangebuyer-gen.go.i | Bin 0 -> 7448 bytes .../v1.2/adexchangebuyer-api.json.i | Bin 0 -> 8568 bytes .../v1.2/adexchangebuyer-gen.go.i | Bin 0 -> 10888 bytes .../v1.3/adexchangebuyer-api.json.i | Bin 0 -> 6970 bytes .../v1.3/adexchangebuyer-gen.go.i | Bin 0 -> 8425 bytes .../store/data/adexchangebuyer/v1/_makefile.i | Bin 0 -> 227 bytes .../v1/adexchangebuyer-api.json.i | Bin 0 -> 8284 bytes .../v1/adexchangebuyer-gen.go.i | Bin 0 -> 16947 bytes .../v1.1/adexchangeseller-api.json.i | Bin 0 -> 6438 bytes .../v1.1/adexchangeseller-gen.go.i | Bin 0 -> 9231 bytes .../v1/adexchangeseller-api.json.i | Bin 0 -> 7398 bytes .../v1/adexchangeseller-gen.go.i | Bin 0 -> 10835 bytes .../data/admin/directory__v1/admin-api.json.i | Bin 0 -> 16245 bytes .../data/admin/directory__v1/admin-gen.go.i | Bin 0 -> 26556 bytes .../email__migration__v2/admin-api.json.i | Bin 0 -> 2344 bytes .../admin/email__migration__v2/admin-gen.go.i | Bin 0 -> 2262 bytes .../data/admin/reports__v1/admin-api.json.i | Bin 0 -> 6577 bytes .../data/admin/reports__v1/admin-gen.go.i | Bin 0 -> 8361 bytes .../data/adsense/v1.1/adsense-api.json.i | Bin 0 -> 8206 bytes .../store/data/adsense/v1.1/adsense-gen.go.i | Bin 0 -> 27655 bytes .../data/adsense/v1.2/adsense-api.json.i | Bin 0 -> 9459 bytes .../store/data/adsense/v1.2/adsense-gen.go.i | Bin 0 -> 16903 bytes .../data/adsense/v1.3/adsense-api.json.i | Bin 0 -> 8996 bytes .../store/data/adsense/v1.3/adsense-gen.go.i | Bin 0 -> 14596 bytes .../data/adsense/v1.4/adsense-api.json.i | Bin 0 -> 8910 bytes .../store/data/adsense/v1.4/adsense-gen.go.i | Bin 0 -> 15747 bytes .../data/adsense/v1/#adsense-api.json#.i | Bin 0 -> 3352 bytes .../.hg/store/data/adsense/v1/_makefile.i | Bin 0 -> 219 bytes .../store/data/adsense/v1/adsense-api.json.i | Bin 0 -> 7006 bytes .../store/data/adsense/v1/adsense-gen.go.i | Bin 0 -> 18175 bytes .../data/adsense/v1/~2e#adsense-api.json.i | Bin 0 -> 101 bytes .../adsensehost/v4.1/adsensehost-api.json.i | Bin 0 -> 9542 bytes .../adsensehost/v4.1/adsensehost-gen.go.i | Bin 0 -> 16084 bytes .../.hg/store/data/analytics/v2.4/_makefile.i | Bin 0 -> 223 bytes .../data/analytics/v2.4/analytics-api.json.i | Bin 0 -> 8329 bytes .../data/analytics/v2.4/analytics-gen.go.i | Bin 0 -> 10016 bytes .../.hg/store/data/analytics/v3/_makefile.i | Bin 0 -> 221 bytes .../data/analytics/v3/analytics-api.json.i | Bin 0 -> 33432 bytes .../data/analytics/v3/analytics-gen.go.i | Bin 0 -> 58419 bytes .../v1.1/androidpublisher-api.json.i | Bin 0 -> 3200 bytes .../v1.1/androidpublisher-gen.go.i | Bin 0 -> 3046 bytes .../v1/androidpublisher-api.json.i | Bin 0 -> 4073 bytes .../v1/androidpublisher-gen.go.i | Bin 0 -> 3917 bytes .../data/appstate/v1/appstate-api.json.i | Bin 0 -> 3376 bytes .../store/data/appstate/v1/appstate-gen.go.i | Bin 0 -> 3679 bytes .../.hg/store/data/audit/v1/_makefile.i | Bin 0 -> 217 bytes .../.hg/store/data/audit/v1/audit-api.json.i | Bin 0 -> 5248 bytes .../.hg/store/data/audit/v1/audit-gen.go.i | Bin 0 -> 9812 bytes .../data/bigquery/v2/bigquery-api.json.i | Bin 0 -> 24709 bytes .../store/data/bigquery/v2/bigquery-gen.go.i | Bin 0 -> 52206 bytes .../data/bigquery/v2beta1/bigquery-api.json.i | Bin 0 -> 6371 bytes .../data/bigquery/v2beta1/bigquery-gen.go.i | Bin 0 -> 24506 bytes .../.hg/store/data/blogger/v2/_makefile.i | Bin 0 -> 219 bytes .../store/data/blogger/v2/blogger-api.json.i | Bin 0 -> 6880 bytes .../store/data/blogger/v2/blogger-gen.go.i | Bin 0 -> 23760 bytes .../store/data/blogger/v3/blogger-api.json.i | Bin 0 -> 11662 bytes .../store/data/blogger/v3/blogger-gen.go.i | Bin 0 -> 20333 bytes .../.hg/store/data/books/v1/_makefile.i | Bin 0 -> 217 bytes .../.hg/store/data/books/v1/books-api.json.i | Bin 0 -> 31360 bytes .../.hg/store/data/books/v1/books-gen.go.i | Bin 0 -> 69494 bytes .../.hg/store/data/build-examples.sh.i | Bin 0 -> 290 bytes .../.hg/store/data/buzz/v1/_makefile.i | Bin 0 -> 216 bytes .../.hg/store/data/buzz/v1/buzz-api.json.i | Bin 0 -> 7131 bytes .../.hg/store/data/buzz/v1/buzz-gen.go.i | Bin 0 -> 13489 bytes .../.hg/store/data/calendar/v3/_makefile.i | Bin 0 -> 220 bytes .../data/calendar/v3/calendar-api.json.i | Bin 0 -> 22407 bytes .../store/data/calendar/v3/calendar-gen.go.i | Bin 0 -> 68044 bytes .../civicinfo/us__v1/civicinfo-api.json.i | Bin 0 -> 11638 bytes .../data/civicinfo/us__v1/civicinfo-gen.go.i | Bin 0 -> 13873 bytes .../store/data/compute/v1/compute-api.json.i | Bin 0 -> 20074 bytes .../store/data/compute/v1/compute-gen.go.i | Bin 0 -> 29482 bytes .../data/compute/v1beta12/compute-api.json.i | Bin 0 -> 10644 bytes .../data/compute/v1beta12/compute-gen.go.i | Bin 0 -> 13426 bytes .../data/compute/v1beta13/compute-api.json.i | Bin 0 -> 11239 bytes .../data/compute/v1beta13/compute-gen.go.i | Bin 0 -> 15911 bytes .../data/compute/v1beta14/compute-api.json.i | Bin 0 -> 17458 bytes .../data/compute/v1beta14/compute-gen.go.i | Bin 0 -> 27348 bytes .../data/compute/v1beta15/compute-api.json.i | Bin 0 -> 20673 bytes .../data/compute/v1beta15/compute-gen.go.i | Bin 0 -> 30634 bytes .../data/compute/v1beta16/compute-api.json.i | Bin 0 -> 20269 bytes .../data/compute/v1beta16/compute-gen.go.i | Bin 0 -> 28179 bytes .../data/coordinate/v1/coordinate-api.json.i | Bin 0 -> 7662 bytes .../data/coordinate/v1/coordinate-gen.go.i | Bin 0 -> 11914 bytes .../store/data/customsearch/v1/_makefile.i | Bin 0 -> 223 bytes .../customsearch/v1/customsearch-api.json.i | Bin 0 -> 8343 bytes .../customsearch/v1/customsearch-gen.go.i | Bin 0 -> 15785 bytes .../datastore/v1beta1/datastore-api.json.i | Bin 0 -> 12359 bytes .../data/datastore/v1beta1/datastore-gen.go.i | Bin 0 -> 10678 bytes .../datastore/v1beta2/datastore-api.json.i | Bin 0 -> 6713 bytes .../data/datastore/v1beta2/datastore-gen.go.i | Bin 0 -> 6751 bytes .../dfareporting/v1.1/dfareporting-api.json.i | Bin 0 -> 9027 bytes .../dfareporting/v1.1/dfareporting-gen.go.i | Bin 0 -> 13296 bytes .../dfareporting/v1.2/dfareporting-api.json.i | Bin 0 -> 8014 bytes .../dfareporting/v1.2/dfareporting-gen.go.i | Bin 0 -> 9757 bytes .../dfareporting/v1.3/dfareporting-api.json.i | Bin 0 -> 8642 bytes .../dfareporting/v1.3/dfareporting-gen.go.i | Bin 0 -> 10454 bytes .../dfareporting/v1/dfareporting-api.json.i | Bin 0 -> 7222 bytes .../dfareporting/v1/dfareporting-gen.go.i | Bin 0 -> 10782 bytes .../.hg/store/data/diacritize/v1/_makefile.i | Bin 0 -> 222 bytes .../data/diacritize/v1/diacritize-api.json.i | Bin 0 -> 1341 bytes .../data/diacritize/v1/diacritize-gen.go.i | Bin 0 -> 692 bytes .../.hg/store/data/discovery/v1/_makefile.i | Bin 0 -> 221 bytes .../data/discovery/v1/discovery-api.json.i | Bin 0 -> 10785 bytes .../data/discovery/v1/discovery-gen.go.i | Bin 0 -> 23345 bytes .../.hg/store/data/dns/v1beta1/dns-api.json.i | Bin 0 -> 3833 bytes .../.hg/store/data/dns/v1beta1/dns-gen.go.i | Bin 0 -> 4919 bytes .../v1/doubleclickbidmanager-api.json.i | Bin 0 -> 7509 bytes .../v1/doubleclickbidmanager-gen.go.i | Bin 0 -> 6156 bytes .../v2/doubleclicksearch-api.json.i | Bin 0 -> 7634 bytes .../v2/doubleclicksearch-gen.go.i | Bin 0 -> 9212 bytes .../.hg/store/data/drive/v1/drive-api.json.i | Bin 0 -> 6725 bytes .../.hg/store/data/drive/v1/drive-gen.go.i | Bin 0 -> 10993 bytes .../.hg/store/data/drive/v2/drive-api.json.i | Bin 0 -> 25381 bytes .../.hg/store/data/drive/v2/drive-gen.go.i | Bin 0 -> 40799 bytes .../.hg/store/data/examples/_makefile.i | Bin 0 -> 535 bytes .../.hg/store/data/examples/bigquery.go.i | Bin 0 -> 3832 bytes .../.hg/store/data/examples/buzz.go.i | Bin 0 -> 596 bytes .../.hg/store/data/examples/compute.go.i | Bin 0 -> 653 bytes .../.hg/store/data/examples/debug.go.i | Bin 0 -> 807 bytes .../.hg/store/data/examples/drive.go.i | Bin 0 -> 458 bytes .../.hg/store/data/examples/gopher.png.i | Bin 0 -> 22745 bytes .../.hg/store/data/examples/main.go.i | Bin 0 -> 2849 bytes .../.hg/store/data/examples/orkut.go.i | Bin 0 -> 611 bytes .../.hg/store/data/examples/prediction.go.i | Bin 0 -> 1755 bytes .../.hg/store/data/examples/storage.go.i | Bin 0 -> 496 bytes .../.hg/store/data/examples/tasks.go.i | Bin 0 -> 540 bytes .../.hg/store/data/examples/urlshortener.go.i | Bin 0 -> 762 bytes .../data/freebase/v1-sandbox/_makefile.i | Bin 0 -> 227 bytes .../freebase/v1-sandbox/freebase-api.json.i | Bin 0 -> 6128 bytes .../freebase/v1-sandbox/freebase-gen.go.i | Bin 0 -> 13708 bytes .../.hg/store/data/freebase/v1/_makefile.i | Bin 0 -> 220 bytes .../data/freebase/v1/freebase-api.json.i | Bin 0 -> 10368 bytes .../store/data/freebase/v1/freebase-gen.go.i | Bin 0 -> 19674 bytes .../freebase/v1sandbox/freebase-api.json.i | Bin 0 -> 9406 bytes .../data/freebase/v1sandbox/freebase-gen.go.i | Bin 0 -> 12712 bytes .../.hg/store/data/games/v1/games-api.json.i | Bin 0 -> 21142 bytes .../.hg/store/data/games/v1/games-gen.go.i | Bin 0 -> 29292 bytes .../v1management/gamesmanagement-api.json.i | Bin 0 -> 4991 bytes .../v1management/gamesmanagement-gen.go.i | Bin 0 -> 6774 bytes .../.hg/store/data/gan/v1beta1/gan-api.json.i | Bin 0 -> 15330 bytes .../.hg/store/data/gan/v1beta1/gan-gen.go.i | Bin 0 -> 37379 bytes .../data/google-api-go-generator/_makefile.i | Bin 0 -> 147 bytes .../data/google-api-go-generator/gen.go.i | Bin 0 -> 24029 bytes .../google-api-go-generator/gen__test.go.i | Bin 0 -> 1204 bytes .../testdata/arrayofarray-1.json.i | Bin 0 -> 503 bytes .../testdata/arrayofarray-1.want.i | Bin 0 -> 726 bytes .../testdata/arrayofmapofstrings.json.i | Bin 0 -> 460 bytes .../testdata/arrayofmapofstrings.want.i | Bin 0 -> 683 bytes .../testdata/blogger-3.json.i | Bin 0 -> 6020 bytes .../testdata/blogger-3.want.i | Bin 0 -> 10800 bytes .../testdata/getwithoutbody.json.i | Bin 0 -> 1084 bytes .../testdata/getwithoutbody.want.i | Bin 0 -> 2002 bytes .../testdata/mapofstrings-1.json.i | Bin 0 -> 535 bytes .../testdata/mapofstrings-1.want.i | Bin 0 -> 797 bytes .../testdata/quotednum.json.i | Bin 0 -> 1174 bytes .../testdata/quotednum.want.i | Bin 0 -> 974 bytes .../testdata/resource-named-service.json.i | Bin 0 -> 6029 bytes .../testdata/resource-named-service.want.i | Bin 0 -> 10812 bytes .../.hg/store/data/google-api/_makefile.i | Bin 0 -> 167 bytes .../.hg/store/data/google-api/googleapi.go.i | Bin 0 -> 2810 bytes .../.hg/store/data/googleapi/go11.go.i | Bin 0 -> 131 bytes .../.hg/store/data/googleapi/googleapi.go.i | Bin 0 -> 4771 bytes .../store/data/googleapi/googleapi__test.go.i | Bin 0 -> 2053 bytes .../data/googleapi/transport/apikey.go.i | Bin 0 -> 825 bytes .../.hg/store/data/googleapi/types.go.i | Bin 0 -> 813 bytes .../.hg/store/data/googleapi/types__test.go.i | Bin 0 -> 624 bytes .../v1/groupsmigration-api.json.i | Bin 0 -> 2840 bytes .../v1/groupsmigration-gen.go.i | Bin 0 -> 3085 bytes .../store/data/groupssettings/v1/_makefile.i | Bin 0 -> 224 bytes .../v1/groupssettings-api.json.i | Bin 0 -> 5828 bytes .../groupssettings/v1/groupssettings-gen.go.i | Bin 0 -> 11682 bytes .../v3/identitytoolkit-api.json.i | Bin 0 -> 6761 bytes .../v3/identitytoolkit-gen.go.i | Bin 0 -> 8185 bytes .../.hg/store/data/last-change.i | Bin 0 -> 1146 bytes .../.hg/store/data/latitude/v1/_makefile.i | Bin 0 -> 218 bytes .../data/latitude/v1/latitude-api.json.i | Bin 0 -> 4730 bytes .../store/data/latitude/v1/latitude-gen.go.i | Bin 0 -> 12126 bytes .../data/lib/codereview/codereview.cfg.i | Bin 0 -> 216 bytes .../data/licensing/v1/licensing-api.json.i | Bin 0 -> 4075 bytes .../data/licensing/v1/licensing-gen.go.i | Bin 0 -> 5116 bytes .../data/mapsengine/v1/mapsengine-api.json.i | Bin 0 -> 11189 bytes .../data/mapsengine/v1/mapsengine-gen.go.i | Bin 0 -> 14834 bytes .../store/data/mirror/v1/mirror-api.json.i | Bin 0 -> 17456 bytes .../.hg/store/data/mirror/v1/mirror-gen.go.i | Bin 0 -> 19175 bytes .../.hg/store/data/moderator/v1/_makefile.i | Bin 0 -> 220 bytes .../data/moderator/v1/moderator-api.json.i | Bin 0 -> 5194 bytes .../data/moderator/v1/moderator-gen.go.i | Bin 0 -> 32380 bytes .../store/data/oauth2/v1/oauth2-api.json.i | Bin 0 -> 6951 bytes .../.hg/store/data/oauth2/v1/oauth2-gen.go.i | Bin 0 -> 9551 bytes .../store/data/oauth2/v2/oauth2-api.json.i | Bin 0 -> 6492 bytes .../.hg/store/data/oauth2/v2/oauth2-gen.go.i | Bin 0 -> 9051 bytes .../.hg/store/data/orkut/v2/_makefile.i | Bin 0 -> 217 bytes .../.hg/store/data/orkut/v2/orkut-api.json.i | Bin 0 -> 13150 bytes .../.hg/store/data/orkut/v2/orkut-gen.go.i | Bin 0 -> 65735 bytes .../store/data/pagespeedonline/v1/_makefile.i | Bin 0 -> 225 bytes .../v1/pagespeedonline-api.json.i | Bin 0 -> 7468 bytes .../v1/pagespeedonline-gen.go.i | Bin 0 -> 12138 bytes .../.hg/store/data/plus/v1/_makefile.i | Bin 0 -> 216 bytes .../.hg/store/data/plus/v1/plus-api.json.i | Bin 0 -> 27646 bytes .../.hg/store/data/plus/v1/plus-gen.go.i | Bin 0 -> 56126 bytes .../store/data/plus/v1domains/plus-api.json.i | Bin 0 -> 9446 bytes .../store/data/plus/v1domains/plus-gen.go.i | Bin 0 -> 12636 bytes .../store/data/plus/v1moments/plus-api.json.i | Bin 0 -> 5738 bytes .../store/data/plus/v1moments/plus-gen.go.i | Bin 0 -> 6229 bytes .../plusdomains/v1/plusdomains-api.json.i | Bin 0 -> 11095 bytes .../data/plusdomains/v1/plusdomains-gen.go.i | Bin 0 -> 14718 bytes .../store/data/prediction/v1.2/_makefile.i | Bin 0 -> 223 bytes .../prediction/v1.2/prediction-api.json.i | Bin 0 -> 5730 bytes .../data/prediction/v1.2/prediction-gen.go.i | Bin 0 -> 9980 bytes .../store/data/prediction/v1.3/_makefile.i | Bin 0 -> 223 bytes .../prediction/v1.3/prediction-api.json.i | Bin 0 -> 7105 bytes .../data/prediction/v1.3/prediction-gen.go.i | Bin 0 -> 13654 bytes .../store/data/prediction/v1.4/_makefile.i | Bin 0 -> 223 bytes .../prediction/v1.4/prediction-api.json.i | Bin 0 -> 7418 bytes .../data/prediction/v1.4/prediction-gen.go.i | Bin 0 -> 16491 bytes .../prediction/v1.5/prediction-api.json.i | Bin 0 -> 7124 bytes .../data/prediction/v1.5/prediction-gen.go.i | Bin 0 -> 14421 bytes .../prediction/v1.6/prediction-api.json.i | Bin 0 -> 4014 bytes .../data/prediction/v1.6/prediction-gen.go.i | Bin 0 -> 4954 bytes .../data/qpxexpress/v1/qpxexpress-api.json.i | Bin 0 -> 6856 bytes .../data/qpxexpress/v1/qpxexpress-gen.go.i | Bin 0 -> 6796 bytes .../data/reseller/v1/reseller-api.json.i | Bin 0 -> 6312 bytes .../store/data/reseller/v1/reseller-gen.go.i | Bin 0 -> 8519 bytes .../reseller/v1sandbox/reseller-api.json.i | Bin 0 -> 6425 bytes .../data/reseller/v1sandbox/reseller-gen.go.i | Bin 0 -> 8550 bytes .../.hg/store/data/shopping/v1/_makefile.i | Bin 0 -> 220 bytes .../data/shopping/v1/shopping-api.json.i | Bin 0 -> 13745 bytes .../store/data/shopping/v1/shopping-gen.go.i | Bin 0 -> 37334 bytes .../data/siteverification/v1/_makefile.i | Bin 0 -> 227 bytes .../v1/siteverification-api.json.i | Bin 0 -> 5875 bytes .../v1/siteverification-gen.go.i | Bin 0 -> 12827 bytes .../spectrum/v1explorer/spectrum-api.json.i | Bin 0 -> 10053 bytes .../spectrum/v1explorer/spectrum-gen.go.i | Bin 0 -> 10953 bytes .../data/sqladmin/v1beta1/sqladmin-api.json.i | Bin 0 -> 7903 bytes .../data/sqladmin/v1beta1/sqladmin-gen.go.i | Bin 0 -> 9437 bytes .../data/sqladmin/v1beta3/sqladmin-api.json.i | Bin 0 -> 10146 bytes .../data/sqladmin/v1beta3/sqladmin-gen.go.i | Bin 0 -> 13482 bytes .../data/storage/v1beta1/storage-api.json.i | Bin 0 -> 8182 bytes .../data/storage/v1beta1/storage-gen.go.i | Bin 0 -> 11776 bytes .../data/storage/v1beta2/storage-api.json.i | Bin 0 -> 10676 bytes .../data/storage/v1beta2/storage-gen.go.i | Bin 0 -> 18969 bytes .../store/data/taskqueue/v1beta1/_makefile.i | Bin 0 -> 225 bytes .../taskqueue/v1beta1/taskqueue-api.json.i | Bin 0 -> 5647 bytes .../data/taskqueue/v1beta1/taskqueue-gen.go.i | Bin 0 -> 15069 bytes .../taskqueue/v1beta2/taskqueue-api.json.i | Bin 0 -> 5004 bytes .../data/taskqueue/v1beta2/taskqueue-gen.go.i | Bin 0 -> 6410 bytes .../.hg/store/data/tasks/v1/_makefile.i | Bin 0 -> 217 bytes .../.hg/store/data/tasks/v1/tasks-api.json.i | Bin 0 -> 6233 bytes .../.hg/store/data/tasks/v1/tasks-gen.go.i | Bin 0 -> 20318 bytes .../.hg/store/data/translate/v2/_makefile.i | Bin 0 -> 220 bytes .../data/translate/v2/translate-api.json.i | Bin 0 -> 4561 bytes .../data/translate/v2/translate-gen.go.i | Bin 0 -> 8105 bytes .../store/data/urlshortener/v1/_makefile.i | Bin 0 -> 223 bytes .../urlshortener/v1/urlshortener-api.json.i | Bin 0 -> 5433 bytes .../urlshortener/v1/urlshortener-gen.go.i | Bin 0 -> 10977 bytes .../.hg/store/data/webfonts/v1/_makefile.i | Bin 0 -> 220 bytes .../data/webfonts/v1/webfonts-api.json.i | Bin 0 -> 5457 bytes .../store/data/webfonts/v1/webfonts-gen.go.i | Bin 0 -> 4970 bytes .../store/data/youtube/v3/youtube-api.json.i | Bin 0 -> 78423 bytes .../store/data/youtube/v3/youtube-gen.go.i | Bin 0 -> 96773 bytes .../data/youtube/v3alpha/youtube-api.json.i | Bin 0 -> 7765 bytes .../data/youtube/v3alpha/youtube-gen.go.i | Bin 0 -> 11423 bytes .../v1/youtubeanalytics-api.json.i | Bin 0 -> 7390 bytes .../v1/youtubeanalytics-gen.go.i | Bin 0 -> 7746 bytes .../v1beta1/youtubeanalytics-api.json.i | Bin 0 -> 7782 bytes .../v1beta1/youtubeanalytics-gen.go.i | Bin 0 -> 8151 bytes .../.hg/store/data/~2ehgignore.i | Bin 0 -> 338 bytes .../.hg/store/data/~2ehgtags.i | Bin 0 -> 114 bytes .../p/google-api-go-client/.hg/store/fncache | 276 + .../google-api-go-client/.hg/store/phaseroots | 0 .../p/google-api-go-client/.hg/store/undo | Bin 0 -> 11229 bytes .../.hg/store/undo.phaseroots | 0 .../p/google-api-go-client/.hg/undo.bookmarks | 0 .../p/google-api-go-client/.hg/undo.branch | 1 + .../p/google-api-go-client/.hg/undo.desc | 3 + .../p/google-api-go-client/.hg/undo.dirstate | 0 .../p/google-api-go-client/.hgignore | 11 + .../p/google-api-go-client/.hgtags | 1 + .../p/google-api-go-client/AUTHORS | 10 + .../p/google-api-go-client/CONTRIBUTORS | 44 + .../p/google-api-go-client/LICENSE | 27 + .../p/google-api-go-client/Makefile | 9 + .../p/google-api-go-client/NOTES | 13 + .../p/google-api-go-client/README | 10 + .../p/google-api-go-client/TODO | 2 + .../v1.1/adexchangebuyer-api.json | 613 + .../v1.1/adexchangebuyer-gen.go | 907 ++ .../v1.2/adexchangebuyer-api.json | 824 ++ .../v1.2/adexchangebuyer-gen.go | 1143 ++ .../v1.3/adexchangebuyer-api.json | 853 ++ .../v1.3/adexchangebuyer-gen.go | 1168 ++ .../v1/adexchangebuyer-api.json | 612 + .../adexchangebuyer/v1/adexchangebuyer-gen.go | 885 ++ .../v1.1/adexchangeseller-api.json | 1240 ++ .../v1.1/adexchangeseller-gen.go | 2167 +++ .../v1/adexchangeseller-api.json | 917 ++ .../v1/adexchangeseller-gen.go | 1609 +++ .../admin/directory_v1/admin-api.json | 3602 +++++ .../admin/directory_v1/admin-gen.go | 6375 +++++++++ .../admin/email_migration_v2/admin-api.json | 172 + .../admin/email_migration_v2/admin-gen.go | 198 + .../admin/reports_v1/admin-api.json | 728 + .../admin/reports_v1/admin-gen.go | 1081 ++ .../adsense/v1.1/adsense-api.json | 1402 ++ .../adsense/v1.1/adsense-gen.go | 2787 ++++ .../adsense/v1.2/adsense-api.json | 1948 +++ .../adsense/v1.2/adsense-gen.go | 3780 ++++++ .../adsense/v1.3/adsense-api.json | 2249 ++++ .../adsense/v1.3/adsense-gen.go | 4373 +++++++ .../adsense/v1.4/adsense-api.json | 2406 ++++ .../adsense/v1.4/adsense-gen.go | 4684 +++++++ .../adsense/v1/adsense-api.json | 605 + .../adsense/v1/adsense-gen.go | 934 ++ .../adsensehost/v4.1/adsensehost-api.json | 1568 +++ .../adsensehost/v4.1/adsensehost-gen.go | 2978 +++++ .../analytics/v2.4/analytics-api.json | 365 + .../analytics/v2.4/analytics-gen.go | 803 ++ .../analytics/v3/analytics-api.json | 4749 +++++++ .../analytics/v3/analytics-gen.go | 7113 ++++++++++ .../v1.1/androidpublisher-api.json | 255 + .../v1.1/androidpublisher-gen.go | 374 + .../v1/androidpublisher-api.json | 183 + .../v1/androidpublisher-gen.go | 252 + .../appstate/v1/appstate-api.json | 306 + .../appstate/v1/appstate-gen.go | 507 + .../audit/v1/audit-api.json | 287 + .../audit/v1/audit-gen.go | 367 + .../bigquery/v2/bigquery-api.json | 2058 +++ .../bigquery/v2/bigquery-gen.go | 3023 +++++ .../bigquery/v2beta1/bigquery-api.json | 1466 +++ .../bigquery/v2beta1/bigquery-gen.go | 2223 ++++ .../blogger/v2/blogger-api.json | 922 ++ .../blogger/v2/blogger-gen.go | 1247 ++ .../blogger/v3/blogger-api.json | 2347 ++++ .../blogger/v3/blogger-gen.go | 4216 ++++++ .../books/v1/books-api.json | 3623 +++++ .../books/v1/books-gen.go | 6116 +++++++++ .../p/google-api-go-client/build-examples.sh | 11 + .../calendar/v3/calendar-api.json | 2364 ++++ .../calendar/v3/calendar-gen.go | 4423 +++++++ .../civicinfo/us_v1/civicinfo-api.json | 839 ++ .../civicinfo/us_v1/civicinfo-gen.go | 851 ++ .../compute/v1beta12/compute-api.json | 2774 ++++ .../compute/v1beta12/compute-gen.go | 4384 +++++++ .../compute/v1beta13/compute-api.json | 2872 ++++ .../compute/v1beta13/compute-gen.go | 4553 +++++++ .../compute/v1beta14/compute-api.json | 3696 ++++++ .../compute/v1beta14/compute-gen.go | 6161 +++++++++ .../compute/v1beta15/compute-api.json | 6357 +++++++++ .../compute/v1beta15/compute-gen.go | 10787 +++++++++++++++ .../compute/v1beta16/compute-api.json | 6919 ++++++++++ .../compute/v1beta16/compute-gen.go | 10928 ++++++++++++++++ .../coordinate/v1/coordinate-api.json | 1090 ++ .../coordinate/v1/coordinate-gen.go | 1841 +++ .../customsearch/v1/customsearch-api.json | 813 ++ .../customsearch/v1/customsearch-gen.go | 999 ++ .../datastore/v1beta1/datastore-api.json | 991 ++ .../datastore/v1beta1/datastore-gen.go | 1051 ++ .../datastore/v1beta2/datastore-api.json | 1077 ++ .../datastore/v1beta2/datastore-gen.go | 1002 ++ .../dfareporting/v1.1/dfareporting-api.json | 1520 +++ .../dfareporting/v1.1/dfareporting-gen.go | 2031 +++ .../dfareporting/v1.2/dfareporting-api.json | 1588 +++ .../dfareporting/v1.2/dfareporting-gen.go | 2171 +++ .../dfareporting/v1.3/dfareporting-api.json | 1912 +++ .../dfareporting/v1.3/dfareporting-gen.go | 2426 ++++ .../dfareporting/v1/dfareporting-api.json | 1171 ++ .../dfareporting/v1/dfareporting-gen.go | 1748 +++ .../discovery/v1/discovery-api.json | 674 + .../discovery/v1/discovery-gen.go | 621 + .../dns/v1beta1/dns-api.json | 681 + .../dns/v1beta1/dns-gen.go | 1143 ++ .../v1/doubleclickbidmanager-api.json | 1497 +++ .../v1/doubleclickbidmanager-gen.go | 828 ++ .../v2/doubleclicksearch-api.json | 989 ++ .../v2/doubleclicksearch-gen.go | 1256 ++ .../drive/v1/drive-api.json | 417 + .../drive/v1/drive-gen.go | 675 + .../drive/v2/drive-api.json | 3890 ++++++ .../drive/v2/drive-gen.go | 6948 ++++++++++ .../google-api-go-client/examples/bigquery.go | 368 + .../google-api-go-client/examples/compute.go | 43 + .../p/google-api-go-client/examples/debug.go | 72 + .../p/google-api-go-client/examples/drive.go | 31 + .../google-api-go-client/examples/gopher.png | Bin 0 -> 23019 bytes .../p/google-api-go-client/examples/main.go | 219 + .../p/google-api-go-client/examples/orkut.go | 36 + .../examples/prediction.go | 137 + .../google-api-go-client/examples/storage.go | 32 + .../p/google-api-go-client/examples/tasks.go | 22 + .../examples/urlshortener.go | 46 + .../freebase/v1-sandbox/freebase-api.json | 411 + .../freebase/v1-sandbox/freebase-gen.go | 729 ++ .../freebase/v1/freebase-api.json | 411 + .../freebase/v1/freebase-gen.go | 729 ++ .../freebase/v1sandbox/freebase-api.json | 411 + .../freebase/v1sandbox/freebase-gen.go | 729 ++ .../games/v1/games-api.json | 3643 ++++++ .../games/v1/games-gen.go | 5694 ++++++++ .../v1management/gamesmanagement-api.json | 489 + .../v1management/gamesmanagement-gen.go | 891 ++ .../gan/v1beta1/gan-api.json | 1859 +++ .../gan/v1beta1/gan-gen.go | 2731 ++++ .../google-api-go-generator/gen.go | 1588 +++ .../google-api-go-generator/gen_test.go | 52 + .../testdata/arrayofarray-1.json | 49 + .../testdata/arrayofarray-1.want | 59 + .../testdata/arrayofmapofstrings.json | 32 + .../testdata/arrayofmapofstrings.want | 56 + .../testdata/blogger-3.json | 2199 ++++ .../testdata/blogger-3.want | 3860 ++++++ .../testdata/getwithoutbody.json | 89 + .../testdata/getwithoutbody.want | 190 + .../testdata/mapofstrings-1.json | 38 + .../testdata/mapofstrings-1.want | 63 + .../testdata/quotednum.json | 94 + .../testdata/quotednum.want | 65 + .../testdata/resource-named-service.json | 2199 ++++ .../testdata/resource-named-service.want | 3860 ++++++ .../v1/groupsmigration-api.json | 130 + .../groupsmigration/v1/groupsmigration-gen.go | 167 + .../groupssettings/v1/groupssettings-api.json | 283 + .../groupssettings/v1/groupssettings-gen.go | 394 + .../v3/identitytoolkit-api.json | 903 ++ .../identitytoolkit/v3/identitytoolkit-gen.go | 1102 ++ .../latitude/v1/latitude-api.json | 351 + .../latitude/v1/latitude-gen.go | 661 + .../lib/codereview/codereview.cfg | 1 + .../licensing/v1/licensing-api.json | 426 + .../licensing/v1/licensing-gen.go | 754 ++ .../mapsengine/v1/mapsengine-api.json | 3167 +++++ .../mapsengine/v1/mapsengine-gen.go | 4601 +++++++ .../mirror/v1/mirror-api.json | 1338 ++ .../mirror/v1/mirror-gen.go | 2406 ++++ .../moderator/v1/moderator-api.json | 1769 +++ .../moderator/v1/moderator-gen.go | 2606 ++++ .../oauth2/v1/oauth2-api.json | 264 + .../oauth2/v1/oauth2-gen.go | 371 + .../oauth2/v2/oauth2-api.json | 242 + .../oauth2/v2/oauth2-gen.go | 352 + .../orkut/v2/orkut-api.json | 2451 ++++ .../orkut/v2/orkut-gen.go | 4095 ++++++ .../v1/pagespeedonline-api.json | 420 + .../pagespeedonline/v1/pagespeedonline-gen.go | 362 + .../plus/v1/plus-api.json | 1945 +++ .../google-api-go-client/plus/v1/plus-gen.go | 2507 ++++ .../plus/v1domains/plus-api.json | 2118 +++ .../plus/v1domains/plus-gen.go | 3029 +++++ .../plus/v1moments/plus-api.json | 409 + .../plus/v1moments/plus-gen.go | 397 + .../plusdomains/v1/plusdomains-api.json | 2153 +++ .../plusdomains/v1/plusdomains-gen.go | 3085 +++++ .../prediction/v1.2/prediction-api.json | 353 + .../prediction/v1.2/prediction-gen.go | 575 + .../prediction/v1.3/prediction-api.json | 411 + .../prediction/v1.3/prediction-gen.go | 623 + .../prediction/v1.4/prediction-api.json | 436 + .../prediction/v1.4/prediction-gen.go | 646 + .../prediction/v1.5/prediction-api.json | 699 + .../prediction/v1.5/prediction-gen.go | 929 ++ .../prediction/v1.6/prediction-api.json | 779 ++ .../prediction/v1.6/prediction-gen.go | 1033 ++ .../qpxexpress/v1/qpxexpress-api.json | 894 ++ .../qpxexpress/v1/qpxexpress-gen.go | 691 + .../reseller/v1/reseller-api.json | 749 ++ .../reseller/v1/reseller-gen.go | 1288 ++ .../reseller/v1sandbox/reseller-api.json | 749 ++ .../reseller/v1sandbox/reseller-gen.go | 1288 ++ .../shopping/v1/shopping-api.json | 1141 ++ .../shopping/v1/shopping-gen.go | 1459 +++ .../v1/siteverification-api.json | 320 + .../v1/siteverification-gen.go | 599 + .../spectrum/v1explorer/spectrum-api.json | 991 ++ .../spectrum/v1explorer/spectrum-gen.go | 1322 ++ .../sqladmin/v1beta1/sqladmin-api.json | 1183 ++ .../sqladmin/v1beta1/sqladmin-gen.go | 1775 +++ .../sqladmin/v1beta3/sqladmin-api.json | 1865 +++ .../sqladmin/v1beta3/sqladmin-gen.go | 2712 ++++ .../storage/v1beta1/storage-api.json | 1426 ++ .../storage/v1beta1/storage-gen.go | 2609 ++++ .../storage/v1beta2/storage-api.json | 2344 ++++ .../storage/v1beta2/storage-gen.go | 4664 +++++++ .../taskqueue/v1beta1/taskqueue-api.json | 421 + .../taskqueue/v1beta1/taskqueue-gen.go | 602 + .../taskqueue/v1beta2/taskqueue-api.json | 568 + .../taskqueue/v1beta2/taskqueue-gen.go | 938 ++ .../tasks/v1/tasks-api.json | 695 + .../tasks/v1/tasks-gen.go | 1440 ++ .../translate/v2/translate-api.json | 266 + .../translate/v2/translate-gen.go | 394 + .../urlshortener/v1/urlshortener-api.json | 315 + .../urlshortener/v1/urlshortener-gen.go | 406 + .../webfonts/v1/webfonts-api.json | 174 + .../webfonts/v1/webfonts-gen.go | 180 + .../youtube/v3/youtube-api.json | 6619 ++++++++++ .../youtube/v3/youtube-gen.go | 9393 +++++++++++++ .../youtube/v3alpha/youtube-api.json | 1532 +++ .../youtube/v3alpha/youtube-gen.go | 2006 +++ .../v1/youtubeanalytics-api.json | 414 + .../v1/youtubeanalytics-gen.go | 562 + .../v1beta1/youtubeanalytics-api.json | 417 + .../v1beta1/youtubeanalytics-gen.go | 562 + 569 files changed, 353227 insertions(+) create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/00changelog.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/branch create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/cache/branchheads-served create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/cache/tags create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/dirstate create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/hgrc create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/requires create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/00changelog.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/00manifest.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/_a_u_t_h_o_r_s.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/_l_i_c_e_n_s_e.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/_p_a_t_e_n_t_s.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/_r_e_a_d_m_e.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/appengine/serviceaccount/cache.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/appengine/serviceaccount/serviceaccount.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/compute/serviceaccount/serviceaccount.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/lib/codereview/codereview.cfg.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/_makefile.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/_makefile.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/buzz.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/oauthreq.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/example/example.client__secrets.json.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/example/example.pem.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/example/main.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/jwt.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/jwt__test.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/oauth.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/oauth__test.go.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/~2ehgignore.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/data/~2ehgtags.i create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/fncache create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/phaseroots create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/undo create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/store/undo.phaseroots create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/undo.bookmarks create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/undo.branch create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/undo.desc create mode 100644 third_party/src/code.google.com/p/goauth2/.hg/undo.dirstate create mode 100644 third_party/src/code.google.com/p/goauth2/.hgignore create mode 100644 third_party/src/code.google.com/p/goauth2/.hgtags create mode 100644 third_party/src/code.google.com/p/goauth2/AUTHORS create mode 100644 third_party/src/code.google.com/p/goauth2/CONTRIBUTORS create mode 100644 third_party/src/code.google.com/p/goauth2/LICENSE create mode 100644 third_party/src/code.google.com/p/goauth2/PATENTS create mode 100644 third_party/src/code.google.com/p/goauth2/README create mode 100644 third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/cache.go create mode 100644 third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/serviceaccount.go create mode 100644 third_party/src/code.google.com/p/goauth2/lib/codereview/codereview.cfg create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/00changelog.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/branch create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/cache/branchheads-served create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/cache/tags create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/dirstate create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/hgrc create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/requires create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/00changelog.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/00manifest.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_a_u_t_h_o_r_s.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_l_i_c_e_n_s_e.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_n_o_t_e_s.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_r_e_a_d_m_e.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_t_o_d_o.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.2/adexchangebuyer-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.2/adexchangebuyer-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.3/adexchangebuyer-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.3/adexchangebuyer-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1/adexchangeseller-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1/adexchangeseller-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/reports__v1/admin-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/reports__v1/admin-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.1/adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.1/adsense-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.2/adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.2/adsense-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.4/adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.4/adsense-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/#adsense-api.json#.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/adsense-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/~2e#adsense-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsensehost/v4.1/adsensehost-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsensehost/v4.1/adsensehost-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/analytics-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/analytics-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1/androidpublisher-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1/androidpublisher-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/appstate/v1/appstate-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/appstate/v1/appstate-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2/bigquery-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2/bigquery-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2beta1/bigquery-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2beta1/bigquery-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v2/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v2/blogger-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v2/blogger-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/books/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/books/v1/books-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/books/v1/books-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/build-examples.sh.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/buzz-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/buzz-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/calendar/v3/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/calendar/v3/calendar-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/calendar/v3/calendar-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/civicinfo/us__v1/civicinfo-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/civicinfo/us__v1/civicinfo-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta14/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta14/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta15/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta15/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta16/compute-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta16/compute-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/coordinate/v1/coordinate-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/coordinate/v1/coordinate-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/customsearch-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/customsearch-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta1/datastore-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta1/datastore-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.1/dfareporting-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.1/dfareporting-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.3/dfareporting-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.3/dfareporting-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1/dfareporting-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1/dfareporting-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/diacritize-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/diacritize-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/discovery-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/discovery-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v2/drive-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v2/drive-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/bigquery.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/buzz.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/compute.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/debug.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/drive.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/gopher.png.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/main.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/orkut.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/prediction.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/storage.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/tasks.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/urlshortener.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1/freebase-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1/freebase-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/games/v1/games-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/games/v1/games-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gan/v1beta1/gan-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gan/v1beta1/gan-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen__test.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofarray-1.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofarray-1.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofmapofstrings.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofmapofstrings.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/getwithoutbody.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/getwithoutbody.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/mapofstrings-1.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/mapofstrings-1.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/quotednum.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/quotednum.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/resource-named-service.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/resource-named-service.want.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api/googleapi.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/go11.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/googleapi.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/googleapi__test.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/transport/apikey.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/types.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/types__test.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupsmigration/v1/groupsmigration-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupsmigration/v1/groupsmigration-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupssettings/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupssettings/v1/groupssettings-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupssettings/v1/groupssettings-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/identitytoolkit/v3/identitytoolkit-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/identitytoolkit/v3/identitytoolkit-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/last-change.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/latitude/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/latitude/v1/latitude-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/latitude/v1/latitude-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/lib/codereview/codereview.cfg.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mapsengine/v1/mapsengine-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mapsengine/v1/mapsengine-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v1/oauth2-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v1/oauth2-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/orkut-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/orkut-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1domains/plus-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1domains/plus-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1moments/plus-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1moments/plus-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plusdomains/v1/plusdomains-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plusdomains/v1/plusdomains-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.3/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.3/prediction-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.3/prediction-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/qpxexpress/v1/qpxexpress-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/qpxexpress/v1/qpxexpress-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1/reseller-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1/reseller-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/siteverification-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/siteverification-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/spectrum/v1explorer/spectrum-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/spectrum/v1explorer/spectrum-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta1/sqladmin-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta1/sqladmin-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta2/taskqueue-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta2/taskqueue-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/tasks/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/tasks/v1/tasks-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/tasks/v1/tasks-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/translate-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/translate-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/urlshortener/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/urlshortener/v1/urlshortener-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/urlshortener/v1/urlshortener-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/_makefile.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1/youtubeanalytics-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1/youtubeanalytics-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1beta1/youtubeanalytics-api.json.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1beta1/youtubeanalytics-gen.go.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/~2ehgignore.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/~2ehgtags.i create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/fncache create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/phaseroots create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo.phaseroots create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/undo.bookmarks create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/undo.branch create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/undo.desc create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hg/undo.dirstate create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hgignore create mode 100644 third_party/src/code.google.com/p/google-api-go-client/.hgtags create mode 100644 third_party/src/code.google.com/p/google-api-go-client/AUTHORS create mode 100644 third_party/src/code.google.com/p/google-api-go-client/CONTRIBUTORS create mode 100644 third_party/src/code.google.com/p/google-api-go-client/LICENSE create mode 100644 third_party/src/code.google.com/p/google-api-go-client/Makefile create mode 100644 third_party/src/code.google.com/p/google-api-go-client/NOTES create mode 100644 third_party/src/code.google.com/p/google-api-go-client/README create mode 100644 third_party/src/code.google.com/p/google-api-go-client/TODO create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/books/v1/books-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/books/v1/books-gen.go create mode 100755 third_party/src/code.google.com/p/google-api-go-client/build-examples.sh create mode 100644 third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/bigquery.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/compute.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/debug.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/drive.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/gopher.png create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/main.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/orkut.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/prediction.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/storage.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/tasks.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/examples/urlshortener.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/games/v1/games-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/games/v1/games-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen_test.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.want create mode 100644 third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/lib/codereview/codereview.cfg create mode 100644 third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtube/v3alpha/youtube-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtube/v3alpha/youtube-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtubeanalytics/v1/youtubeanalytics-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtubeanalytics/v1/youtubeanalytics-gen.go create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtubeanalytics/v1beta1/youtubeanalytics-api.json create mode 100644 third_party/src/code.google.com/p/google-api-go-client/youtubeanalytics/v1beta1/youtubeanalytics-gen.go diff --git a/third_party/deps.sh b/third_party/deps.sh index df6825ac363e1..1391af1b0b6fd 100755 --- a/third_party/deps.sh +++ b/third_party/deps.sh @@ -1,11 +1,15 @@ TOP_PACKAGES=" github.com/coreos/go-etcd/etcd github.com/fsouza/go-dockerclient + code.google.com/p/goauth2/compute/serviceaccount + code.google.com/p/goauth2/oauth + code.google.com/p/google-api-go-client/compute/v1 " DEP_PACKAGES=" gopkg.in/v1/yaml bitbucket.org/kardianos/osext + code.google.com/p/google-api-go-client/googleapi github.com/coreos/go-log/log github.com/coreos/go-systemd/journal " diff --git a/third_party/src/code.google.com/p/goauth2/.hg/00changelog.i b/third_party/src/code.google.com/p/goauth2/.hg/00changelog.i new file mode 100644 index 0000000000000000000000000000000000000000..d3a8311050e54c57c5be7cfe169e60a95768812c GIT binary patch literal 57 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 H8HyJ)GlIlG literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/00manifest.i b/third_party/src/code.google.com/p/goauth2/.hg/store/00manifest.i new file mode 100644 index 0000000000000000000000000000000000000000..0347960ff945570a0f0d6b68604b9a50c934c4fb GIT binary patch literal 11784 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/_a_u_t_h_o_r_s.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/_a_u_t_h_o_r_s.i new file mode 100644 index 0000000000000000000000000000000000000000..3fce3e13428f38663a3a714d7ef0c38e85edfa70 GIT binary patch literal 496 zcmZQzWME`~fX56BjG<7r_-(Uqv4HT|If?kB}Uv((2wUx znN^X}BXHAZeuCJY+RBzq-BLb_3{HJpYNOA0d);h_$m?6m&m5V^rTxTe`NhPbNbR3X z?RlR+epvhB{B)_+OSuE*x|OJ}E%9;KuAAhP?io8dSUu+C0kNCO4g5?zjZ8b9ym~)7 z!}oVU(FDQ0=Vtua&Geu%>`8=`SK9fjQy$z;HS~M5pyY0(@ve#!@*SbQ+dVQ^=DXaE z-SuZ;r&X&>z39x%Ck%UIKQkY4Eae0H6Bsx^&*JMJw5$-zLy9NnIcT)-f5`CikikX`sKZ|1GF7naFCP}!vGp{#te@n5a$ zi?Ta=%WZvHMW)Qw;ox4+(ZuO`@P>Me^x+$8HkfxF?ffNr>gWQqm1|ZkeC_{1_-a6c zvgreskNQ6?-zKO(IQTwHz2#Zjk>5w3HcxrRt0*P1xk{F8v6NAM;rT{Y{>Rn3?B}h& L@RwolVjB+tQ32QK literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i new file mode 100644 index 0000000000000000000000000000000000000000..eefe2afeb9f6cf0bbecba07ffc1bbc0fe9d0a689 GIT binary patch literal 1377 zcmZQzWME`~04E^j4rL4fhl0|z3JX~`+8)rH_`vb<-G4a~Pg!4vssU3KbBfP+YkKL1 z7x?RHd7beN+~DcsS?+QEyyqG3>!VAuClc(H=IIR`YCjJh71uTK7WfQR1EWB$ z24Mx?#Jo}k_r#)f1)E$TGablsNYBqt&q>uw&d;^u0&Blf*T^7}IJ#(&pblJAq`^Q%sYtNf&Eli@;KDuH2J~^$XY@5w`Gx0A8IVyi9B~Dtl z@s^hRxnnJ&Uv>5-TS+LcwaNUbdE@ScAAg$krmolQ-Fx-a&WSy@K3{D7#nnAa)AQt= zE~!bC?v2%*W}XtOKlhy7^7rS5r?>y|XX!K;y>oH(wr9IN%f&6`tm3}o=@-r%7qFC_ z^CHw`zKX#AFxfEeUpkkR#FJH(i&aFIor#(JaKhn(6ZWWVsyi5ev2UxClKw-%u0JU{Hp zi3jT6&0A~he7ydq?LGHu^|l#tnJ=&PML)gve@0C9@^#+ro*dh&B8l#ywz5-2uin|LZ*$;d!j31$g8EHLP;>!Q4N^;4jqdSUT{XfE&@i(e4_tmz%HJ| zg|+#XZ*TfOt0`Y|;b{Mv+Jjotlcr4Qs;p<++jmYLloXl1fD@z%FcqH!vltkpLBgO^ z92cPIK3&$FJELg!va^CuuZUULDL~agDb_}yJ|Je$@J%er)^*G)$m_{ zA|UOMoKcjYn^~HxmtT|)$vMm#VD0)qy>Fog$pL9*kev)^=la!(Z|&ARc~y+ z4EdTI1YE2AJ_<)|{xU5}LfTV+f5QQe$p`puN~+wu$2s?||GoP4F4h~JQcv41oZh&> z{ph@#Jwm(mbCm8J3EXt%ZrUVMk)_!!s;dHzoynT;{XVPQ(~=Y3Umms|%x6#YRM)SG q*g2c?qQT6y&sQ169o8uJNuFR6cKz2yv+t)@ubrK)QKzVF?EwJI$1=$P literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/_l_i_c_e_n_s_e.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/_l_i_c_e_n_s_e.i new file mode 100644 index 0000000000000000000000000000000000000000..7b43f947440de03362cc7a46cf48eb7142b64060 GIT binary patch literal 854 zcmV-c1F8G~0RRC20000000R~P00qnd00000000;N|NsC0|NsBuqxTaX#9ezy*d&B` zsSQR08C@g*00000000000001ZoTXAhZrd;ryz>={o{~avgWTGlXo4$v*4@Ty@uQdvo&@^xnXOYmZ@n3lzU@ z@-v`^1EhBzCgaWYWcnE)()8Ac$=)A>btAN64@Ymnj^N#K>P))1w_`iKz|KvB&*0gH zJ-8|Tx?>=N>+Q~VZ3M`moeVshX|N%f9v&z6WP3b>eH-v&5ae)h&vtx(&W*i|O+Ge} z!Gv#w0KjMXNXmoTy|L+BZ(un3fEq%JEF)xl@1A1mpjG=wo%@?%YVP%4$4Q8_K z!JjQod%+^Pq<+#<8JpT7>evn@l36t8WIG7(C_yYGPh68y! zFk_FmCguPM3@#XWbpzwoBQs1F?65$Re(!eSIVR(j8Ssy$i=n|L8>2MExQwsC@jme; zdc_qevCtbT8Q{5=;*J-rfcX~mia{>wt>nv)SqmWvg_=su^QNQ{>PFT=F^IAXuJV%dH7jN~9VY_2W0eNAqGkC} zB@vs7$w>WDBFq_-oX$%Y2PKgOmn_#&&H0q0aY(Psh^kr6@qk`1)I#MpJ7FsJqrpd5 zgo3W=5~W@J!x3Cb-bl8Nl+gy&%$4T4(F~SC6v=1BnM`VOT~$*e}Pj1*MUG#DY! zDJVt6m3pUEj2 zEl}uKt}mbAJTy>~vqq@cvgAuvk~u5ndd#Roi%#pUD7CP|JfLRKUlF9MsT gMFL*{E$(=veR_rfsf@ z=u%QM|NWk%Bwexf;zXuMzW4a(uj43LH2OeK&-7j9B`10`A2Z!Q`^+(?2j}j7ERsl0 zYv2=J`I>P@C-yN>UYG`5H>sBzD~hftEd@y*Fe_u$sXpMne=6IT!?|AI1$e`EZu zolC+)r-`kG69)k6Pl%(d8fTb)M7DwEvjp(5@18(c$zhAkuym>0i+;L#)^$v92972*ey6=R+ zs&X++Y2T>#85MZL`Wcq>6#O|A$q(c)xfw~W36%d`*)DQ}7&lZJE4)DsPHh`-79_>b z$J2D}gzJ7A7UgD}y6I}$)oRzN)C#+LN#aC2Z_osXOzx-IyJ znQzn}LT0RRC20000000H;_00W=^000000021u|NsC0|NsBKbT*yzUr&(5B7-RX zRH74)c}5-p00000000000001ZoNbX$kJB&^#n1Jpc=WJJpg6GHD(#_^3avmZq%K?# zht!#-Ruen2C(A}?zdN>*{z0OLHZyrM@BOAlfwk=hr|Sdb_TBprcsvklTlRdo#VUMT z=OtE6gQW3rK^_@F(!?VTbhTMBkXN&Drgg$gs=DO&BJzsy>3W~IPzxK>!w24b!2L7NQkaf$Fe5GG+|$< zRM@~m=(e+tk%`%ybxU&*9?oO)>!N6>Ri!$NnwVSG*4DvN*|zA4=?X>qnTtFHNdpKb z4Yg$0dpz1BnRROSUYi=HwO|X+))7`pk@ra$ckHc8m?23xMakNl69y&@DR}5;a`WtZ z#rPv;YipRE`Emz2b;Rro4Tzs04k5&g5c}RJWbL>lA9H3oveyYnrg{N#&bmA<*Gz4y zvAjD&$j`)Cd$L)emBAPQ9Be$0)tJ$8rjsMR)n5 zYTQQ3Gt7V5B7JK%T-m4(j-W?i~5&EH2x3ux1L9Ewnto(=OcNHKBYV( zZ~sNUIls6M#xZ|5!ITW+L1N;ReQN*wwHuhCr@UglfTi3^#P=hp-1fWdf|-!=fb$n= G7%oT^n-z)x literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/appengine/serviceaccount/serviceaccount.go.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/appengine/serviceaccount/serviceaccount.go.i new file mode 100644 index 0000000000000000000000000000000000000000..c8dc880776c83f75133ad5ceb82406876012b2aa GIT binary patch literal 1571 zcmV+;2Hg1o0RRC20000000rX!01mVO000000021u|NsC0|NsBQ{X|iXP54IMto-(N zH;5tc;r$B$00000000000001ZoTXPwbK5o$K8wF%%T8U=QOMN2spEs=xJ~*6MMz{wcUXi(o`nMHXHe;EW-f!#<0M)kTtC{&3+%Ua!{Zn1>xJqUPy z`QoXu`v&<`BMWTlq}>P$g=pa#p;CQYf^2CM;rCbP7q2fbppp${5g&PS-OHu~(RJ9? zvPHMauCgo*kJhaL?DS!uO}v#x^+XAOEo2M1fMAlNgE0n+CrLiAeJ1e@N+&IwsL z``?^GD;xO4TZGqRm-xOwYz@;*W_VdLGjk zPZxQwn+k2QaWY&(Q|feisL0&?i=))>f6OR&d<;-69kbCa>`w^J1wggM=W2P2EtrBR zYG5br#ueTDOsHL`UVcfAQq>A8RqG1hQI+gzDtJ+B(3S2Mw{8J+oN`a+_JAKdsi}yo zzAa!v!3m86hnIs#1hNM#g=89y2$3iDCMp7 zAiaX40q$%)RdLYq_@C3fc!8p9$nh^oJ##|TG1cx>dn+1QUUI|K=cui$7(_Z*iN+uc z-Z{@0&2xs1Tyqf4z43N`!@V~d2R2;I>30>w69`nxepRwfLhKM<#pz(|E?Q9jenIQ< zDqCr#XgKNAfT%9Xkt`aDm@u~4&y17vFiC%!*Y;SLv~<~V>cigABz2$W@LTp{$)}<_ z$K)}Qd~*JDeycVEV$c z)5k%(>$U^PjOznRMuA2S^>^<*w$ULHa4kO@eV~>fO_CYHaL*j5tAWJA@#s}L#FC_* z-0WXSkAN0;v&0NFJgvt2WlPB;*`=?${dgA~LYrJQi9OVw&3ve?!#!x?vkuHTwjMs9 zBAlSff)o8KcAI&3;hYKe5Y6 z>}l#4fm1D}1jb^jKYP>LA#(RWof7syM@RVqa~=hJTO*4#wy62u8jS$O;9qYgC5mKx z%PX@-^F6JmS<2UX&(~rd3Uhrh&P#8B)6$CThLumSgHsRN(b3n?eC3hzn!M$&z~_T^ zbr&c)0domga5}SrE?pLd@Ux?sp;vK?(!z#Z8*zLj)X$%3=fVpl z?napPtg)&dG^`nsIr)#}zi242Z~ZWMxLf_UpLfRzvkVt*kj{p=)XQ==1G5o)8PH_h z?T6E$8#zYPy!n!@6yyQ53#^%Xkm$LMbiNGy`LY!X@PuKZWF#{^)C%d%DI9C3p+xLv z$Gum4JPQt<@(hh$i{Bz8+?A-~7`8z~r?E&6@~(3Xr{CSYCk18-xjqSqPujRK!bv?ce{jH#V3V|F VBPs0R;y?J6c&jP#4Q3YaAG$}Cl`;U zJasxQOo9?>il70|ikkS}ySo4>N_H}7GoDBSuooPhvkOcn@Ip6Rqn0ZNCqF*>2^K2} zOD$TrI)PLCUmKgjX;lHQv0$W?=1vw_G?~B$D?yjwR?33at;r?ix{!cBm-#}$B9jY|--x9I zijCGH&vCtj#^^g$NDSUKjW!P57+8xNRWIQ^Wqq+iCPYRve38f=zr*h$xu7i{Fk7C_m4z0yKPW|90uM{pEgER)FvxA*y@8sqM zFG!9KX5KgC*?ziD$%`u4!FMyLRRy1DXq0E?#%NO}aVZet0-T22Na5t+Ho+$`h3{`; z&V+rAjC8H3={Nnn-({O!XzP-=!(+4A1RzAC>>e0dmZ3-dKm9M(*J_DJXSVz1QS&G} zqDZZo6iGCSWsStdgPiCZ4(bq<}6@A)moztgNYZ*uQg?K$Y)n*b@ zGU1OnN~0)8+&SD@I#CEG<|GvZ^lt`nH;R5krl&sB3k*sNI&|KKg_FBy*ZB3>q+{bG z*gfrN$YGH|;m}cib*YvuiWEh6c$l6rS>(2j>@BP_ZSIg6BhqtSNK3`nmJ@MJ|iYB=V|VSHB@V51O!Dm(}KBu71>eRcYJ!N{Vrt@B;{ zL^lqO1KKGh!yH&r+N6ZOW0gM&Vl?U?!4*9M5ow#8_u3wXk!%O`V2&cp_NQ_5erMI; zh&FNTO}ed1xqM~_eEf%92 zS!cYvtG@b`(&eiK%_J`Ub-$$b^@wRmMTr80v7-UphY3<9W3nR7uqZh887glei&IXE zV+V=>{6$q{8vBf|*ed=j8l8V^6iV-Pjk_%?E!;0ZcT1(8x>CH5y)7sr9QtHuSCkDd z^jvmBH6e|;;0z9#=_?>_t;2qHDN7851K3Y{k%6KHvqliO?}Qq#bG+N`*JRpDt;-sP zyKaGMW%d@e@G%-4hvaA%A^k2PBWt;_eB^!LCl&_y@}0tE7HelptgEvDTd%sN$Q2gx+2FPF5fU$vB+omoro~cSBS?HxZT7=)mPYkh^PC- zn`Wp!(+o9-?02o|}#!MiguYMdl5XBcA$}Je)sa zG(H*}_$M#;?l`AG%Yz|8lU1^va#sZEuh~1jNz&}JC=&j8)*5E1hbZe+mBO)KKgV?I zqDQwA|Nr3IVKg1$QyFL}->J$zf@%RXeh#UAgt!vLysT7R`CUDg|$X+@D9*yJL^y>sk$nBLcEd!m4%JHn2XL+@y2Mk8}ohW8`I zd(fuQ9tnf4Y5V(hl(%U&8IBffDL%ROHi!?a__-7YSrGs5pn|6!owu}UrrO|uv!OJ* zgWTno_{dZl{{=VibbkN<000KB000000U7`R5q1Co0000007C!(00960|Npk)J==Od zg;XSn#^%fvQe-4F4vPQ)0000000000004NLb&j!4!!QtrEp@?u3gan}5?fs>b*Lzm z0T3!hVzuIHW0BgyzN7=<6?h>w-h?;7N!x*e;fA}@_x~RulLH}>Z$iiojSzZU!J?{s z=kQTu&F5UG%J16_;T}*Mjav0nWnDz=Do`h+)JG-?M##m_aY&#_@fxv>Go=jl(D)WY zlsoTt4ak&x&Q``(QSDC+Y~cDS5AfF60FjHAay2sLS)yF0A4Ht-P3S=I8nl5RQ#&y0Ql`d4tz>pS^`!Ma_R7u?w%y4qf5p@yM#+4DV*6KV30vJYc-2^ND3?AgG73`+X;4hh55zl$HwKN8*227Qvq^2d7=9DBS zTPdXH=OpH(>!zfZIi%<3r{|=m7v+~06ze7D=W>A+gKS`6a0cQyFpGgf0YrnWVt(G` z_aNfb{vEdent!`is~=hH0Z|QA2&6!617Y*z{JfH)%%swi{Gwtjg^ZGt0xNy}^n5*t crOEjzsUR!$Gt%{){ry6MJe@*A{DXqI0FI|awg3PC literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/_makefile.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..863869781db717f741c160d7ca0ee91681a8ae84 GIT binary patch literal 409 zcmZQzWME`~fGZ3PjN(u>!+$7vcQz}%a7}oZR;a~;I_KltjXr&~fvEw}6?1C)Hs&2N zkZ5`SOVe+Wv-K6mvbHJ91ch={CgtfI{Fxjr@&82Ggiqf}KQqX_-?#hn+6~Wt%d9cu zy!|z;`J6zOo2BYuMXxF65)TSCDz&on2CexZ%xR+}DJ@vZ)wQ5PA!X%H$Agy}PWQ;Y ze|tRIXY=BiqOghQkEZ-$xmq2=q3mDR@b#vO4FB&}yVn{-xd(B)o;v%}i_hM7=geAG zt(z2ZG`wDQ=0t(m%2nmFe*Y=eHr-tIrQAttpQxKSw?OIVN{g_!?{wygDYKvd?{|NF z)E_2))o4Mm|A3(Z1g^j^kpZ(97{Flz3Ko{XPXe#2Ew~-GJY!O}!~qGmlQVZh)qtsr zImrnO%*G1a!omv9>95c^<#S#m(7?#RB!uInN2tene;wVE20;ZZlYY7$t>WslwB$-K WJ<8>}^5{y})Rmf5F${5wM4SN^XQI#m literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/_makefile.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..0e3ce906666c623db79e7d62a0ca947bba16d85e GIT binary patch literal 393 zcmZQzWME`~fFnTaH4V7O~8OsR7Xyb836``W-fq za83Us60XI}vt!C$XN}B|l>#d{qo*JFCltNo--LRtrT+a7870o!T9voT*6SZUr}pq^ z_-pFya_$M9dnwMG_JKY8OLi@T#^vysd#&D zUQ(3I)Dw}e`&v%&aAtjw;1o_@pI9r&dHnFYe=o9pu1ypD|=`d>?2 z`BnQvDRPQHZE4oF;?M=d-JGdkKyolpF()~Jf!SDLTUc1ZIsFwnr+m(9 z1R59_n1pbg^a%Ah@2{hK(jcgSWztXAqg7memX=%zrboG4R~}vInz~Z6Duy9$k%%(@ DFLR$( literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/buzz.go.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/example/buzz.go.i new file mode 100644 index 0000000000000000000000000000000000000000..2bed612a5b002c5f4d9b084731096d05cba808d6 GIT binary patch literal 3423 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/example/example.pem.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/jwt/example/example.pem.i new file mode 100644 index 0000000000000000000000000000000000000000..31998cbdfdbc2cb5bb7d94b287e87353291f166a GIT binary patch literal 635 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 tb_O^6XO4m2ZX&c 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 b9@K1rpyI1h>Px<379w)QKX57|o1^~&TRM?e literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/oauth__test.go.i b/third_party/src/code.google.com/p/goauth2/.hg/store/data/oauth/oauth__test.go.i new file mode 100644 index 0000000000000000000000000000000000000000..b389f9a8b751187534671f526f6e4d8fabfcf962 GIT binary patch literal 3591 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 Kk2WAi{67Gh@bAq4 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/store/undo.phaseroots b/third_party/src/code.google.com/p/goauth2/.hg/store/undo.phaseroots new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/goauth2/.hg/undo.bookmarks b/third_party/src/code.google.com/p/goauth2/.hg/undo.bookmarks new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/goauth2/.hg/undo.branch b/third_party/src/code.google.com/p/goauth2/.hg/undo.branch new file mode 100644 index 0000000000000..331d858ce9b12 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/.hg/undo.branch @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/third_party/src/code.google.com/p/goauth2/.hg/undo.desc b/third_party/src/code.google.com/p/goauth2/.hg/undo.desc new file mode 100644 index 0000000000000..e436242f95272 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/.hg/undo.desc @@ -0,0 +1,3 @@ +0 +pull +https://code.google.com/p/goauth2 diff --git a/third_party/src/code.google.com/p/goauth2/.hg/undo.dirstate b/third_party/src/code.google.com/p/goauth2/.hg/undo.dirstate new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/goauth2/.hgignore b/third_party/src/code.google.com/p/goauth2/.hgignore new file mode 100644 index 0000000000000..4300c6062387b --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/.hgignore @@ -0,0 +1 @@ +last-change diff --git a/third_party/src/code.google.com/p/goauth2/.hgtags b/third_party/src/code.google.com/p/goauth2/.hgtags new file mode 100644 index 0000000000000..a6df8480b5de0 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/.hgtags @@ -0,0 +1,2 @@ +379476c9e05c5275356e0a82ca079e61869e9192 release +4ee7c273e92e663ef8dc0c476d395350a586ad75 weekly diff --git a/third_party/src/code.google.com/p/goauth2/AUTHORS b/third_party/src/code.google.com/p/goauth2/AUTHORS new file mode 100644 index 0000000000000..15167cd746c56 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/AUTHORS @@ -0,0 +1,3 @@ +# This source code refers to The Go Authors for copyright purposes. +# The master list of authors is in the main Go distribution, +# visible at http://tip.golang.org/AUTHORS. diff --git a/third_party/src/code.google.com/p/goauth2/CONTRIBUTORS b/third_party/src/code.google.com/p/goauth2/CONTRIBUTORS new file mode 100644 index 0000000000000..1c4577e968061 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/CONTRIBUTORS @@ -0,0 +1,3 @@ +# This source code was written by the Go contributors. +# The master list of contributors is in the main Go distribution, +# visible at http://tip.golang.org/CONTRIBUTORS. diff --git a/third_party/src/code.google.com/p/goauth2/LICENSE b/third_party/src/code.google.com/p/goauth2/LICENSE new file mode 100644 index 0000000000000..6765f090b4187 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2009 The goauth2 Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/src/code.google.com/p/goauth2/PATENTS b/third_party/src/code.google.com/p/goauth2/PATENTS new file mode 100644 index 0000000000000..9e8716353d82c --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/PATENTS @@ -0,0 +1,22 @@ +Additional IP Rights Grant (Patents) + +"This implementation" means the copyrightable works distributed by +Google as part of the goauth2 project. + +Google hereby grants to You a perpetual, worldwide, non-exclusive, +no-charge, royalty-free, irrevocable (except as stated in this section) +patent license to make, have made, use, offer to sell, sell, import, +transfer and otherwise run, modify and propagate the contents of this +implementation of Go, where such license applies only to those patent +claims, both currently owned or controlled by Google and acquired in +the future, licensable by Google that are necessarily infringed by this +implementation of Go. This grant does not include claims that would be +infringed only as a consequence of further modification of this +implementation. If you or your agent or exclusive licensee institute or +order or agree to the institution of patent litigation against any +entity (including a cross-claim or counterclaim in a lawsuit) alleging +that this implementation of Go or any code incorporated within this +implementation of Go constitutes direct or contributory patent +infringement, or inducement of patent infringement, then any patent +rights granted to you under this License for this implementation of Go +shall terminate as of the date such litigation is filed. diff --git a/third_party/src/code.google.com/p/goauth2/README b/third_party/src/code.google.com/p/goauth2/README new file mode 100644 index 0000000000000..ff8973d835bd7 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/README @@ -0,0 +1,7 @@ +This is the repository for goauth2; an OAuth 2.0 client library for Go. + +To contribute, follow the Go Programming Language's contribution process: + http://golang.org/doc/contribute.html +Except use the goauth2 repository instead of the go repo. + +Contact Andrew Gerrand with any enquiries. diff --git a/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/cache.go b/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/cache.go new file mode 100644 index 0000000000000..c88aa4cc4d3b8 --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/cache.go @@ -0,0 +1,42 @@ +// Copyright 2013 The goauth2 Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +package serviceaccount + +import ( + "time" + + "appengine" + "appengine/memcache" + + "code.google.com/p/goauth2/oauth" +) + +// cache implementss TokenCache using memcache to store AccessToken +// for the application service account. +type cache struct { + Context appengine.Context + Key string +} + +func (m cache) Token() (*oauth.Token, error) { + item, err := memcache.Get(m.Context, m.Key) + if err != nil { + return nil, err + } + return &oauth.Token{ + AccessToken: string(item.Value), + Expiry: time.Now().Add(item.Expiration), + }, nil +} + +func (m cache) PutToken(tok *oauth.Token) error { + return memcache.Set(m.Context, &memcache.Item{ + Key: m.Key, + Value: []byte(tok.AccessToken), + Expiration: tok.Expiry.Sub(time.Now()), + }) +} diff --git a/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/serviceaccount.go b/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/serviceaccount.go new file mode 100644 index 0000000000000..1c594824be2fe --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/appengine/serviceaccount/serviceaccount.go @@ -0,0 +1,133 @@ +// Copyright 2013 The goauth2 Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// +build appengine + +// The serviceaccount package provides support for making +// OAuth2-authorized HTTP requests from App Engine using service +// accounts. +// +// See: https://developers.google.com/appengine/docs/go/reference#AccessToken +// +// Example usage: +// +// c := appengine.NewContext() +// client, err := serviceaccount.NewClient(c, "https://www.googleapis.com/auth/compute", "https://www.googleapis.com/auth/bigquery") +// if err != nil { +// c.Errorf("failed to create service account client: %q", err) +// return err +// } +// client.Post("https://www.googleapis.com/compute/...", ...) +// client.Post("https://www.googleapis.com/bigquery/...", ...) +// +package serviceaccount + +import ( + "net/http" + "strings" + + "appengine" + "appengine/urlfetch" + + "code.google.com/p/goauth2/oauth" +) + +// NewClient returns an *http.Client authorized for the +// given scopes with the service account owned by the application. +// Tokens are cached in memcache until they expire. +func NewClient(c appengine.Context, scopes ...string) (*http.Client, error) { + t := &transport{ + Context: c, + Scopes: scopes, + Transport: &urlfetch.Transport{ + Context: c, + Deadline: 0, + AllowInvalidServerCertificate: false, + }, + TokenCache: &cache{ + Context: c, + Key: "goauth2_serviceaccount_" + strings.Join(scopes, "_"), + }, + } + // Get the initial access token. + if err := t.FetchToken(); err != nil { + return nil, err + } + return &http.Client{ + Transport: t, + }, nil +} + +// transport is an oauth.Transport with a custom Refresh and RoundTrip implementation. +type transport struct { + *oauth.Token + Context appengine.Context + Scopes []string + Transport http.RoundTripper + TokenCache oauth.Cache +} + +func (t *transport) Refresh() error { + // Get a new access token for the application service account. + tok, expiry, err := appengine.AccessToken(t.Context, t.Scopes...) + if err != nil { + return err + } + t.Token = &oauth.Token{ + AccessToken: tok, + Expiry: expiry, + } + if t.TokenCache != nil { + // Cache the token and ignore error (as we can always get a new one). + t.TokenCache.PutToken(t.Token) + } + return nil +} + +// Fetch token from cache or generate a new one if cache miss or expired. +func (t *transport) FetchToken() error { + // Try to get the Token from the cache if enabled. + if t.Token == nil && t.TokenCache != nil { + // Ignore cache error as we can always get a new token with Refresh. + t.Token, _ = t.TokenCache.Token() + } + + // Get a new token using Refresh in case of a cache miss of if it has expired. + if t.Token == nil || t.Expired() { + if err := t.Refresh(); err != nil { + return err + } + } + return nil +} + +// cloneRequest returns a clone of the provided *http.Request. +// The clone is a shallow copy of the struct and its Header map. +func cloneRequest(r *http.Request) *http.Request { + // shallow copy of the struct + r2 := new(http.Request) + *r2 = *r + // deep copy of the Header + r2.Header = make(http.Header) + for k, s := range r.Header { + r2.Header[k] = s + } + return r2 +} + +// RoundTrip issues an authorized HTTP request and returns its response. +func (t *transport) RoundTrip(req *http.Request) (*http.Response, error) { + if err := t.FetchToken(); err != nil { + return nil, err + } + + // To set the Authorization header, we must make a copy of the Request + // so that we don't modify the Request we were given. + // This is required by the specification of http.RoundTripper. + newReq := cloneRequest(req) + newReq.Header.Set("Authorization", "Bearer "+t.AccessToken) + + // Make the HTTP request. + return t.Transport.RoundTrip(newReq) +} diff --git a/third_party/src/code.google.com/p/goauth2/lib/codereview/codereview.cfg b/third_party/src/code.google.com/p/goauth2/lib/codereview/codereview.cfg new file mode 100644 index 0000000000000..e3eb47ca0d78d --- /dev/null +++ b/third_party/src/code.google.com/p/goauth2/lib/codereview/codereview.cfg @@ -0,0 +1,2 @@ +defaultcc: golang-dev@googlegroups.com +contributors: http://go.googlecode.com/hg/CONTRIBUTORS diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/00changelog.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/00changelog.i new file mode 100644 index 0000000000000000000000000000000000000000..d3a8311050e54c57c5be7cfe169e60a95768812c GIT binary patch literal 57 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%0D27mIiLOfb9Yb&j_ZV0?r6dKM6B$c1ZJ4nv3iT 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

2$euxP%<$BB&onK)a&@ZIu- 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 jr*SI;G7obC$Jb015EUwM4*y_fQ~&;d1~ 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%0DYMP_kdCqpWDH;NW`NKB8pa7 zilfmi+MQ3z!|Jig*?ocPL0C@A8gy)OLFFh?U|_cl>y++A?*qCwUf#Dqn5>28;+0`p+$D0M-q!Z6ROao| zSN05%5?WONE%Jep{6gwpmAgV!y`Sb1S~$*pcPUKEEY6)Z5e!cV8Y&1j24SEN2ZQ1` zLx!ECHeNFHjH{Q4B3P3cVf^A_z1&A7v$~&asTKx6kF#919idfv5++CD1gBwMAs*fc z1(t{FU9-br$C5_q`6*V4-tDU0Z^7O+;c|5gqpkXMGHZzq*%H_K}5c&=dLZ~*Wu z!+X{^)}xjjMdiaB`vx3I5DIVx>W+0R4!+Bb z1ZFlegVgsniKBN#+3NM#5~~lG%LVS5#2UQxr)mg5yzC0YYw-BSdpdI4v}HH^Ineu_ z=T0*xI8?4=gI;YjMND2gO;5NqSrG>oB(8x-vrt>lWjTo0J~Xfrvtrc6OV@9suFpJel|8*;4eQ+2mN=sjy-^swRr0eoFV_6A zHMWtp9kpS}tl^g~-JwXV!~%$ggN*1ts5U6Vg4KFSRo8n4Q%yIR-W8oj1nBCA1zO9} z_VflU*@z-FGA&gg9#Ms}>Lm}8@DIh)hi7wl(B#fLrqXSGP26gDn;c?0A6^xjVRIyt zt!C0G4S}e7@e8a`Ba&9#^!vUB8NxH^)koZZ!}0!nVw@ztcy2<=z1rXCv4VpzBJ)`S zQ66`CCfTJn!4qazz1A8r!=4|T;$*Ws$g41OLM9<^RVDTk2XUQ>=b=Qfq*EU#kE~N{ zu@uyqc9%$?LughNhyf~1tmd$Gx4ULD2{*j@jQw@0)~??L5l_=?mB$JQPi9b7${?<6 zJ_yd|XYxbIIYb%INn!gMYw=Ho#WPzee}}Tr|6zQ?5hqHV{Tj{&{~_>%dHjz-O%Tv5 z@HMD0PG#kYBhs3H-s#4(OZe8I^cNR>o%7!X5aN_N9%H8AF&Kk~lQG_p;BWVxm=SY; z@b}{zQFMwpZaIH)4vJjB_;r6ul zdQj~xm#ypdeBxZ^ec`}faVO=HCCx#Wu_PK#ZLZaLDMpm@v-oA6LKerhhgIO0O?SVlf5&5n7I%%ls6_1!ng9BrUCSa%I5eSQusb zgWC9Kq`#YPY3rwLxeT-&>vLk8flFhalEAxNuK@nCg zfKNc73+y0AUuX*qwyqpm?<&a_3abr}ypm#jA2&0ko<7<}1(f5RaApAfw-5Nwlyw7N zt4(z@KfbQec%dmB6&OJ#OW3t`5i1h=8n>BtsGOFLxEk-vx|QcLj-VfZR!M``y4h;x zhFVQp!dr_*t(2ni{hNI< z7usrL9aAg4Ty)kNn|63{Q_LCzK8W+$lmU;P9DgBpl$17^{6^#5q@~CM=hbM+S-N7a znc=BtQzb_GSJnpC!eNs|!&+qXJ)xA?>=?RT8~S84Xa=#QZ>W6p7P5rzDaHK#{XFi= zLu1AG1-=`td1qoI1%ptjq8)}X=1JsS{i!)i51aHDwPa6rF?CLHWbxIXKPN4&c0MtH ztc_)jSYik(9yn7gl>{-4VpfMtM?E#MKDiw!+Xx*a_`3PNqIgfaUP$eAv8$j6cAhy} zVlo3WNG7(&hfA{MCkd;ghQ*T;NCNki@d`b)`9OO5jMFCN%_sHv8M#w!yw1(YF+PnV zh@F}et6hAc1rFe%C-UFQS?ElnNfkgr7_mQ3MVXeMEeaoi=r4b~TNV=4s5{t+V?Rb{ zVOK^m3M0+PNyj-h^UuHq5s!|AA~s0MtM_b~l$>;4fu5KAleY1=&Qon+rASnwSP!#R zOsKt79ir|;a6DuQwjEz2>w*W=NmoqE9#x?U$Kx8^tHc>8!g z?^Q*@=HXf9)yF$6s8p|CK1EGofp!I}`OdPeR}amS2nSKLy3Z9rfAGyOkiDa%vdg1x z9lm+YE`yY(!<%s&^Z}lMrb?ul%iWVT-pt0Bu{o^Lm^OJ%hZptqyE;x=(JIxiLXt)z znG1h@=2(Ln{Zzvygg!k8W{#%;hZ0g^uUuWWMus3V_i(>NLPu<>!j1F(Jb16Yi>5hV ze#`-48=Lro8pEbJ>ZFQ*8mgwc62PRz^gRCA!Kpnt`eGX7WH5Qh81m`~IZd8!)o6cL z&=ch1!Pga_sYJ_Ap((ZN!$HcF+e$M^@ZC#gnwk>3DBCApA138w&KxZe*xGZFy6iE7 zR&dvr9U;AN?h7Ct6IkI=4Cpw1kx5Wi_7vG zxJ8X{*HS$j(@9|Bsga#coh_LeJ_vgHXG!p~8l)HJH+!AYIv?UXovs3xz9)qroO5r8 zxRz9?;wO(!ttJXLh_uwQn>K|SMg_wU#TN*?;Z=X`9Q)~~WYo8{m&kpO;n2t>Gi-&% zL(3bs%t|T~orsJY3QN~^U#&xr$q;VHLff4LzTS#ty*a;d)0lrm`t5E^}he0gg*#xf9m zZ^%fxoI1By+z6pgd|mL2+8GkO+bYd*HLTOE|7T_~0zU_=szFQge9yfi^-Tsm@K5*7;E)*n0EAbz^CQEoxKv zf?hW+)qY?XHS)_9n}g=_%>~Dg`FA@BH0~JAj7SB`-yVdet#OlO=Lx4$@)7ZQ1##ni zZUFM6a|AIX*+mzQ?GjJ^e<2|dr2>w!N!MlNIo0DmDL zyY!o_7Grcsa;qN;P41l7#Rz?Q6_uo^B-J-gzU;kJPQw#&aW>!MlKK1H6yWy>>WgMK zK)!{pUhm7y8RPQ+YP2|g2MP&A6iDt+_^-;OOVG=HgRJ5d1K`VH2~HQ#>V$pzAdZ3v zr)vMOyi{ZDBumbsUnafaql0jvB&!WU=aT*i-(`Yd(-2}UkEdabOdt#M!8Q z`~=Whnn^%V!x})KU6A?CExqr-4JgE}vW*H%F1cpLw^NG+{t*H8 zO+TGq4DtZ+;bZGVL2BRdhXEO|%yLP# z=TaVuhY?MxCU8N7Kri7FX(rWG&C?`L_$yB~`P3WZ)O;t$v<2{i%2b)?C<|QV38pTR^ zjoywP_1w$x2%!T~EH2*ats^V#aM4Vz@b-&PujQ9bR?w44mC0kkc-myl$7Jh~7k5s? z2eT{3U`3eQmvk#eSc#i8r}-5t9lTR1xdD=CfdPKQk*v_NVrH4<$`vMkLqci26$CHc zRG2t#KSOgde_swENG6;BKec-PAEK zAo}>LE$V}mSIY}#pkz`bl$K0HhBB?8c}dYoXp?P!&`c10M^+Y*;jz=p#HfN8-dHk{ zkP#?csFQRDsRK+`z|k}UrYqpnI9oq##m%zEBo3+cqnJ|CbbFrNy@9Jq3G6XTZ@3PV zKGTb1I(vS6f_%0G4_!vw@A?)4-={n(j|aGg7Lsa(%em^w6o62d_x-YfDDXbFnZN%r zbTaI^-slmr>*f~Z^*Ks=<2q5MjTI%zScxOi-$XRSrShwdJy1%;<%Y76q(l-_OJxqK zJaLf;2i!sE=u z58O*msy7wWPMuud!>(CV92Rf>A$)ia)q+U#iB*j0**{mmucTUsY2I5ScLIw(u7uF0Z@#u8!ZmX+~Lp;FBRR}qKBrR9&RbMnpPJSPCu zWK$?p5jx~}HICNbUt-Qy?E!s8dS3uD;PpRY;Cn`C7IxIE;s4DgTe&JMaP-xA`zR5C$AHQ7AE6ZL20%k*v)9t}) zgVv~}u2MnT5LS{&wNd#Al?4ur?{HoXFv1na73AadMNBxtB+JSPwW0(^myqUAcB1uT zdfhh}%(trC6uq}=xM6-=A$hO`N;d6rvQ=*aRFsS%rcun77rxpUVl}v4LWwEN!RIKy zo9hU*He++M$%(+(^x9{<{xMeTuV4SO$p82N?f|a=Kp*wb!s{2QtKgT{(C`WaC9%o+ zC)0?@8R^^Pca4EWrhkt9uj)%oqZjU^CzG|>r{AOx1SCFs(}G{Db!z??q3VW!hlWa z3wPG;Y_~ez;kG2+?A}D1Y!(XjI|$xf=Lks&rChucay9>n#Ieq-5DRKP)zi z-WRWBc<^1Hj_k5Tb3+i3$?xRLqbIak+g&PWW;l)1dSCQb2A4PM<)UDfacw#wlaoDN zDEDO@wCm%GK@uD9J<<t?-{MbbdA{ig{`G> zz-<7$rCVtsTKP?zReeOy@lPyYL#;CiDWM2m|DXM3zcgREl8asU4_{6Bi(w-jgItY* z2m>c&b4T{kUr?5RL#_MACel<+BIShBwt;<|O*Ey(*{ z?n>g;cfFmu)}x2}+d95~K1G;Wq8B8gLiB-=684v73ty!%fx=R%WPXD9GStC*8Fg;y ztA+)5q5pmsB7g?ruV*nma_Dj3x(^XR)EhlDYYH^nVw?vq)==0SHYD5ok)z zfMW$R@~qG%1F!l#k%8Fy4_c4P1jNqhc|kupv#Bkb$O3_Zk%mIX2?mHtg8)N{f`CDi zKEntS3lS3$0*UrrEvc$uEN%|<&Tl-KpL!i-dri4@T}=Xr2GWX8+;lI)O8DQ-=X2cu zwp!$PzNSfmpZFY?i!Ikb36mlPEcIHR0TxPEVuj~-Ez|X1z^hRZvt^omS~sLEDCi72 zR?vst4oq&JcXkUXF3#%`UPv<*nw-;Qlgh@`RgbHJ)01x0A9w1Po5i^Fug9(0j-og^ z1UK(NYK$ER-FJ0bI>DArXGYtKRaw-B)H75%{4qA104vs=nZ+8LUJu_mhH7LNxfU^X zYzIwGToRWG6CIP5VC>WFmGJaFd{^Za5SXs`y;!rR@!$3wec4a;92Y@=@WdF!*rx5+ z`yjAPsN}{3J^GpGpWbM%|t5eB#Uf<6$##i#$ zY)6wZtJI{}6AB-NOc``5rVa@+9?6H!jGBk@+f|7RwdEGbmgwU(CSNL5W9E`hjjOiK zd=OpOl4pu)y25Ck?dD4Kc`>z+L*@0+O`wC+{ys3ScYtZgRfRV$7-o>7S5%CyCYtKn z3BypSje8Mlkd*addiJN&dvQp)qe-JCZ7ET=Zbizk9Xy2T0j~}q=}@u{nA=s9mG4=C z;)ytdQTW`erowUkrW>ewadhz>)+Kl2T^W~yoGRLrR{9(2$&BtSq1c5!x1RN*ulRQE zd&Y|ARM0rjnRQ%S3!zJF09+AnBbrb-W)#RdZC2Os^rSyGcn_&uTbueri)5c`94Nnx z`{kdo6T*2HndZXFeiawq9h#TQ$@UKIaG6Uy09Ln zYs#jqXl~;Z7dv^dkn`q3#H1ZOoj8E)_C}d`lA6NNE}_foN`cmtjX_B`i;_5k()lYQ zUMjN<4(3;Hmx`?rvh~DERPCe^2?HXy$*lq(^^x?Lh;WK_w#fsM84z4iD!#WK6j!KM zKOI>8*?Q%UnW8Y^Lq+kXLDTkrP$)iOGr-v=(py-yj^ak=q4W$q93K!1vef)(Quf_Q zj&VB|^`z+ZfpS{D%Xt=^!7+1q{oxOLQ37!jwX`E~dZNTFte-H1+`>X4TAyIea=)!{ z85gBy*E6!|B%dNW)dPJ|X|ano4>Yg@PP5BBSM^mx6~*nz-viS^n2z>wJQh(gB?`LI zDUd(@%dBvAMJ(*GzGUGSR5q{YskSo4SkMle14s=ufJ$Ym0VO7KlnDE(GkuEZa=ONA*VG&sMBmll`Ppr zgA7&3qi%!mOc$THJOMqAGPkqPG&JxFbZPqfBf355sEQ<=Swmzb;}=fWij-@q%QskQ zvz!nc%j9-lw$D3n15%sA4H922?jja*7dO;p3->1jJ6jhkPMB0(vx!q%S65`!5+fD@ zUr9(7SDc+m7RbB$78)%HB#;`*<&YMG%+<_>N6XTGA&r@PL7G+%9atYs!kXqKj2ECa zw8-DX{+RKZ6<5-I_+ws5Cy>JYJeXQqKD}v5fGUCtMr|M>?Cf&Y2h3`)u&SkPf@iRG zF^DR522wny#Zed{8=HIzDu1{GM==q(d}3Z|CmS`Jd!nULrgNe!Op108a+YpQcWsL} z6yw-_1)=L#!p*NjpIq^BVI~vdXam>o)(wijL?wyyH=3D^&VQRrY`$U%P7a)lm=4JI zUE+5a+_g$mi5O1~gL*?lLVLXF=cxX~$WK`Uq4mV?BanJhDeBvDGp)&rQa`b00Cb#h z0<6aTKfBO5lkiyr%A~OA(TlitrtYDwSP46q`TnBf^*q%8mT(11N^>e3%+j{CobXE5 zGqUt^AxT6T2UM2QhcLFN%b3lgoQuWNN}?_+B382=u&OXpDD?8lLhz>y>oxw^h^&!S z#Z%4oqYYw9^^b`B%xau!R6@(YLqH+M{18S{S0GaUn2C(|o3Z(}xchd4ZmxQ6=(E}( zDL$9b^~j0ZZWF)>JK+aeoArs?pdow;LiVH|@)wn#ETN2Ma$6K!!EV2D%h>`Ddzyy->xXjQbgB9 zhZf>mNujl&ey{$Nq-g719VDW)EGq86biD*Ff1AuY{Wz53UZ0y{I@5dPG7)NJgH4Z6 zc9)aLNR34Aa>@>tI&3VLptyS(J@FKY$*$z;qMNhs;@ql#$CT*MW3mh(|KV}rk*;Kt z$U;lThrbYdLKmYjuS3H0erL+m&1tZeodv{}5%V04fPWE=I$I^@6e%7?TDH>5pW6SY zRL9X){ke~qv+eE8Oed;ZPoLO6=Nw8?bB$}Y30kr0ZbXy-Z3=4iI1LmNQG2BI6QR}S zfSB8yLS$>d_ZYhdhKrv6`a`tsjzEWf-&$Bx zXA*is7L7G54ihe~{op$AbMsO0$pr$uiyJph=?7fUg}tlTWN_ceF&=R*HP-`CjpcUxz(2?sz zNVH)rFf-vw$^nq~v*K{stn8S;r|pjzE6)%k9fGWqh($WKp37?2HF=L{h4EjJ%tC62 zyyAr}lqz1VbD{HfePEPa-uQucg}$AP^!TBcaZS;!<0W|$o5CO_W+ zE09<~Z`a;8e+R9j*w9nPbg?Q!$1!~>a%aPHe*OVfhoP4)^|=jd13J{1zptJKeF(Yx zwJP9HH8m}7VR4qu>F)f}`|YD%Su)jbWnVpiI?@<91ilX1hP<}o;rQ>pv0nZDG~W-x zhsv~wKCqJTci zaW|Xln))V%EC%hYB)JrmEru(%#i=wmHf-?tffdN#*y}q9l}s#xp0nX*Shd|5#SjF) zp(|?q7n_9kRhwypb&0k>*Gjk#8|BfeVB(Bb!I}6pfBQP4E$M>N(8M>x{t@nBRQS%W z#Y(zY_xon{r%>cH4nZOQ-)UC9`Vfg;E}9wE^s=kb#OWNv}+#uPW zLsB8^PT@%&YR1Sl^-Lbv@{=P&17tfHP<|L+lsu;}N|WF^siCM_MksGBo>S@?y9qDf ziH91YlyRNAyF0j6yXE$cUDop4szyY2=Z~IoZ2~fV1&qtmyux!t`|=J91>nm$q?xOWUf#9`A2`1I z`Gr7T>B~~r$R^`yZ>cK|#fjq9V`GLGmIoU2&yg@L6F-=f>g-C5)NBTU zq2Zv6v*G$9Rf$>Pfm})2#?FI>@eSO(@sbh3g?#eekpl#-;GMoc57;DC^RCR zn|bx#NSYfvS7*^*&Ak=-ZE^#P7P6r-Y!G^i12!)rSxgUp{=H!3yA?XHY17P9?u=Me zR3aI9f6Edmn*FXnqL4{%r){Q^XF)eaYpg8oda8&k!O*yIWKr>8-*VPjW6T;9EC7?g z3}>;3hOUK>LW6j`NjyVy_~4mpm&N6ek898nQaGz7I;d*HRxMU3!bCO2&{TkNgi#T( zF{BYZ>3DUnN{io5U_!G3tLi=|$6aJwCj~LyC?*N!hBwmeYson~+nUZa3>QktmPS`K zQi?FB!jFx`DM#Q=vRrlZ35yfiS>t>Ae7$=44GoI2fI?$rOC3}salW6K^2phFlQ6ad zHz%C``poK;a8SVKG96>%q5@~zcqb~HsXy9=8&4==OQ@bz|1v=Al*&;j<^yIHvgse9 zgzb`l+#7&H`frCw6wo5_8D^!82@!9LMuGKD%1DSfxVIDmZMu}(;Iw@;f<%&1B#Gn5WPJgH|P-Ai50 z?v=u2{gB_#Wk?f`VK95~uxy($AzRdhDnVFrYe{S%fm?Qu#;$N5o-7{9~3F9eqE2%c< zXYC6iL)6m#4d^oGUziNZupQs?dBu*i$&dZ#v9MfZr-uJ0rvHod4VNjq zkujSwKwr|xn2FuYh>;PXHOXwu%)x46%*@Wn#sWZM&TRT$2xR`b=6_lRAcF%W`Gr7z zv`8klE?Hk# z0MrI&10y*lcNcwkHH1J-k0mAC@qZ%tUt5J4pi#udZqCdC=(ns!CPwVWY%J`6E^EZe z#%aXJ#R$*`;^5+B|5yLr`;sIALIiN4(&YnozW&d?Mk$#uOvq)>-=GqzPBJq}AfU4I z8GlX*VgSDTclqKznT$4-QVuE*5|)K+5Q-FMoP(?bA?4nj{4@xl5ET9}(Z`c@HJ39r zXX;GXFdRl9tTXJzZ|(pw9tW>8>PNZuP~Dg~{(EK|H|FJ_mdVJ$!Q&dey>Zd?nzDH* z(Y<=%`_z3lWANl~ItgKiuzhlKn()4+&*$}w@vy&p*4^6PxhhpP6yB(tUQzHwnAe1D zJk{E|VoN9QHSPK-R!eYyc!tozb0lu-k_cv+$^ynf0xmb$iWO+p`Ht`!VvyJC6AmcanrE1Ioc>uv@&Lf)du!-~pXZgNU-LW0x?kss7C*A%+(cdcT)bly5}oB9|gu@g1El~eP( zc|F0clZOYViRtNV;>j}evo+j#*->J3r=&~bZ6&QH%}3jXkD%HkO^IV8b(Ggqu4cuYS0-61P+b;?+XB$*T0uF3aPxF;WeB#Sr$=r2>StWTLbtsoU5U) zs~ILOvfenSxGE0Cg~kC*t)9#I3dQJ5X68H=)BJBnC7IzCz<3Y)7dIc5Nulvn!DBPo zo|0C{_63$!%3dRY-zNBN7coekK-|M7Z8G+4JK~nT%ho=`b`4AHtf|~t(^EVx$bKap zZf$HECx=w&O%Bw^PFUItF~_hR zy&Q49hhhj%Gx@Vu$hZJ@kHF`{$IFk?1V8CZ&+ol@(UXXF07VLvifBu7f0K5gwX$qd zc@ZB1`wBdQTge~TIOQd;l?<&EG|A>nzu=q+7+1Qs7S66N5#BFP6TB~K@EsUVB`ha| zy2|!-UDVfzE3A}cT@S{=hUcxeg4c}q)>%+UlFljWW(*swXo|4*|SQD)bV+__MTT%2}7xh7E7swj$)F~hlRmUUFijoVsyhk;@Uj?f|d$C z*4eetBubFq`?;-56tKSBBBg(Xq9$TGQs9cJ4owcuei-C*|Q_!P-*qj_jUh(i&@ zykk0yu8<*}BGu#)oK}aZcl-@HW`5YGz4QIg=Gx)>;5UZo-IA<0BHeJDF11l@uvV6i zA~I+9`13QTpH+ZdGON4PD$lamiFkOt6EYTvi$=17k=22%zs~}0?Kywhz3wPF_0J|t zOCD^O6_5sTjYBHM#pgX@UJX6i&DWODt+S1tS!>t3p&K4N=@~_>sgCr6?anDcQ^lA( zPeo_ij24&bu0j+-d;vOQ8VDs}f8G6NcUl2X048}DJvl9VGe~;!uJtU_o@&lGkEYHd zL~U_SRr-M00J7J!ixFh?;aZE+;8$} z0uZ+hCfWtYE{X6V4#)HARn({Pc<8SLpdgOwx9f^Wsl*8;tm1AF?vNR8xGvSH${1_Y zhQx+`cg8<<&17Q{7P;0&?3G5>f(~RufKbVdG=L$}NIKw}E=W{mt7(*Z)I4dSmkgU= z_sYc}*Weo+nSeI&hj)v!Ypb&_>CJT->mvP4ZkF<&S6YnB&k907{Bu^!PDWbt*pr=^ zd5b9B*^d@Tm#m4b6Ges85>bmos6tP6FFydmHC4kOlTfF7AI6`Gss}Xno2@h3b!+TO zpG@r7Rv;-$kl9!Lb}mU;n$&Qk%jY0^*zvK!CY1&0!^gfoH*ZQ;Gz0?t#UH0Pql4`E z4pv8_hIeeTHgSBYDJ2cHJXnq`aDiCcV(axwaOMkQ$|2IiQ&mLYcA*^AVuOvb-}cM| z%-<{55jY6=X%5FJFnW!W$e_w;+SE|F9>Q6v?35{-Nkwx~s~$suTBQ5wyFlwx7GG(r#k0OjRt&*`S%-IfpDv=+0rH5aSXGK^!AlC)mfXg|hHXj~Dy5 zf8P`&=(Zqq*~Rvfg?j6;2b`>+aLnN97p=VEYwLjeP^Rt3yM~4r2UcJrDPR4~NG_zJ zum+jleP69w-c}iApg%cdY&G7`hnvq}9%&Cy<#0TQH0uXt7{Iha;Y5WAohOLsJwK@@ zxajGcb;{ApbkfmbvyJ!Lu_)C*V`7a_+Mi`&d474dzdz6r$st>zUYJmISzJ=F^24xm0tQZraM0jJElPT!eUoT4^d@xWwT;r8tNT=Rz~_oSiztAirbdWi zjCvN4v*D~%!6=_fmtRYpmYlo=G2(%sEEOtFM-^8NY9&paHFC5r#$Im1!l=?(d$ag# zSbyK`uCw^O*>!)rzPViQ4>9Q!*r4C2u!y0@6?VmxP}4@!X+Fc_Rkban4rH?)be_jnM%Mv@@-_EVlX zpPGxj+`S#1AyZ6pl{zZBS^&27!8o8@W-Qr?dYsxlJ_6>aLf|B@97s^|-qSMe#fMQQ zv|D=@uLvaPgYBv4!?bPt0&N!mV;TA(c#>>R@HO{@`e!PUC!&*t!Wzgo5?eVTJ{(>6 z0<`^OC9?Ayg7+=^r#k`jn9rTpnTNy6iLMw94Beyv(R&l}{ZLlXhQP{tmFHlF9uu_6 zh~Muxg6pdaPF%OGiSZTV?JceF#(B)eY%WS_fckGNF_EE4uNOM9NNssAi_<@323@lC8+!jS80peSJTs+cz0L ztXtly{MxDzp0-Co-n<`B5hi8E&7gmlCJO&@DPqy3BxaYxonr=jc*8){kvIOCko!q_ z7Kx;Gh>_K@6ZpfJ<*_S?42uKE14*PJsR{{laFm+{jVKix_iP~)JbENKTEGvgZm}k- zfnNC+oe^nSsY1zU-!~FU;%OBD^|0ON@sPLqqvgSGOi_whKt>lrg2wAEr4brQd&zX> z*kjz~tkb~w)AlI)b7~!a2vF#vhRV9LMSF75_v#Xg3f-TY0>_&Yi$A=ae13B+el|#8 zXi0%a8v+&f3NoHJS856e?--WB+YfbxR%*Xq_(r{i57W(Xyv!7CLI`7||5SRNFli=}6 zC+iYQob6RZ1F-V-ZqVk7eMWe8!^?d}Y7y|a01Y*(FTAitlz z7+YyB7%>-3xfj^vLs1c@A|=FK<@qVX0!}>QLwuz*`gTCvV8HkdZ&HqM96<6BEIFqE+YlPJEu_BxVL4j%3{ zq<}ONzYcdTXYZR!s9$3Gnzfb1hS{-4;4D$!%<31rw(|0R-Mgg9SqPU$!byQL@nJA6 zt`_8p(@`%Af8_vi=zq6;up7SSl6R-oX}G71oWBAqdmQ8jPA%D2;Ul-r~( zN(L*6J{Ff##Q7Dd1?5UFh~CxxcKEnId?&k6%}{?}7!zLkE2xeUzB%BTC|(R869~IV z0{?c#h!Y4A@!Jd}PaFq@RIv4$a`McGtWl)`%M5a4SHF%a#N#+-?Chl>V#SzQuEIpz zSYwEK{(+l`Fb+|V$wnK(oyi;Pyf_fo5c!u&^H0dIxB_xy} z>HOtG7rh)ZbvIP!BSZlp6g-7li5tGI!8S#?#SonMT>I>Slh@RDT%}> z5j?_hBvj2c#{miv-8F9Ae-{J!d8;k}Z|5^maVKi1@u)wsNRIuW-#CSc7-^}t zBbpyb9L2A*znSTbt8N%zQr&E23d)E+dA)SmkkDq}D)Ibh;>pt=jq@L874 zE#e$`dSP7L*fP~5kRYQkwbsj6*H^l2EcSh{QV~gutX3&xAD*4;1qdbCJ&}CtKpG>A z=_nO66p}@^3BFO?g;6SRXaw9z}V#wGeO4JV&c9&klcAW$0umFa=SLerJ z=H`s?uu8cUhwQVJ*Z zocl8AdsCgabCHz-$DeU@FFqXN_*yugN^BjLQ~Wk(7Nze-E^76cnDG!*ojRX;C;!ma zM{~>g;+gLk2xZR(v<0_3trW!Zf<^LBFi-q6?sQ~%yRs*^BuKC3Ks_3dP$6p+40D%? z)L=NH9Hj=)6tSAqZX~JZXld>MzkSv~lRGY!mJ!_MFLk1id62fWboy}+o|QdSaQ$)4 z;MOiMoaMbZg^6(`eX)3FfdM}+2{Xzq%se`Qq;%m98g#=LYN?pCa5DIg(VM;h$SQGV z1hpqgKa2GHx7#}3^G^h6_afh~d5qipuNuYVzoyFM03W_K z*{|sjO>K3SKKcYM&Vrjy0Wa?D5YyGsucQCF0HRX>)UPDNabMK0`9_<=1VH0?6WPH zZ^u*?izbcLZdcAu`iV}icPHbIb+$1aLuJ&fi~RBPVqyi6IBV&b9+GLgs%pw1wja0C z2A^*wIex7_ilyku$o?d;FD@_G)|jpI@Lh<;?B*kPzMLrte7xRmf1c%ZPn8UikCMDx z!a#vJG@Vv2uh`WZA@*5Xb&VeSeS9oW3w+$Bb=b-ef$@2dHJcSVGpx37$K#hTVipx? zUmOzrX(4KF|B+A*qa__f_1j(rI_%-Mby3TZ9tGIl(!ykn!29bUz77Us@2(3a0z z>vClP;u{GnY<;y1Vm-qeFdu>W9o-~Bs9=s&Z4H^(1`pm(=V5*bqv_7K?A#+>v6lRX zP?=&DA~BW7*vMi$vXS$Y)6Vd-L4x7UO|yw3uZs5?A)Yf*^L=kx`{-H5sjw*6A4uGt zjN7Mgec4V$XKIL9atz`n*;$<1N4SwwitI&I%#D47$3Hd*hUa8U5NcYB^sCH8;}?)g z=24tgIs@73n(;wr3R3a>_$Ih8DsI0QgGy7w$E5b= z>WGc!tRjX)7rzFQwVe&LS27>ZK&}qaI^B~2-isV1ibQvw=s#N%zNU&Y{HE%dHLL&4 zBLgZUn<|`ov#>Xx88pt;QZS92-^HHocWKQxuA|vk%jPy_U^=Y?PmVS)##U?{?^$vh zj&cQ=P=>et{R@sK?G2B8Hj?#V3r~M1@$bB z%Gks6&s)W+dnF(XnSmx7Rli7M-*0}~46i#JCbav!{O*I%X>gHab-7Wap`g_*DW&5Y zN*{Q|4h+8v;XXnwM5wKeW)IB=lLi@1cd{EujU(Pa`oD;(z%Y; zof-1Dw^gpc<0sQBH7AvyKQ#p%S?;Lpy$|L{LG^Y8<2AMDo{rmTh-K2&4XX%UC@r4^ zxsCps)9QGBq_WKinE8u96JE7+vhRmYLn#0O$#-tkm_cRy-cW9y`oY}u@>WnouS1qa zL=|KK>WxZSHB-S)ii+JbW3O>Q(*vQ4-}u5;a?#i>PW_3n=i zx42nG*8G;oK_=54VVS5k`I7x&ZpDn#ranyl!EQ0E5Y(-nx?<#PYn+X<=WQqFe)|Jc z&26p2-FHgNbmI9c!K&2R#BkPHxut^JMoqO_%NOlfC;aLFvrX|RVi4`J@3%!Ih)0*s z8nCLUaYp}58{4KiIjiep8Ox9BfY+4KR>Ep0wEA;|ag9P?$n59clSY^d*Y!@J`8D+M zs1^$;68ZxnVJvWf!|D8G^(Uh*g8{+i(9QhKIGpA{N1vT7A!SKK^pq;xmD&m)kwXc( z%juIGjoW@#%KU4}nVQo#@$!XYh(z&{xk6Co5PBNpp|(`*O8M6Z#&PbR-^@_b%dy3= z#zgv2VBI~avL<8ZiO1}APj<_$PxakC+#d{!?k|7SV`HX>J+v=kldSb5{j&pBZ!r47 zcpez7-vc!xwi04>U}W(q^JzzT7Uidao68VW9K)34&F3Et2(s}he6ojzHnJTmn^>X> zRS+TidXW^p9>+@a`)6ihny!SYwhnclVp9qr(m}^WxuH}UB$K$spjO>hI zQA431L$vfeZhvzOcX@lY3OeEvChd1iJYZCxp(ST523H8<@jod?m>GD>L-&F518DnV z?Y6i3t4Rt=WZ~Ik%^w*G1sEgJXtzsqzw13C44Cjf6!8q4$WuS5KS(6+L%iWt!k#)`0S5!v#|2kz& zQP%}61m^&Hk+{aegG((FF#cQu&d>H|&ky?d!qiYI&;qr%RyYGaP%2SAM^BJGABs;0c3NxMnOf?>}6QJN@5hW5(s(wz#aa3vBUsz#NwtW5W3%g7>|Cl zPVlek5?PeESS0UKo6n>2wGbm8*1ox(F3u0G^%A-qB6yhErl`Xfvagnzpm*R?nwC}t zj{}YCd#KtNN~?zSlr|99ZUSwTF|bfpx9555;d7*HBkTYqsL{}v(kj#cKf>NJDvqX$ z8pVTKaCZytgS)%C+n~V-?(Xiv-Q5%1-6245clSGa?swny{kyeRHC0_rbNb9s-Dmfy zy$Od=s9K2FTlr0Yiy}Pyn^j7q$D<_*Ih1A>dOalJbce1x4~}t_Fi^FhzJtd-GfxO_ zue&562bef3zgbOCZx;p2hn!It_wfC3+*(h1_&GunS~4K!Art>~WY$O0L{nbz@6bwg zkEctCPXlYj_^y2xEv}6T58!(=h2^cQ9mujH(t;Qg8RlLWfE%rTa@0u^2)a4LG*-v!T9u>RJ*a zY;e0%;k87*^ut@RrIPxRbePyYJL!zgn+wVCyyvC);seI5vbeQz0)!W_hUqJgirpoY zeNEx+tb=?Wqh=cG74SxE-5PpM5Oyxj3H>?CYEAi0Sg9;jK8W1FKU0QOz#I)zJMg8RJ<=$!@^NG@LzN z^grxtdg6AnsBnoQBo;lt`M%swuhL&4{VSP`I;~PmITtOqnS$9|glSEU)K5crlPPI< zw2sS4HR(y0lrf+*+&hk)S_-n4?(2KlES5i;eQ@vt3#KHiRj!WB^2jBRU4ejbnWlXs z!()_4+rDSacQtj&g%7Z{SquRe3LBcq-8<)D{O{imxzMn5`KgNTpR0Bt^pC0bSU|vU zy?tcd0Jm++>-)onS}1V~wJ`uW1kk2W&qT(-M*kNNa#rT|CbWyCG?8i|X1`EQKYAE* zE0bm^kXb8bhlgqvWeKei3y(5zwQc`Qp-1Ar-t*&H=^`$v*Z%o#{b?8X4n1%n*H&_x zoK13d_ZpH2Ll+{mELyoJFYJB3|N7K^oX+i4J99lsw~`H@2Wu4b6HP1<9*1==5sU!% z&@4-+n-?X6YnnKccf@L^oLy>0<3#-X#6BAWQ$?bfPtcDbE~zxG7A=kU^j5Rb z`~`Upyape-8#Y$d1ywVnrM)aP<7t{S?cfeL#w(~O`F$wEfD5jpNE21V1-ByCem09Y z_2Fqjv9VRJ)@aarz1k7;IuAxvau95dz(m+CE;IXLB-x37V$R@p&-Cvl15^PS4uIC1 zjy6+amb@nR2Ub)2y1G

n!G{-=SyuXRH=kXwf^D>8*s81FCZ->@U6xY4Lg>QADr z4cPgi_iOqT1A!_m%z8*7GBfUN=~)?apH@u zw;;A-0j+N_LU2^wq2~fQ?EQG+_}RMoJaiJPY+AJ2&f>^t<(c3-G0Mb+rV<`u-_bistjU7i zQhiCA`EkcVs6xskOV}4)7JOstz#O&#KI3H#6ffty#PWjz^~poacFP?f zHtKxN%|qxsOcuZ28IVQv(4KdMy+xEO)J;^y!8I5AkM6c9>(h`n8mfij1Ux*iR@v`1 z#9E9`TMqMsRFOAz?kBO~gA}v{;(6X7J{)#nh%OGdy6HE{V=$y`^s$?(<@aUBPmeAs zo9Tk{UKsAtv&m?T2Ze(5Y9JN0-^}=A_Pr~E(yu~*&>;eQ#g|M-zY#>hsU|ZxogkbS1 zRidzh@}aYoJDCu5GbZ*1nzv{0{gC%-4)%jXo&!2){4KLf)9Rn`>c}&t5|j!=-HD;S z0D&j%{!cV4<6WWK2#h2*-m=_YQQhE*`>afU985yUFQrSV9rzVn&6%@6Ah}SU#Hf<| zr*d7Irdl4YoQSU5q7ybrDtEatD_$0egLY12gFxd_2F1akd&-^Iv?t>B4hSin#L7Qs zp>5nTVXF#NHwl_S!xlL;`S|K6AejjC&EdNzuaGSu?-_1$oM%r-q9FXTRL~3+A5c() z=$RP{j~gG5>Qx${46Q?A1*2Q!@~t^qqfdiBAynw)1hHp%Cp^G0G8JG?>U)Rz`Lfk} zow`NrGiE|?jZ%L5w-mNptuN5{6T(c-BfK4YrbGXFmi_C%W=M?5=Eqz7G%A4u!@RV6 z7_>P1K#?O-{<+-OWs%uZfj(0==lGVtu-tGWyJ?1yS zV1#5)4?Yk84|(^-7n5!2Y~@2CY1wNAWo&euK&4fj$F!5)id+6;XjdyB=a30nS|xtZ z7A!N#l3k!+A}#h(LdVm_s!Afa)>4nIuDI1B6aMBoy8mV}zqaablF#^QdEUcQe| zkyE3Cd_o_w-*bQ)0!d$Rj87|eg@fG6iGf%`mstRVsfkmAZ6^W4NvqLW$f%4HNsgxv zI_{k+wLKO00D22>@9l!~7<>WYICEqwVwJQ&YJqy+Zxz*3f@1yikTg(31=1zlN+;^a z475O2mF`tasTQ@HpnlbafQ3Mt@gcbgb-kmN6AeA~*Tme~q0;X)Y2XG11(42Tre6nV z0+KBFEbs`e2>t0Onb}7ACP&9NbCCZ`o{xvQey#Uxo09nHOV^W?AVfY)+A*e1Q& zx+L>r0Y9MJVsKB<*=Fhph!XVa_r)z&nOZlIMS0R}s>8q&Bxd!@lFAE-OZwq;z9KUty_xzQ4azI=U%YpQAVOu~uJd04@ zsS<>lOV|}s?9Q6o<+d3DU(A9({NA(CvcV*5ln3tQ zIcze*kGcKF_xWO&C~x_8f42(RfT^hxEZZ~B-G;Arwg)OkqVmcaV88vpCd$Cev^6x-!RA8u?fe-( zT}X3Qoc4+SFsAM{RP@R2*sz`Vu}wRk^5JHuqo+?aM%w9@kppNZXRJBJuS%3yjVn$? zx8H5Q2TXBrL<_-I#h6yc7)cZ*YPV-p!=!S22>WgHQcs2}Q(_SN6pKt`RE?bo=fN;U z$XJ)Z4gWfSXcxTr*)0(d##(#S4Zlc3W%rR3RUn12gOlcv?QLKPx=`>h(f=+NjTQ`y z=^w)S&qGR}s`$@Cu(j?8lXoLqd?4XH`K>PR5x+Vg(AfXVzqGP(doyi~&_W>*G96~2 zCLttiih-iVg04&K2-;fkwY26OVE|zbEN`dt00Q%0v~&`dzepZmh7i-QsJwXzsJ-j@ zYl_q=_#EkWA9=iL?+qWWEp9jbY&m~@#$`=D)XJo7wJ7d?Xq?Pz0{(cjZLFssqJ~G7>8^X>sPej#oR+TDG9PzCCVjU2usvld5-N2|87c zQl_XP_orFQ5|&id6rlSdfk@pe9r}yO)E76iCOKqXcVyfQKyx(vsKD`cOx>Z5eEhb_ z5=YsREPjV1T4@f@n0sGEzJI{%9CPOJ8>YUNNU7&`rOy+VN;Cg$*c4?&FG|JGShKoM ztpZV97+J|WL6ZQyI4PX63<%PQ1QX5$(nPq9}WFmMM&2Ksp`!2Z|1FPH;C+4fbLOa!>>4ds;O9h>3l)A9yp^mgI zG&E=R{D^7!F$v0R|L(PnxU#wWLGr+XDM9YSeMbF8cn`prbl_idR;`U2c4sUR|W40~!rU|#~^>7@pV!#C-mh(}6LD!yQK zt^FjOvh!r;ILx0v1?@0SHRPeA!_cv;!00u+S5>80}C@g*LS~VLz+3bEghgTk%zrK&Y;#q-}(_B4U~>1`d(i7#*nt zCIX+UT_5F8W?@k(|7VJm8F6y*LGi zEZfGpvSd3z@}ENcGBK0Y26IDol!V^4%dqzvLB7S#jq7=FbHfe&^CG+I*D{qaMH(A+ zV+uwtE9N-FR*x71Sq{(!C(VV+MMi;WHu!*f@6lA2=h$Xdb)y@K6TCCY#fE^FqGpx! z5ew5R15%bu0mQqXZ~@cL>qgVfJf6Xx_o%zh%Pm@$F;=Q-(flo&9k`JSe^N_(y!c2b zqf#_93r*oRtXqbTs=`brVw4$llFXP9qa(*^!BY*s!aAvdH_%qIB|+25(@N$<%VU~g zeQ2&MZJfvb6W*HMq+e!IPu@=FE|gHCY~_@@;@K0ar5dD5N!NAf=z?rqKp!jOI*AR5 zj2>ELIT6<-Dv==|XU^-jy^avvvh{ta&6;%o)Vq9WZFP?6_3H61uV|da%%LY8AW2XA z>zu$Yt&UX2Y$j(q>gWZ%r>8nc>&nZTh-=aeQ&BeO6O`n|w3A_}rTvNx``Qw_WXz?* zELoO(TA+ELDtJRyl-v&LWfc9?xhMKU&0wreK~Xs~0j0xt9BlgE2=%dGYWMb~4aZHb$~qpx zIs7|GWT%J(KGQ}a4b7l7dxugtrS5t-xPTbdev);6dyPt&gXW(&&;Cnmo1$uo_`|dD znS5^g@?C%3&)35<8zh=tZ{_aXQ&0DO>FX#guIkBwhai*w{R|%mD~Ueo-MV{zs=DY< zj9u(?MUMv7I3f|3sj}S}I!QyB=Vfic+j=G}ETy>lGkSZ8PRM0B)}uPo4xcJg2|C>m zVr%WjnG9MF=E3LNSy!g~`F!RqNBW#T8?Y}kA2aTc`@ycaH^4=017@R1N~pL2b2E7P z2f~N4DWg8!1-@cm;uAepDRwji&Z$zRgy?dy$N)JJ8XOM?LVP;A_1xIF*J(-Gu!m!) z=9jLuUsDCt(`P7%#pP75)><@QROdHmkrL_cWfCQy zR5U{Z)*f!Oo?f;a?zqx;D=B4h)0Xo&CxciO5fxyA5pKq3D1r%AO?Y<5n-DCQ1jx{7 z;T_^(eKX$(RGBu*Dd1WycnTWN3;7PCHr~%0i)t^c5}hxlL~II5>Tva_i|jl$ciw*Q z;>cglPzpk~dGz2&3?)(>4VuP(?Uat9dJF6C!gWbom2o&_yIcsXRLlsw8>1=l?$9j= zR06WaJ54~NSn52}{tmHGKN`d$D=ZBfmE`EikZe9V!nRi`7r}$A-QFyp!ffzT%2$!a z=&eO57qDn}{B2>}V`Xx9GyMH<4VF~GhR(V-WMVnLL-pw*VvaQ;!n;s@?O~(-{8x4| zQPFUD z%81Wsutn>8-K$e3C=-ni*z26Zonta(3S*;!j~HBf@54&QiQzVXgJ*Q@@Z@rH@Ec-y zEs0D~%%rMd5tneImze>j*?Xhw<2m1g&79KJ_=352wPRc5H#rFq${8x0pv(}GUhpTJ zDNkho#_!d6%Sn#9vD8cxV=n@}BOaOCTc)hZpKs{;AFYn4YL9?QhUH3NRtZ|rPwDQK zS&tATR=~7yP~2#pD1vH3H+*AVQe9zyHw?8oB(FT~@9|ZsxEWIYtB0%KczfZ}HLqI+ zv~Z0?VG~dJkOz6O1lk=I!s*n1cYoC0FHO-!W}=xEj37Kn=)YAW1?V-?WARpTU2 z`}K7vzisXs!wO}%DWg;^Y=}+1&IZ)>3Z$W=3GOxw)9QVszMcK=uhO11q>AIGs3z=9 zq}`c0eXxBpb9TnlA9uGFw^6^$r$0^~>ij&peK$9V#&+!m9UTldbk6@GRtKS`)HBU@ zvA#$V*9cSU5qt~%BYUy#0M^YN%6%lqqXOj1s!l)J9w42THp@jQ*4kMVE%Ge zEIODi@8&gJ$S-iOy34p+>6`~pYzvb(N%zZvGl@>0Ak)_F*P`g-yZMf30q_c7_n_)C zPG^Jt$sVc(-G-j&-~9GF?h%mo>#20|VEQA3|6{jPKk0Qh!-t7jgDhwKNUlqv|6ANf z>Znex?KGLl0Lx@Kjn6Cc%s!t48m{YdIG6@|Myz0~dJb!NJhVQ>IGxt)8z{a*ok5EL^t*o&tvSzRp zx=Bkk3i#Dd~QPb_?>ro=HX@Gc#F+D{7>-YI@MpCnZ}y z#}6O;Y6fIbpG4frIS}SUB&b5`p`qhC9FuZ+g8toA-WzQ4OLj`a%^K|cQ69ziCJ0VtG=fW}tS zT;E;V*Yh64ho=0fbpZ-~3G@X`=NXUSsILh6Gj=c4T?yFpT0 zTU+NBitnE%OEQOHWS2Tjd(6Y|uU2K@hXL+kIbjh$@OC~J^2T{4`$g2a*zzi*0Y5BZ z6tn;wiuobX1fzDu7r6>9ET5qFD{>)Kw55FDYgB7cS(Wh^H@&0siiJgIpYJa>MC3w@ zqDn*>Yq+&)eO`5pq}aJoTm>Ff8P4z6rj5^wTeh6*o&Qvyc-iPdM1i*zLBkUV@iC)H zseSx^)9W?+aOAL@0jGg$c7kBKchFST_0x~So1sG|Lp*9HRtC4yPk)E_^!=dCYnS#T z(tE#fRTKoMm_*=s5u{`|tRJz#g)&AE2QVBu;muF?B?;^vnXHP@BM67rgt^yYQhrA> z5N@w@ourS)<%-B))*R#ObdMaJ@9n+glnl#{-X*Ww_ldiwqK)w!{0my!9mdQy1|!aG zkIwse#Za5~w%EZV$W5t5vEpwdgX3yOOX7yc1pkW%9hLtEZKW?EcgdcRjFnGcu85Zq z*SN}{IZz}fS3aeKzskUxaI=d%D6|t{ayW2uiKySkh9wv*Q5uO&`{^Qm?36j`QWE3f z^$W+UF_A6)sg+B3joKmpHKS!$w000Z@|m5q2>k*gg6jlHKNx;rDA!XbXL{ccm}u$| z;sSRcPF4LQB_-3#S#md<(`?8Ez) zP3!jfucVlN+3*QsbI2vv!>en=!g#KrZ;MS{Iai98xXoEOZEXhC$_SW4+G;Whz_Bg| zxzWSTz22@bp7sBln5W@?OLP#isu;y*Lee~%fnP^3m^uh#Wz&@o4<|O#zuBkRkP4{F z6lKKZT<1D6G2)6Q)m0_)v*cAIh!4ZgJDjduk;P8<0*?BII2PG@1OZgCcA6|09-1e* zBxA5v4WU|$=t3v#Wk=p|Kpw!;6JXO~c4{*84l&)-SU@_@QK?1#Hp@TNfSzW9e)COs zE9`uh+47Q1f2quC*N8?hj(t9wQK@NWugwxWqA*nmaPv@4;P-SbookSL?qo?Bwjvl5 z&DvMBbUf*VDWY_Bo02rFTqbk7iZaXiD@F*$GM?jQ4x@&vcNh<$pV?ael1orT{QxPo zT|=9UNkQJ>wwkLP>7c@-{!kkslxGcRjs8KjX*^?rkDPGEk`>E~PIc(oJ#Vt7Sd*m* z>6Gu+50!V&EwS2)gQvsD+ql__$`PIE?oAym&P#p(Tg-99#-FlOF@tV4j9n>^&xBUW zshlB>NAAhJ zsQOZ_ugv)xs<~{P0wrobu8eRvpVRN(ZHaM5Au%U0nL&ZQ|+sYaB2)ct>obU54L< z40w}tamFGM7(zElZR>D`(1;1mzubL(26UfwU?v8{;khw>2bM!IrQw+xKSw-)kkCth z+fVGqi+2#R1qP1u|E@oE1pzJXp#DFgMHy6;{sAr7%j5hjJx1Morrzq2i#NXaO@?Qn zvHuki6cx=2l3hoIZk@s$!Tr6;=l4K#XJuE*KtVyC@NEx<0LQ9~b&;J-tdwiko3fxg zZkD)Y`gPyoP{7JA5xVDO2mB#2y$WEMuaMq8kZ6?9?=rK+>1Fo|uBRxZSIZ}Yp0rHj z3(I$V4%`N7c&rkXU3=Pp27u$z{bvJcA>{vzRsro%{%5pv+gD5CW3Qncib3B*V!dnj zdil`*S^QrEUk(fmKN-~g|69mw0z&XCIJwNZK@C<8Ru&Ex7G`5}PBQ=t0AOZpY7S!m zVr6AxHv13L!~HKG5cv-n7;7)+-2WU2f*iqA{@K*{Hji7Se#HZy*xWRG@-t(4s2Kw^ z_P+u`tTJTFY*+P%+}Dp+%8?^nc;F;V6ECcW6`ZC$1!3rVu_a=p;!!cy@A+EKoGTSH z7u!dnzY@~W@O&lUQFh6LAqXG%D~2j|g`_~vjk+r|5TF3%SE;ZF=$tMrWUsv3?0ogL zIse>!?fI+$dY*inzeAc4TXNQj zBEG0+CNqhLDZ(cJ>j#~woVP{k(Lvc9xfg4z`>}*)Sv;a( zZ>LH|!Hu-p*}-psXfF(S|WV1{yh(w7vbut+IGI=IQV`fU zwNFrd&pB$ZXVVQdmgk^yDOIOZ>0VM`&ZXLPXh*xW_X&UEQ4}AilOfw zx0Y^$i?~Y7^ziz!$CX>>Cgl6cv1ccg)Jy@rm~1a46gviFtq|RNkBXFTjn~_N{J3W4 zf7Jl7Q&r;33ZnXHBsWn?01yGFGbpn~!?8&Ql8p;Yke^V;z-`R@c*L||eJAD29F@vbF z1x=UI^4&^3xqwk;PY%^2rC{wMiZP}Jy%%Yw)hG78)!&!1`oyBU>Ja>r0Btl89_3 z^AL{6vOMEOFu+CNxnRbosR6@!TnUFCmlDF$qyshek&yx<<#XcHDv5*L*q2t1QAB30 zn>{;d=E?swut^EP`}OUc55CGH!QkB=%^&rKl%`Q$|xvpIZ!uxxw^+)3H zLxY(lTQJ%pM1$#>P&Z9&Uk{#4uHtTKOfbhPZL6evpuZ&0>@oz3MzlcfE6lGmY5B3@ zvHq-9RFtIa?d-}1db**JCDG0^qrF@&4w;!O=DXyWO9b0W0l_||*}Hdf*$-B~3Hjj9 zWZ3f->FAad5tbLPt#w5q!KAW#(TGstV!8Vh7@!}AIm^&Ad^=IcN%MyrF}mTIC8A*A zvBUn+?Q6%|(E6)QKorPHirGMWlWtuzTkfxrVG`m}0lSzrTC)koeRfGNC#;7)rtEUp ztQ;;C!UT8Dp+-y_Er6Qj?roB}sU1EV1>&<-mw$Z(7)&P`ij4W-q-QESWOmh0)v#M0LI?c;#lj>^8K{mHwLQ>+1r8mMSSmPNdO`-)b>Mc-O zAbSumYs5NgLrOC4L&R?p4ISRUF#tgc(iFrF$@;%Ih_8dQ{#MN0yl zBhdRr@1F2B%#@~xKyPp!J9T0_D_VIm)#q6G*>NR zXX;EU%JHth6TrA8=!p0)EuJM;Jc<%dCG*{%+fI50V-F%$^dGHm+lkDZC6YU2WU2ljq&qZXLgM54~g<^tP)tD(ly(mtz2b z_%=G>Z0T8Pt=Wu)O0F>5F_0dVmDa)ghoU&<5%MkMu~EZ4pwjC%KV$o@eAD?_MHQM^ z2*=lY)cB>Q$tM|ONjZb3d7$UxI{4>f*54PR@3=ve5TfNsQ!QxV`>NGi42zWL`Qf<0 z=%`vq5Be~vA0|o#QwA&#js_ps{gQums;=xDuKMNMycE)+Vj7f|x_+K<&!zh_a{mgh zT`mwWk*yB9_Ik7|J?5{yI`Pv?TW|2~N)rK5Y&ZJKEis$mY-gDBMH2v_E4wb9fOo%o zHxsXcjwmw;y%M|X^6k4f>5wc>a`#*Xda7Gm;Nm_A6x<1|rN6Mq&@>1DxngJdw z-0GA+*ommbgIsYM0P&wrnLQz)9w$+y$I9zb4<9BL5pDmJh9DjDt4u<@) zp%a|a;I;rz>zOnp8ph6IW`znG!5B#I8XtaF!%PI+T(I*|BbAB1?0Tv~xJY@EVj#-Y zian^OlSrNR+-n2aUJba@M=^~&6g5?wAn~IRaGDN0Hy zD<7$?C#wSl$D34B?VQ3A)NWEqUymPpU&3l|V9IRLD;@>MU!*yo?kLw<&S5faYp>%J zYqp_>w9+rwKX6(vNCNzq5kl{_F>}T+#FI>Ze+rxmO0NEN9NG}yNPEBbEU8)?nE*5^ z<#PlP4QEFU)$uAbH;w43%g257Tc2+HFp=}M9PhL8%SY2-3#UyLWKvMh%CHl#B|UH)HWZs?gXCDE1h#M^-H5RL^*yl)>@bs z1xj!@66QhMiq*G8Qj9vGty~d#8g&qgK7H{^yKe?$cR*8fpw9MPOdwJ1it1F-cFILn zTqn>u3pIfM2@@FOfxP&7I%$L5$-mZ?o`7_r_L@w_Ndb`!O_;>7N34UEuq&guan|eW zkZF)D5%F^#xbEzxUptjr=~Mj2!=)P>t_T4)1AZ}`;v;IbhNhZzDJg?0Gch5MW%1X@ z%+tLYX zU%Z|4uWagEoN?3sHL+A)$ATrt{aZfxT3c{uS>MA`YVtXiel)|UyXy3(wYfLn7f z4TSlH+{d*BOy>N4Qpjemz>cY^Ikgf;EF{VJrtcamB~AKpd(-L{-rRv?dkGcWr@|fz zfWn@q?01JNF+L6{aFvM;0LJhT{x-}lN&5x4@7a{$^RV&f<&P|27f!aUm;4K%L@7Jv zR3i#`;E^Z*GpPY|!;XKQAxteZ#l=ZY|AngFC6+Kj$3h$TCEP=l_K-xU=2gpwe_SOGdi;!p`S<94W4sf z{2U-0x6D=$7LB^gQbCdn;DWmp^_!>|BrWePgGoTHy}z-k62v!bZW-6_zh-!C(4$?P zv}|O>_Sgyz%2UI^@hSX-hjix}RV`r6==n4o#UlQ}6!q-)l5l=%nf5aw?#9!b+1YIt zmz)_Jr{8w(DgAGCj1qxA-QR11*R@#z;%CSuzkt_KmNy~p<+`*-wslDUwP*!NY3r_; zzdVQeBuw=~!rP3@E4%oA+T#Ee5zq19A-pi( zrSlmtM0w2g!>{!VzHL;~c0bZV+nK1E1S=g8LAuU;-wR~9Yz93h4c=!N@Mko$-Nsz% zSZmhhfv;~KB~w{(!&C-taCS4xT-VgbziIaHWgp3#xnest6RPTo(IWosIQY#M`XK9# z3MqbEpX5U&9548Sc={!D4l$em^@7R52!Jp9<8ef9=9(MEeZGJdo?#J>sf6+g+Y=&`+e9!rR5?TSUSe<>epCshP;l z9()`s!@^Et9cUtbrX69Wp+v!3G&pz=eX)MFc9IA@cx*H>HoB8uhs1IIf`9wNq+lUnzsfXUiFAhS-1aueBEM7zjjVh1^1 zbYUfqXR(cz!}nMPu4HF(Kmv2OCsMd?V$(q23Gq}m$Q2oc7}{04L2kiA*1Suxg$Wv0n@h zL)-9QJpF%{6i{azR5?Wz71UIuMby<4RaC*aP0d)@SOBIL<{VsR>|EyNW*ls0Y{pyw z5Q7N+%aR3eFlTg{fAUMf(#J%~shRcN-74GJHMVEu4~fqe#*HW=Ld zurVZAP#j0RrmttPOS(F&p&~AP+|_h~h>H zfHE;!uTJ>;VB>9VTg#fk{do6wDQyk=#|WOG>qhfhDrf->Y*sobTUoaf)=szB$Y(B^ zhFn~d&dsk5n>Ghz7dUOjKkHCH89f~T`u{$Se@R*z|1KwJw+6kv!AdgyGnVty#s4om z4U;oy?0@AytR%d8RXg-^N<3>rx^?YXtj?JQnA9TrQ|B=%C@+{K1`iDhw~YN%$I`39 zTJy5|G@T6qU04q`Tnl$@s<8B^TdE~+SRU^32Ju&Mh+S5qD3|;xmM2Zdak?1&j@6xY z6r5&o0K!=efnVz_@y%WN0kc&|i-Shm)=3h)xU!hdYLb69}3Oz@Wf{X_EF7H^{L6~+OVztYLqEgyT)2j-O@4_SSm4W*?Y|` zGk0CO6rE5O6y|UC?&tTfdF;|E8<#;q%eSu$M|z3YWaj6Isk1hk)rwW>r?xsZ21hHa zS6+TW*Y37Y&9YanyoS}SS-dT}MGqxU2i~Y1jn7J5%k3!^I?0UV38rgtLO$z1nLkiw zh!sHkTb$=g5S=K?@pCXe0CV+f8y$^x(XV6Nb4^~02)~*NVf^17rdfUOVTyW?aP4e6 z%vGzH$({?;NcXD8$i!`-^iE{%sYrf)knOq$yj}B;^@Bvn?^e#N4o(I+nj%waI+vms zFqGYreKGX!2lBDDY$iG)OTOIwQk>r*hWxfd;IMbPr2Mq~Mx zpDs3lxWbe654JHEw>)^G91-*%t*g0stW>nEMib2QGu=}8!*;q_$cLhSWtUhAG!#a! zCv{C?^oVa4obcn1kiw?PAsTx#(?-BXcqGUZ*85uYKh5h~4X4=B zwPw)KPLYibkvc_OdG&S7-26l|GMpUWA?08;OfKppN6^E z?@sS*Xpxsx7;{{yxzK{h3ww%o_Yk*DS9yVc2{3`z_vpq}u#c_L?(qjPJU#9)VlUa*kDz*g6CNtp4`LI+n9Q&PxuAiCyv)d$~?2X{7sJs&IxOJl&+_$_tT#{?4{xV%6#9QRMtlX5$Bg z-4b~mNH=Sv@5)TSyk7d7@qv9*H=LP6E$tXpxJF{1lLEb>dl8r)w^UGSRH}6MtBc@* zul#qd@^TmLd~Hsv5RM_krJ@?ZF$sLNWficwX1tOAP|q*Z5#Xa9Rs^ugp%qaL&qmnL zZbR%oQ4+@3=l(b(Z8-e&zUz0YU#(H#VyGVPC%ihljSdoVnT()Iq=!JGS4|c!CE=5^ zZAcj7LURIpft+Uf_;Tb|0n7r^HMILUI+>K~PEGH+Z;77&+ADUMPL{u8o{E09Cm}IB zxSmfqrE)AJE&-HLubNj2$8t0iFL#j;VZgV8^=?Ku;=jvV1GDf3Oqr&2b_BSCN&xe=(ox2+37aDb?IOGi$?4&Zxz{>F;unFTyyNAQL=nHPQ;NSt0uxKJn=r(X zLz6oePwVl68~rib)>2Z~V;XS+pZN~V9|$KN6*Wf()!Fppg48FQ~mbBc*(jTPCPuPcQCjB&xc(;BNH8<`mL`@YmFl8dL#8ZX14Xg=!8m37*^yY zpQ6LCcH*ZMUsaN!llXwese6S)vIL5q0b@ZxWIl<(TNd!;3PIGJuynrVbh$H3 zdmSyD9eG>QK8kgz$QI> zs~jt{pbzCtHJmiK`8#E~HObGkI`3_d?hfuPJ?$-h|IHWcRApZr;J)4TSg;(nrZPr` zOdtnr8t(cp3{B!!K1cx1`yS<5iQSiOyP9hh2aCQ1BuzOiW8|FqStOp+8`IW5GmJ)rWHLQ9I5hc%$?Afykb8c`pmDdwp7 z(O`UyEQHb>e-QY$FX}#D#+3D`nDt^9ov^b*rAk5>3E{Kbk42u?&#jK#I~04f@pCau zTbg@|;bZ(Ta_+B~_+&6U=l02rF+HG338XXo0X?(@@v=X^@7cXpf3QD)rkC=Y8$SA* z7A-lOhC7k8*@35y4kI^jv(eZahezZ<~1UE`o9w zMQhqp^VsB738`+pG{Ya>E&clxrCUR{dQ8cvRV3A{3mqoAH%P>MnEJy!(*WI>+ZDft zOeG8N0wpN;pfra%%nvqih9zr091gJ1FAMq?vZ|Z4em^ql6vanr%nd;rKBF`fu_hlb z9}O%9HatMc;H;?+INmY6pR)U)TYH_@94hr5bTxPI@M`CtA3Y6KYTM?won-f+6*xr# zcQ5EM5WjVYQUPkFBafUwPJG-ZeO8JYYReOWWofUGlxvb(EHX+?Dtj<^*?HSD(e&TF zTzy6Z@5-A-6%!p+a>L<7#Qu>D@lF=!C06j7>LAFz%_=3+#CPD><538ux~f+nzlY!( z7$f2SbkM;gKi)VQLkSyht@k3V2Jy8bVH!dnlN8cpl~-`D+3i{(`CTTkPQNV}omq5r zDcbcnYX}K4WY>-XJ^%vPwJmsM;gy1->0Vi{)$ZZ=OMEtvRO1d_jTx<@vjt zsQ&;NSG|T2x~%$!By^PmQCn#;3iiu38z{jD_^a{ZXu+O;fQ(x(ElHJ1@6RwZCAxu} zgKQs#_{6imc?1d9uD1jBZYL4f>>5k1u~S{H(TZ28EhZ1D2W#!BuQ*k(Xi9kKVdhW; zQ%s;YHg}smI!w4?o3kg;!+U{(aC^MuVm@l64gviKQe4z@u{Y% z1tc`NX_TM_HMwd6T;7_uj}|VdS$wHc44+@veO`_o1zWZ4@o)TA)AlP`x4gMJ_{T{=BLfT7)7dIlF7;w`3x7sJYoR12%7+WrM|gB$C2}z>cKEFT&K~VQ;b)WHuW-4 zvcS#lgl_%|I-ezTR^9i+C#brt#$1D;DgGV?NoS@xUvUXi_oy-7Kbpq7BVUE+#%hZ< z%B2UCu&0wRHjj`SN8s@+6rciYZuTsh5x|Nxev-W zpgcG5an=gY8aZLyn>8@OY@cfqyHtvlOc1UM4q-htzfxBxUnhEl-K{JHqGaoTS>vC0 zVk|T`5*sng6r(j0p^J5aTd*HAWJbG14E4RzoOihkAnj{8b!h>tZrs-O^@rguBhBXV zJ>;>=Su~Cy0({wb>oS5&w0wKj!9DNhqqm5cK1_T>u0g8xXNhG8KP>|hmkFhWCTU4v zM*1|=)hL^A8eI3dS#{2%4`=-plb$A+y#%+M40G(^&S>ME;7X zh{B&fNJtX)QzMU#|0XZW8u~egydK@*TTbD~RkMl>tC6kh2i2}14Dg)ALhwt1B-hqt zSx2vDVZ8Y?tgh!*yQBwzZ^zv5d0~rwYL1?2EsJj$t?xlBE#tSpA3sTRlCZ*W z(g7Cl!K?Vw#rH7xSB}>Y*NfxoxY^p4t8>$1)8m%aDd)2^)124u*|gv3p`BDJh*;4h zhe&j~(OWQSv<6*X`hWa%`-x&}x6)J;4Hr@`at$GuEl&EXgEt&34*wp>pEs7oGI1?_RF;SObiq+$h3d#nR*UM}_&UkGm1_h4;AcB6$1a z7xK4tWug-u+DzV8D%68P`qzs^gKVHgj@vJ#mC_)o>4YJKuWBPhX%%v1OQDILbkd7O z4RSX)Wj%gXWWgBv?E00A=99hqDr%N>C9ujeM>4N_gN?lx!)x8_;*lmzb_T5&!Lilf z<{QRzj&%MX!rlQ!lwgY%9osg};EZkCwr$(CZQHhS#Nb0i`tnw9xO{nsSR^7$Kz4Y^>#DS!SB#$ zSJtd%nJz9at!y<{+g!v=WsWQ5uC|s=Iw3}$H|1=#lD86nXJHt7-9&ajgCM9APRH1G zoTbOyGPNc}O0qocSWHkeT;=fsz1Ph=;YpdbgBeI$vxJ&Nf+&C#lZr3q7)Y8KNNl~~ zM_SEOeWf4g?mmiWR;sO3&wtlm<@8l!t7RI*Q6*TzR{ip#{&VyzW3E~vJ^*nkA`kuN zgruwaoY$3HkbzcMu|!$If~uoYf@Kc7lyKK6g28twuaVRJX6D`@vvGL#u{3h_G%D0U zUotCLEam=smCT~da-hk~6O85nGfblM(#bP$3*U8-9Qp9Cu9__j3}ZaX-INx2~lrpT~=gKnUquCU2XS4 zZ}=`%k?GQ79y-0Fy%`ln=sfb1&p4eYvv{UP*xb2WJ_kE*!4m5Z~Fx8ZW$aFPy% z*mk?xhy+G*V2h0UsRESx`!8ku+1{C3e7&#^qG{*&=n{9^D8L< z7|U8*V-%xv?V&ANQkC*wz)ZM7Ma3fY-G&3VE1ZN~?{TGEf5_4mB1nmWD_shmg+#Sf zo4n$O<{uf}i`)h|dH>A04msP`ua#JD@L$i^5_CtE%U>)h<61;F2}V<-S4l|aT-j#N z(|PcHL5}zWy&9f2(6n-P*)wDUZ6_rxE_y22Gv&GDKafgNHVFxpY8L1KzUQE`f8o^a zjQ^v7Y`j4(IXSTP`r~AoA#{}BfD&b-tf3TYJvJ=JQKPjjt8}wLITA1*Q9k}s64`}O zy26kY!T2L5_X30#5+};-b8X7*6Kek{#G{#=6N3tPede^xT4lLdyrJc3ysQ+6J-3Y& zbjtx%C~Z(Z0PrIk{MO^kzq;)MTXqdZK}|%Ws6AUjK$)^K-hY!a6|o-0xXrrqXCGqp zizMCsK?vlHU3{*RF3=u#Qw?S65-KDRN-45Sqq_yOvX%2E8@`l5SXo)Vv9)jtC>|YE zsst1f@B$dd$i@c1`!S$^Y;whzv8Vs8`gTJj{VxMeM|JG4i-Z}nP0~EC-Y;$rN zE^zRrG?XDpvc`XSAUV%VV}~*nHMOQ4L>2**5sO2x@L>6_A1QuG8UAw?tE53X)(~0&N{9v;M3mCzLybG7A%4?(38dyfigVhilnYV)Yk5Smae1!?bh|>#c_v zLbm#EZqYyD7|ST7Mn>d1V&FuZM{*msSdQ{T`O`~13u?ccYdbeZQ{eH8P#lp-Q0PEx zWKnAzjx#dwRXS_uT#H{HS*WNN6r#Zd$Pso@ba=ju_b-$7A&NgBsqgbIUk8itJc|lN z#->b6xjdRJ%y)2Y0?yQ!N)iNJC=f{bhb2@OAZyGtYdveSEyg*4jx2FXy03iue_4aQPz`MPt>9p^ys= zr3X!Q&(!oe8ej>uP!WAa)+usVPeKC~e8{9EeN7zCr`Hx;91|TSVUdBiq#(L790nzr zv8oNi&jNW5xR^aK@gOQ2jwJw#qPFgFt)>BYY{y#(F|;zacf3C^=i(cBIm zoi(qc6|s@t^zRx67K*3|iMF~r=P0o4_@XEuZ(7OeD-5Mib&Z`wbr$u6rMo)*-iu6a z)Z$!knlb74qB(a`L(qj)twO)WtU^;lczvBiVRNJmXL0Z{|4QdR{Flw3v|I{|5K{0Zi zGv3w1>yP2^-boQJ`*>1YV3h6ZX~kkO5Q#{f)r~E29ys;C#i@Vc< z5rMfHPcJ_d7nU4kzQv?74?7XU3d^A>4uw6zN6HT8NN1OlPJ)H{(V+_Bn6Q-Av>6%M zvv4{H9LzDvca>X$ShiH=gWI&SWI?WlpNZnP>y+>Z1%c;HaSqO;$Q3*wPgPl>LJtrE zL&LMycz3E|$eMNWjfvZW)3k##9TqH@C_s6r%Ywe4yvRE3oGmRLKn@akD0~AT^q8@A zj+8L*0Vw%1r?sl;+W{y6phX2q0~pwO3W1~A}KS`ITLD~ zFj&hy!=u{nqEQdy3ovYaIxq!%RXx~1@KS#W%AMSN*OJ}y(r@UO*XDIco{a{iRoDh& z0gmD+72)5K^%U4vQA;^F!z!H);Cpfh>L+NGgs{72$d~zvf*a7{rSE7s&HU}~#cq4r zI7H1~e@;D|-Rs-8)z+!Uux+Q5Y9J&pRI-hB&Swz{epgDedsh80{uGAwpZ#iO7e=c2Iy$gQJkVs5o;26FH@V*WO`yRSMMjfkZrA`%&x5c86d1T5%1DVw zR22WHI4hd=pLjVmn|h62m-emC54QBny{39dGou~-E&;#Gshi#okr zFPjXWM{&}}1N6A*qkE16!2yduk43^6|jBc-gC<$?FJ zb>U$@FJ-0&Q4JqdBnVa=!ZvCXeu)0SQ+Fht(c~jc#{A?%On^4W-s_X5jvZggxGZ;b`Qd z>oZdp)=sO=8`KEvh|h(`Q?{A+@q1kD38i@gx`}efABkAlF1X_u03(ga?C})79;x&0 z4~)^7DFS%3Gn$6chh)+oFiEQN7nw~I5RAKx;?^oK=(|-JbkEyAFrJ*4m zM7U!{F$&%o?S3_}z<5eguEO+uZKm$%>z0DZj-M|*GXep5G`i}M4P=7gg4pD|+Jb=t z$;2BIu#NT~5Xs*D2Si#&-t1wmEQ!OOR2VlqK!_B@j3Y58h_~jmRT5s zxa4hg|GYShoa-OPv6-xD$+tXH$YFke$zwd4y{N$Pj0A{kR)}J}>`5mhch!{|gvK#-m0voFc1Xkc~;fE~1 z%w2m}Rs1ttUZvF1NrLXnB7HYinAT!`zkZ&2d1unJ;(CO=3*vLs3^IpRa4lso=;>H} zpefovlD7Vl2Kve#Q;Q?0G7?8(P+r-Gl>f)@xoymX(Vr5cx*m@S#Y84LTK?5`p@@f> zM+_zl_w`c71aw_#(|cv5e2)`318roPt-mf7z9XP5uosU-Y)@@*B?NZ8X5sb7s?~iI z0v^3lU3vh@@`3r4OfV=KmooYNr57mRXq?m`N?my;hx9YOzTBamr|@QF!^LOm_5K{Q z73%_+$WUrjUUmy{ysl+C)>e#*HWrtU`B&4Ic8o7x&|M|<^U|x!^H=Eon%CLMt+9*S zQkcBxZ*gh4CK(;~53c#yVmw7XAHRc2zOUiLrNbwNR(-nX(#Fpz9u~Hd<1YE1lW{q7 z9M62c1P5^U6H0~_4j}sl?*6J44O*xI1rJs`I+EvMm`O6GY}=XNdoFOM z5gLgZL(JC1|f&pqRj?uaWg)qO~MH_x@Mhvb^IY{~sL z7`>%})$D*HShj>eeLwpuhk(rISFku{k;FnYQMk^_QI$fwp!TagS%g&0U5Mb!Sk@08K?6+8kU#33OEJCr_MW z=SwwLY1VQ20Dnm@8DgU1DFLCjwCDHgH`6Rrp`sujhwOWv|51cF*gSfqnrCL2m{5T$ zMOhTN$OWPdsX+7>3KVgm4mX=(aiVd+^4a6QZ3drW z@&cy#o&3+IfRcItTn6;h{-2LEe>yb&`4|j;!Aq`+T!k14ffGDY{mY#>?5oB-BReuvW7jl740URkg~AfSedlVDHC0 zm=oZ+tM6$td&P8?SM+%!Rm&P1JOn`%PTH{zA{O~3^kpSAYW;S*|F?^EZ- z(!HJg{nnyalcFOqwIZWPlI1tC<=H?ZB%tz8#Jra?lFLD7XBwRvY>rx)xtmB(zjWr`Uw)k%V1!9Du?fQiXBkPxsZGg^|JH1l169Wr#(fY^&mI(Oew3hR=?CtNCXrbk0MbC#^TuD~S!B|eFfCb* zSC0Y&Q#h*<5-*^yiSJ=yi{UWCVm8LOrB7lBl?E(6+qUj&k|@{~i9!^a%K7Y}()~bX zeqVfIJ=lEos^pEX)*h8%x$gKp8S;Jul*+Qi(vCE0S+vA7Zt4$2oGUQKsjd1FY;1W5+L$1L^QqBsombn01i<3ByC=G!3@D4aqBVAW#qtfFst zAZE1T>JKZAp7(my&e9zy+_5rpRXum++PUuhg{x-pN({eYv~5t#B zzmSB5NWkKeEQ9O5rn$QvkEN#5+ozI$DNwx0&7mU-%OO~x3eAe%_R>b21jYvNh$Za@ zK8*3oJv2^FrmwjkO$v`nJgw>XSY9^!^j_z7m!8)1W|WNdnrD=(C|cVlbDqA`9X5hn zd)w*uP{G%1d68#R>3%(!ICG69I55al+G^S>r=eKH52Gt*K`~hF1+Wg$`tcflj8Q9= zZIp(MK^zLo&{V2e-*&7aB_-9Q$Q3k8Q3!=g-7;UBc)g{NKU^xlsAbsev|A`J%8%(7 zCF*RDX)Q5`=qjL0MU#IyW#qh=l)Ma1k=x|vsV_LW>YN)XL@O&>TO^W>pOLT@AW1D@ zA#?S!aNn9r-HcH-N&o1QxT74qn#%4qK#phNWht*G|H4hX&uYnf|` z!`mgFn#g4lVWrqa2sx`5A+u`Ks3?%BC79T-b`(+LEp?l^@bEV^ZU0i~nmQK#%wcQ% z)Z%kD`VwZdBjE5uh!p+o}I1 zwv3@zp&4EQ!l!sLC3V_F3!vH4-2Gv=`*4pVn?`lSc2jjll{BfUK`5JqM9%SfNj=q3 zjzYL%PQB0=+GX)M@ta**_t}x_hBiB}c4N%KyJPLXjbua1dr4Sy;4WdgIV7pjhNL;J znxdXQUVRhD>9($iWiE+os-ArtL{xG0M8S+c)k_E4c|12|3q(NG_?4mJ_-!YB< zwXA@##zfiUvEZdhbd2k9|23_LE|7_puo)?zOmO2E%@1l!^jgbYBWWGmH9Jn^Y)B_9 za!aurYFedp*?N&VSWOycDBU7}g(t$y0bV7>`E!qn8qZX_R$FgV-C73zD$|-(XS+>9 zS5{edrEC+(xP2H$*pn!DFU^=0izZ zQY|2Zl}6o4YQgD^YmZnZKhM!{*eU~jr(Jk>^o71iHLdf&FFTd7*fFMLQ1sFcf>P#} z;3i9rn#)gDsnY&&UVSDF#ZvN&u#q+}Y<>czc~b#1DY~tq1+ERie~?&*l-QI^&eS58 z%d4fg28r@zFy7@O$>PVLNbW*FzKMNJe&Y!2#gA!t1|JJa3)bK6gDAtCnnH*?q8o@v ziWxT{<4D$vm{urBA!5TQzP!@1ysgx4iHTF@9M+mAk>{BCsL?XzB~gxZ!(yyY7Kuz_ z0t@dH!^9g!b95p3UiR zSnV`CvvN(nfCBiE)~dL&9$>VfH%eTzV1&sNd+|#Tb5v3b<7F;oA5aBr;*9TO^$pqV zkp(rAYKBRGsOGD-R2juvGtQ?Rkp!2tTE6}$P7nL$mW=qc78SZ^Ej*pNtTa-b_XzsP z+|-H%E?K~S%r~Je8;&A?UNbecqaPV)^PAan6Ej4Nw$>QH<R zQcWE6aIkGy%pG2`m> z)W>LeiYDf)Zd00M5rjah|m9d)1l0IhWHT_ca(vUV12nJ1QB0~*d4axTpY@f!e{C4n5#+qQEii1MgysTpRU9dTJ?KQC!I8>OCR|kYNkZ9to@T_SNh4*~Kd}gw671o?BdjvrNdu-@rAozc2uRG2<%1zmbjzxrhe5&I`Ch4Fez(A@UkaKePw)3O8jfj5Dl1a~ zDV!qi-{wP_p2Y5{=d47{1b!4YmpX#CbMbJgZoFnw-pE-C-bp)3oo9l~mbMRbo;OZFH7B+3E%y4I7_*Cu5X7qbaYp%_7qzYz^SanlQuB zuca@OEDqcP(97#y%LB1lO=XqpOi4r2n&EV!`*QMSNCt2E5(-+G{4kpD zd0I|2F=C~iySsWXKQ4!|TF7HkhB(tJz`*ks;FAu1*X`Wh6{SV%R2fseSy~;H#j} zUm;F{5A&dJLDf{1w=cw&*bP}ps`9Dw(bvAe4-^Zr-aXvvt(Dx(1C^<j5-uO@eL6 zMJxlP(rEY{e!YU^)TgRtElaojeB2cHlX&!g^M)v9^I!W*As~j2#k2)BiLXQO&xsUM zL_Ok`Vp4Fy{RM|Pa15+6iEE`*ky~69SfEcNMkj&*%1_21aS5;{Hc`N^z{r9B*kbZN zzxMx_2|d->@F=|;>WUyVJVx;fLWsAG1d-A2UR6g2r;To2A7b{?Rub{&$f68hCjDJV z#~Lw3oIYNG;{sQ_Z$9(=(G_~te6Tlc%3Jd}gL%+eq}3d}o0=%r4($cUL&6*`T5I=Y zN2hu4W^L%@FZ#Ku&(WiVSaUoM@;E$L_^Y+M84bdass;@N#Td>mUQwE=hUmhpo#@lG z^j3mYx$*|QWIjdBb0@o^pLKHosk<+9^#$J7u4{@zt9Dw3CAC(dh4ba68k3x2tthWC zVSthBaFp?+F&`>Wz9G@!7TO-;8-B-B&$JYuQ*@(gfxj-3@?$I8T^z~TV$gl=X3FeW zND7;rWwW6oY7+@FKh#U?ZY$3ndY`YkI(z)#Y2d=r*~wLy{M+t&^%}NtmgmWI1E$*s ziazN=XF{-3y3kO4-$Z}&&^NGC>#;xR*j0zrAorxuaH{-vpZH~2M@BT7ebpcqUza{^6?XNRJeriP%JZSQ+!=|$_u-&o)8_MX zVn1)0qR|Ca?asio@N4OWo~E&p1Cm2T%@2wT&UpPgw z(3p?}Fbk34&;!dD=XS>)kd($gFoutn3cO7W)ONibFFf4d%IqTlMi@9M`hhfgH1KR8 zpVzC^Gl+9R<5geNFcz*#ywb z7zEpm;o`G|s>EM%>9#o+g$m%!Z)bCLv&dDNm>4j1x-&&6g`{zWjW|=ZV>%{?9^nps zPJ2sF59Qlz;r%)~Qd34!-OzcDORC%(YVNhoDBuZ8c+KFU#QO1yJ=S22dfY%(X$n*> z5Y7=}C@Ud-hi>?^`waz53yjnaX3P~2(L6MjpI z;=Npj4EB3C3jOXN(Enwesr);=WF%K(h6km}){CI;vab6EvKSiVNK+0J5o=c>nISsTA8IaJ9HrLGJ|sP7`#lptPo_>83M2I9gyksC5rG==V=E1!mv=8s3O)3%?(L7`mu>AsQ=O>V%-7Z>-Vwe%# zSmuz4`#J={L=RQ!y3gnK1#)bd6L8I1u+2>soEz^&-i1(b(95qr56g`Q%LOC2;ZQ-c znyi|cE5NO74)$M7HSjLaHF;y+ahkAp*vk%Gj|zY2VYllBiYd}>zXV2yi1u7;vruiY zB6mjPN%UYvu~Meh7(ZmK{71}$Du<4y3h%GUI4hev=@a3cP{0seFwRdTo&05FLKN|~ zo6W>A5Vm=NET4NuOJW}QfQO&aAZZRR&06G%k?02Vy7;IMor$|mmDvZR{o7S$5k2SWxqH$<-oO#X|bJA+q)X6 z+A<)^Sd7rNV$(v;qjoYYD(-V)V>T>%og4d79)5wiU0-{HC{WLBIdHVe`Oe|)aypp& zWu0Q@9i1_3t=7PRie;S~M$pZ;J@HB_tB61p=2LRm!@;w~^L^!^0&G1CptECYN+5Q5 zGGLt~7e5t*1Cw4GLk(dXRSWcb53gccYT6EK=wr|R9Eb~xy(6amw5o-b*3A63C|@#0&vfCVDX1kw91l$U>?AOg?YtRXa*oKO%RNamXEflSg)0VHK%N@iIe+ zj&onxQj)F#ViF(vFUsHjZ-8$$0*@cO0#KLjKd8kH000m0PwOAdq5V^}{=pm&Z^M6! zsy5PjDB;-33D842o^N~pGy1<5x2)heewjf!7~$?5OMr=Kw(tewQvQ|$rNBJQW>A?w z0l47%a!!LDdbh>B9@pozveHpns3@Yx9@8Y}{if(W}vjo&b|Ib{1f(8HQ9-W^a z?SJkGr1fj3Lf|&{(_64GQd~M^Lk|9b1&_LANe@pz`q9Av%x2*hhguYtkAYmp%N7$r z1a$PM?wkS^!Nl1Btj5$7X5*=Hac}E3Hsfl@6Ib;}pqNV~A9bifBs8{r)D=io4S-Jo zqv!v}9@GEW^Ao`OKYMh4dUXETQ(GB|R+(%>+Es<}a6B`V4sLY$53%~c3Q-;a0MW@$ z$NyjQDW-pE;|&@08R(ek*_fD_jak@PSm;^kSeXo2jMHYNR{J4y@tmgyV*ZxE4wRrKNug)xC-FlsSHr}jv z<`XIG&7oe-VOeFBS8Bchpj zie@>w6)C8GmctuBPLTRvL@=Pf&_AoNe==wB{M!}!|E+reCUS2rsVvzEU0~LAS`IoO z_ejzi|1WF)|B72ycBZDI=8vA{W7M^Q{Z;CS)qaKa(r}GLmg$NXc@=p8nAp(Q)BCv~ z-W>#px%-66D*zG}H{;g##N_Tl>G|j5uE9sRmA?X`$2P z_!W;&M-S~vDg1CbM`NWoacN|P2qtS2^VTy)@|dtP^Lbil@5g)T_t$Oi_Zwecx}>S{?jF^(gl`>qi!V}EK-pM0TBij)kE~S*Ox0lQn z^Px@fI#4Orn1u_~Oa+R+El*P!yeVhan5DO!8RyihfvS^HBx@CHSTGK-?+Z3tRAdj1 zj+~Xbd)^Z$={0`iGm12(l-pIg8_|eFwxb`M<;_^UF89g4iYSUqG^1jBPc52|#q>DS zV4h32_ETn5Moa4NjHyT?OP&Y=CrKSe(Jvb%|2|*$pS|#m^ggkL?wqzRm~Cz*0Vy_{ zr9%os(7aS`?~8J+bzVezxc_>pxQ;E{!jI|w?i&1CE$sscV$K&4ImNSigA<-^%Mt zf1ECTVv=!+O$>nla3npatrno}=)cPXzy1^p#B*pWJ`yCSra8pBK)GX{wAdMuo=#~8 z>ZY3e2X|y^&&{`k&QOK5&c1_Q>9+fL(o|BB5hM}ZlCvsW-{@NoYD_?2!SXsU zoXs?{Dj3(hsUS&`MF2L4J$hq7tE#0u9h}yE zivpVJrRJXs$@HY43%CsX4r!%YX?>8Q%n5Brjp63Cv|e+5WU$(EZJ zir^9|*9hn%TFDhzV70+S{Z;l9;+k#JQED+*{<4@_M{AT90k&2CHTO+UZ{k`($b~C? zucW;yKKUCR{Y00SPa#)C%LD{%YvNQsQgQ05{re3j|8NJs^@;6OiLKLlH!dtJu>a3v z1#(%KOR&9Tl5j6IYwynW#_3sPe7TOU&Dn2fVW>r%C1fz|2oGivfA*FrpbitPqLH5! z!>q)eL6^65^zcvyZhr>x*UZBo*dmPw6J?t;t~*IS{p6C=_a{#_sPw!8MGOb)c%jxS z+KkX^D-ic#qJ}@796NRKny@mF=pJi<&|e8Avau8}X^)NAQ14#PGS>HnQqwms&u5Ze zI^>T?l}kj7C2OMzS5)%SVKGcMWa6+LEVn~c#G4rBDfT=8e$IYoV}MF2B8%TIi%IP$ zPuW(8T>^^8aSO%-!T^-qr!-2zG)0jQm{gyw!P@pH%ec{xuyvn5zrAdOr*oHFQNGC5 zq-6oG#<#Xkdp3EWRu=9{o|=-Am3EgdlxQ=IoV3f5L(H10`EL3wJ8_Q4(J6qt6R02< zXMkYArE{Ng&Lyv~R46IDkYfc_ys*bD3KuJF4kSou;bK3wRkf0WgT~2R;)>oG@ z2OgW1@Q6IUyu`tWc9p;qe=nm+i6n%DU*rYp2PHM6_Ee`q zWt3IG$ElxZBu_t)1bJtN&f&r&2t&P$fY6(8N@60^6+h&IZF$1qE5s$MmyCxnL@N4K zH8L@Go&l_3G@9k_k@~n@obBCAh(p=9uPR+Ic|mglff0K8L9QCApr|LHMyBDQjlA6h zSdQqC#;4EIR@ES1Um|C-b*`!?|AZmYQB28GRok~=JFUB%JGZ>qs1Kw zqY9Z)Sa_&}-WTf*esex<)FfxxZ%id7xH^#=-bnXYNmLd!nA1WDw5Tayojbq{#TiaIIB34AHpEnS3Rw)TuQ-q4YcQWR zJfyRqknbWyT*_Psc?P&0`rgQx6Txz<=@%VpmfWXbH*yc8g`@JyS+x)6;yAgqsN_?N z(0($IL;>60=DY`9Mi1jC5!oqKoNqRA5}zj692urq88bX4l@IVdmcqIE_+~e*MYSbD z*OEWkg8iT8W^<$8^m3LJAVEYGp@=!)P_>RgUh(2>Tl%O$(ZguyDz`f=eZVF(HC>af zg51~eZo-1IWkZUmWj-+Xe`$XO(0kN~C`v~%v<=i>+fJ;LpI1h2NT-zhsdrtd?s5l6 zf?;9@wn5NOV#p>vZsg}U+~t4`P)s~&NdY=ZVwRPPTlCMsQZq$Vt~ZA+eD2+wCmFss z1+8~&-$*yn(BTu3tvz6EX<90*U{Uv3fB~evG58|bJi<;#jNX>@4Ue-%xAvdrGjp|@ z-?+&LLSJ~a(|Ucpa6PKdTwA5g!H9L42*s2D*)@#147NAC0EpF%*Pt$b*)%yX<6yus zF>%&EJ2o^>{W6RKNDXibty5a8HAt6CH;?Nx=2jC+ekF5IP!9r15?IpsXf9R$^kQ8< z6Ky=x1MteM271EzGf9L8HokM35;Y7CX6WLbGQu7AdHGnlxYN^kTQX3*dkByhB9q7{ zy$c5b5p>5~WKt|Vfe)&+vIy=0Faw~M@Be4FJ|ldjxYlVPYAp;-x%N*w>)kms z987L7meCw!GxbgP zHr9rF4NwO~;N9Uji%^Up1*Ss*ME6Uatk5kV-pw<8Q%ClsFlpr2ISyHXKBtEFym+)( zl!C$Qx35JwT{J|QqQ@Z-+j7W&lkng4_4^89)5U)|X}EWFO+Z5|?QB6ko?cks%~1I! zOH8*M@Y>7$qfMBNIH^@)ZC4+GQ|y~Ez2A$k-c2W89}5e+Ucj+i6et8}x51TS7uZW7 zp*^?p8h9(_ss+yWW_9N5L0WOK zV{(vnOahgpTYr-nf}1qC#~Yu$1cv)wBnGU<)xN&?U=J zdXMRV}6Cqd$a0HW4;b# zRj6cMYlD4~nIZ706Gls~$mNbzlX?M5&@I?>8^rYKJm1Zo4{Vj%f4I4NeiG&vJ4YZB zTH!84j1P<{eSzXOHdn|AuT7@H`_jCR^bFIpR6C10JpyDJ9TK1rAWB&k)NTl|XQayF z#q@G*(kAG%c;tf+KcL8*uje!LQD7NN(!sJY%2m+fqq-E6r*hXuiBYDxGl6fx&P<@? z5kEX!jEJw{JwGC zWY85lVKf&y#{q=q>1PCy41~ZT0y8HFP!Bw_V2w3gY_LM|b){(S#`Eda*xBIYJ5!$i z2B+yWsV?r9kf3JpY;ZL+dX|rU^Jz;?%0n>BuyPF{yP7+L94xayf#x4oo0W973Dh1H zSLEOhc*g~vMS#L{mf)nfB$125y5yCpNFAucPLzgYmIu0Ff?8#dO06fH5P^w+Di3HK z!zhxDYb_Pe3X9IUj*W1){ab7if|?J{3-k2{sxHX2uo|0u9d;1HyJS3XdxNj3tb!q@ z)YT8_krw;A^Zd@8>YZR>fD{v;M5g+*CA=FRVxO+$c32%TE8j1N5#AY3Pn(3;Eq*E^ zXBMToEqHaJj${ZmscdBZYKpn#y} zbc}1iWO>j?Ez$LFe*n55(`i&v?Zk2RD}7tvhw9o5R=8LukQrI56PHN zdhXGh*a&pWdvNlMvmLW=o78y@7b$4xsFDyEBgrCUoqlQ&1I`y)b%83ZFa86 z*ZJez$P_p`acp*;K2>=T1bpTU@O|@y+)B`7raz>kpY@wLgVtKNXQ}lkB*pzHX8a1g zrZqa??ZhI!q-f9!#$BWXO}G=E*RBT-WlG*DlI9NBHG8qt`(x6JOb$Sp!YozweQ#@~ zxg!K#n8u>MeU{=h=6#nMaKdWB(Iymi`3Z*{cz9PbGtc;Fa$j%Nmn0PEfs6<`;Nlwb z2c*C|WkEO5Z3hBd%Kjm|a2*aYO4cgzc0C~N`vC}#KcRXUiJ+XJ@Q!Vzai#XOAy*Gb z_THwB%*J6iySl%?*UlZeIoM$zfcwJ&vK!1-dIA=Ow-}%LgcPdCG>e755L@BHQ;)5M$LptQEDD%9-t%LBECmKaPZ<$^$8;>R^(MKW@ zVIm~`>iM^FU(oANP?u@yt;;@ROMlgm-q^0TMvYz#mNCrKO#X?g>EgX~LVvm2a8i1R z=QlMgcHCrszA-95iKVQ)d69z0&ejFxQ9m7^V zZ-|isC3Fzs^!IF+@(XQ;f571k3hlxKUBmTM70FILiz|jiPp( zu#_ZW;sDecz{yG+x+!Cd5d-3O-C2}ixJ1KRYON)TN@`K*FXynOgpI>pQRB5Zm%1#i z2^c-!2SP$DX4t4u=FTBPn%vaT%Vvh^6m6s)cG7#RLBNQDkb=kPjiz^#EG_urhTaNU4 zXZC#9C=!}?<;C);hP`x=K^G^B>7rWRuPzY>s1W-kLD(wnogl>6R6nvqfZAaK(_KQ{s0I@Ocf-Oce%A zZ3(_kzKy@f7`gEK^3#mzefDQ_vh5J^x9|KeOeQ(%F~rUYk7RGB21&`tka?EV0HN^q zXx1nvIZ(sPQN*I0{EL4KqnycP@82HoDrx2&^o&t6pdD}xxc87F-T42$mpSUiTzK~9 z)Xo!png;}gK>v~m&FO;>0Mb9Hy3quQ-nhDAd+XsYPmDb}JA5>;%u4T*9utNRerg@1 zmz>O^&PrGRj6)>j??ty7;#@LhZ<=as9Iyrya)wYVS}`RHfVVz2F`RWDkVrQCyzVHpHCS8BAOnqQ2AjIJCjSk} z8js^2Er(`T*Uillo}P~FY(oPa!6)=Y)8(@VG`GIL80cPqegck9$|m%4V!z3+|2EFq zoiat*2pQAMHkhl~bBT>UIMbYO&zvVw;1m#6YuU9=oshC-*>N|hQnoq`eibvFbH0u%_t^D(VMcUOk-Jxjq+VE+0#OtJC&==S5hB6i+sZlQ(V- zft8p|ZN}5IXu~yD)YA2JfXP_4&jkfWjA~UdotsGuF9i0k4Q-kG^7cd>_*`u?TC)4v z7LH~i--rY!Cqz3m;Sr_e_Vl?95E&dL5xxGPlvl7C_`k&vOBf(Hpq5?Ry{9wS){y>q zff@3dU^HyuvetO)y1$%E5Y3!`#7#f*QOs>bqm*POL0}YFA zdW5&^xmIhLieC?EG*-aWv>i4C{7oT<)DYUUIo5MYf*qOfRhjpSv- zvY$hq-x+Yu5Bf_zy`QZ%6X6?x%m*cD!rgcouK>dmemj_yWQLFuvG2Co<%_v}a9;c5 z`uYNp2Cj5ofXS{QTRs%97?PO67@WQx)uaPKCQXxq3iuR)5BQ|u&oC<`Tq8)Jo~h8E zHAG*_C}0;2Ga%?)FWV+c!wEb#;SFVIUa3GHeP>d14E^3>NxQL9P!SOE;E}xJHYG*B zt9AJ1IBW6S6s4CZDm1m8ySFjD)C_tc;ho~d#1Lv2nI68RMMXNw4QLXO0@T_iHqg>2|bxvruKcs-2O8w&!^0uDhmnW(N~j=W2ehR@%C@^MH1O zm&odQjHs*;K&YZP0}E8jGMVXy?mO=@(ZfqSkmJpD3!Oy2^{?ld!P6Fn+Uyy}b{2 z)YyDzq)v06`0S{)w<{o{XH}+NOTBL49X^c1qYhJ)EC?kMThwj6_6Z?jzs=)(?_2MA z2kgZYGulb=qH4RRVodU zg+SQ3xgn-}#>U1VV~{xy9~Xx?$e6?YFH`FCPsA4Y|3Y8}>)Z4hfqO7O<&@t3R)QM)qf*^ zeDnA+Qz2)E@JUul;yuiQ$= zikj5s(NM`%npZwy-USk{nyYYz+`wZKFh6Gs0{Z?#BYVJLhro`XjR1j(*)wdVe2)n+ z&5bmM62tG&vB@%jP(8nWQJQB6Se9WGo z6rV}DE|f)rzcJsVo^XHOmb^^){`*oh`})s^LuzdkC=O0!|2!`~9<>c~9uLDXc$K5d z^H#)Gc*hP)JIO|qA~Mi+K8cb~I#hXn;9Wdk{p1Dkz?Z%W1_0elqwrA4abL9O zeC+=gm=g(Yb_Xl;GUapAx=s!UP_{Hd=W;fh`+ITr_?oubjSo4kY# z3F!Cz@4&_Z01+`*?fDt9go(woCWrx|#f&TELxjGs47y)ST$ex{SN~r9pUrcWr@!k= z5GHH0Ommmq1|t&a_z>wuVLq%M!9n~<*z`ZVTo!}+NBu7^y0ZjC_}w3!jyJ7{Og(2% zPFQEyi>2PJ)y5oo6@FtU@hKRqljSl#vt_o3lONN^6S5Y&5MG!eA3v{de)x>Q98Fbq zX>O97s$MkBJH8c!WtK;oH(9ety1)2gplQ>2aU$)0`;uFW{-e(!1qK;$Jg1m44rhf3 zafvNsVqw>l-cwJTfD1PogbrvboGlI=&d(Kn!#;=WCDfGJ1su|FK!Obl=wJOjG~6iw zK-3CWdDh1B-tt)+C|;yh;^s<^G1ch7{ORE}8*_Ist^IF#4)i48V5X-vWRofej~9R# zj7^L}DH#xuwtgZ5BF4dfN%eJVnRR2U&7e!u&DlXZG!|L*1};1xz*3YdAUHfYk&s4> z{RVLF*816Zkmb&ce^0%nU8|~oLHB8B-J<@_pojza#^X73$KuIA_vwot9nZVYRsT6G za^by`1FQ*qKNWlTji-bkkLEL8XX`|aWyGeTd&@)RpR|h_J}9TGMqkm{Zs1*&Z}>b} zcUwtx;MJAI&)Eux!i@(mluUDL>PGi zH^$h<%V^QLnvu@byz`lDl( zh{sx#B{_X3`^X=+ssh5cGHG7_ykDcTv%}bSHEUktw+)hOUW|3hw!{ z`bck&9v$5~YE23TO`;a^(0_0~2nOP3S$!oGa(uU1N{jxao9iqrAy8yenihp0$#ANe zqU-xjj8PBK(LC_;3Up`J&$Ir|AOB_BuCwOp&ks9`1Rw!lZ6&r12t=OW)ds6a0ey{0 zbm&@AD6E2|siTw7eB=#1dD!b}3r#yF&a#sw_l><$29{8ByGaOXf7h5)`CNIhu1R!p zjG)GatH&Hwf(XG1!At0^Q)-d<6vUb)0?$5;xX~OAo|7|NTw#hNzo7hp;uykGK4e@L zX_uYEB0QI9^;_GQm3S=UsDHHMrFk0P!9HQtFl^!L1-CZ3wjwHL40Jx7Lwmh!;VLWx z%6fldeqQA-ICNv{-*I<3k~O(|HmL4L_YT`YvumBR^Jh6%WjqlZgL-=b;CqPM3Qr$% zM}`S=`ShkvN7y8ic3i{n#@(JE?;AnDsa|W`LCvw-<;`Y7T1>l-epN=YA?<~2J!aoc zWd^`FPwQO|`GV_jPY+L+eM=bV(O~mW zKz)ihq8RTB`k&UmZ_|fJb{a)@eNx*ArR{Qo7khcLW({gSegkKUp zVm(V{_r5S!BmnH5bMW^GPXKq0qxb7FhNOP)h=3NAR?KQBGU8truM=El+Gu^1kjS3Z z9t6;6y3Fzfh*4X&7^5#{(6)36t&bRpAP5-Mn2XC-NJWm0*~OZdM-~le7xOZkQoVBd zvAPY4xe;3-=(qXZ%OzQQtWFx(%Iqp8mb^;eW4qmTbgYcCGoX&I%(qDZBsvLGQq>JK zv54}BX;30_;*hP|1>zg*A+^cCdoX+MR!Zwj5I2FQ`3_JOTvn3SlGo-4t{+bE&d-fo z4S(r7UE<;=Ucn8^~Rb85qm&t+$)aVAxy|K~G9XqunY9lLCw z6o%i!mXR&@#viVmotn|h$9?Ph3=gan6&)So*c#oeOlj&6GG|4NHVSvw+RAa!bh;%& zWT)|w@sdDyXH71x#ii@_dL#(9Orf7kAc|G{jKRKXNHZYZgH0Tr@GW9uHRTnODGptv ziTLwH5Hy4WO&G6@y|xm0x>QqMgC8UE6MVUjI>Sj|v#H+I-9$|NSV>d~N$ktSP*2HF zy;{NjS?DREVgw>uuTams!*js5F;UtJj|l05YDd{mHBI~qh=Xw5lZu*d^E(3m4NLda z-QbK0riF*%kv-4kgQRQ6p4>op)vtJX7E^SvjH9BII?{f~XOj03!PLZ8-(InPi zW8&goSStDM>y^^d*lntISGB9Ox3v@9VO`S~o!@vebADnCcqKl;7H@`<$addYFkR8h9>zGIW#bU$9qbYHZGZff=euRpKJ-V=EBSg& z1#p8REC~Hi<(pe$VbeYLd=bHQ9X_urj21&e-=9>+ec})lP~MBTF#axoO3jC38IB>e zsfJNf!Y>5iv89E}ya_+8DPT#loM_a~p2AK|uBgEsbQ}*9xC#&Yq+H$?Vct)2C8?kU z^6!eThF3V6it6K0MDN=IqG$rs-f&KLoZwjmRzem_rr~90YCq10M1PBN+-bb0!a|YA z2Z!c{iuVd77Kf4xndTzCO~rfMv4LYr(j<)kMGeSmPphA_;Zg6I;R*KuT79&+qssK9 z?Jh$()xnk+WSsj<2tdkA-oikOjC!Ml{o07YaY;CprP-2@?{v)gy$k1lj0(48URYf9 z;unHV!;x{Uq>LV-v2=#Wtxu*t)ckld6igwLE6A*5*CzG|sakv%#Tv0folQ)bXQXKC zZNXM&-qWFFi=+pSGjgKXR)1>C%k~h#QN%cK!Vys6*2R+QUhII8Kwb>f4t&dAZhdy9 z=%@8)rtomy*;%?&A>!J$RrOzk<#z3S!q8i2y2F9XW@nVeV=3t`qcK}v8?`iE8oYIM zqKn64e_QVEN2Cns#A=g}ZsWp%!9&O4vW$N3Tu@@?4ORtt{Td@SX>mkg2onSA%7;Tk z0h-^uaTt&Ocj}Kl(@XK3j)7{II!PZt2j<#o;CnCAb@y0ydP@Rc`1 z$C4zMpudBRx=!2h>ngkJfKIqo2hZuWl6=KJG21W>Qxv#4e}f}4I0i!7Pc{6tiPSAe z`OvLRJ7PaKsV+~&Kt*Ig(fO9$*8r)TNI?+Zb}t)=_o+*r_os=rcQ)Lv_FJYFtQGOb zJy5{;$sJH5oeEg~Ew^pF zWh%IitQu*Ck}%cg_?I1b_Zd$H)Zt;r{2VIs8p$U)vkAY;y`MknA%#5I`%PXs@WVZAnUSfF}gu2bqR_X&CM0O+5FEq?=!B17vz+7X*x~Hk zA{8Bw=jgB?NA6l3I@J%UV5x|}G-G~_LNe3>NjeS)^(k#kq`LIg898zN&B{~#(*3x< zapvR6er-1_GRrY;j{NV0W-Tw_C=053xl(XIsQBQbp8PNory6`+f-LKb`wL$U_CUY9 z%2&LCfR`FUP_f5CG_PBlACXnNu|s}5t@k&$A6o0Rt`muNzI(5kMfIqWZbr@xMdz9d ziqPak7sB+J4hX@s4C`33t|0x?P-K_i$X{`1!;#~Uo7<&D4v)LqR!(X}as()@`s(#6 zjwC_eSJI*f<=@2)-kw^gw-bTohu6gchU>2`GE35Il03PGnWZa?ABbNsGb^q4Z6s9^ z)t15gU6XTXY~1neKe>Z-yZN#&r+A%wGdW8>`rk%CZcCJp0x&@d!aj{ zS)z7I3MIZ0Br+#`y-gR}>Kq-55uN@;OgysK1XLi_wOz!=&)@y_u|wNV(7kXm)>H8% zRd${$@YSxdqob;H24+hMeh!kh7v5Zi0~S|4(fc1e({CeXf<00(#NXBuo%^97kT`fd z++`d%rwFw-3Jdq}Pr%U>qZDvM9pbnX=hkw&>2@&-hP(rX+kVY*%!Il1Cd*5Hr0&h! z5yRo8h;paW`F3@6`}o4){N!?q)E|WMmaCv}li6`519|7=44zMLb?@h#``a&a;U}5i zlWUt2MboEL>cttLZEVC=9-=>mcNaDG-0QHf(%Uoi$t&20%sJu7{RhqVR^R*`eh8Cr zQ8JkwXps>3N=bs@qpYUg2J)4QYzR^P`A=?3c-=)o6Kt#`Ow$U|mgbLni|b@wD{~y` z#;rNRHBG~ZsY9wn4-ws{d_>E}{gK1@)bR?n9MkR{c!zcNqaj;nWXlZM*y-$96!COy zn>oLjUG)6%M-9gm2!CY{`d|d^X)xz?Ae1FfHe;x6?2s8+9#y?pP^x2P_6p^6;aOgV z`$i8iC9P|+YrC2i_rV`E7*ilZPpSaM5bl=wCE>nYp5Mel^pjrIFi>4bZF+Aer>@cb z{Wb9$2p5)<>rk*;%zXLcp%!q{BJX~ngU&mb0)clLp;3lfbbk!)3%+Aep+=SUujat4 z^Zb#y!{Wun>$FQGBX-S8KPvk1m`zm0qpPSD*1Hs+Cy)Kv5|s+3!BOn1sU4z-AV~^Z z85Jc1YxWCXBZBlW;+jxhUX08FeJc&ksEjZ{B5G38v`|dS*d33kOGU4G^qsh+)dnv0fa*&VsgC+y2IcZd*oD@5CAiKlUJUXm-w+1-^cb-`d+Z02(whxaLZ>3r zbdR%aMm(oaZA7QQRH3I5+DsA@Z-(d|gJR~HP2(W% zMKnLDCN=rKTZBkuW!rabs#C4|+3Sl%;MY|oIdBKXj|8;qE#|M29*ew;Mr>Ut*Z#b{ z-gW@Wj%QL7dSQLtD7iP{!oolMe*dDth`?S<4~57%Tm*D8*@^%Rps>YR6P3*_p-GeC zUim?=fW;d07T>(Jj@>$)s`;1{cibmAfKzdv9g9#u&4PQ@yYx)Da)_Wt*RpJ9rUHDS z$1cTQKi|)55j2;FXQt;vHexu8%ERouiw8+WkDUVbHF;#SVf64^<&~f7tcN#J=niZ& z0>aqICkW z1vX{xy6w!#e%q|f9fpi2qYAy36Kw>h(PS2c#o*F#T+?O`u(5K$?cgcTGwz4XTC}=U zVaq19#)$Gr1(A>*!R{mzwA6pyMRbi{TSJHNDk{qXj?(VKD_62grq0fUAG=1Y*LNir z-W~PUmm|V-7Nx<(=_|7MT>C3N?MU)q2slD@G-HYkOIAJIA>xyj@F^xrW>Dg!a)~Jp z#b`o@e_C2=BGJvUH|ZROi;3tdPoJ`EsnZEW)2Ib<2w7!(c9~1=T;3!4}rL_;S~=s0?wnHcDTk05M!|G)=0{ zwTG-;1R)PHNc!wK+I6Y2VZ7Va!E|!&5YDc;{W&)pP`qEEeb&DNaiv38mzAA0qa-dSP_v%LjgI8^=B$w}9 zNz2p&bj_+U<$!BqY({}TSGqs_hwjvtFIiaPPx;sCYdt)Vus=OnR83@#eFEy-i}D`R zo}n9&D!@F*n;xAXR}~KrYrcEVueN+z{nmyG-g~JdzIv&YiD+;rXu)ado-WU|!yTd^ zmOS!%glfCi$gZpP9hm5*OL!x>oMD-p2c@A2-|(^5-=16K{sFr4dYi=bGCtw)^nQJm zQX-9*j4>RHEVA$ipS`LWVc@W2iCRj1=*qyDz%Uzg-Hotk%o$QqYUjK(@nP~8?r)2> z`fl6{pqZgci^Lm3qaiSw*Y?kHgcai|;?&zePO=#%9rw6(1bDb%X*GOYOsuFgES+O? z@`}gE(n*3wj15+IPkxJ|&;Dq@L|Ae}SbWt~Ch$t&q-)rL2gG>MUSkevREC8V zHQ%mt^lSpZpJD)v6i&Xik2?uN6>`TMbX)hgtCDNe8r%xx(X_?_gw zgvZalFZRz&$y@j^1g?Bv02aREZHz41@j?%((F%)pTald z#cR}GOxcN+p`AV&+9R0QcMO6l0GRZg3jqL7gem5kb9q*b4NR<`6{DDKdm*|}sZ4&W z=*m9GS?m*<_77bKyWpQf4pZ*407M}k#&(Xj5NB3LCy1Gqsf(3^J&T0{fX@t;vyzL` z*o?=-9OmQ41>%C3f*>Yr5EC;_ZZ-~6b}kcGR!j4L9Q~3CpL>Oy0RY5zVU=erwlJ}I z#xljLsd5$J`_aB1UU!_Rq&F(3cN5n3Z-M!WCQg)-N?{LLxP~AHvQoUjeRr+=&izsZ z!Sz*i3!Z*xdG&r@Tt?cr%+26-$D>y*uk`zQhUuazeX&xu;9F+Xy`AG@V}mzew^^K3 z+?ID|8}r^-5{~oB}N0+IFIm^h2K#ZxP=D03-%*QFWMZgZx}E{_7+Y|BDp$)C(`zr|h? z8|>3G*!Iud(t-I-anNIx_U2+aDE7Z6v6i1xi zWB6VD)auJ|fOi1rB}wbzw`Jc+w58t}8(hsCJD$xLXNOj?U`!k@* zO!FMaAM{`^+|{kCab>qQG2;;&#oM*o-4gIw9>5C85ctsK*`jeY(g=rC8_Uka82YeP zw@2Q$E~4GsQ11bMAP*AW$VpAJ9z0YJ7RQbSE~+2*76*N%bkD(arZ)8>QWEJNxv1e# z$HgtfRNoH_dCiE%d6KDRmkcFaI_{a@ednM0xNd(*y)CR#@j(Axuu4VLYM)J$kxP4Y zfHDw)xsmy_74NflflB7dJyr@NAPBHfK9BixdsY0nnDis_V%{I-m$5?yNJ5H(WOh9{w49sM2j!<{b|&9hI71XY_YmDxz2v$;PYLU~d!WY$97mG= zv5J{roc#ezDPN><#u8Sj7IL`_n#gzVQ(272u6EDQ?)$xzd0uBJIl=-VFv(P%Uy_7^ zYCX@X3i4vv-uhD-wohf3A^s{gEni%ALZPmBc}`7)&=|auDtz?lIo&+N=Oa>m_rn;D z$JKkq!F<^DY96rq^zu1{=4r?LiGDz`>&F(ft3USmwzuT1Q%uQY O%F(}nBS@Jswf_&fvRLi_ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_a_u_t_h_o_r_s.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_a_u_t_h_o_r_s.i new file mode 100644 index 0000000000000000000000000000000000000000..0247749e58f4b5e7b0194a31c52abfa193280a72 GIT binary patch literal 285 zcmZQzWME`~fV&I~j6P7d+K`79F3t_7M`@7rH=Di1FX z5NOt$@pCuhgL!68Lae>g_|Hyxa6i@b+@l3w3O9(Ae4St~kS(R(d4c0z=eOAl}SNWx3rShRGR4S^z~5fY$&3 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_c_o_n_t_r_i_b_u_t_o_r_s.i new file mode 100644 index 0000000000000000000000000000000000000000..5a30529ff88e67e4d1a075310a39b4ee20cbcae2 GIT binary patch literal 1896 zcmb7DdpJ~S7(atSHkU}m;FQd^E-@*WnxsbM5|T1cT4l_PF^oCP$fb)e8kLwrQcRM~ zx^V)q_lNvnUfiQ z$LDAGsg~>J%gcn7F%`WN{uS0k?}t}U{t2%;04L>5F{3%bF$dgFb-6sW=aRWQeGS?5 zS?6vnZt1mZ_xhpZsgKn%Vwth_MTzXZKs~=L+keOEG{2orw_7F5HXE~_QWf`|AiL>X zIGdD~ef%^vT32fws;=F?Uq|FWtG~HGhg+(CY---C+|26)#{fylc9%-+<6nx6ONa+_ zhqO+XrlmTjsrj<_uEHk~Hl{zGNY0+H4rwYkSlluunbg(Y@_V|t_O3m}AhJK<87YON-t-T;r3~lzAE`5 ztI&l!#dp*5TZ1O%>Z*{7JxL)AHMf{vXC3F8CsR{iW(7N6dh^Ho=BnfOyc{Q#JWm(t zE{Q(uAzrg9?)ZnALTQvOos{~{vq{72+W4oO0RJr(3EABbEJr3b74%zYHe9(cPa4{8 z^+_fu7#SDUZwT*rG)epWzO1Mcsp-_NR=TlQ{WaaYsoL3s6e7;Q^Tw>ZOw0VOcH{=R z_<8#1!4*{_dn(4o#;r3llcZyaMuwxgRKdYcRp%|=DRbz{rMihWp(kN=q5OTJWg(;G z+89)KVL;ntt+SEdn$_Y5b^s#UItcpoQYt0T9 zpU8_A!S9Tbde%AG{>H@O2CW5Mnu+aaM_J9@4Qc_^j7c+k+}vM|Zfl$&ZKG9^*Tjjs zo*RC=_1NoV%COfJL4c@h*M;sA8@&%Ktk#H~B2_oo_SFq%Uc0wyT7~pxU>0pxw8w!h z1D&1=5VaNP18w$0FS@*w=IIg6Wag6(%Q9GcThh*=|GpVI9oU2{c4r6?KJ3ci@nC8w zx(@+cXAXjJc&1=_@hcQAq7tyjNXr^34u+t4b|&E95Tt00DcFFt#;_d(xd2o^ z(=xBMZ<`!z-CQ)Pq3Ls79M-QBf>Ztlq6qkb1ufYqVDOo2Arq!C!XuD4n99Tul!3?K zbCw|j&et+1?#6t9sUqrUA07u9t*DRbA9bSh}lu9 zdY%^96eZiGGl!q8(lZPGbvSWwuwdznegZMA!AK_5u@%Bk2~QKOG*NY>ucZO~pd5=Q zg&sf|O}y&Z5$@81O%JDct!x{;z4HsHiRX-SaQHR|9*8iC8wUG^L?LluFf|N&{caGH z7?`6S5Xi$rFafHdYBOm)>{%bTk#}T%eQ|E?hm5sqYjF+^Xogsp=DtiMDhl>v@L@W# zhsEXxu>~BMDn!3VgFg7r_$g�epaWEglL?0i=qmdKB%@43GVo5`TJh14VJFN4cc= zBF@18yPT_F1OtA9lzIEL8gt*~q-SLo^rZXe?6?w`o|CN@Kwb7CQ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_l_i_c_e_n_s_e.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_l_i_c_e_n_s_e.i new file mode 100644 index 0000000000000000000000000000000000000000..fe3058c4b8a139909e6a08dd2c30213f1500f72a GIT binary patch literal 843 zcmV-R1GM}A0RRC20000000RpE00qMU0000000030|NsC0|Ns9aIf5o0Sd+;B9jRQt zf#Az`{EM>y00000000000001ZoTXC1ZsRr(z4I#ud)gF&+wHME(GqPBAd4zV#r08< z=!AeJ1|ppxf8QbFY`krO9(u7U4(H8#Z(ix2-xl}y6yfV|2fzOE?Hg>pe>_{jc~}8I zpCOk6EH>EX#f~e+lpS4&i+i|4=V$2W5iY@kn<4niGT40c;O2gLgOgvTP{6B;PvDpQ z?=O)}esm`{^a-GVezEXum&wIwM|fWRiyP?>pZZ8YmO##D|LW#P82miC)D%(^n{51z zF#z}pek2vZpFY?OezY)MLL?2bCzc7afABAA#|3iXZg^hl=Om>d_$8LTm+dWklnEGfJ*Pp|u z#d$AOWVh6>dK&9;TSA@t$tE(l;h6nrE&J_aATjehj$Z-|e1iv@!a=+}*m2`FWIRJh$4*vYyQN&{~yx^0ZYb!Vi~>T4Lvim$V30x266*?p~@Y7@-^0Ij(Oe& zO_OGAq+%Ret_+r4%@wqrYNZyCWL2okn&VznE1FIdLEMYRfZp-C{!t~9heoJG{Z=BZ z1=PsbwMc`q$O@GxO;YoDD#8=P&Rk8-UGQp967aC*<9Hqsgw~R)iHr453=_K9Cm{4Rq``C#ghe^94pQ3Gnz*R z8uqCX8nLZ$E1FWIs!S*c)Z&g-g*rXJJeHPEGrKG~t%z8$e7p&4krxTL0bbo>qJ4c# VtJipqNw%!qUF}}6zW}(B&1fKDkXrx% literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..5b877b3897f52bfbadc776539817545444f5c549 GIT binary patch literal 506 zcmZQzWME`~06!qr17$P(hXV17*?P@E`A8Oo{q=Itw= zl&6h?OS+ubLe+q&iaE&%2??nQ2`?BQ&78Bd^X5vfUFW!7{`~pUa^%n9<0|VnysO1Vkni1r{ZnybsD^f0ZWJs}W{(EL^$*06%ZKxVB z1$W?#;|C7xXfU>oS2SL~L&Z?tUD48BHB{f$-riO{RNvA*e7}SIp^Ly^yyAQQy6?G@ zK4-NXxtNabIB|_f*vJ2@x2~7YN&QEULM|43=P%&-c;SlwsWXR{`XD*oBGgel&D>)y cFl@ymjE;8Il=H4w?$zaG_?Ly@ruAe805*ZUHvj+t literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_n_o_t_e_s.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_n_o_t_e_s.i new file mode 100644 index 0000000000000000000000000000000000000000..101a629761e9c6856a21ddba727ef9bdfd125f15 GIT binary patch literal 279 zcmZQzWME`~fa?qlj3=OMhW}8oUGcDpYvZD8s@vZ8^gk#S+PR|oD@+ZDu9&lS!a={o z20U%=E4wnR)zf@p%G{i8G4kE!c3FA5&9pRix9H8wo7V*tx^%4m`|`j2Z%fZ5oI7s_ zf108s=d;>MhCwOxh4i9j&hnbh5|bRh_8!*Xn91H_YV=L8cJ)rJ^kQbYnA%OqcV36*J(?b-c|Fj`z{(G{CvTGp`Sbczb?G3 zSa4#+iM)@6M$cq+NPI5x-+27;?bWem+ZJi8etqeYi+B6k8Q1RZK6FPnnEzCAePg7} QKL-1}_`fU*D;H-10F5|+x&QzG literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_r_e_a_d_m_e.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_r_e_a_d_m_e.i new file mode 100644 index 0000000000000000000000000000000000000000..b569947bae29ac71e6f19b7c63bc69a1d8527fe3 GIT binary patch literal 281 zcmZQzWME`~fSU{qjJ;4c!+$8)c*9paH`vd4+taq@HCmICF9cZcfT;n|6?0-I9LzhS zz~l11=4j1 zm+f?(pZ7Y6S#;I9$@`@~OLDsInk{s&ICOT%vbOmrid$AY+ita$WLD^Cak;iO=dkmX zs^+a-sy12=?rG>ApC`@dUL6%O>$r}k_r=qfS)(tX`cnRg|D&Aye!cabw={G5r7z`~ z#!oac+9kB3-HtmY_s`yuN)mF5BoA1oucXKyY#6_HReqy9F#i63IIeU2} RyGQws^R=e`uN-Vv0|4lFedPcE literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_t_o_d_o.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/_t_o_d_o.i new file mode 100644 index 0000000000000000000000000000000000000000..acfb0383519b6f3a6e9c9edb73d48c310f27663b GIT binary patch literal 340 zcmZQzWME`~fXP5=CzQ?b9|{g~evqGeRCh^S!3pbEAE!Q9Joow@m>LjWF~_y{G~Xcw z0oU&}N0(^N_SooY`s!G|;+JizT+Rs}K7J32-LdDn%JVE=*G>JK=i9h_3gpUtGS%U1 zzj^d53wG@*SFXyni8{or?#K}IOiz~SKe40Q#%gwur_S8R32njkcivVno^nmZqB%$O znz7O*(F-Tm)yO9CzFr;uV4Vv0p{I|t9H!jQ`Oj&S>tQbPm5t5W#slm;kY^Ye9D&#Y zh(TUt24b+c1UP;brmEUa_^og=n^L3MRGE?(P^fQZ#OH+&Wxd6U9e@XxV literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..340882c5d23d51e01aa9d39b97b53969351a21ba GIT binary patch literal 6337 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 ZP97m71M=R`hIUmt`5b}r;Bv`$^FOfN%5MMw literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.1/adexchangebuyer-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..50c9b46ed133aa1efa52428177d6141c36308dd6 GIT binary patch literal 7448 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 Ko%<93@qYoeDZ{(~ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.2/adexchangebuyer-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1.2/adexchangebuyer-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..70e2d988f5eef431a77619f1612e8dad23c1f592 GIT binary patch literal 10888 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..a1372aca8f87c97454dad4af718b07cf72ca6264 GIT binary patch literal 227 zcmZQzWME`~fW<)SAC%4e9|~5sld>Mn2qoA^pq}>&W>P7)S5aa z^@x7+!|J&hDDccZva9rK+b^-7F%w-w&dyp9DpvSK&U(SF?IO0Ob6Lw% z^)LUBn(;CH-UIeyCYr)ikJXEn@|IuDXfKeGH~4US(vqUhcRQ8-b!jxsX6yJ{o4?Cp JUKvxU5de%JT?qgH literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..9b476896aab9f5ffe53a4ccd10c8febf3f799f05 GIT binary patch literal 8284 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

v9XaVL_gl(Z{&& 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 VScSpx9WWn-#^?fxPhDi=e*lsQCPe@M literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangebuyer/v1/adexchangebuyer-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..606f7fc246acac599e70c69cfba527ba6e09baa0 GIT binary patch literal 16947 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 U>%>xqz*e^=zFMba5Mk^80b>8SZvX%Q literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..53d757e715f932f623a3e953a50353a07846ea78 GIT binary patch literal 6438 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 Tx&DfSLyha&K!{*`ZOZpwipu+` literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1.1/adexchangeseller-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..d61140e5814361edd50c4b182ea18320775c9394 GIT binary patch literal 9231 zcmXYXQ*b4K(sY~?+Z)?6HRZ}%D z4F(Pd4)#Bg=z)PFjsAZPrv3eYfP_~pvAka|aVz^HTvZpY-5Bql^nafJk!Q};Pb-fN zp5*)k!=NQ1M&3q&Ep{OB=8VI#9lg~RU&D&~KSPJ)lS1)TiwH7K3iFYa>3|(NJ*Z!x z`91pa30W~P1~n{rx4qpbF5ai%{7!lqfqZ`=L!UV;c`MxcP`Q*BDv*^-=WS*g?U+fj zzG~x1O5txQ1+R&&gE=EpAA&CtILZ}mE_siZRzGji0Z*9}S4XT7O;WRnmivU(>cG9q85H5AgEMvcNI_ad9Iv9pqpty1TjM zIoIAc@q0ap80q#TOey?k7O)LpRCTqpz+(a}jZTfYc|FHgb7c}43kWr$RMgxQF5B`d`gzg!$A(&}G*CqbMQB!+Y7a`4qDy!v>{mw1p z5YHx9h*wDI5taoNHd$jWrfZ}6;M5t}Z8QLB(tKv8+bvn@T8C#kF2?#Zo5R6S z-g&$tNHtVHg3PFJk2mqh=)2wO8rWG2GDRRE&|j>-!nB#DYTbtf^rvCFK@lwzZj0eTp9@gj2e2z z5Q1Y=!TKCH3B)vFor9Ncon?P}9V@Y0>rD#r+z4bL|>(za;( z(6c=COkwW+bJ>v1U*JpU*&%CF%EuOm7Xl}rA$N>`IPy528mcN8wPIZ_vzb$Wd64=& zz2%g=lrcH1+~(F7;*xbICEeD$>TWkGbD8nPP-?RVo9Em2=^j zB$=~-t&zp1cCU6;vq>@PzEx{R_$tX2i8?bq&R8zlhP{>;(#A81{vl3SWu`BzY+fGi z->QPUM@E0*Tc!+f<}COtvGnLU_cK<+UfXhqyj+q)H^sudZf;aG^T#oIqCe$y$ zefSH&vGHYDc;xonk3Iwh1A6y*0HlSqP!$Yl5Csqbvf#+?VMKsWAM(&Q=S`w8YsUwa z_>cmtVg10DTftPcJPjHqo|1EZgd`JH$W!v|90!3o|KW;FwmzhbCywBl>5^ykD?tep zl@Im%Y@Kh6-k=kW&y$#OQh2s*NF~NwkWw7t@ostYE(t5zn|Ji-Yb67NTV4^*Fj(d#kJhuWmO5o2 zSg}_#Pbx1i>nx1MBMB~%`Dg%U8tY`eq7kiQJ-*Iz4_2|4XMm4x(Mx2*(i@po5OL`{eUb;+lj=*v& z8Y$o%s?|H3*GS3tpN{XM_r?w=ViA8f&E%h(oM7S4G{&3R3v!fa70=M8zP&uxIp__{ z8A4PE9?steP1-^ky%P9-P4**#6s^)%s4y*TqLa6>WT5yE=i_kt1uX7hLonfU=py(Cv7#*meM0U)V)(gv-e`+5Oh)iZt5`~W4IOeG5@einGQLR*y8h- zE7#QaU&HEwm#o|}JQ(An$>oT+fb=7ASb1(2*^NJ>Ao5-z2UTy98(0bhd1EOTLG1vx zLvatp-o+3&uDmdV;1tvS8nK`M4l!ZPlo2Rb7biuW9@D(m5G`1~dqzQ~xXZg_C3;^4 zWQF{l?|XG53`xYXU9n}=G#yWEG%>AXHL! z>;1qhNrrH~v=d{wv3OYCO4^df?07RK+4LLpA7sfS&uHwA_WCe_&$mQg|Larcu2Fu8 z$9*li#J*14Q#7)vL4WeY&~rLEeQrfWWV@iIqe$;~!1FS!Pbdi~wgJO{x0eI{-8=~M z5xEPYF*(qCRk`O9t)7GVZ%%7n{M+G5S4wMfYu)>gaZtwI80upTB%zrn#+1)ks^!D}_@b*FGi8F|M zdY+b$ba>?-5hCs)#J(8)nj5=C6X7TB{z;Jgxl9fA-a0Tx+b`t*jPdd2<=Jn1Ntl3( z{fkj_qXaXo%NIfmUPaTS^IsUe=|MLe((tSmO`ZjnYrfwqKGIg5F}A*%KAm{%pvvMdm8K(6rRY}-|)>yT!DkYs6G=beL)x-Sfu zN*Ds%MLJ~^VSs=2CM%gakXDGnC#4wHB2J?)ox{z6WK8UfW6XBGEVvx!55k>g#h z$ZcxT?5!>Au8ctVWuR*USz^HKM$io5PmqPo<6j824-tmD= zoik|uM2MeHQ0PZD-v!X{y#Of83*4bDUJ(+#{WI6sx2M#EhEkMOPgpJ0^mTT6d3hT5 zn~{h@>2_52&SQr#FD@SK4UL<)+`J8Ej6*6hb4=llX_kPQ;-qFSS#+1>4CD&{`ltIK z>`Tjt;v4k_zHGu6NBXA`mn_V7sA`iSh1!ibSH5}Ov!Df4u&isTFN89V{NtJ(dPbuI zA-9XCbcrm^a+#nihm%`tIS&>*H6Egugi9Y0n-?3WQhLzehf@`0q<f&{3bwh zj0BRD!g1G(+ehM^S9r(cFhv!nfTx6NBYs{5&&|@u*uGe~!>V(1#HA=+Pczp;BXZg7 zpYOmJ8#@}S<2bG6Q?|uCC|E2wjo+c?U7NNe)>G|XRZIB;VBFZ-*p| zdRe1M18x;i+{EP1ZqsbpLEGID^>EqmBeaFajzcDb@xf6VR3GlB%$FrTgnIfR=>6-N z&>017Jit>++@wTy_~8S#wrpcX{Cc8#dA2}Y+YZdqQs1h0YKC;ymF>VfpC|0YA;OP} zTBr5ZR8>#}(Al^LtRb)d>T?3!70wC*h~-j&3ku>qMh~md>BcPsHHPx19Whz(Jvw-u z+97KbIP|H3svfXogX{=0Tx_iHNLbL@oD9u~2UD8BeC3tI2873RCDa~B<7(L)pH$NX zW7g13(Raqp*aDs<*SM~<;m{9ip|%=#FN^ERCl$= zBHJxchNO}!iNfB=A~NCghfCHDLZIrL1J4q630$Vc`s9}Ytbr_}e!sE9Zy8rshHWrf zkf<%OZBWz@(4B82umStf=xM=Av$<%gElMcVw>3ug0uyCG#E}jX22qLxxZr64DwtR| zL>1ci^?HTca+)XBMUFA_A{=uA5<A=pSR$me03w~EqxiGQ&#IciW_dFAL z$U#O}l#o7;p+j_L#Hv-#K*m+sOwoo>mMaa5rF0!u7>SdWA}IS%u#vDtd)B89SW)gqb`?GDFEVY24DlXSAf0Akd1A8?dNhy1j)R`P-#gRA_HYruiaLhHaPiF9tDAU&6D6SEm{Y?q0 zquE%9(oChrklkuiE|%>oWVR%fW>ltrWniDaIE;$i^nb}Dr*_~(^nBZcBLl`yG`A^< zIz^o(P11idn;4=lHWVk3r>oWsA}{DsEKbg77nzoLQaL{RvK>>U-WnV$tHMSg zdLMG_JDZ5bw9rGF|9zCV8?@RZtwNhqESE-XfIUUVLAZ86BXNTFpmzX^l@9FwOZ5^) zx&p<8bj{q}miD=<44==&#!c>y^}+wfmk@|%fI*(Aq^|Fm1?Zjb0m#int^57wkUTDiBf z&6#KO<4+tZsVi)Sg<&qA4v2p1qm0I>i}BWWYW1|^(H6rR0pRTylX*(XQMXl`F$yrV zFlCmCw=m&>P8DOFWNU;iye~c|lIM8mX%MX19_>IMo$pyxZKlP8I>MYEy=e81g3o)`l>3(1LpMaE@b(gua?g@>Qv=`AG9ixRX^_s@ei})UUJp7{ zU37coCx55+ap+0W+7bx?^RGE?40p`QLBkN%dJ2eYkROs(15{^|v4LiY$1HDUfI z6@TR^xWDV5@VwdC0rS-BA2|JBzO=#{hM13r>H*9i(kBjtcgcXka8DrWRU>5L_i2iY zSfqYrA2MU(*z8p&Q69LFZ_kWYuP%zwFw)=>=kh17eiy#dJgada%r}4W*cJ<+kLvnT zc=ZbP4&*})Wp5j~1%Og&j$5(Rsk>X&sbfw$qswZ{(wg1}v)@cp~Yjl^|XxK;y3Tb<4hb!FmJ3C$|7eI*ERnkTL#}(Wh zKwZ?TPZ|y5d!bQMJ6OuSOR1E|c^#QMJ7}&)HCX`D21hQo!?(Ofn#;>6TF$&zXw+r= zFCj>@B3T`rzH&Ldk~Kvi0G>h~E5A4NTog`oM*K>s{M7KG17GLs)K!FobCzML+y~HW z*8*42XW1g%k-vr-yz!JssQXGlc2;0Hb*{n*&g&OowJ|@1Z!Wm3P>$dN-$BRoR)19g zc&ki8bo7vM4YsEAgGyoiPM?*HyHo(@>2Vx43wVDod_(B0-nyrN`SXc_-yKw#hSPyK zTQ??O!yp){lF=}A#Q>~KgTXSstPg+_nV)8nxv3aV)ybH7z^$(JZ;caS=gxOm=ZCD^ zke=-G$yaQv3e7{Gc^tNt@g!Adk9MW1)Q@;CQ$m%qzz9vMOSk$Fs7;~g;R9YhLn!c& z(gzNS37g&55_MsP>+VAFLZ?Yv3^N-2%r{RAm+kPXWfXFJuI@zYf$K3!q#Kx8djT^+ zTr9MD=xP~tur5inX*?uPTWOe-c`Qg*zxMEp|Bx+;nk+-yA=oqBzP?l%4^PcWQ}|4Q z(V;cIotHVW^}J#dgWjFdkJW3~y>uHFcZDF6G{4P82{VDX0lDTcvZ&4MN*(j1``0Io zjJ@{<8xM|c9KXV>mmk()+H0aSNBT8Stv>%$b4v0jAg7~6!kV;hnxm^3IonvbQh;OX zn!(;xE+F>Zdlk-J`~4o}sC!e0rHQo)T0!gmGk-Thoj|N{xiTr9DEpMYQ&!c>JA0*M zBS+?Wsa{f+MM9oo4t4?4&vCVA6SaB&?1w_VinaVtLtdf${F{jc90Fb{1C2D3c^A20 zPMzc^;)HOB{ZW2SS%Ii2QB}U-*j5MPJZ`$fE4FN4_0AmCyaHFYU(xJhCvJ%IRMPT< zZh7Hd?Jb$rYi|`4d^qM!+m{C=HDr}0O3plv3)%GR>fo^=x0#NHwg-nk&% zL&=~7Rvz<0t-ZD%)ugx`XhBFQtoejIbo?;?Y^HwE5PWSjz{wmUF1plu!PX@$C(E2dLRKD-rFcSCf^Mvg(FY_H!rYHZ%+(rmMHS$5`+ieNX;2_UCcQbgydRop<|M zvir){``v_WcnLacDD~ZVVVqEav0>8NC^+7Rz-@V!U(0_-G=xW1rF^^hRBGi%(o1J@Prn&Ao%;u2KZj}4x>$z(vqU{2g_?KgWTD*xb7 zWlf@r=e`>)!2Q85B(920r+N4#+h!&?e{J#H&Q|}xvp^I}MTbM0DxPDH%^531AHH`h zUW|RRIj&h>nf1kpAcL0}3}HX{Mn!7<^W+3xYeETquga@p(>q{>Jc_yb;jYEXBv0?K z-5|9i|L=0nSORTZ?!d+`O;bG5nu(u2mlN)HsY348+<#|cL?D<_ibhu zG;LWzPd`HT;9a&@vP@meG0wPFQgXO#FPf9MbyzNrRVw8Qm;pL!6vVbof+9vJAuTp z5-fLW@3C7*7xx~|AFAWEq6cF#^Mn$bp1jsG;Nf9XcW!G0L~8Lbd-S+*+9kE~v!c`? z#XtMfYXcJ{rH8=L{JVG2hQ&TCwSSqpQQ&~IZo4D}(QPb$lhF}VFd1KJ5%XysyU-shkYkbdvvG`8O$Zvh->P?bn8A-UcPVDuPtIZnKxtZdIAr>Tl5UnSgd3|MjsR)!MnM7TCsC6-H^H%hi_U|^c=_dH@&)7yFc+6dr zogClryjsspU-hLnxIR2_S)Xti|9HZQ(Vp?Q3L%AujxD^bMGfs z4eDi10=j5=3{tU88P z+ZJDtSaf`Ju(cxOYlqVIuPNmJauW`{Tfg9c8q+c)3}M;-tkPHYM#E`WYrsN`lvN|Z zhaP*hw80w8DA}SC_GNq(ybSs%a!Xq!$#FI%Nn~t>;$nqnH{#SPLaHYbVuvINx3Br^ zal6_vLuS@|Bv`M~yOD+a98MDyvnK(N5i6a+? z%3u5e5S&CIE_%B!^kArf4Q*LUmMg@sAkM#$e)5cK%3 zmuqe-&hkw|K3mE?kvMoF1GiK-L`)RJ&dOtN zw+iUYl;3{d4^NVxISddGb!L2~1y70rq??9lf2glP(TTPmIoqxvx0!1xphR%FPVY$6 z#d>v!6}475gz$GA7U#r?{x?1tGVgL!9LJSszHsK!jXS9likMF!Q?wxsR5^%;v!71 zWm1FX@f65~KD6F;QnA0lX!nG0Iw-HCH1IVcNpauZNqE(K?SJtn^oWXN7O|r|q-+)j z$q54p@pF6luXYKAF8xW`-~Yz5Qa)!bv6LOF0I$q%K(w{EwJ}2ok?Uo1ORnOQZ>ZeRkAn!y@fqS0e zHc@sXx|9Kzl(9}}Z?nPi_83qd0Xw_}7Gn7~yr!`u9d#=1E9%It@jIg#OcxEbb$I!S z3opf^mK<=!fXxVe`zrTdmu*1}O#%ZLIG%78`QtoFUi_`j@-m>LET12yg|iK3{(s9r(DuQpGpgyn+ZGlMPzmzXo7`f83FG zg6_Hk_}kxC-|x!5Pz=A9b+23eu|72#>KWM58wU1+=eD*!O`m(bLnvjXifvrC!0&_S z*Z`O@X+k`~N9HrdK5ZUFd>jT-SrI)L7(>49>GBGEqmyJC+ zsfSV7RoW7X{Bx#g$~h=(TTGcGll`YIMnKDdL)fF3!h>?l#o`}f+os{acis}$e5rq~ z?=gk+#J&l@usEA4;G9|4!K)XA72`_DIoDE!5cNPVnCjgoUZ&ae9`Ew$1BfS#Aij zY5u9SjW+_+XW|T2Qhf&tZR4C0gctJ2^y7NViI|XVKN)x7XFvaiCUoZ8_mKc315??@ z#p{0dW}j+j1SQFAds`m0G{}HcZ=T4Hh<0x;z`dI5r^m z0=X)PR5@58;0){wlt6O$jA;U^IBSR(x1oX~T&EAGBE-@nHU)OTek-$j4C(Z2-GYOHOl(q4?Y zI#w?PTtNNL@qf)Trz>^F216KgBwtE*J_M&PhGc+2nAKS{OoLrxn;w~7eXmDDK!QZ&5oKr^-`{)yeW}RV&=H4k z&z=*0TRWR(_sX&PwenSq*ZNq6UjHr#$$6t7F7raisTn#L=_z}xN4#9R1NZ3L3kR@keNkT<6lxRx!g>D* zD;3f<%UI$?Wrw+!OVnYajL$b>B8i`pvD__h9ym6VRLt1|Yw6UA;9LnsH&;LJ;`9xE z2-_9LY`3mm@e$U=7ZMeIAN76e>ZwX_HfL?@i?nyMOxktwZ6qXlIYCju%)23i^uZtT zgJeS>A;&b^Q*&4qe5&Sbk{Q41;Xt<}&N0Q#rkfeGi}?G~NbxBGpcIU6H=;*GUK?6p zp(#sfH5;a|G-{2S;iA{;F#{JqE3Wx<%O+qUN7~!@IhNt6Me^ppn#KHCnhp~G%(7GO zCA_YK+j-WhntQDesj2zg<2!XAvE|do;|heeOFS%dzFJR~XPUx--In ei>YmbyV0HCIq|%G{8c)c<%lSV`0zcX>i+>4ZtMF1 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1/adexchangeseller-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adexchangeseller/v1/adexchangeseller-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..ae3c903102e982d1bfc064f87a8056e070cad9e6 GIT binary patch literal 7398 zcmb7}1yq~cvVemHZLv~ZODGf#?(V?}4#nLeIK`oqBE>1v;slBncXtbgQi?;NSc|ks zaUO7c?mg?>bKgC0ul3JNCbRN?^Uu!gtO)=KfCRW(c$)x#J=Q;LfWY8Fd1vkz`nk{X5?qVDMb29s0cq+f&i9Xk61N(w5;g4&s0^GQ z$8eISg|ToyCfY zwHfT$ChyFjwVojK&+&fX*);x=$@fJoL)KFDO6Xlw5sdq$uPd4Qi zvKz4MMApWgXsS5x2Z0RCqHumOxX(C&xxT`?)VK*u86G= z2!zv_{_<;HfZ#<~32AJ_9w=AdNbJQfR=SZJdqJa>+1Js8r)SUg9ub+m$D&VwCj*DB zFnJsFZ3vST_xClJ-&w%Uq3WD5J(*7~l)nbmyg> zpcu-tjk?dFU;8I}!1l$hLREI86AWE>9)&VOv)i)3`^vdY>ff`rg~BSfREV)F865>K z>2M`1$XxC@n|I(kT;z{>4e2cpYfGYtSy44m#bdAk*uoM_ct`rnss~RBcP)pwM>I4L z6O{e9*H$gzJ6YXgr55uW02Cv7E1p=rlol9>zZ)9H?*bacdK;>Ffmv!l5Y(PJUTzRA z?V1$)n$3q?F3QtG?j@~=+t6a4A;;Su(;(e26jq{5d09U&-pr0j*ipNwX{e0s1KE~O ztp==h9GZ5GPgzh|bRSuTZV`tt)d~jt45_%|%Pg0g9$geE_0lC3i^iPL5HO5`YL}6z zINfMTo;_mrS9pF$aBNH%hT z4if={Kh4&sZHvS%M-7)ZFQkVm29SnO0$fYN7eK`C>D(Un2CH_-<9C38lx>0X00in0 zUY@T7Y9gkiJHJf>jlUur9UdhS%X|9v;4dSa+61I;@V3v9M<3>(Ma#HF#_4bYHOW7Q zD&*6}FQ*EJea5^9na_!VtZDjTqOFF=RO5whAPv(9t)X#?Y$%p*%t!EVjegE73~JrL zMINI-;r3BFYsfG#g$3{0Q-^c}A)$?B;Q%j)7j1GPiiM{1V0z;12$D#Nv?GnT-o63I zV!7eSTF9?DhkmJ`i`*-fCB$s+Z8TI)DiXvMhy^|NEr)R&cc7A@3ZCOQ@HWRh=aVrlmM;4^}t&XVtzg zk@LX5R6e0Z|m2VCt$n9SCzFo&>}81aHc|&NZqU_VcrI2 zS~D$OnPxx-j0~KM2orUS?>V?EgPnB4fLDpF`ICBwk2Oj<{2%=1c#R2U!?7(c!fn(y3b_B zb0ke)z+5*MgFJv^0}PxgMNYtHq014n%6^q4jh#+?9p*w=;ewfJZq1g}Q=w3h4M{CrKN{b?Oj z7q34P>i422fA0squ;|Gpm^4DP@Xfy3DEtSP5RMxg9{Jihi4@1^r(6sAY=9DhAuqkC z(QE&?xU>&fSpFWesl3mQ9vJ6#O3jk_2!l|0KV*a@x;S%CU3seYqF6+5MFrz9C=^SZ zI_c%7Q!D#;&qsTb)H1XK^@oB#3SZiFGY;7@OK=~QHe=`L>o{gFmvMr05Ai0$?cU@LqvHxfvYAA8CY*S7Eq0MSszA6#iM{~IpOQ~ds9Oq zZQCo;YlQIuXbh5MsLae6P(e^a#*bG@;+b_8a}2xm+Di@2J+d)jTxiMw@3kltS%J{Mta`(OaQluJaf)ol4v} zClB`59jU|QTK7C1zI?YzonVkRBm;DG5LNCIEUC(8eUMlR zLP&NK7IbW|zWBi7V=GT3%RYVfl~~b|6*V`}H_I!?$oUElE)do~VtA^ba-SyvxtoPr z6@Y*56$gO8dWH!}`8~E#2u&065b?W$~{V|Hu=CTvy)u{HSbpLC+6ERuC26h z449q6Rtue}+L0dex(zUDztp8INm||n7)f=X=|(t`s%70>L569(b*A-#4k&w-HiR>u3uq3v726kLxE$3r;>$#CR$ zec%BXZJH?qvJAGeS6ZQ~L`1adwsXmQopcHB3r5ZSa>p=JWm;@{?L?UcL;ZUylw#&n zQcgc;dnM5SjA!%l!}OXfqkKJ>N2(!&Qde2V#WsZOWthJKlgsBtx;@OY07!j;eRzh{&O13cC=}nJJ_tW{RHB zZKsE)u|9dc6s}O?#;t-d-=@H`D5lo6r!W zG&AQ-d4A@!LGMd~v#rcFA)b&j7Qvi+v()u%++q(A`C?Ma#hz?nLccY009O7NMr$51cB-B@4pvif}LoQWNr9gb; z6S}v!{L#p4EqfB`IEb%fK0~vnuqfBLSwxrqO%%H&iKw><$JD;SmHly&3TFe>{_)Sp z#P93{xBDBr`9aoA7BT*VnbjR*wXq+sUu70hoV`8s#1QQ{pxuYJ=80GjeL6jh!0tz7 z45VS2UM3oY=rkMjtyy`dP=RGDz!jQDTJ`fjV4az+MV;Ue-ZQzgST)=bw)g=jO_f?W z)anbL`8$)0VsE*wX=16T+K~+{4-S^KxUefku&20zB+W+DNKfwlvNG+Y0KVhX@YAuW z4ssQGSn8g6C_Ux*eL5n`6prwPwiB^u?y(cCi}INjcr{Po_6xhk zD&LM4b}#ZF!a+B)LdEliRhED8dS}0>x0;Q)r;OBic zfc7h5Jd5St~a}os=+Zk`I$2T?{ z)tG*TwqHW2ara8JOTOBWC-?Hg0%|p)5 zKYDw$)E^5(HE#>o%EY8DMc8Z4zvwz`j4B!P|F(Zd&nJMC9Ls3c&?WL}x?HV#$spg9 z4OIKs>qm2NTjQ*;u$av-kgj(qD0jZ^ z`xyq&Z%nP`6#zgkFDVxb|`swfjqrW^-&V>K8@936%JYp*?1 zDf^(l!la{~{qo)E_Eab?Zgcb70N-)8sW(5xEtj(FK^4}%aCLrp=KBYIfn`H`V$aTg zYz0ys))n}DCvYe{i@$ma>=}0vgBNw+Scq#KXT9seJ$nA*FzE29E!lc4l))sn0)gmI zJo%VOt>o6ryX#`@{5fIx$)HZ(K65TG7Eo5FO?5TiCd^H&!K-oTDr|km`LZ=eEqR}t zbCGqX6y}6dqaW!<87(-?vcFr~Sb+kO+E#(ODwA+#4v@7r&hUQSOR&dF9IH2}9`t@9 zVzukOiSk-Vh481vtgl5RgA?Y8&&z`xz@YYveH~ctWC2l|cd>FBmT8q-S*gmFM&!A9E*{zE@{T9vkSbv^&YCEf8Sn}Iw z&qr1F>6$BF=Wh338EtDiD*`t&50Mku`j2g6smmL^b0@hQ}-oE#z#du@8++6ZBbe1qvYdS$1 zIzu{BE;&gLT@NTsOHW5YQX8zPU~8$xqhzbZ=fy6mqUa$B^U#-ta&x+<>zL_r*tyH{ z!IYJ3oDJ#dSZ-!Dx1$>*(i=faL+57cY3pw5>~#CNoE%_IFb5~+T@V0(Z+a5~K#BnX z+@@}=nD#+qb5J+J6mR{Zb(gEjU{?X0`5^G~7y3h}(l$-m_ z>pZ^}FV9pB!p6xY2hfherlLFw_=$pgdv6U-k`r=2c|tN;t-Qf-4A(7>lIP@Ap0h&B zS#IKS{-bKihM!s9W`viQ9L0VMvzWvvFfn|B0s#`n9kH6aK2Fa-FxjzHFs>>y+bJn_ zg#iP|c?}D|48l)-CSnohxTn5A5G2;^HRm!8o02FpY!r^d?J*TLj0EhGiaUY68G;On zsMU_^$_8L?+PKK@(PP2%UP&cN6t7|_<%s9P`}?uM%!x>!vqeFxi|U?Zlb|^DP@&^} z;+VH%Dyk1n9)Rj=Q9FnhR!Hk#!^ggmAA}`mH6MLbSjE4`!6J-=P~cby08k~G=sN*e zIa=e2RE*lIFBA6yN&3h9raK%7Cd%3X&I%l5M8O(Wi=nd2zy%hIk`D+iW1w~-k^L|* z#6rO9Y4ES!>v2(lo^4ytZA}Pv?<#Y%3;$V6u^SKaZ82-&&8w!>2Yg&#G-)+Brc$P~ zCS%-1|4aPkE@bu8wTH<_fw?p!rFdM8z3jbZ+}(ZM>>$eA?8@dc7FOz!7`l5DL2| z$^T-$v;GoXfJatQ)kDWpK;1&s!A{u|CZne;;Rf~eQc+;HS9cPyQImwqIG9f0 z%WBz4g1y|86z%^GI5!8^AK=S(0KGR)eD*h#)Qv{H1sArTL~{|qP-1(=QG*`*dSrz} z{pfeho$}749BIBE!a)+Tvb{-J8Lx8RthYNT0~qrdm5|U}QWE2$*d`~RHQbwdv2<$X zyznu*q)jAV$*3nUFj=Fe#x=UN_ZW|tZ=cO);7zc0hF>Lt&cd5t`4$Hr2P!Sg#h22K zP3GS+Wm=nHqA_5qdwAQg4H2ByGrB=+7M<^my#!sY6C1x>sf%%*lRTK=-_X;PEYPrA zD~3N6yHqPlfk?WIcX;2EjAhzL>f~PqDY&CIeUI0E5Q*9+&X1f=S9poWJKmiI04UvPwA+X998TE2gv&@r6~)2}OD9Mm<(lpO9doC=GtEs*#!XC27y)Lu zXaye=dSD=Cv;q=P=y&OQZn4m)no>ARzsYnI=fdH5OYVMjQiA^_eOz{KM`TOT1!tfa zHUi$VuaTH(G5O`oGGihM2t>&S1j=T+Mkk0%YDg3_*0NOdbBWybmtUA(j51 zk7323sW!xpfUvp^B9uo^-$4)vRfNJ6WDJ2;5;k-OS}zP)o9}cJcLlr*=bhzWebtcPF z6~VN;aewZsDmO9J%XtdIqKOi3$Wke1>IuO#)}EVDdoFT+2UhCge@pU34(&~nGyyo! zo3_whPJMSo5e?tb{JBbMHy-rc1g@j=Xt^j2E{Yp6&$t)>)hB35#D6P+|D#IJ_FQzV zRRe!Tsu4O@TvWOg&7UN#NiLL@CO!GDReBxF^#7}piU3FWE%3wJQ}pf}{^wTIym^gr znELk;e6qWfkEWPB- zz|z(_3hZDlCw?0TSxq%Chpv~Sw15P+fQ+pMlvR#{`|p7BgL!{1so|!K`W@E;ckt^|GM72^at2){g-^M$~NB48nQYNeF!&%3u2+K=;7+<4tD0U zGXEQV007Cue`C7+8HRJqg!{N~mLh=4*vl^zEgv#to;?3-gqaLfHn0^ zbzEf3RQMLc#AN?%??v8`=p-`M_l88pUnC5*xeJvxdgSV1mtwI@FBxi^^4;ko`=|wV6 zFX)8~=*qV3)CWY$p<-cY7GD@43sb^Td+*7j7U~I8^l`E*wWXrwr$%sHoI~1#&$Ng?PO!yw#|)wH{bp5?W#WAQ+4X8sh+8s z>GJ?U03d+>3~dAe0Gj>Z9KiMYKLfiDWJ^rIL9z51bL|o!8%raVa2^iC8aUdYzA#CflAD(3|!eEvG z1@>#R>6FOcsv2q9fb-W^`~`((!Da2wus^r$6b&Bnc9{ zMu(de+z$kuNyP05qc$cD0iQWRaaLKBD~?RpE9|g)z{202=tCOBE*&18>ppdbtLkzF zCt7kF2ziM`P1c7bI73Y?GHqEn{(-nG$5AB4{|+LFd*k*i(-dTn8$Zmcxqe4?(j}Se z+DPnNjI?0~52L4os14_hG=g+9w#aF;N6wt<1KRivzt+o7RwFxttv^O9>z9)&y#Od) z>dKjGm6bGqEPbz%$ZRJ)1*)J<SGLAgW_RSyltTUqUMONq_%o15mzucXbuh7l^CE64Gs;kS zf4h<%1%kNAu7Hkl7K-ro8*E!N9=7T7!5uelb7mBr*c~kNb3GPwB2(?!#>0TfH#YBF z!g-*rBnwwXC@6cVuPq!lx)#Ay>}6<>muX`m^G<5+{%zb}6O&;roHRhx(5m7{LPbo& z4||?WudJNWoj^rtSVoCMEzPYH+eBFp6$_9n^oFidWduI<_$^K7V5jg|4mIxFA+l?^ z1YS8QeELAL)MY$7l2!i2aF^Fa8uSa3bT)bsz4LHpnE7k>Q+$eNPMrAcA~-l1m_>;F zjF$qm7tWF23IR}dQx7-8K~V|y!)ACP`&T6a!3arF?;aTYw#oZ0M_2fr!^?#6^;Az5 zJy5B2REQKHbZ83JHXw%6%)(MMIsRMVk6l9GfE$ipNi7UaYQ-sk2%?fuYM%$e(rak9 z#v2FKzo6>-hGjNBz@o!439ECkE%6-Fko|^$Ctp*`qS}-kgv*3ly#hQHdm?RFv# zDi)iTC>#OnI;J{G__oqdshxrQUO;4&HrfGvaoi)O!`+FZa|r&JXpBgG_=a)Z*kW8O z*aNiy=+zxj@J0$`XT;ltFBSy;$A}=P|3l6+@P#RlNs#xqvz= zT_8UmX@EW)oPrUnW&ch;bY-uH1n7=1U>7^n5u*r>DWn5P;DjL*Y{_;6K!JfArxkV_ z*>)U1&M%Qj&)5yFATQXyg@3;KmM+L$(@KFhZK`CzH37@nv+IzsBT-Y?V>S$Y6Ow@G zfj01Yq(n*{M&yObVsjWRRt>Gokh7B+H^g+Vk;hTH;VXjWuGFuw8CFS0=MWruSMGstfxi8t`7i%5HQ|mdN z+I~2Di%j6fY#qkO+R^z^bkRSm()^%$(0EZJ$jDQn{wkj3#s?43GO4jqLsvdX%{$jS zwX$g#se;i7tjVK@&-FXN&|` za?4^~>w(3k52OeUtFp>pw3@EnYR0SdfiV@qT#u4+^6|dZG{0_GW&7e>5M*2uL`)6s zUHSSQzTZqvZdT!u67Dl02!0=#*&@iwBDfrz`6~pH6k}YF>e=*zn_u`iB>!UWW~XO_ zWIf$fT~aZ%RP5#ZbSC`3^QwI*eGRAfbvtBnC%}xpS%#n5Y8cd&0x3J42yUk1K9COj zM0Y6kTWDLL;lIq}|wODTUNxXH)_>yP0=h9T% z7*a``y=sBuW;n5mQT-(^&qc*^2pJS_mhw~PqB{e zmm$+eoC-&1E^v(sbjI6~JRB6uLgTvpA)@IX$IAdkaod9BxacGayV8tsrW#tZGNi;x zCKIloI46jYxeaqbXN(ff*_9Nh#Qdk9@sk@@lF3#~4>Zm;0vF?mZN0da!^~%-6icda3kMEaX9{# z#!a;tBOjBg3?26s60s$#c5Ayfa=$JNR|E1$9jfT+J!rf=7pF!(=L!5gXg3{Jn|IT zXyfz*koYS1;G?1JXT#SljFxYoN-3bvJW3Dc1&U&X~lyjt<_Z0aQ1vY^PZD1Rh*4H;r)3Ex`a&wx}B%;2G7i%il!8y;;%%N~Gz*VlXk zMb_76!Gpt_FKJus2T@Q^=S8mIi91keKQ_gg!m6fJj8H?ScO63E@*p5Lb~MGuHx9ir zDT`Hx$r27sZTA>~0pAYb5r{I%elw>}l2IE8k2rS^zL!qsv&5g7R^`R^C)7i!L#BL& zbnH)f1TBSi4Ag^nH zokThXUbZzovEAPp5}n~@KoAKQ!i0(56z?@kziT>Xy+Da&kj7>@>uF8WL?hI+{$j#o zk=ny11eyGFL&DSw2}zPRYIM>NIiYA2X^CtlXN+xrDIHyHD*Um_u!w)kjaB~_$%c;6 z#5WouZHT12j~0msH-omlDi)R-!}eo%Zh&v$D66LZY?|rEOaIP637`I`2R!9IseD7& z5YKtvUvbo6<{XFQB=<}KeUULY1y!z9L)`V+0EX8!A~3g%`8p`{>##l>_ipi;dql2ukxVNsdK-n_3 zjy%c5|BwWrt7e(eZL9|?{=N!o41bb&oI=R{eUfHA1@R_!f;|k?jrJPS;j5_`Qsyq) zOU3m)jpb^umKP2{f7YP`f!08r5xU{p2z(evwS=){&ArwoX zUMCbDcSsaG;XK2^Ev^Rad|bE$hB-bRmR9+3(6i?LYEhT9ghk6MFee>-pg<0OZ|S<3 z_P9v`hD1l8Ic9y_o>^DF^g_N0h0pzL)Y%1g7i={Px32nddG~XrkVw|DbxJ7}OJNV1;4$h@{`_Z=P+*1|MjUyME0z@oaeMhyPp9(3U* z3jnMJE|7XD>;n<6(r~BG5~|hxix-nJd z4Sns8h02U(3pJ$C@mz&FjLF=j-!jM_)KlK_Rfu7nx_R|$rQK{JX7=36XCqc(h|F48 zmJyoL_!^Y{pt*Fq{j_=^B%C-f_be6GS*h3qdM@8-?}l(NNWWGXE@-gtOjN{D{n7L4 zZP}N?Bp_}miYzP2q>RKFPA*zc7ASM&O=Ye&QyuK}C6s9Ik8M0s3ph1|+$y0r7-tRy zfv&7L+Aug`eIk-fw)fi-}$5E`V)3l2!;LTs@#9#5d`lZB;)u!vUB6FdW zUpw*obcONp+(6sd5#M(&S0y<3tg))=)3lTC6I6XIs`&04H(H+d<;RWRWnzZN7UaA? z{?Ti(+tQSMdk;G|jTA@f{1WRN5|`Z$mgFe+khk)iNBdSI6vdG>xeFLpwL~we6$FKm?q&;E&DBg>-d#d{woii%LnA+_}z8M+e4}G$L_^tA?1|cYf&1V>HL~o_Yo5!jOwwLBg4DtI#uk0)etEh2*~#4E{i6UOnP*2g zvQ}!pem4+;VaTMof$)2Zj>R?24zjSNsoRCDX7ak7(Z$%<&7y}HVicK+dPFov;V-UO zagTd)iQt7Y-N6Lb7sKi=|Y8-LW-Bc?YtJ`*$Y{M6xq zQaHifVkP{A`R6kYLvI4&NzP2dCU}p5c|^~-@N`4zIe=#lIm|2U-gBjs36DBIj;`3M z6U@Yosh1>MU=7A3WnW~VOynJU>w*nEw|xn~IPx$+?sK3A*}ECmY(t`VHpo$(h#XsL zQq{xi2D1~nw*cIHbsUHH8BTgwWiYZdKn1$+^(A0juy2F7xkI4d>cd9qY zC#Tyy$z8(|@3vara1jz6NtbyREJhAnx^Gp-?mI;J9_ zPRWZDZExO^kN2C-99GjH6DRRY42^+jxfZT)lu}Y39s*#8l&LfjaRn_CT*ei!jZWJw zHj|atgY1>0<~vNyZmE-~AO-a0AzDx(=xg+B4XN8tu?#|iwxQ&!VUtP;4~E9X;O&)< zInP5ZvK1@Gbf=9;+Qw|9D7O8&?qs}Nv?@-H0g*-w$L^astwOI2ga0%`pTRhDKUm-| zzs%_e&XFt(Wa4JF!2;%)z;Na)NGO}W%E&ZZopBW zZ<~x>ajuJ5r2MF!T6asHL`ZXB9zx5#6hw_si%xQ-jhp3UdagJIqL3Y!&@*-xF+poK z037`VvQqPB$Q2QFx>3UAh$e%_0BLH2@^KNWSwp%VJG|XimBQ#iH3QqXvCt~5R*RlV zhgK*)G{Uduk#FPe^J3!j)$yh&D^KR>Q^auzEpu0tN9)fnHv!pz#EwksxKnK`Fjp{x zN1$)&@Z;lf5}_!p#r7^}DjlNIz@Zt{*XPprWA1|D<5~OtxiEc*Kl8Kq@zJr4P~usY z?`_<2^~`-MJG*bY8Ix(}!t>Mod)Kk|N8RWB1xH7SoXaUyQ&dm{i7q>3+jFV}6FhvV{U|x-F?VVPwV-}YWPM0V^Ygg}b&u|b z)~Tz{B`7dd)&@}V#OXBO?b|u+T8`sZNbrsjTesGU2(a3hJoeg8GrkHhL z-uyjCs!*$%@#>`gtl+h$SJ&y?y{B2I7#jnYI-Q)^M6KQ~mSF#SZ4|uFQg#|N@&I{m zc}<-Rp_jAqKx6#FP?>k{D<)?3qv^0~FT6pG{>`BPZ=wO2_8V@nay@#U6JxGDKg&hf z@Sko0n}x#j8GgAoPE6jLhS2W&!7be@|4rGEPun;~0q=_h#!kPG&%uz-ympOp!6z>r z>ye3SL4jU|dqA--$PQV{^p~3XC4v4kxqm{a!+#k7!1EQqv`~7zdVw^b^3d4G+)4W3 z)&*@I(%%1Z{tF%%CWhO55&r%PxS{Y!Zy4l6?ts6IoLsDPXyIt* zw&-v)k;-WE^L}`^NJG3zxkcZGYa7)Rt5q~g4nYB+eh714Uqr|FLJ$-HAZ+6+`)BF?5J3;Ge{eGq!Yu2nc+lJM>~8cX(^7|fr9JoY~~ulR%?6h?wO z;*cDFH!u(e%E?vIH>lILoOK@r1)2KvSXtAYZO4i~Jr+$9m=+q6)Bd(PmR%Ff+dk)? zFbjep&n!^NyHnIWuA84Q-oQ2Qc0RJ^LGSgPVl}B#9&4-NWv3;c5gxuGYECE17jS9D zb1y7pQCqp-Pvj7R6_24JH{}(Mh9+jT!SoABeL!3!jFQ`NFX?9B8T5tvbiPQZQ+nD5 zdxn#I;uS^!MadE%tp7fj$QS zhR^<2D3N~=^sAz0h=IXQXL?LxRylqq%+tgbQ)2P|D<~14r{~c8h#)C-c&Uq z1gmq2%X*U0vUaQXh}s^Q`jpGxHUxyu8w62FQx!?W;Ki&hB)Lk@T)KqU5a(17-@)I} zI_{=Dx6-lWS@&b}=+@k{VRPswcsqYyaX4%W)GeKPZ=BtKKrI#LBXgNYj?cML59ZGR zD>W18urWXAq|A|T15KIp61*QMQs+Dd#RJ5U_g*u?TpQNTypOgzHh+A=WPCJ{zV%5V z1<}bva1j~Q*Y6%N@0BwddNVI4scPXRv;7T`b4mGoKSM8v`EU-6N*& zV#nCJ5BdqMoOxd{o}S7TYvHvt5_!Iy`JJm-j67c=V48Xf@>j@bMld5|GEK}z4gn)J zBJ^}`u1-(iOLb=k`}LeX2(!yDHPt#{33%UM2T^d3Lj|ETOVFAc(8Raq|76p2Vs zn(3KP{zg5!yNHidKO{NOirvL26f8o(2O3bi{b@;>GeYH=lrA->etdsiaErOR+}C|r zBu;P+^K>V-T5ZVUF|oAWg(LWr(*(DjUmXVTih2T1ko~z3GDjmoAnNXn z6oG?k%S~w=xIoQ$UyN|vuf3*(cXCC%8LGMldj6nQ9#?0w%=(!Ly0qiTVF$TB?zcK3`Lq0EKSQ5PF>MWQ+= zP5(4;1{GyOVyJ`o8(Kd=n5&^FCwa~Ce^d%zu$Lcr29&dXZHyENM0UIX1Tvqq^c5^2l>9GtrL2fc3lwzX{ zr2>`jkgVEHg5SdYQ5EV|+QTyx^?;s~<+dm76 zLx4_M*C17Gc^U1}6b@3Ug8Z-uv3+??SQnR)PX!uDko0?TpElq~q_JtYFU_k^{ib)sBMb1dxMtuhQQQmUUb6Dl*=RI zf_xYRnk5(JIxx6hDst}W2U43TC|z88u=8w-zkx}hNEAN8bI-M8SLvM&Ok{{{*K>Jn zjwC)e; zLCO^CuCH*&Mu%U<3j1-U`$68H&V+oe_{-R_b@RIxND=rZlSO3uOOk9_Z1wt#7fqrF zZlTgZN6?>-U@)5Qqt-0qVdmz;0R3p1^1Hift4z$`eHThXm-gtz9Uzs>?6qNgo>4__ zy7&->DF}iR%Jka?8<+}48(a&Ly@5G@l z^x>NY*XqIZ6rFK=cE7m~ekN2x$zz!~Pqa!PwOEB(7Dt`kVu*BsFXGxHslmu_ zma_Z2=C@GUckpzmrU-$GCr53Hu^vOLbG0Xf?sSeQqFsA3&lVY$-95J3dE57ugf}~i z%qlW%HV0m(<_9&~| zdkdQ=$8dA>*3gL*^8|Bb*<<&h;W@#)cpZN1sm%|d+#;P?jD}H?ZJ3T!CVLYcAlAj> zT2=q_GCRoiMx2VsVT7yv+wdbs<)TmFp{o^<`-qgMFEav5u2L<(VtO#2NCFXCLH5|p!~*-h zCU#)?R#tJTc}U~)+q!B$XI9^bmvAw+prW8f6C|`D@_>}pRIA>3Ce>bQqEoy+p^@N& z1Q#R)&q?YGk@{hKNzp>Ju3Lrj2T3TfIeFN#qP13p{TSPRnq4+Qrzwv6dF<~|lCys3 zz6lCt$h(W zk$Z^&EB)K>t8SPO_{UYpLK5%7J#722kAAyrCwil^j45l94kDu}S}6wtxU0|;b;t4n zBrP}M!uIu(IJyd(MNR%;e-fI79B-q*@K?o;l8f7qr;$q5w`sQMHnU=@}pfa!hWKJ@>vv zc=`EoaPl6FKDdxncyZHJ`mtX2_VzS7rmz;e*k_m-*+9qW&;V(CKxK!L{w$NSf3W)9 z?v>A`A~HQde<)mI<9ZUk9T&ZI5f@-ivwXMRRbgdz-!?+(dFyxl;7C>BClW|BLd08L zDsqtjBF(MqdwrR9mp`8dt8RKV(HZAk?PFcV`zCSm70DXdy~@ z@>n9FqS;2+K|r>4JhFxHU&&p0Gm=}LZ4QG_|!7Qxd z6*SJmS_y$Z^jLUY;Z1sPO?e9ducbyPR zn2!u1+j9Bf0mEcXKFlv2!JU~XN>v#7aU@-cm({nmL_4@Oba~PudFs<0gaIak-H6(= zq~|(N;;tGUmG9N_sJjY|U%#B zRL%h~&buqfO8EQJ`O!h+cWlK9^c2QeJo+~ugfzMn0jWcwR)&V6ryQ{dc6_PKa~5K^ zUz2l2Zii^BHH^_edx4yHX} z)|&Nd0ZQ!xubE}A=Hr-T(pDYMA)v9FJZp&i($5JXhE~_%&wjiw1^~J(U6(h1ukR{53G)f-@sl^7`)#C(UA37#u9H7xI)1alG znH?5loO=(OyC4MXb2WkTd@(2Dhc~J=3Nj3460V|=r<0KbfjPw7xuXh4NsU+p2f5J+ zwX^ZxX>CI9-F!~+H%h?(cG#dJ5eC%6911eg@4iqmnMOYgopZS(gk}pZTTBWw^?_D3 z%(k1t)raTWPXlLR7IZVjO34ewemV|4Q(##7-C3hiqa_^{S_eqQa!-!41(87T=s*O* zt|L_Ehz&eK?{bK(=^T;^(cZ{G3 zp$%ngZ@fcTk%-W>2abWyOcqRwjOQAn$dPCcn;x1uxMi-4kLz>F8s`!%(`agiMu9Z8 z^Q%*S$52U``viCRI~L1b-iKn_lA4)fL~)yvRyD#e zH~!QOJ_=vJMm2qjb+2Z2jjIEK$%pV|>B$q6Ke0*WDe-zjKu6VwU}<^SF85R`e3fJV zR5A+v``#SH>H`<0STy>G?|3=8d!F{D=SPJ+=?UA$B!QvXE(~%#%QMY&R0SIYQq99s zC7k7^hfIIklpW}Jwc_nFNB^gHmIkiq_-L=|Hmz1%0=U=9QpND~3RCl`TrRsg&&Gap z;RaW{9?793<2Ua8VLal8&)*zB!ZdFeFmsRb*bO|z@e1ZTTp~lcemzBFy)AjLiS^HB z2|(G#-`p#KUS2GOqSC7xS)NDF`f9CYM%|}~R`^<^V%g^30z(V!G7xzwaB&I4-hEy4 zX-O8_aX)M}D)q0f`u#h`zm}YQ@V|xk`*-8~r&IhJ8U6EbUt8sASBSO95T4CGh}^5A zM!eTs2^0B0_W$7P=wLFlFl0)yFf>%$mX(r|p;wlino^jOlA{}*cbObvly@6dD4nO0 zreEAQHms@twrjXM|Lfh*@EU_i-fkb8$VWJ1bv{V2J%O_^D8kPJ)5#jw0&w$fcV7N= zqMJ!Cm9x?25aj0j?))V$X#bB;70){oq%JaXdVmT~V!+olD8#=ItrHqkhEU>LDh_O-dpZvmY z8AEYr0=45wtDOEegPME-~m39y|Y>HG-6tvwG`)!(R6B5o-kaEI!CQ9O5-ds{FL;x?H5 z>6OJ#^Um6S@fOEXmyrpYftVxqzINH!zBs1gSB`!+<+VlVxCP74x%7@jzmJFgq<1oQ zSE|g5WFDQG1Or>VhI%!jy50~!YI0XVjt)ORxRXYyN-y8U1+P4^Z(kUYF!boy^TfbY zm3>~=JL1~Jm(4O~*)fpUj{D|d1NjM;3ENQh@ibncI7?v>L={1M`GLG`1l}4Ua3sDQ Z`p_PD6VTwiL<7r}9sUTf=&_0Oe*m9LWi$W) literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..2840fe2e19f2632739f881a4c0b7719f778aec40 GIT binary patch literal 16245 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/directory__v1/admin-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..5736a06bf041b164f3857419793ae91bbb37d9bc GIT binary patch literal 26556 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 XC6!7ETnr5ASAqBoP(K3zWm6XUa?MU8 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..8e1924c3560b510eebc6c8bc81a6d5ab01a47e59 GIT binary patch literal 2344 zcma)-dpr~BAIGN=xs*yNA&rpBcHHI~DYMO7w`tgz(TvSBY;EqHgUV2p`%y#)Aw{_) zIxgY3b#uurQO&iI!lC>&=kz-L(d+d)pV#a8KHum2e4p?0em#FYUw{xm2(T%U6#!sY z+}}O`v+<9delP7bT`Y?k&-d?9<`{y7A5y4y@D9KI6bsJ#rs;6Kas9DsejVkW>!pIr${usU{Go&#ilVS z({b9aQ1xVzgyA!xc;Dm>>kAHrni*ltTiGRUr*20vYND8o7FmzglqVj^pzHxIBiuN~ z#yFs0La_rIDk_0F=I6R)ZK5gRI)kUc0aDs*(c7+H2q?Jdo>SRviwdJUW>u)xdQ{yr@nhpTA17>9 z$<1Gf{d?d@?IvPpZcJ-ks7&dsI+_^Ka*r@Y2!2=gbT{~k+rew%5Kn)9RkN?a97NO7 zl#9yHX>41b=g62L?xB}iYF+yWo?b*Tm^V4_ftX#Cdj zH~lRJ0WP7Xo~CJ8-{Qq-I-aTx!(7{Y%Lr90D7Q3RS_{|Lhv>lW;M%X9*b#T9^__7^+=zv^cWoJQ_fQcN&79! z;~1YKZ}&qga}TAmg#I|!i6_ZAW(iMZXZg+ng=Mqn+{GkzfOTMU(NM)Hv&-rqm zN+cTXXe)_(YGn0<*kw9)1RlAlxpR=Puj+Zm12Olukz|O=v~9?8aBt~;m^LvOyu6Vc z2OPLefMS<0f2p+wg)aRb_d>l~Bnqs5u`fvTtYq*pAgfy8)!s*Q(&_O4Z!LC-MfEt? z#<6j~>^m`oC0$xJ1XuKyvusbcMO59b)vbWbz6Urjra)z9I^~3I3|{w1;T^8h=MLP8 z#?5yfVRPl@$s?T|ZRrgQJ;)HdicBK#OTET{bM8$(7f`;OgrWG3+Dl6}a>v?l%hJi zcTgdEKn~s(ZRL{E&Yp8_Y^b~Ul28{gBc-u3N+|~vXk~!vm*lYf$OdX7mGP6v!hmS9 z)^9E&l$A0NSMfx#)FqVR=oM>4r-Oh}`#r8ll=Ax1U+6z`2c&z-eIz0zjk>B%=yntd~QN1?`+ zFS_rP47rKPLf9IH8Yy)Nvv-qnQFVwY7a}j;wFTi3cHdxlh$T>wd&hn>@?F2p`y8~ zX9b_Xpkwfb{h@E*1OY+o5Ndvq_o@_{zdx9cD}Sk1H9G*z5$ydSb-vHw4}=nk%p_4j zCQ2Xzh|Q!>jokvg5huvn7+)JZBQ%+f@Y1oO;E)h6C*sLdSYx;|#|6W1w1Ih%_2Hc3 zhE6VqNCF6?B`&DF)mC5uo_r=jZGl|*LrB0R?wWNek=DDitZb(UpNHS%)y7aaGyXL{ zWwL@(0-4qUR0_*TkI7=6Idjt9-r3i|4}qgW43KF3Kvzpx2$O|y@Pc8f9B*5)6VoWj z%IQ1PYkv8)?^kTSwdo1o>^mQUAK4<{+oB+Ur82y%F@j910TqM$u{ylX_xygAKmU}E z= zmUyT5h8e$G{((o}{*(y~Md*`UT~mf JNB&=?{{hT6&R_rl literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/email__migration__v2/admin-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..0d317c1ffe5290a5ff72754c9474e396b06f489d GIT binary patch literal 2262 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/reports__v1/admin-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/admin/reports__v1/admin-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..cd46a92d5a64026891e08bf46a6971630a9eccf8 GIT binary patch literal 8361 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 aDDq6n*v*85v?PI^FsdSO0DCfg$NvEsD5t6b literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.1/adsense-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.1/adsense-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..9704c3bc8fdfe1966fe532d3c044254324788a0f GIT binary patch literal 8206 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.2/adsense-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.2/adsense-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..88b141cf23ec9c05be011589d5da82b97d61d9e3 GIT binary patch literal 16903 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ℜtq{?9ZR16OHn-kw@e7ho--^3$2LS)9GXJz*35QhCi^;(%isB5bN)h@U- z#V6UOZ4(yndfBrWrLDv93cqvxg2>Dtp!sW{dP=+M9@`IcFOKzL;EejknWu2`NvyHz z@m-d?q>2hu3W1`-*SeucC@8pKbaG z691m#JRU#qSaK)_6H>yRNf4p3T#mnDEW= z%@qw3nrKjT-73sI$F|x8t?BvKTg&D}2d)&jl@`CTyQfu$e+#Upj+b^zLTe}pJuaSx zoKxhcBQ;1oD#KL;90wv=yKgER%cpND{`NCGmptvY%^^-2ssMkU&rQ{Ql_!l|zR#6+ zY5fMX*0x_@MTZ@wh^H-soNF^9!=P=LSv$y8QU0cW+JIS7{7jVmg{U&nkw;LT&)PDA zRAr6NqXk%45?q7ESP(4Icq>ZN?pV}0-O{snQB66wzGurLYZs&C^Qn8$FaQBQq@dR(YCO@)38hh9YinPFUOuB<1$670#K3} zg6leyE@E*|;JB!?RTg>8-%_=gxmUG`WLw}Vl{u9PoO=p=#QTz*t+6ONQ7klp1I4H}|6*Mtpmg?d0rkga^R zlD_$=@#tQ4%gFV*MBg+r+Cn=sF3DU?iliOTHrvq>+?npG+aK=*N=*Bw!@i}vc1#|U zTW+y91z@9e)7u_+e`E;dt~&GgS5jNJ?<*_P$-RX#QO`PV5eh%`Vi}_E_r}Az6P!SZ zRG+?vmDoGwIo8j>GBnJJD@xS!9 zhnpfJuB?DMJZ+5>C11fCsG&tpM4LgGS1A%vPe4dD4EHwU(dFu#EpyFr-DQqDMi8co zyklz@&D=gbpQ3}|0Sy%mS_iAeK2&V2p;Ha*$` z)@uRskJ_czMV7LlOySB`WbdB?f6nhm>lB@DF<0rIJYIxe-Y*_(I;m9SaqZ!+=7qw!;~2dQ^8gWsOOa9nnjt{D3vA}k|4AGD#=F5v)w zqwp5(M+_`BC}bR$l*f{e@%ifAwoP|@zauNNd>MF%hU47lm2GE`7awS+IIgW-fz;+f z(UqApeSBzKR8dnsy9Z5p4mq$(kTcoS+1;NU-ouM`LBw~qMgqJFY&b*Hb`_kwCQ7A@ z+MpemLH?ZBL!jpqEJH;Ft&(u!4a5|}%|zQ@lATrqorHS~?dO?s;I;~;`5ANYVdGpt zVFDxa`ruLgI8LLakfj=e8ni54n!nP3lk0;mqF{@B^TZdnH+@m=D^YsE*@(4c$FS=B zLcze<=IiYcBTc5Pkhuao(;1O()-6(d7l#%^hhX99si53IgY>SF@RRiiWop7uAXTa= zUT%~Ey>&$>(p$ouONjicvpW}m2|))Z0I|T4d&1GH$WI>peut8OSqrAPBKqdEsN$SB zFaEwABiEL1^z@u?r>o~^V$lUkh;D5Pz~$9qEMDBDE>|jz6Z@;c--6M42YGiM>qS|d z;-J$?vG5sgh!veZio!aBT}n}^S*A1i#R+Dm@Gw+S zRu->zM>!rPl8E@h&!kUB*!-6pcKj`$7dme=MFx!N{JzC6*QNEGE)D@8>gG^Fi^O^2uSHP&DB!A;O zU?+m5iRk%mzg>Pb3j{3mTY+kn=Up&8OU2|kI0X;zxSis)MEf^YQH||0MhbY4j zS)e=wOjfHMBs4z^C?=^eOJZ+ZX2og&u%nXTSF=qW$j-qERFDq^XLW3L3RwO;=(VVl z8(Ay@iLnw6Bocm;86JkF?Y}6uvuy@CUvNVl|%vHgI*a$b{s1-rxUgE24W(T3hc5@3< zRy}sc1I?(2!aH>de^{=QBi&d#cj!BT$MuU)SgbZF%xLsPs7wB}ya~VKF5)Ad$v+jJEkP{kn=rBCeyXB`e(ioh zc3K1rw(-_dp^suog3?{7oE-HsAKS~FtOMlbA=>22N`R(Sf8r#2l4Usi*lVyyAtepT z$j{jv14@7MGjrXPapk;nE_?}m7|aCu9awEcvz&J;fH^@{YZ&^sYZ%1A593ucQEZ8l zXnUe>RKs+$16Y-+DgjP$Q+LGnnw4sez^@4UPiDv+4dLxB8ZKxxS&+p{M`$b(Z@q9( zc}x$$JsYtr<#b<`IPdA6lkA|UY9zTpSds;uI+!Z9&>HhFFs6oxD`G-32vf-{+=NhQ zh?6q}ISp5CJ8){f{~blv2;Q7bSEkC5-n^&YWCZhXbm}?L_VuWj=}3HTCXWx(KjP$& zJ7%diVyppNvnpb%THF3nZ(aCe+r!$0*QP}7h2%AkK+!?hOKDm_Pdm7Wo~`&2L_8{f zjj`F$g2)n{H4gpt-<|ipCZAsu`FxH(zB+uzKo8}U@T)JHG#Nb*Ro|2g6)NFIt`rWn ztsr%h`|nkvNT?w+=C3WbnPUd%sDzpTE53#SlEOkg!4tszAAsrr0q-jQPe}5A5$vDfTKOpjd{9{|M#ql1 znUIJS)|ojv{>S+b{(T%Z#ZeV7hkNFQ8U=aOp(Uho;*z6C6Q5>&tH&WGSwd(p6sPT9 ztuQxmF`c(33KH>%q$<3~V+mtO>JFX^h2yu2BO1kG1dP$CA!uiNjA8d66vE=MNw_Fs z_{be!uzi1ehj46z)Y|at$=OsZn++zm60dfKuWu-~9R#-y6xHVA%LiLo z=p6{ocd(T^)rqO_%b5d!;XbW$6QzJRkF2AyJ-k2H`)EzYeT1N@H02j-RxZ9e7M5C% zkSf>=vvHOqAE}pfw`XP%SB=TugVR!**^yR`7j0~!s}jx5#;@uW<1v6RdaZ?`O-B*e zv^2JA8L7cfW3MWGCHn;#s#KH`2`>uD0X>Kq39yA3Y0mH==5IVn0UZ+_x-dbh()YD} zH@B-AooLDXIC*zIj!SFHXQ`q%UNs{U9gCd-V>6Dr|Ca4-_}+NM)WP0DA_9<80jEcd zO5K|qywOB|(`09gg=Xehf|>D1Pib~QH=A2<{OUTNb6JBd%k1o0YvPymfby1grb~y{zo2GBo z1X4VQ5cK!>lIb8ej`Ga(&d~ zB^;SFIdp%}w>r`c0P2+Ot46mdvf0?_Z;rl_7(uw#77p~8OL1R_&w1z&uYVsqvJnn! z!&n5q2jp&iAu_IB^Bw&Z4AgO8imUt1so!7g6xrbp5t_GX~E< z%1g=*9mcD#*M|p@&$*bd+hr$`*4ZOPm?%E*-y9*iHq`?{(pX)GuIvn`Ow<(u3RavP z3zTuLG~gg|LbbTXBoceGAOWB1^ua?Si)jL`*pwKx1P~~dciawz&M3_DlK5*DoPrZo zx}2ibj$4kt92P+F8%j>JUyMl$r}i)fkmwcMGZ9rT9m+6in~sVudxGtll~07SRUqvG zT9*SzcJ_TBh$^365{Gf_W)ngRdov14K#|Ce!i_ObRz|4EGd|BCbp2zZb2 zf6CMUi{Ss%DY8DVyW9PPRA!IIY${@d!@MMQ^naZHz%4UswnqxY9{11fG!g|Bdk7IF z=LxcZXawiN(w-BfEYZfVxCt&T0v1RFF63sLfiwZwFynPnyJkI7Auj`}F4*Q878Rs}WQ3TAV;P)t| zS4+^=?3adApOYH~e#R;IHAK+9?OmMxkYVrmNgUJQ3vs5X%GD-TlNqHN+qbF)k;I-M zlM7-BE8z5JRT8R*-SaY^($rE!`LNQRUu2c0UM#EN(**LxF z@=vpI^`E+bZx+7udgx#92?RT){(E#D>VFwz0|R%oy zO{Y3KtHXsZ^Q<`kG5(j_GKZ37%uobShqo7q3Oz3RJg^-pBybuGV3%g7tmXWZmjdV3 zii7N3(<`l92Chgn<|&qxkN`fp7(IvpqDukcKzu3+d@yQ{xF@6Aogpbe0EYMGq``0S z^LBMmUzcsh_wTN>EO!70OvC1r6KxH6QY#d zl5*E1GQUmjQUR|nwgb4r#OA|5ioy5GTFQfNFOq zD==q$0MoNX7xQe%SQ97ZZ51f2yvr8SVXtn?g<6hGCT;7)LdHp!HSNN3`LhQCr zH@|`6CnbiI0}E!$RO18I>Vlr;C?KaEACXLd=Ma6$xtwWrWe)WGtjCIRo*_f4LB(a? zgVK>>xcj4b50lIgEG;rh$3}pb*yHQFT4+*L{Zg2xw@~&aF>w?&Se@nj0ZOk6Yf>(x zmXo8$&L6r@h9@(3S6Yr_x^Y^97F1tKGfr&sT+9SHohU1`MZ!(*Y93*uKErI5jo6z-ef6S@kOE&Cs3JzPCVH`hA>M4bw)nj-x&! zLaXl~MDwkOpLBMit|RxD2kzE>M!Kg_>*zG~4^BI2T_nj+UK{ftyA&C{0c4D#eZGzp z*`^Q^`3UNT$35V^_YmVUkistHj@OB6Q_gx&wBG6kXvoY@BVxKmgYh3 zJOgs~K)_|3JRCwj51P7wg>Mo6@xy@UHQTmNEMXB}dX2t)-hF?ygqKf&ylVAU4|Y)f dSN5aMc}w>9Lce+i$XbKPUb2&#{u9@7uMB!wgm3@= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..db350ddddefbfe889249f446e4a1de2b15e4a74d GIT binary patch literal 8996 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 N0bNuWvx!oj{|5~~r40Z8 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1.3/adsense-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..fd039414ff6f6df61f892f0d23425fc65c7f0072 GIT binary patch literal 14596 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/#adsense-api.json#.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/#adsense-api.json#.i new file mode 100644 index 0000000000000000000000000000000000000000..71ff4397977f5f1d78571bcdc4f34431b7eed6bc GIT binary patch literal 3352 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..790d62a4500f8f0cfcab0f83c9542cad75e4b3c5 GIT binary patch literal 219 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 O66Cnv=PSMb{Q&^wq0bip literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/~2e#adsense-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsense/v1/~2e#adsense-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..7dbbdc04bbaf74086db1fa8a36b88a0ceeedb63c GIT binary patch literal 101 zcmZQzWME`~097ER0%i04hl0S_yG`yY#{D|?Uf;9x)|w>=m-ZZossU4_Nkxe%X_+Ne a4lqVeVu7Bysi~orp|O#ng{7gTfdv2}$shs% literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsensehost/v4.1/adsensehost-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/adsensehost/v4.1/adsensehost-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..494367feee119fccbaffce342b8cf97c39818f35 GIT binary patch literal 9542 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ɿT|fouM1LA1*O_ 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..fa77197916ba0953b7696f9e797ef07b3b18a6ae GIT binary patch literal 223 zcmZQzWME`~fcZe`3zW_F9||rh{bQc);T<5&C{SnU6cI9g@sj6IHDIb@&gnDW=QMpi zLjx`reCPl4o&Vw$eLb&h-+j;cT?I-#3BT*?nIHMD z^{`*;b37+E>(|SlKVMp|+||iCbJxqCyG~lpTv@4FC2;V`pD7`GpZtmW+f$;FTGbh& z*ys3en@g6@8SgVIbx!)|UDG$dWc;w`d->-tg}mEZxnD0^{)};JVd|rAA{QRUFnnhY GI1T{))n(iO literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..746ade009c52d5b4834a830d9333462641807dac GIT binary patch literal 8329 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 QlvLw$2ManY{wve}0%JVW8UO$Q literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v2.4/analytics-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..a656b605f773db15f2e65cd9f869fb2ccdf43b85 GIT binary patch literal 10016 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..691669dfdb5019b619cec2079e021201022309b8 GIT binary patch literal 221 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/analytics-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/analytics/v3/analytics-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..ae11b7a53bec0f323c513d32bfae5f451a7b911c GIT binary patch literal 58419 zcmYhhQ?O`FtTno9+qP|EFWa_l+qSuvZQHhO+s6I&x&Ns;qiQCp?)1xi$rwoh00962 z{s%C`001Ic|9=bs_WS>UofBL3G#QO4q{6(VQh#gkld&}W|8oAvxo2PFeA{7hKb+pF zsb?#bA`)JAFXjZ-kk1E8&66ghi*H<GDi7V8E6^~37P;vvoy=XtuEK9*zD`Zv$ z(qf2#>K{(GqEgQ*QL+~0gl4EYc3hw0M40HIA?C>L-wd7>NDq6)!Wsx;JA17a0lCM4 z;X<|s831-V+3-fCl&5{_KC+guJ)|km{0J{;YDwzNW9Eu1ymR$8zdeMi3KN4vSl_g6`o(oO_=q^EoC&BLIzlX}ktHHy0)W!s1U=vF)fRmQA}II@=>9|q|B`$I2s{a!(I?m7 z%<~hfk6(Yrrm=Q5TA~<~VKLarKE@XZ1mA!X)Ww^|BKQq8tju|AzDZLP18Qoz@k|hw zL<)j~;$*Rwg@<=Ai<1hiLdD#fKQj7)lpcbEFmsFMKzj~IvwbRk9J^h%UB2I$G@Kx| z72JR&>}wEw1>F#a$_3IU&D8x-KG+<&t%Ib)a#~3a;htwmPHL)-bUP zCun6N8xgX{d(KtH1CZuCN51Qj4e}g*&0H zNxyX)8A6p|Q?ihW$h_5M{!DvBk!w$i6D8rEs}y^@Rs;;<8jQz!Dq}d+z z=9~B{DAPGgx98JmjwJ2(2mKNoe(_!pARPkI%}4%dAT69mSTkgyxk}}GCGM|{*X+Zb zx+f$4-+%!TPV-`t1yWR!qPn`NgM?@ae>FF^!ye0O!{4!*&y73zD12JsCRL2|p=j+U zc)tDKpxL}hsuobI^7i13eKU)}8^u?|I^Kv$EPVA1IF>DiHb)|I$E^V8;+aYv-b!4E z8Ih?QMlc_@jxFX|o`}uq=vURz7DIt4xJTGTMg08BMC^1J~1w z%fpPHTfXIddEn#1otv@?dDutSGDP_b1=>lKG%V7*h)cAfePCySp;>KX83OqiZ@~QIp?Vful16-i=%_s~>CsnER z-)}O{{ku^DZsIb;JwzP5uJxkI{EHZYr1qiPg~24I+(EV+OyJX-;-emwm?rh1u0p{q z+@(xeQfw!c*Mnv}B!z#%ih@#``a}_)pn>PZq?E^8aKhe6ti@H1eorFA!6~!y8h4p< z^L)(XuLuFvOJ|tCB_7d>*fUr)VnhJ|vQMxfj5XfGCSbK!v79KAQ2>@(UN2H~&hX&w~8Xn*Sl$^C|VI zTKSzReVLc1`#Q}@nkgk)$z;_Hi^#Be#VU)v#70dr7?*S}PPT^9uXuajmK=XO3I^*| z?cPIbNEIj#wq^=ARTbKCombbgDmKnei*iZtXf?J*NP!wDHmu*!v6W|_%N8woqXRX1 zY>9p3DUpvBY-ZUFt(z8PCY5-arlZw(b6~;@YEMqN4$z4tb00h}SC)D!4xCoit`lwWs>j)sE(~IwN zj7^-T%y+8+X6s*^L3a(55QD}7O}DK)?>%xELlm_TTv)lkLL+f0Ip6;pT|ar`*>rX( z25l>Tu3STTNOMImR919vSC~Qqrq`RSyUd)WjsAvEpJmgpeyJQK+c%>gr{?o2Si+aTZ zOySG=^7VAl#*E?Wb#3q}EN4^8Bf7VoB5sAO3hF7FTU~ws&67A|Qp#?95#t(>p%~R& zt}C(Ow$M?MPS+W9b64T!;JR#==M07s;yv2(Ne%BTlm5`>ji*swLthGm9<11ml}36- z{#~y~p~mp55DSAG*D;jfwa(nuzduw$i?=5(b5O)D;$CZtoP_B*%cX|zsdl%;sH)U& zzAl4mswE40p*3>ssnk>ByYsG}oh4ACiUgnnEMhaJeObM}9|5M0>fOki#>PfFAe&cSA}5tZt(H zhXX0E!UZgpv^PCgfQ%e}hM!v43SXj-xb)gBM@gfh$2w2fd8MiB)`D!MU5gOJbVlB& z>Op9100*cQ7f(W*=Ao&2m*AF*e0yi_!pQASSEslCu?;+LfOk12-$obWK~I|!lU^5w zij93mB_k#5@=}NNL7kTP(J)9quL~gNAWF?|{^=51q=WxFF;n)%=e4Q}=@}iD>XbPy z$tGT}Or3V4Sm)KV%zs+dyn0f1I2o_2P#K$D`1-F`>!%$ZYL!h_B~`XD^k>Bbo6{mn z)6~L<#MuQlR~;=Y${mW!GAOQFUhBYIH8vNjo#v%$ET@I~ELM)?1M$=XFN7!1XBE>Y zhOi6fPU>)nJHAN=9~pbgz7g9=!c-)Wb*y9lM@OP>xv!Q4@Qs!leiy`+m&bMas@h;5 z8T1u2H%-Fkz^Rvb0rbryzr46A_!q2 z;?K!|K>0N8Q8ZKA zI)5P(B9&F@o#O-Ikk3WaGd5{obw>0IsM^b+AmNK4(wXr+B2T4YTpPp!A8G$pV>Wb zC{?EAnFf`4JN3Bdkch?9BMD3+Xj{no-UOwl%aLhm9VbKv4d*7(8_6&B7ODahuMqD) z3C$JJ&F$ad$V#;9Ird5J!trxE)n_Wkp-a!aG{q|;ySXHg{D#$LF$%5 zDWy4d$W7>)!%m3M1o=Ea9@>>zyzGo=G{>J4dlMpZ2ZrEP4bazM8G>|)MrH$z9SY}Z zc~~@;XhcXqi3BV2R0UO8#1;Uh4K|eN!8*BeM}-(&WrR3Y%S~Lyr$-$tP7ni0?#LY8 zk4BjQ0gOvbmqLL9rV&DmSLBr|T5;QH^CSHRkB(;?qc=i8Y6nypr9JT|D%)$ zBz!PG+Ea2=#kC~}lHD_Qpa%U1gjWuOa}AsZqvnh|7Au{zsPM)AY5tki4m0nP7s_P?LqpVLFJ2BMOwgOGsCXk51yx6|l(Jr_rMR4o4o>`=`pLd!Ndw;^32c6$j>$L|wcAhiHcIVA5;(MMkk6J<(hoP_Zo6H(%j*TJSx*%@m%QbtC>7XmzH z20Rgf%NO9u6Co@@VRGSxS|bNOfvgf{b(Cna&aoDO`m|sx=(vOJ>n2P-eMva}+(w|p z(T27OwG&z*mmWDo8iwL`C}&i13R=zN3Kv+`i+B%kl9eU+ivFgJuZyP%STr8=Td?XL z`R_;^B@%`<10p_&$AR9R03jTOceUy$8T;zG8a{;bfJj4B{R)X)h`CpA3bghq`wT`X z3(7>+&CBpNI!_WVpc9b;nUOon?cjl&eiP1;wUTkPy-4%ily(hl!2=`H?l6Z#J?rqF#>+6J-7?L^_ zIKh|b^^hS+IQq-+gRa9=CshaWQ?#_m>lXn9_zp*}KJHiYnQ$qzhu;0);cTmg*9y}* zT2lCuio8KLpIK>wZ$C>?v zl0{|OwG(F}!>*|h9Jyi2qm2NUU~55zi}#E7_x@M>UiU|n|M_kXK0N$uAJKG(dZ5K< zwI}5B{m>^NG9NCCi|ks$^+~Koo@QxEN#Sfsg;7Q<^mTp?9Q+&{9&RBoZk!;;7i)j3 zJ*KAM4@_SsRXMXI?WXjvjoFTR00*fOIl86A^Ja89ESXfg&yV-{1gJlaI6O8-Q*g;S zU`k{i#M_PvXfMeTyby@GdZS7rLFtO8m-6`Q=m7_Z#2w%c4*%Ghp03b!|g%3>Xy zQM$#;IV~LOGS|rP4Wdny?p{8OCpM^Xq}RWQ)B_0F?XIOIHH#WYDzpOzo_|$KGbVh? z;4*6-h2itoQ17)$#PUehBX&?VF4kD3bR|O_kEU2D?`5|yqLUozW5L+3e^cV-7zqtV z0(OPgw{`XE&Lwu|7Ou8JU)Mzyr14*d>9(M6#`RdUQ*EZ!a+wI{OKAH8_0Y?(+vJLZa|k<0`cW$gB&X~3`+EWwPfkqxdE zhy!J~-SzwhB}b6yWI@~pJU8T9s*Z1B2Yetw?H|Xf2}pnH;MW=mhc)`1AbK1&nx?`f zsH~iTN3>d5htSl4By^fa%HKP37fQ`1u7g?Vx&I;+4-tsHSXXFe3JRZti9laZ~DOs~Oslm-yJ z-MIVGuQ6mYXy3_8^8QEs2)wiCQzMOsAhXp0?F8}i`F^AqE56pjY6w1d?LwUu%5%H) zP^oX=8Q7zE`AR?~N|ML^did^MSwlh1ffb}BbkQ3_NHZzoI%n@xryWUNU4h~ma5E9h zpBYfvg);slz!^<3W&^!nu6+(CaD)Q2ncZlAxc-J70PEJz6PE%*I6J!9b0pV0Zy{8_hd8QplNUh8-XW4DA?5!mGs#yKl zT}RAnakgcvlJnj%J;W!Gr^pm}-Qj-RiOSzf0@QymKyEk_U4n}9QgdNBUohhuC^PQu zp^IEPnE48!Ed|g6hEd1ui2yp|IErN9yHZMsx$1*PDAHOi-O&fsFElJ{@cUZ}`p41i zEvk_nUk`S9GVD027sMk9I&=g)guk=CWa8o8HPybf`ixXODx&Gql&Wv0p6 z?caKvvI0Z|{TukZQSX61x9q^DhmEO8_!Kw!K$Zyb+ZBQ@;|>{(>727xlXbqNZ}TH)(0S@w$%{L$+o>OWqj zzg8E1fN7PlCjU4;2K+w@RtEr}M*A=N57__AKdk_xWU-?gW2<5l;Uu)sNKEIm{>S^@ z-T%TpJ4S8V4u=(mT@jGfMlKva06`TLr8$cQ5x)YhOgYg;qj^2mm>5Jww3~USY7ujm z>BSgX1(m&RFa%or3>T7c4}Na|@dr@3CPjdtKLq-AJr^_1O-O5edd6$^c9OsMReCHT z4U&_IB$%f&KXo<3^hxG}=x6)jJvaP~cDeZCg$Tk2_>vsK+qyqI=OH-$o1PG!AM&d7 zxj$JcP9kL{N_d;L&Ez?S zRMMxBnhE1q5ti9ojz zjTtA6vLY=z3t+OF5)rxsC`+X=Ni8Rc8PW2aC$Ne%ErJYY5end&!U1pvt<#EZO(>ItgVFVR5;#?y{9; z3Lud#HYcnzabqv6Z|jT9OE%@2kJ+5ImF?Age(6`w_=?^(o=xY-{7u(JRSkS3$AnKS zw2J7A-`|HirB8@d432teb-hxr10HE4s2GlKu;eo=IIT^fx_XHHP{C7_OY_1wqH`o)eCXeuXLVx5!Ea* zn0|()i%F-c)fjc(pxFGAD%z1=`$9UB+F#cIQNo$Ty#>ZI)0kXi7^kUoUR6~!mobOj zHmZt{Tt$RLAjBijWGP>7j6X(n`^zmu|>c}<^!056L<8ISJQ=l~J7D8667tKUQ3 zAjHajxuk$!)%n2{Xvp!b-v7?4vi3aoxD#x&zmDO=W{oOvDvcOipyIg?1=6+`Y_6V` zJ>fVQCZ*I;#6gA}6-(W$n-OxRgNm^!qd#i{U*PiPVZ|GfgbaY}tAA7Hz@eER zIOz@vdg5Yzk9#Nn$(}dtCH-fwsey;tAVbdyIQ4G}#WKz63hQH|b4@{5WV~;BkVeg= z(nE)Iih!t?bU~{mQmkupryP6@jY+)6{reY!B zr^uZenmaguiLr<{eIMW5ut#V;WXA_;!=IecwC{7oFLhq$C<$+MF;pr|tbq^glc>U- zV)GtKtkr>N4}x{p-YR|;J9$6Ddl7It>8pypSKRm2tHQ+IV(Tu$>%sb7SKE;vq~ zL7oX%)vd`n!D3KiCJ^wmGsK4r@_e&aU(1arP8;DQ|J=Uv@S0b4&!Fm`6hOA57`!6u zYR|XkH$0W-z6%Zau$=2%bP*kZnafw2@S3gWDDSIQ0}(8FJV7j5OD ze{~D5_n(D{{;%FC{EPkr!G9mnzj{|}$2a}0G9eiot}_0EWjT}%As7BH;eX+teT*$* zha=IP6r!_kFCY{Sj3aqcC+liWK52=l3IKa3aUjEU?>QnnV0mowx-_+9>o?`<5_c{7 z1vnHy`~?*J*5-IHg4kaxAVdv_-u9^L$y|u`+VWES}BPD!Vep` zH+%PGZxw|wkZ6&LZcIB7>g<$la+q%WN27stJCUDlfN~SV3|nE!T+=$l0wWKd=0K~_ zuC^MiKjn7N3A@b4!-TeYc%_J<1jrXZ7a#Boo7##6^neD}&S$LA*#;HBBllPvCTrkP z3*!a&-6La^Ltny_1VLZ?;v&{Nuy$r38z<=&k#pKKE*Iz{1t?b!_+wfj;}3}cWg=92 zERUV*P@I+Vw`bl7GunLW*ALb^qwlwv`wyI+o}R|Ig~AD?gvJ(AiMpQB5r){(2J72J z)Nb%8{+)_;wj5=9Qpmjl-mScD9SedhRHG2<<|^8_UQ0~3{g2dX?w^d?yt`0F^u zqy(cuc*)}QGOECyI0E@Qz;Syw7?YI=B(*sc?aV4)pT{pING)HW$EJ9N8W}muE*S^3 z#4vn5@!#O$;Y~XWNu+ZGuV)8@t`{hTPSWrY$mOCvRLFjQII-~hvM-Rct`|`EA5iBW zy5RZJLy#d88g2+x+X3bvLU4{{Us*F6>UW=1-zJ$mJ4IvTihN_NSPR-5dk*Nua5%^` z=MaQKnplhAz#Wl`-hflLfVaknPl7higj>69=)l%qvfbWC3j}Yq?%mAs(+TWA^ z;4B#n-E6Hyt@*r8O;!C-UE6PIJ~h7(B{xSbG-n7RBYiT%0>(B#PFT(e5;#-&!fZ&C zp7z{r6l1`EGeX{VHJsZ46f9|1x21-%ZYuRQWvB;23P@d9^Xy_HIB$1IZf(Zhbh0?H z=tdy)Z-Q%JNskXU1$xw=KwuM|GmMAB?Vp=H_qxtiUf((H&{sN!(^ByoBlV0RC7Ri; zHL}^dT*N5K3B~RL3fl5^q)I-AB9`U56B=Ok;}(ce!~QH|{=@8?KI29PI?6XkS;i;a zTj$T9ZC$Ur&-~R);?&f@XSmnc*G;#MZ#0WnSMk@fO>6)+j+8+RS&K)Ij5}(wT9xv9Eq&*S6O3c4$;bPd-k`l5`G@(> zMDM^}LVRxLA;r+2Hkl3CvcbB7cm@^Tg^W79W#tH{kuvvZsK{NC90pL8q{Knv(yDX_ zz^_he#d)owZQyewRhj-vC|2?ANqm1 zyIOL%-i7`KqG))EFjhy(A|OJl*TQheh^oMNbv@|5Lk9ejLohD$ zy^-V=0Vv=@wGcfK)cI$FqCbwx5=I@G8| z8c|k zGt6X)WgDQ;Kmo6^Cab+^1w?Cb5#Xm1AOLHMYK=1-2Gl$S2T##u^)mpa!57I+LOR|1ILCa7i{?jf-n z!XP-u8`?Hb+3$O3C3zY|37qI?^sd-QTI$#1_sFHsoQmExikw;2+uyZEJ<0P9*=Ol8 zCQ&@{D{3c6#7!t2GK$+Uxkt+{8i{nkf$My8igvM`x<-%-#rPDGn3J(!P zGL41n)vw?t_ic4Z{!XKEz&3@MHdfX2F(kwfzKjrmHQv9~m&TQNRA387X_}WtX_>7R zUMw=ik>TolWgnk@s_1T^sSki=ia^Zt2_o6OsH;_JcbCuFt zUOa=E$FQk6>Kq8+vXoOSXdHO7_=r%)P@#R-D%|IRS|Pv;2uek>oesUQ>u&v)vAh` ztu269p9d={2*<3oO@+u<0NF|@24pecj1h^a+FpeDJyLVWd)haGmNTN0xx?>Ek-y7k zoU+8s6n_vsOBJz=q3}ed+tV&@G*yekyMD);!=zxf^ zHJDbBw%1&0@Xqi7Gnqc%X>Z@Ye2xZn+PE0IoaS%hIm45HyvA?4!Ee6OlJQnV&>RsB zmN{jSHkF`NZ=FZgOq$;SWg$1EHM4bAlYL^ZV0~!l?qQMa{@I7`y6pHR5n=Y94rY-w z8!W-e119t!3t`vUGDSD!#jMS&F(s@jS5u#IV>OfQs6>eJ+CR`?>!-Jrn=EOmg*aZ; zErO7{P+U5WfaRUK3Nc&0ah78>aV7@d(zR>2G+;CPvpXoPWjR4ES}amjwRC>*C&pZ{ zd-_1=nmLJNYY!!e@8n^PHElz4Oxzdbv3wSHouaFhLb{$ZpxXjst1V?9Qg&bqi4NCx z&%a%)$`p96yHPPO^J7-}R6W611}nj^Ca^O&7?u^INoU^rN(1hFOR>jHtHaJ(iazt6 zvLzSz2{+p*KU-X6f=isL3wx8~$*B`t2`eq+@6Ke!r4HDP-*Dk6Equ3{1f7qb2=>Wf zM|!=?!$HHO`iIGeMs813@n5q=?|vYqttX}1qA8=_7#fQeOYg-J)Pda`^@i$4lnAE0Ua$Dqs=6#Sj<#P=T)O${e z0U^BSacGA9WK@GGzJ#zK0%`|-1aA~RlvCCdniq+fhKk3^h@fvv!ybg_BK-;w}EUawL&Ht3z`aYoG>xqD0*u( zQPi(HR*N zr*4}PlItzjMIa@1nIAQ`={p-t%QfSWB~O_z*oQBALC>h2f0~3^>Ys&J{y$pg-{c?o zpO%rJzw7e*gN(M%wr<`+xD@Dlz7yE%B%W4oTQD{t-exAu*)Bk}j=2 zNI)RLexgw%gXp~XSSJL~wfPzfH}~S;6bmV0=svtX+&jQ-jJFV-;7{Kuj-xBxdxWyf zbC+kPredeyN;rDDXk$fZM@7fZLl^${$Rk|u{ZsFt9q;WnUA5l_tk2GIf8l7HMjCxE ziX_QHaPuj90L*)~$rsm&V!cPe*WR8&dy)wi>O*Gtn=sfY+@wx530mYRbu*{8!=4BK zXX)wp*RAvQC+|m>-E*_gT55j`4N`{Tc%TlsU~)e#R=@A-=c^~cn4Lg@Mob$S)1*69 zP2 zkv7pIQh%EL-Cty%o!*>>ngwG*B3)z;k-FQOC4!eje6O8*`15JM_x96oOUcV!+q2Jp ze(~^SoD3cVCBUxo;xWgVx=jKj1pv*+q;_=(zOcz@S1pJ@Hj}qxy#P8j9+fPhOOne!N)ALBNh^~>*iiDQ8_UeO7ZJE8-U~r4J zD}c>ai4IIq%C3L|%5*Tp{(FRJp&+wLLtw|sa%C6LuPw19L;6lLt0XODZQJ;7y3BIg z8vC&|iFcn{EF`S5j2JYDAUAtrR4i-bZfm#^HBiuVv+nAi7dp9%BAdyJ4I>Zl)7T!j zpTO5_2LgnFLAdBqaC>jynT+~$dHd#dkQu$+nJe>)ePYCfcIQM6xLBrGv_Q|P!wH-x zI_4)WdGG`SXfBY~jKfrWu-&fdv`0F5{(ewlJzyj-(}X=o-(YMURk?N$Lp?%2{bNiP zqa+8KDAKZ^GAKpSs&kVWZNOGY!ma-N)A!z&uDBmj#){W)zFVWNK@7h^c&Ij)QL3;_ zwI}}ITj-90UsRtRz5B?&aEEXF!z6d970&}EgQjP$Vb`u0WLD+zT8$!kWf^|k%#xq< zv6|?hoLgvTS5~vwJp=)vdJCsMfBXeo#f}pgia0G3njdL?ek4oZA~OtCEsJjSJnl_(lGLlq*#(u z0)!UYPm23m8ZDs=6!6T$D8^a63q)-04|=j6xyR6@P@sGdEduIzWJ-CYRxHLEQ|nFi zFCaTN%#q~1z%IrAR+H3mcB5j>Y23@J!PQA65xkOD_-Q{{8cqj=nil?$XaKtLK=&%S zJWKd@3Awm5ACp|Qvh1DYEQ)~6r<)Pj{ee<~U~~<+kc8CW$WCnr-Mb{n5w4fOoI7jw zkRH?CuM{ygw_2vYoKQfGCf3}eJ zJZf|C_MWm0(QN3m29lIRfcP=uff;1fm~~|b9*=d@vh2`ML3YtXLXBpQeg+yl2ke^W zN-gC{&q6ARHvexAKZx2=L%o$EM93$Rc6#2#9++ste2{F>!EendV1)-X`GE)3Y-Vtn z?txXwOo3_9xPcXfieM98mM|nntICVdi|bCSiWxiZ+u)S*kZP!8gTc0S39O42Kc4Dk z96~wg(x`|+*swzM8MKG$@@4jGzsQeo$ldcK$dOCE0=@LgvRi;d57yE|$p*ri@W5Es9)bqF-ji&?4CS$ZU-KP zHJY}7q>MtDSjWb$sSHEIKy3~9+&675CN!-N&Myp20;{o@wJU)T2SMem0%YYwf39rH zdoJPC|M*G#)xhLeEz#8TLi0T*ED)%Hme7LtIxE)oT!U8k^-4wR6C+Dpnex)ugv21% zza$+xjyl+>C!smj zJEh-<=vPz{1q-N%M|c#M4ELIgM+1{PfeH<%SvylW?JO85AKC~0zl3DWA(}rA|8+2| z_**lo|km20^pvM>3`wK^Ve^GU~< zzDqA0ZO&!of*GyTu&a8NQNnFTQmDli7Xxs!WDLivOW@9m-1vNDLsxFh3yp$al>G8X z*U+!~r*`KHe$q@8F?Z7>_llIBj;PD1JR(^^T<73q%&9!h`7P^9eQWu%wS718axH1k z>VJL)zt|0Xt3#hHWBD?g!R`8@sk`Ni-D@y!Ehf-S1|^iBs629L$r(b(X;f1IJe!vt zTd1%>c+VIfq1z7Y-l&f{Pksi$MLM=anz9hgu-23opu-qWa(zM=uSLu#3*PAt+BOd+ zhVst3cP>N5rm696Te!5m@|Ro;T3M@##l2pumatA*uQzdRFE^?D#OTz$>~~c=_OZ{l zE@G~PqqexD;OU&8v-tj+m}nD3VfRHX#_)2KVR$qrZ5f^w-*&Cum1K|N=xZJN0Z;)G z{Wrt}0AL~bXCbTp4=E!3?*QZG6|?O|iv?ZUk;S|KBF?zefQ7ks>S^ zJ5n)+z@dILMcH`Zw3R><6QkP=BBF6&LX28=s|G917vDNfQHkCR-`Sk0Q6tY0{QT^M zJ$ieQ|C+oJ)cpSV{%yp;91f)wm7S%XrFpOGkQCI_#q}pDZfdJ;DsD2VK9AotUWXPX zzdLRIr}R%hC%xz6eA;@QK3TXe)6%Jiz3FReEq5k$7wXK5LmAUci7A&>w)n1(5$PKNfR^Div;+j2b`CTXn24T!oDr8+u9_sU zCVfU-VO^*$V(I7KP)vIsJ5Mg9h=6BTA}8dBD%MmJCAri~shhM2!Qd?yPVwtpb~StfQl3!j_61>~QlWM=p)WssZoo()YzsGiZhpKm8{{Z}Pzaad7j2}m~6 z)QkpRsA;5YxCe`0uXnvS#xvXsb$BP$wd?B%V4lEug}?GE`b(WM8j)Q|GSeMVAplf} zc!cjb0tvjmk5s(twTP=bl<|$5OCciCP%$BG=p22H>_BgY?G$nFSh|*XxbuLeRJn#@ z2!tFfbKJeN4Q{(6)m@*_xmRN1I{~Q&4&-PsCV(P1(WI=YNcnGCsWQ66$w@Yzy6@$S zkAKbK-*M#mL5h{Xv{ikEFM2W~(K75pEI-)5e?^M>YeD5{)n}}#0pg+Twe0%FvRgsl z>K&nGI&;$`l&jA^TF{1R2?Q;8O1rKAd23HGAU8@3H_uQvwXn6cw63IG$)mF*{4KBp z7NJ$cF>fbrgIKFa7W#UwGeAC;gpM4^`Wy5$#jhEweo1)89xW(=_#d?2ho4CiMso5@)^|Qhq6>HD zl5hzQ!u-t!@T`sn-8=iObaeshFTBWJcKvni6`P=M@NXTT;%K;ivs^vg({iui(@KeT zHvvWj#IGBygSi?o$ImRnkH7@eW2GUqSy4^a5A7C{d=8<%o^joOvQ2jVU^zo*SZf*P z{1HC7jCvoE9gTU!Dn*c+jZDVe9VRYumTJtuE3g*PnknWC`(8;gB3p_eu(=N-Q*c0( zSwmbY`s`ANQ$^?Q>D1k>hTL5MnJRdU4c~34RSB6&Ey@TzqvW&h8GpD9$*gc=kd4u7 z5fI>+iMIx;l<)sC{zZrd-&vG(H|K1=y=AxF*ew5X{^70*VS%|80l!@0w|t~f$Za4oA3y(JtXNDU(n>94hrfaABI zL^S{_r7_@D-7v6<6O`w^i3Gb7-9X^>s>~?grC<@>k|@DKo^lY-ytw$WjbO#fzObF} zNa0)r3RE<;UpyMjkI@VOUiS)DfxVBD2gxffISy9kF>%vYgxeU6{DA4@n#+8}6Hq7j zH^XNFGRXk04&!R0>A;H#Y-9il6t_4U-cL4Kx0a27CFO(QJTAL` zjYcM$*`f4FL;9aaNity?K_qCT^gm8HBy7P3F$b6FLqwMg%HA0)Em8$)qg|TG1p?i2 zd-m`+Dh(r^7HD=B$;CSMg8PgC!7^DRIn59EZ%*)=ANf=f-&Q%bY7&l8Men`hPUa0# zPT4k>BAjrm-v9Mm9jIMXlE{y;dMa)q;S^M5rsQ0OdISFKD4ft3lUjx-KsKT?>7-6) zxDt&PMyz=T#=Z$RxlN)TKF8~Y#^bk_B*n$t0p@%x)fQ?%xQ3nsF1p#rSwf~WhHzIh zI&4!K7elub%b##?0w7Qe&qI-Mh*$x@z>Nf@?h>e_Md#@I{9Q1oSVrh)8rLOLA;AxR zzdDRpnii<&sS8n**PqKt>)BlR>qEh;W-~>A<`hsxFFp;+YEFIywsGNN4$`4AkGC~| zj0owA5503j&c%t}v1LQ$i(x7m7uV3qjMl3aWnhgt!BIn-)taa!mbN|kvf6X_BJzQ{ zWy6oSDC{&GuIYWyY8$4BIf?yZZuWTk*82WrQD&%DmzxQ^gve|5vu1L!1KMyZQ+978 zx7m&vhhjURrN5j;s8jKHzvOHU)g#rWsztDH*}Mt(=@M3&!n9BY3cs%u9P^=~oH>O1 zn3r{w|u3LA`vW*qLgfAEIhZF6L|2xB8Z8 z8X@zkoBp4_3i%0R8R=8|2`8h1>T=ot9$ZL$U7tJ9Y`@O2^`?#EgUnU4@O_6ZA4M{J z6V&@#O!+7(HFjXD6cA04zhJFt>ms~ZPUDv3%!yqE0sX^+g9EWiP!YDVJp;Yzyd$fR zFF8(mXEz}Q!|?hV8^`bAZg=V*dxDR1ea*AQO$3pf_R8nkme}4{ui3vOylQ!^s>LHwyIagef6>s}q6}dv3=9*y;fku|nr9J{VmF7q%)v_VzWJ9G7F7_a$C(^7eAl_z8p)r9oTWSRG1WNkt7O)5&o^c zlgUHh7V7#MYsk#&ky#p=@{#TkXzLd=<_Y0{*4B8Z{;@Wgi~qy*DE~VE{m1pt;18hH z%{+@PRLdSyr^o6nStI=ZW&bb!<9b>$(KuqLbRZH}#|ZI=@qFXMp^`~d<4h{O>i5D>y4(A$t?{Q(^I<-Ty* z?2iDzN!kWpFG@QrI?UW&z{Qi*D_q=Ep1o>!yqr`Q}jA>N$;QT>zH$&2DG0(-cRnWi~!!D zM{IKd*Cs*sw5bBM0VWjJka_fwdFJ-m0;5}(DfTWr@a%bS4BDOx&Gmpn?WAC=43;vW z56w!JiR133IwdB8+62fBc(${Tpd~O)F=vq_Bv4E_j_uiiFo}SNn z6oYv8oJ`tJ7CwcsLV56T5$5L)W76<+mn8$97pYESAT2v5t!^d0SI;siM)WB;5 ze>oVC76fMrzl)2+>*uicgTyFYUJygw6mRi+ffv?AQ$hnlNQ%=7q{AY5q6~0u8;UBRuMMFjcdKiFN0D@?5U`rO_+4 z>bPst628TJ)n zsy2uXtEK);i7aqJhv7@-@vwwV$8XNd7L96A9oksYaCZ>VJqORP1T1mLYAuHtw5`=8{8UyDVyw&GLfq2D3m4V2fRrMxWk!%(cS|G z>2#ZWPf)2a&=g6qM+q}ulPzX_m2?x3FEcrwRYD##7#Y$2wp4TzNKm98iu5)h6qz#& zU_)8g$*A#NS1GOuU$qt}f@ZjzxPK1BHn5v}xGJ*|_P{1g+U7byiZY65{+fwom1 zbG5ZVsD)~tu+4aUrM&-DS~5~vQt~RAR%>8a5f0!O!Br3bs{orn?_dr;2SBF-(R85E zz_b#Koh%B>>ptuE5yw5q#*04h47EY{69cAk4f5s1c03MY-)C@rA&R57s)oCXp{77B zemESYMaC@ByDo;2SBMV2yg?Gvn*`ak9VmpJL_!%$d$PlXLXlDAA1Wl*+! zwcV)0v5ucgG>;M&3+kG=ohW@`7h*!ztM!ASQO~lscaE@IeSOm!w_00j21khwOk2m~ zTK(p{Ez{f0nv=QT;2^ZBxse?x`9wRBDw^`&CJ8u*+CN>1*g(uvbR;Ph6y74j5?zuF z_Pj4+TXmz{ytp5~jNE21A!$IV^P-7#JsGa$jEFN!M?ULhpFHDkdcvMT`M+ZREHFAl zV;#{hI;ZBSt|?rVblN7qx?9x-U;R4i;N%_FGrr8xOP>;xk}RfpA1pEcXX8@(Ix&cu<_mt})Hkvd zE^7IuBGsI{3j7(DFzigZ&_;jj=ihk!d&hlveal8E@ei zBxmKww@U*N$n=wJ5@M;G(pov;v7vooSUa6%uZ1@(%Ff!NV}?}vQHG^Hb^fx0!ekB%?il1DwF6OnBQ~ z&uFE#GF&i>H;m_zR{vqA0C(Y|v%LK*B{5?XVOR1~1}l6;Ao6@?n*@?FGS<(9x11WI z3TPktr9E6F0M$YncD`PbLs_OfJ(b2~1mJ>FYf(p|4~a!c9a80H1;i3@li8nk zrtfF}52dLd$4;I=IUHdxNDw~yNc;3S`6jjwMk+`Rg_6KKYg$ZUhz3ynI3)#*Z0$6x z7neD}>!BK8uOVW4!{qw$lnrKb&W+aF+s44oNeh-pV~QvfQI*MKr&|x&26K-#-A)S1 zhofQ6?Lu$0Km7YhHbhoqDtKf8O+mh4-MHJz>Da%U@PLR`qTx-vZH*j=oxFy$w#HL2 zGr2&hZ^cY97HRB`3VOp(=%vfCG>coL66*x#=^O0Z0j|1~KFe8_@i;=OYWOtGh(&f3 zr3TXDHC+dn0Rx;!raFT-&=%IlJT!%@K#NRKQc&qxLHAfPQWVQi6|ml1c33JNrs8rZ z1nH<0GPs&)of-@^&=NLRhmqFseDfKZD;G9KmeZZ2n8vlOv+T5!YqSTS!cNnD<%X2p z3O>OkvF)mxBFJqSRZC_T72&vI$-GLDEXiZ!e|DmGm|V{h^?9|iWI-jdWMNt`y}sEQ z_N;jZC76gAarE=XN@D?*q=u>J7r_AQmDR`2-AosP%HaVOv2jeWia065%+V8#Q%=42 znDVdSQcz;3&q?!3W0{@_!c6EpP}+jsp)INdr&u+sOH=8lrl@H-d)Lx5ENLq66jMfu zkJ33qw>PF%@E$SVcd4VY(*d&e+%P3aiDO4;rG2*Q9;Zk)pb4I+KL!+UYX_Ei>hGss zFuhJajs)>|LtJBhd(bn!3Av}xTo{DGL~x|Z1WmhG^rtl9VdP6gPcCyYJ8um@KL&`5 zrqz}n2Dmo@eS3aC8*#Ht@K6F{Xs}Q-kHp6wqxlZ36*~ZEf9M?*^?`S5YqO446-Ck_ z7G1HXC()raE2_wl(1$Z*k5Df!36fqJ0(-<65PZJ6tZ~Qgu2?kL{S;Y_O&2}*Qs4eL zhOu`~E(*yk#073a7^UfkCTX59>YLQUd$Nh~oD&lXDt0TRC9G?+tX*S9BTn{xLR4%1 zs@x~i0mdu;((-qV=u;glgX-_30;(JYSAy6!Kzz-chFk>-SqUQ_C^l)j5&X^Wrp>{o zxhPv8-b4u%cT|QXSWKh>_omzx@hm5QC)CS94Aq z&^;knS)w>NOH0i-ElCJQ{fcfhSx#9U?F^+eIhdU-KyPLqmatYyoFiZbiscDY-Bfph zFN9v4>%$qY`-N+idc!1DguO@}Y$g(c5d!`#o3vRytelq8@#WPJhn zHBu+jVE((0D7id4>nb$7V{_CQ_KI}`&L)Zc>;#JN`jBQzS+8m%Rs~)q`w)8C-N_Z{ zOkex3YN2MX0B_Ev09=xm?FS*G=tv0J*CboA=0t1^-(7Wnm;lTeOnck-c>x2`StbV-iRjHa*)gPI7-ZQV)q9 ztYrfzC)CfVBWT`^NTsOB%8cQ8uM&_@~SP5XbU+^s7_U&$_Hw4fP0XLyV2V zPNd!|%y85dr{le00p^bpj@8r}>WArp*80S^!i?-pr`cN%W!JoYN_RPTyqD63tI*N) zwl{7^0WKNtv*DixpXLfPs}Wy(4KB^r&4TT)aDSIVGkQ*cxhGx{fV`-RfO`ZXz6SxU zWjk4yP^sBk-Q5M?Cyf!*%v(j;GgWfEob)!yZ?YVB!`5^$Tr1aX*C=nqs)^js_LJfi zjz>2Rm7yoTq58?eb@_zqojr9gr=gvF>+~wGu;(YX;TG;WY}Kt&43m>hbQ&7bDDT;V zkv`bBX6dI@>Q6_PLBAeD5>872uS~sT>q?A5e-zZ_|A~~SelGlnJVxRa(V5$b0EEz9gtom3kts~2sQpj+|Jn~EfLga5 zjtI(*y1)=w0N6k%Kb9iM`2Bj!P^dGJ@Q7?!G6F8I9zg_=M;E&r`}p+~6SG$;aUc+( z!rUCu{GnXlF<%}aR0a#n*@Du;cGvpDbrvpX!G4k1PLD@!ugA?*Ckf}eBsZxY?Zz_g zHAm;z%)xgJgHd_}c+2$VsuY1U@)+5d(>;2@;gLvfgSL{o;5uJe0%+|U`J9nE*G);V zKC6alHl@-i9u2K#i#Dcs!pRJf4+xf9_lRi5xng_9;|5kInM&`p>+j`aKq+1OJlIWn z?o6(9%@GM37Yjra1+5Cg%}%Rk%iK=zD%5N#^7{dq*{l3jDSnn5?8Bn^!=w*HKBLwf8Z~g8eM8#zS3Nik028!eq57`=(`N00V=VnY(A2nC2%?r z@$n>w7U{!82P@e1!Qwu^xVyl4nwM*$S?Z6u_F336u463K%qL3QU|pV)fhLy$8q2Sm zI4r0|UXH5fo+H9EQOpNwjhF@#*ep#oHn=rbq%=Ulcp1h7Vfej;fI*_eE6 zzyG2^4F~kTp?4{bpuD~%^7GBTxM3*Vce}ZJz&Kc2E~j#c(6DjI@CJa>WM}gu#8=Tn zPczSMBf*tqMT-cg6^zHwxxU?yXn4dASUrWwRw?w_Q+KFO$i@I7-x5jFp*sIAGT{0R zpl)}m|jY&=)rJQi%`)l zHG}k+;}LfHH31D{n5@$4EZ?fH^2jT=pu}0&88v>Ti`5wosh=;fy(|*h7vi$^R08O` zlp~04X*&mrTv51Y>n7>Qu5(!*|u2q-7=xN9zQz91J12_{k+~iGe8G;1?XS ziP|rR_4h9?`yJp0qge`zNBg68cC~{)Qgi)9uOS8g4-!)TKl~P`k|1;G8xO>(xmefyLtJ%6PTIMqDR)T<}2E!2C%FTwf zC3uw4wBgq?oNn#vFXk_V0+$=hrt;Fjb9XpZ)XavVyAZ?-nKtRD3eh5G)^dU$> zKqPco9DXQp-gX2!#4PvR^Xv2ToTn-`WL3}3<=Tqve`&1>%iy(nB*Rf!!l4&8d`=?r zRGnJpgLihSKS_8^ChQQ!2U4Y5aA3YP$@rmG$c}XOpBxDe1P3Odz=i5yI_(u`F9gND z7>_C#om2&9cMaI2AY{*%vTtL9Dx#)o7qcP(dYp5z2u1?4(JHn0wYY6P;J>?Rhi0+~ zZcUIllx3^9P}iNkB0waHv|WhSk9Cd5XfcQLFX)T8F{~WcJg|1L`|`taW;%J}a@7NnYz2kOxxvHcs){FK6U$OFDCiuf)bl|?M6#qoRm5r}97*NhN1 zo>={Nfb!`H@>P2qV<@@7S4z>H|I|o<%@@*=0gq^UyYhkES_$yo_`wIg>Y8Sa_dO{8 zas|$vVlE&YlQCVMPWyz_O7BenBHE<%VTsN$$P_Dlp!wZ)0@1gs@!T!P7zVn(6`_2Z z_+-U1`ef__g_{P$?!UuJLziw2aL}jk*<`~Q-6Gx6N;%ZS+;_fnSRBB9`nEW6R>n|q zD%U=>(>EW^>C093Q(EOJoPfcZgI*N~5otxjII*JC*E^@e@fyiT~z$pGYjQ#6Pfo( zUDb{Ms|KGnOLs>Jw@5u+iAvRA_DMjh)d~dpH5V9qhFRV=4JqCnl*o}0qDwkUu$OeH zn;!BG5apa3N(H>v=8eug<|3y9=f^ZGffE-HuiCJ?UhTHsxPaXa60YxG4+LoAI8whi zU;dJ!N}OjxD+4%l9}IB#X7tyCs=tyk=0*q8SygiB#a1Tyg7bm{WpPqTn|0{JAXH7= zdS=R3(h&Df0B?+TrJP^^vna=%5Vm0az^pJ&kt#DBR@G)U0QQd-w0E?pdPK{Jvp;~J z4h2K!oC2>@hzBGX<<~%^D#w|_KuEXa8qXQ6D9!KOcMtNu%y5|Oe(Re?#z5=30Huq7 zzk8o*d}}5Ly}y3%?*^c^=lwh9OUU~dtF6yW-rp4Am##A#L}d;*9QUnZ9RwkBvS4EE zL=lWCKjP@a0u3rt0OJ{Wy|*oZD^uMqJKk^Kf-r0o#86j4A`3-kYxKn5B@$7xIrv~V!P$SLg5_CxF1pd`2-Kh zDdeX|VZorm!<4Ji{3Ay+9+P)4M*&3=vt7E?)quNmnDHp3^)ZwrNV82)Zc(oeb#g#1 zADtt!uUk>xIF@YT`QlNUV4FdH8!>NkW}}YU8L^J}@ax4koL=}wehtb2Rr$a0@jnJJ zjC@Wm5KSzF9Tp%1vdc%K&rEb~yb%)!|AJ6VaOX)M;_^7Tas2KAKru_^c{nm z&+6DwU`IBj^Cej-1DC%GH}bG#nP8j0fZ5b3s;cyHJ}$bYf4x%#NGEdIcaA9bPuz{X zSIalnRcKd)er6iu%I^=Du*MPNu8XIxY^xRD8qn!W;rVs z^z>PUYlG86vt=Wj9LAp}t5nTpOs>Gp!>gj4i>9jAS2@ffB8@v!{BxfwNGeh6S`97@ z>;AjO?kLkKF!f}W4Fl{`C1wCWU|YTEKw3u7`4-j6KNN}jK~Cr=we>O;i73AvOWvJr zOkt`W+qo7iqA?5vakhsEYKWW9ORv`!%o5G`E5@I{Up>H{;-?zx=T zQhoBxsxMwsF^9^nBSlKEHw*)Y?0%=M%}lZYLOSik+Twe}3shZ?gSW{}W`#e*8wqz} zHgdD5)wDchr^_4BFj}}DwjhY%n>fULW$k@a%*^jFhhZ)2GXUJ!EC?af;V#Rs#kYxS zvJft?eIkEg3{}(i%;}zh#r|<;ZrzYm1+={@zzMSFd#heOt*RGGI#vKjB3gfW>iYKuo%i4gL4qMrGXkv?b>n@3OD4f&3H}(r9HJo=t z=})*Hgv0$jNv8dKNm6za6lVW?&Y`TJWyK$GkdxJ49LCD*j;;U`@&#(Q_s?R&xE)v% zkeicR{P0`c0tjKZ43enAHGuO<$c$fIS=?XV3f%*Ugmp zk^=|uGsGq99lE9CwvhGBG}v?tF;TiM%FbeX5@R$vkGVHi zCiwNfH4E{LBHyKmyOsE=2V{N6rm8604We2OTiOm(`=HmU9Jqsd2rpHifMq6UEx}kqsPp0b1wY6M<+5b}6SkaG0j%*B|&-^O2 z2yw?N3g*D52i*_zK6>k7Br z0(b>x`iuWm%p&v8)766fN5OtjOe{VBjeZ*2Plx#DC7WouJ~Ks>PROkFtMR0MM$Wv9 z6a6RgKjNO1j6P|L%`VTm5vuD+55@~(PBUugEzEBp0tA9pE~IPqzdHPO72%I}SR_TfgY zX=75)IjBKWM}QGsox|Mt+IMyjcg+c<-MvRkh`Iro`CJ;64dJl z{(RGk|L111cG`A&k4P(vc@UudVybT^6r7ygz9ga}sn;RpK{ECeQS}|5Uz-(j95#eV~;LdRU4{iK)m$@qS4S$*dTK`d|pExzO-o!Y?~oDwP3b z2B@4YI5{~v1L`TLG;(1wIS7s&ff@8Fx+w%?aFmG37QqJ+*0?DSuNVb~q7{F-O4mA5 z)MF&k_^hQm{KRqZZx+wWfV20j;y8?8%+-n-COBpGvFN<;MLxnZug`>?bTvU=EZ|S_ zAW}hj<|QI9mT~GzZYW4MWPydC&Vd@L9>j_jn*b~LPwspfyzpHY;AL`cTH*du$NUlg z@5%&BOL$o#F&>)!IiMEm`05Q2lXi8T7U@vIQ5d3ZA}a`!?cXAwL}iuR*bR1Bnped| zZv_fv-3Y_&iRi}VokXT-uR4$rI0fxp`+b-jQT}V33C{u5+rHZo`GKGTsRzxJ#>6&eT^{bdv-yzEoAqM54F+L>H^ zCJ;!j=n2cUDK=~bu&O6pvd7+|M(B+t<+Jat)|n>|OyRAgT6eHfO&R18HB zn;&_sAQUlQ)s47V^6KNcu7bBK;3`LX%fd%5o)s?2JEv==uVAGbiHC=3MLqjk~aMTcX zKCrN92)xW|k-?iWV!gJa{LKz;T;>!la<=XR~!)n63mW?0O2`yGQF~X|N20q)XdW4 z`YN~atFAz(wWPx})nEpiGDSO#gR!hzXZ_8jC92aryf!2sVUc2 zLPSJ(^)kHZ2s|;nUs@#x*MLh6LIT za`^2coFn$e3-$DshJp9-88yxk!DIFc+7+FACD;$}w?+^ml#`d-N={@nX=i9Fwu4W= z{bDS~2j}axkCv9)e5*dqyjMxPM!ol-aR}TBoEbXo$MQNeO;c!j#gy*s$TkXak--d0 zL|W5tHms7!UNla#WCB@|Vl(@~Jl+eX>)8HVx@t zzhg3sJO5=!atzf&m+>8Z&+X%8Jgxi8ORWN4ijWtG1zpOA~ZzvS*)o?*o$0x zd_WCX(c1_yo%_4kv^!UwsZcw-Eb*7W+OrGZJ)8LB)^5#LxcD^>{FVlUm1yC`_<6d= zD;HNX$7Ue~b1kadq+e{EBcpU^tRdNSq}Q{CEJ0SIVUI7DAAgE|O3>9B$D4I({?sJg z-ei_~S=d+c~~{WyJF>8e|R``UXtuT!sF())?6Sqkv`r09OA8v&;T-0rKA> z74OcnGnLGGZUsLYTMbjz0o2nu`cL}*ntN7toRsV!140OGy=2=E1ybii(WW>JRaqPY zbRIVeTXm*1k`Rtq%OVB%E*j0cJqU^HAZQx^G#QD_uu*WwE2-DWgU<@X2w4=P45T-H zNm!hQR>s_mk+xxt>Ds)5#?IaXo z^{)dGQ?twdXO?KyzoavNiF`r9bNI-NytpMwV7u#*v1GQr9(wqgv3#CS#{T+!wQ8z? z=qxMVIYyxR4qC+{k|h7s(ecK_>UImJYK&Nw)I3N$gw>RaJ2Yu7ScfkqNG4&zQGla~ zYvR2W?OGGgj)-A{Wzd^IKYp=~uODKt-y-WOicCmW$L_>NPgRoA-mfP4q^*f5_c3QU z&68ilOmmn>T6Qlb0CX#dAm;*O(yo-%K*czMdO*e|l+m7yTEW7Of~x>nQKsx9qnKvv9< zfApI0ABJ_H&xl$SXftk8r_Oj17VJfH_y)+M`^I;WAUjsd+{V`wLS!-qIA_W-5J+oS zH_Htz$u(#sdMQKdA`+|)O_HMS$qd4qNtd@Fh$m$3KWQRREF`G(ePdRWhJhkaYGeE5p;lPBg(1`U=WZ>e`GBi>r9&eLld~ zRB@EVH2j)Q&Tqx9^kzFafH|rKj6M#jyye~@AkZ&rbX@dLOI9ASANkmy;bAK`A+79V zB#Sl>`BkUZybX}g-;o&v`mRx#D6a!yosA1I0mUUz>Xx0)4a-tjxFc{>G=qiFvw%@x zchQe08#F>nwR@nDTPf(E01vkPnWVl&COSl_ zsV~Cj;RDT<7G1DAR5K(3n5JysoJwg8$bB?*WBH+DC7$*rmf9p5kOh|gdG-RJT4L}c ztw4>Sc_%>DU32qY9DICY)D{(c7IBLrP(iPZMVJ;bS<)L^ zvjg4pQchno!dL@UAwP8y=U->v00mCI-YfeY;1=1Zx**Ql;4)MX6+C=UVN3x4x6q8W zx&v3S<2{o&$?iCuc8A1~4+HKsLlUULw^Wg;cR{)a9kC6>1Jw#>h)5xwOSHwa} z!fT)bc#f#TIBvEK{OqasXY7Zei@yy?${*zi;lOY<5VOm5D_OI!>@JmPzp{5#4*Zb; zLAK*y?A4^0gP-cF@#Xu`MLiDkBb|~ox@_gw741g?0Jy{fX*t-hSo8~5k>v6bPMnc= z?Y}RGC&K$zNBU#@bJDo&KIOz5M%l8~P@iq#z}G?!o*A7+AT#%lLbMG%HKrCzC)gff3S+|QIkmGMzimgF zfS$2gJt12O&oqX$4*Nut_?i)2fSl`mlX{fty9@Ik9)kRe-#7P5fuD}xms(s({kk|` zL9vUDptoy29r<*szIP&BSl*xMU%$;*uw-l`6$tX+hmwM?jZ}aIIB8&{&nFm%eb5L9 zF#=5w`~d6v1A+dTP;=z}4Cznw7Si_L2ms*M4~PC|eJiA#frDQBT!5ve8nK)r+jK^4 zV*e-eKNe!~^SRKU2^A!yg(-m}0WS{$gFBNk0U6oPg!|uw-GIQ``)9(#LqP6JPT=*Q z{Wh2Q?*>Ky0HOcCegJ?U`wsx~PwUPUBFAc8#6E&>J9X0MLI?WEd+Gnw{m0z1jP%E1 zOaY8S%w>Iig5xFvm8paM3;s4uWhn^&j1ruJrGUgvtSIGJWRCuU<`datJi9mh*Pdc{{R(J3iX&^# zspr8j4V`}G`(fbg>~j^TB`T`NHhmwP3}#+5xt*{#r~B_7IMbMu22>*L`(C`UkRi!> ztw#@;=`^dsQ>&Azc>RK!aRhxz7Ao{Wb8!)dj<%!%PR)$2s`4EJo$BFeZWGEU9_$6W z;~?y&^>qHrLHg%ktR8llwX^{Vdpaw;&eDuSTOnuX3w1eSt|h-U9>+1~n%5QkHIb18 z2ANas6tWa73icM!CG@AvYsf-Sc4yr>>8{e)F1ZF$z}xlUL^&Gq@^m6ET@-(s{%i=I zpj!J-(s_P^(elsR?j-6pPJ|{7j2tVmVCcc6gkzXBn_R8l_ovoAHmfUfdpfi-2>H+h z6jHV_%=V~cr&qQ8mIyY2%`G%9crqXcm5x&-ZE@$_{|JTEEGJ(TRt1GZ`E=`Lg; zk9i-529u6(rRLDvBQ|8gTL-l416L8+z_YvF$@K*&!pVXJ%woc8b3w(#MQ7gBSojw5 zX-oZ-^7t#y0{e-9d4pe9wSeK%<<&Z2BPd%f1`9xFhS!T(qio5hJw^uGTF+KwmUjG) zn(F>@W12;##x>M~TYt$@uzQSJVO&q>plmLgPvbH;Kmf6k1aCvWfr@I!#58Y%Nt+5q z#`_pNsWz^|U$+f6YAKZYK1xM%lXU1GYV8MimGy zc1aZ1vl#p$lU#9<*PzmABN$p9d-is}To(u4^9B#>QUaLKt)N%s-IGSIYGcQQZ5%)K z+#t?t+1};70Bl1vMVx8)WCLs;j3xS3vOnSV&}8;sA11^^)|*5+O!p!`==JC4MYBCs zYqb}-E?&V&)GQ9!>@U51zC$DIoE~|;o4}(bwA9w6TT4g@c8C*bt9;gCe`2fbP7E4$ zXdLmzby!`yCQ2-Ja zNg`aJZ?6WV$zCK~Tc3Q#xli5L!LH0XuxU=%UB(T68|C}rJMWFK{Jq6i<%XHg0HtNg zD4KRM4*_4__yI-0Mt4#Lzu5WlF>n9;{BU_^z#<^zH8FB9Z~T0H?Z7>>Qz-XRDB=1G zOU~>TB8CMf$5uxFIZ1|ZYQ&BC1=siP%hsN`)9VA?zWwsR-1XCd!S}}c=u{1%ngE9+ zXgQF6C>OSdABVuHPH*pNI=Ig<&XAF0zNp_+0M%)#x)>n6QT9$ns}cT)?($6%QBX+5 zo>NEFL7X|LmZ&QuqB*GmiKx6-e4MJ8y!f^|usBxP;X*35Vh-4+^ff|=<}|TY5zRl} z?FAUG?gh~Ty~iQtg`?erK>whRGJ$3HkYIfT&32@OL9au8osZ;WoII7}TOSi>oHvU3*_g)dKh23MoNj=Y_R~wmL#wJb9Ol6HG!RRf-0Hq;1Y|+*-dHjwG%1 z3G{MD(!^Qi{HTm&er@$osukk_CSdXL7msQl=unn#yQ~82qmZ0MJD_S$M+2TF_2CqrU4Vtv zwA4`&j*z{{EXPE1v2(@)8I^$=tgp3qc?)Yz6cQQDtLtPGuy7~->36&K+Hpo?7sVc8 za`3*m0m>`6=4`ufa?KhR-VvlI+>t8s6h?*gmYCJwx6xl`^ZKtIY~7gxZ-Gc}RL5Gd zE+%dYLN@7KTZ(FiLynVbgRUP1Tg05qu>#+m~bA?n^tIK#x&&4A$|r|HgYYU~HvNsy@?Ha_(<2t^|q- zq%kzCg1=i-BX?R3fUf z&+9Y$G2S}PI*8Jdc9r6N(1Xh6vya}vIS}y`jU{-Td}L$q(Ynyz1#HS~XZvW?v&qb* z$o@RcaL%r*{gk?>vZ(I{rJl96rQVUt`}nQ~n)jfKoCPDSZ452OwPDB9fEEBuwSe^m zN*KS~iuYgFh!my)oUYc;btGJ~x$m!FS`00Opmt%ai{d$MzaaElo%~#Ee%B(g>$G{# zE_GMCULoL@4jz>#+)()apcIX-DI4aVQQMi%QJ}A_)s|_Z#1RC23Ib{`5J^ZfDp3XC zrM_7-Jn0q8$2 zWUspiYciK`4>p4Mm2V~Wx}b1%-eFo;ZJ|?5j?~4{l*aMkFomsck=fE*ZO>>uYr`ed zhQm~CTJQ|9L&U+Qj>-~a&1{KfhZHV+KrpV$XiL$Wy4;T|_1fE)7D9{ql?fsa;OmwJ z`qvRB=L=lo^!gua0)XT7KZ;HP0N9uHZ}iiIemdMg54668nkidMosM$LhIA^28^e&v zdGJ4p|B;`>h>n)s!I-0K95Tqk-$3qSViGfwTDndzI(~0`n&UMmZ!+~8xZ?!Q{!4uU zCE9e2pIk-~Ps|?hA^RcEjfc3eim!M@hsPONrtt$&c!I@cm5HlMV?{@2M^6Qji}PdT zHy79Y@HZ|lt`7IZ2zrQJ9P>SH_n@3zxtCRX(+zA){?$ZXG^dW@<_XH(4$#*8yxwQ{ z_pkTa^$j*9q4>nz1OF@t*u%Zo^o#gK=6k8V^B_0LE-`CNJt%J-$t;0`WX?#fJ^1qU zcdJ#h8n?ghQJ0_T-@mvxeZh=!#1C-s`3Cc44-M*8{cipI-dYRfQ`Zf3Od(v;kz|Z# zd-W8E++MuhY~DE}z2Qkv-w;S;nUGpZIl{5;H4wol_C@N6gk2Sjii-)hFgSNQ*+gpn&T*zrOYLr zJDj6LBC>R(e@?t*r#Fj3BkRh=^%gsklJ7l%yn%amJL2juv@W#9VLi00eE&S>=iptV z`HU>n2{fCQXN7D;Ddf8Zvvb0)U;MPPQxe-n0JOQW$WPk*UM#TW=}G{~@y~KhtnkVW z3v&0UHQQ$8w0YZhkW5ECQgg=G!IuV4S3=Kd%FuBlwMitA>S9Gx*k_X^EQpr%C`FRt zD9&61Wg)AnLMBa1hDDUgibdnjzvW?S=!2{!mj6VuNcM;T;l>mLK6%J!II?y^GLeo# zV&Rq~4yJHkoNz^w2&6bX&rZ_C9@f2kSH`lkK2T{EgHQ?LGA6OhPdGY1?)Z&-UX5xy66-DoxPxkoa^ms*ekS^DEHeZYejX~FN41n&-(iHU+aK5prk&GQV|m{CoygNi_&&zkI~qswhMN$#b9)n~_2qWh5())0off!? zr#({cJh~m1XIx6KEZ0iz0?GYZ5)I8P`Hb|E z&ytz6Zp_I6p{o}!yKJq_$xPuj0&hl&-#2#_5_5iEK%cH3m3>C_H6zti;n+2K9Pbx% zu|JJ36dQT_z66nv4Nmttg=9K!f)cNB%_us4Ft$vrF09|sUR>eLxEAD z@f{-*z;l%h^)PdHeM#LC$snQMKz+E=b`FYg1SGK@x(V9OeN*+i5nn zt4dLP2lGg3}pGT0?9W zC}WW0ipZJ#-UByZ2Cs(~(eDEtL30-cIc?*G`QzJl4JPbS45UP$(ZpE1nT8coQe@U) z?HLHt2l~vVh(YTG?uSEjd{%UX?2XeUVDT4-3Y)!5{ zX(rr%<17mUJ$0+M3>4E(yijt3s_SW(q?0Y5!Ha(%F7#d47q!W3~r7 zeUK{$pO?MiwggZWYe9fiX#Lsmi#@L=ma4(wu%`W0Va%OO9EoBg7CV*dcv#o`ST@C0 z7CKb2a1h=p&Qrx7&(3uT*1~!m!>lK7WYT|pmo-f5BZRKcY-`c$cJM)cGAi6~E2Sa}NsX?q!iVlk}`{czHtjhG-Xk5DS>v zmCrX=0>Ho!F`-YrCev)1_ zJb}ky=Ak{D#}4Us7^%THADFT37$A$(Q9P&%qu|o*85P3h@`lk|1JD%~4>R7|udL^Z zsSO5WX}hQNVSfa~--kn@2&*k^PCN@f%m-yvM!*R9put&$umiH%=}yg53xU^eT;Yvk z_%ghWmi8}0(`t8Gh|IuKshCK;E9M#IEVZ67TVl7*rrL{#{zMd zlcJ^;m0VsC!i7*#VYfC((nD{Xy&v|r)3P_)$6ke&)YYj=Ms&}tXuhK>0)|iOthB~N z*u9avWhQZBUn&OSBZh1l6#`)c>sXx!)WdCdUJ$B2(sP?I;>fNfMqQ%oTTeb_PF0CXw9>4s0O-isJC6n1QD)H%REwkM7Akjv zXMoF%H;$yxb7&EvHBNV)lx0R< zur@O$7Y;TqB45&UhkApQ;0%V0fZ~Of5WhM9Cae;4ZfY;sDg)5}?jT zP|s35MsCW!JJ$$7Xu#3U5Lon?dCaC3Gq;bUyRuie00%89tHAH!?)W2=>a`|$Enowd z=mDXf)N_Cx=``9CjO!2PSk^Z7_aeHKTv@BgmBtNS;2Ufj4D72iBZlsNN93y&_e~6> z0P`JQ`?fp!lfH12aYXdid=rCKED2nk@BNvUrP2||fy+Pm&WZSyV}$a9uZjqRs*Am* zqZ51bklGBEBKps+AhXQ5hu|OHhk!0X?50|86b3`?h;g&Uq{vx2Hh(HAa*wLeN~N$! z6KE9_1zLHH;8V*+ff0U0t!SoW3ueCkveM~=`BCnWKyl->x_S9SxB-0|Sgm1EXQb<8 zy1-)8eke6dXhC%o_(DmC%Bh1Eh6-hLEK6J>t&va{p5=&>{(!a$s>;H%=8(;6gg>gx zZ|{LL->gqLK{R4)@8LWf{Qb2hm!9f1j$*ZX59Db#`J_5SfqWUZ410#R0PW~qm_<#@ zSx;1fG2#yy>o5xKJO;ao}N?VGlOKmmZHN|&WG2U>I0b;oYr`jLc?azs! zVOpQzdqaT#Kc>DhMzki_ zc06;&wtdF7ZQC}_*tTukwr$(C?U^^V3A5HgUq9pLx+y!4cJa^nCcDZ0Cp}if0QfWVkQ}2j_jKv`M&IGVB}A!O}sq!$5_y_*6hMAt2*P|8B?|Iz!ej?&!Wki2}!1E z=cFAxbZOX82(co9VD=I0&u%^?Apk~0iSLiaxV63y<537*`J*s#)_sXlaUT(b)+=Lm zpg?PJGGng=bh35lb4D7slM{1-KAjmSVmeo$>9IW_X5tvI%*=rffAOU}$~;Ag%)(jJ zj8hRNf~Lhldqm1kx93Ye=x8;DTnd1yaI3^hs3}32oCl_!gi|3)P+?&3BLk9V0`u(T zrWIlcM)pZ6YK5lZHPeDXu5Evl+)~S?P*$;k$6J1OiT(&!VKrs4NYa+Dn(oNJA1QoF zDvo0+*^xkAf(gru>I$WKl$ldh$TOgHt=On+8dUXRFu=yVOb!di(`WhCV9K$(&uqIh z#qt?pPf^;f9Cp~tX?_@@WUl?(Op@;8;WZa>-%KZEHE;);SyF)QLlgbQRHs$c?ZuZ2 z%>E=8{DH{8%2QFaV}rFBFnRq?DKCrO*D27l;`&lKvDfg4Hi2^0Fc?WAH-|X=IZHSO zKm#3THQ^NrJGJ8{$g3H)ipA<2tLeNr&uM%2Q@q2XlS z2A!XGTqu!zxiX$ZWqIk!|jx+h^lVtnjDY z!6->i@7MOTT+y|Y*P)V{ms5f1UO-r%JCCKU7n^*BZAM{h(()L4)?t_uoFrq@-(oD)zWN)IJgqz<= z??i(KMYkuBr}uFn^7Cd`QjU0vKFd702m&e}{~BGfnc+T_Trv*%AL&_1t_3J6pf97w zt%W3-xO+*ak{W3)E-Hz`S=CWx*Y0q3?5+S0j0a{X&46F_-dJ!=dSA)~diLj~b8Hv| zq~Z_~)2`JMMgl-kR?zh)xI6|8PVnR^nK(a5Yis`(SO(#`(Yh4~C(5-hg#y_&7fyvo z-?4!uAgBG5G02WkywRadiHtakJk+rahU9^D2(~a3gKL5lwh}OjFqA~7`{794zrf2Q z)(1`^6p;qvr-xz}PXiB0Phljc4{rV^?OWT0Bn_*c2e$R6t{A}jCo8ZGxJg)tOuf68 zRm$B~Q*M1tEKD4>Wvd@ei|Fsfc! z=bq2l)Ep$MaZ{t~tr{igtI3ot2n6zu2Yu2@tDRdEo#2l|V%7<1XgeDizcIY_%? zstaL$i4VI~s+1#7?EVp4HcD=7r@UX#=l!h6AM9|k-H~BT*?3jY%f-7zyMNYGxvffX zgG&Ytb6@Y@&BTm*wPTykiE`@5<)5m_g9%fsRcZ;7tBE&t$hng*sgmQBkHdko#qUvv zb&?pYKh39AhRA`n1q2J1M#5^D$>8!u;Ev)Z)l`l`VuVl!;!au)1IT&5g&OUk5JL@z;7295lXG6L4*iawHf{qy4J=mHz`tzOzg|QeOvJxVt=Z z_~dv`k7Ft8Y^Ut;pl3NON#Xv&d@iftoZNqTqWDVdw7nV1QE3~WZ+VwU?)qG?r=Z2` z*>ItxaXhc^c_@V)ag*`JGudpMvk01wyT(4d_QQ(0wC}{zjAg0TJGtPoPvByQo2!GP ztW3aNpA=tCZW*qNNim)7pxal>Pxs@D?||Kv|Wx&(xfGTukwg_dTJ zQvG!3dQxS0f^$Kv(ZKA$q5HaINf%D%isNtY9gN0yo)a`}ZtM)`rd;XncF4X{;O?_r zpMA+F!+DU{aX`Go}LB>!fSaj0RWlTw9~Q`T~L^Ywb3t`KPB~ zta71P=b@Q763rM?=qX7Uz3SVWNqeWb&9u7_cdk4w!s5zt=?m=kJbDGmlW|34dGNb4 zp+bs@pO)MX{$>Xej$E$MEdfu-HHw&%hQf;U&nWR9-S{CW`CZRp@S8w#+FZR_LOlCK8&ChOrZtYidhDI|avYhvLvs6wjaMhqPPYLs`_#QmDfst+XKPH+WrM_+( z{q8uC&59V#AYK0`Xmhl5Qe>TYAP$B<@#WCbiXei|@+o=7ZT6Dr*xz0$NIek&C{bGk z)o}XH;Z@uMpSmfLwiG>+!ZNp0W(dJx1;8^ob{7FlVA;6McbQxwg-!lmlCWG0B2Xpd zd%jU7*a8RD)NdoBix94|JFi*QSu(K}jcbv>oT0TAGxt2qt0eZgTZ2X`wv{sH32psb zmLgduH{WGcqSV>i*jH|D$)T&i8drJPCE3`b=1X4Z5!g~t?n~ncB~-3vsI(?J z37yyj0SeMSXvqAe-blu9$A{)^J$%dQ>*U1);{eM+Q|l+V!{?6*2?qbB`z-wSv#U@m zvnjKzGi}fnuI5`Rv=UrC8ZHmgY^A6l9u63`dYcp_9(b?xM-o~I_-KeAo@oP8*otKzpQ1-; zmY@vwt2IDjjT4R=zz{Wcaf?enL#5c}lR!3&SpeQV*q{9Ok{6Wl`7eB(s(uKKTr3(n z1goB<0jT?k%a)zr0juTKM7(jyWcb<_w%V`9(WmF_-1zhuGsBQ^dja8b%P zR9Qqg)lFuY-u*0_To^+`ZDMR(nh=0sZVoh^z*w*W+kj^(I&4F|V9TbxO8PEls|28F zXd5})mEg*;R_EMbX5C8h^namF4Xui0MG62+f3tW1l+SHW0GP@Ust$lURC(zi7t5i9 z9~L!$!;3K>bIn#~`RA$x=j;}qIVOt(*7}pyF(*~-Bg>(-4+~o1t(Jn|kEWBk2N08@ z!@7h~IK1tRBAK!_?O1XB6DZq$)U&U_6%CcWKo z>*H(l2B%HFP8uyF*=HpBp14n~KyNmqw#{+L1gqL{9rH9STjww;LAx6l*Vz}TC$Fr? zgBIAY-J&}hsWlF|RKvAY9Jf$lMaB*%njz_sG|njK8E57H%;?YL&MAsDFeQ-B21&$! zS#s;V`^cPA{*L(q0EDCdhrp)*fMfmtdA}z0yWsxov)AGYn(loc;gA5|#!ns-mDV=} zxBpMX|H5ydJykkXQyF>WW=Ta%>$JF8qEC=zI`$C;vf)o6fs8^X2aX{rqju>k>rEDM zjh7p1*Nbs6e|TgorCMG)5>+deGJ-Jp+_H3E6_os^TI*RpBn?IMZvVrybjd>5!>Lgz z9gCkX&o%dr&ouYXhmAmBtSShR4mwtVLhIo(w3$`z@Tg#@rWrg(wM)Ns{@>oa>M(-P zUI!Ri|Ba|6KT?s>Ep)Hj#29r%jb1rwznWPg*+ChV&=10h)s|BWR}5JHFeiBCD8&Jp zQ+F}?58kFwL5%oPizNsFrUiaSpf5tHB$!e#$M*sFd$z&wi`!DVC9s_+ZMyObZmIg? z6zcp`a+&7M(lFstMbFI(J;IZx5s4)W<6d=4|#a>-cfCcxfxOhm~v{HIlUev@qD;MVWxNpg(92NZLagw!-4&E2&(6h`m`v1 zFW%i%`+|G}npHY&xhwo(XR_;~Xyd;JA&jW@9Aj)z5n|@AM<#xft+B{!1Yz00%EnTB z6~4l(m-FG;QFNNLQ;CvI3{M#=DpktSQd2ng^%#^+meTqR&2_O82dMPfbFTAg71EqD zPMZnZh1AJdSQGrXHj%sqW)It+YEB0#gtuYBmlLmJ-6d`ZTveahj2ILFLaEj-m_E0f1Z2;e2V?>wqcbQtcy-hpWYr91&9dAyhx(1pc;BHI>)j33KF@zim!8{r z12cOpta&-6XBTFlIh(yKld-?z#G3{`l*N8bE&m*+<&n6|Aa?c^YUF1Kq(>|xKCm)! zVY@uy z>TXQV^oeaN`O!-_nV~C_?r;smc&(9r`vyr!KWxYe)Ed(?Rgs|=$oz=OTwDLAqLQ|F zq?K>`GI2v(@dh5zft~Q*c8~i04}s?Xzx%lVhN0m9%M+VlFU*>=)b(3QT&2R6|GE@N z7!Ll6{(ttHCsMej6y=deW`vQh9N-NN^2ItC_#%qrkbnu6`FRHWGzQti-aWg540`^3 zP%z2iU_;QPzXnAxl=4YIvxSDu`H>P24vOQP<_AE9K}!+R-#uoF7W9Dy(}-n!uJ3rg zJa&5gxZN;=>M;V4fb(}rn8ei_9xaJQZmxx@Nb8;sQDsTC6)_Y@AM?cd zp~$OlU6%1Za%g-$ni=(1Xtovr{5|zA4Xdg}2yH|LrrOI~gpgdD4lTRdZM?p|+W&rU z(Q_IaPc<86Hn$|!Ec?EWzD!g4T2q^3O_}R**VZG9oA8Qaj%s@g-=$OSGOKSuPfn5R zzMvg~zumEe)-L}LSYCkR>yB(bzPE?*aJkV@-P^v;geMhdl>0IJ6gXJoZwGb~!+O&bl9y`N6Nl>tWN}QI?^2J(Cg}MQuM@v{1V`x& zPDmWQMXU|!7!@@|!8*dj!rB0~@+7PB`b1@r_@)51Do^x0XJHWG*(wLPMRoRBeS)oZ zB*`NAodFT$;j98cp92aDtt(gF)bJa4Km1CUhGZllYAec`H+;Tyxr(0<5@K8QXr4xe zwi}CabJgC_=dGz6?3=sH)j0tMX1jHDU239GZkt!kFKOJY9j;nakim5^`+LP|S1S1* z)hj^k%zp@i4gfg1`k(h}a=#1VzYT#t_Lm*-%y7&i%YGU&;4q;Xf7#`KBK{ZtJ2+*n zu!NC^O>>3o*?Wr`b0J0AV#%*X@ca7|P$IjM6gKs+$+!XXGq%t?HlC)PO|usLAwlgc zgyI0~`STG&C6&MbfV9p2D;rD#2D&?$m4pKg6GULQ+nvggwpZx1DfkEBRG4EhGwFSE z^>P(S%{WZU;LpuTPax4(zo1MQEF4PU$WKfyhfg@deays?*OQJ?IXw! zXEaZUIyu4{p!_^!q?a=MEFAHlywF)Kgqap`{JUKp{Tga^0-L~?%%y)dN4J5VaFv=3 zyFOBQzTZWH4T#3H^oT@LI=ABA&~|Q1R!D*2d;`_1U}*|d7^@r=^VcgU7*CR9P55+J zF>$e#t3i6#_kPxHAZPXF4c{zggGZzroSVOoo@h~u8eqZ(fHv)7#Ag(H zlz@2+@V+T43=ylE^Zk8`f3#1D%=K(9P)fsX2DjWokrLsgTD&cR3Wp)%$Re!*;HcKfV*@|T~PJZ?uLg}Ln0QXDq{kU7+Bh~>gz zAK|3K9I&^n*1=hzJgLtO|mxSRV>m%UqZGv=XAOYk+7Wx4v z^#CY3EoOA`<;WIY zw{7IG;~txS(k0{YV?0a9q`PL1(e9l(;pR+o@byDW+UCQS z-RWELzx0rJ@*g5V0sy{r{OA3e>hD7QFRv`~7Ps(&2zc#gmLL+)2!YJ_ai9KA#Q(x? zUeUDt<={ccMuKmI;thr1?Qc*Q=)Aa`0u|tE8>Bz!Xz&_z>CW_G8Aaz}-SA-Dyqq*~ zf1VC8c;#0v#7e$_hVqX`_K3_t7*2Bt^{w>R6+{dRSBk1|6|`Ya z?3BBCTO#yM78c|IjYjNLc@m*Mt^G($7ivl`Bb@^8n6K_5#u}9h4T+*N8gxkA%vZ40 zGVqkl?sK4V$I^%f0X(N7*!SuouCp8e4F>(#pgMZrfedo3SmI3b#GOh;10gwrC=RR0 zU?PP~ZDmBvD2sE&ag$^VX-=C=z=)P?e@<1lkPO*u&h*V8C!H`lFX#vdFO(OeggYD z0u(l#44GLi%*c)1GBgotjhlZPh*65k8j>r=GIxGv-!;%`H%B^Puo*7@sF1jCuwnwh!gARsb({x}a8wD27zk z7R@&jx3Op_E~FNKu^%Fw8{xE>d@Lqt!o?Vtm9Zo}xfIO2qw~H|vL@NWR#n8>s(Myo zj~J4k*Y&Ut`syV)4e|)=%AZxpkZF~TFyHTDw3C2UQ4etQ*p$Rw=PDZsl|bm8WJ_E+}g1eUzjXb{be*m`bE_6%&42#HaFX{j_3Q(ZopK*;3dZv4Ut>9^Pq)v>SYBuIxqsct=+yB>n$~(SJCIZ+h@g+v=Hsr z4$acX>iyGPe~-v*OB<_1gc+rPSI$t*HSXFMtXKDd$6{ape6^_J zwB~ih?7zhXJp?$UH_Ju5up2+5|Hn#Kw13L|RUUlsra6JwU_d4)W@M-)8Ut{8(f6eN zgW?-4)}i;wADJmrK2s=W9szhzvcctFKoe@+jNb1KNezFVGkQu=sy}m_eo`&oH(ype z^GT;q*^-3hcl z#aH2H2rJUbo~E7vL&y&F(TKXLE_E{qM|DxgF@&&kK8Z0 zju-?MQCxB!SeUQbMHVVvIOhpj>WePbAGoRaWskfsSJTP&W;Zj+fT{Q9kUTF-wTA91 z+GM8>l7iHyEAYIk7>nhW9nh;2POD`+@A-NjhGxd|uTjffFZf!|!E~L6&)`jhNBS*% zP`bCRd>OHNcqaZi2g3O;n#LZWt%^{Z);)B?fPz$3)VfHP<8gVmuV_f7NEQ=wcQXI0 zOPfAVj-Mk|3;|Ao!0M0($3V5w85}&{XJ!CTV4&&SVqpF0{02y{yzW{S&kM5otQ9`a z$UV3$GcPcI@a_i}x?2V8Rl`|!wN!@&x>FL40&=E9hn$e-!QCtS6sRjy^cJWQamkS$ z1~ZDo-Rcmki)*yLL>JimY(ex9QeA=pGfNM=Wxku>%MTm2^-2yI-u|!R!#z3PeYTsw zWa1#LiTIMxd2%>XN~lyBey8sf`?w7&Ugcd*7k9B z-7r^pz78<^R4rJ7YMjONl_)G+p~|DjH&D4-46bE29}JDWy{#2VGYIheG@{>y-;>EH zuuqCxUn~3(kAIiFUQgv*cS(7D5E=v4Kb(O5$3tlES1(q>dIKGwOi^?%1XeXhyj}yQNypQ6<&S5O?IpG})$`Zhadx79w(`s4$v|7dgc&OXJOlx2> z5dDe(j)euw3l>L?Ir5Vru`B4EQk6y$9=OaM(_mPn%PVl{UEC+^BO&Q47Fv}^Olm#o z+dCPv-va37bQG#X3P%b#cL=A**Iz+J6w$ri9%1GZk%t#afPp5@Wv=D9T9w4Kt9R86 z6jX`VlLcfF4%zhU&@DkMGl5kB8>hz>{l)uh!BmtntVh0~9%z6wIU|Th-6tG&x3{=n5W;%M&O@Vain=bwS!Kv7&i%_wQOWWTL zSnZ!D?;eAKk{bN*B@PZ9(1Cfigz#9q0bY_Iepm(rbinIOWy{=OvQ#iVx`L=&zTry| za!fr7+6`s3l&dRHsLswvuEYpl34{?UkOus*$<5Ep{o33>i-w{;3IR zj&{{#5F!D`)zMxP(zPg?XJ2&(7QG$NZ&XeoAv9QW?g^aK>6{b`+VsrGc+!Nm<$Jj^ z-x7e;wxEIraFdjCtK-}IZovj8mafi5rVhF<)L}!k!llR)BkR(Ut@!a<)iOm=R}#qJ z27pyYyDKT)%&J^nJ{=Va(i63Rj}QKa^Z+9;VQw^Ii!log^}3tN*Jv8akm853Yx(qD zveWyWr0mc4r|+Q`QLAKOv>1Zn_GtH%I=DP*v}O8l6b+v1QSC%Sz6w1>tCwvc!ogH< zFOh%9GIm^75Q@k=<|91lxE&oj=*~`6`n+dilyBE9*bn>-0sO&(VUHKo@SWhL+5ec8 zpRxOw_mJBli|?XWBo(sJ$Lumgn#^#PBpkreYj6W%2nq;H(R_PY$US^#x(MSx?ea zBvdj$Y8Aoy%5Gb!@AzFVwaWt41I=!t5;Q_wfg)w|GJY=T z^Lh^xtmX(DeqvgQ89a!t@O!}3w#{nVKj;ZTJ|p;|nm`P5hH z8mM0l)?(s>%jnGX)aQA9Vbq-L_((KI7U@&3hzDu7jT4=yQ5=KDT5(|9QJ49zv8JIWnEjPZ-@0nASwG zC2U_;h=ROM=X_V8R=7!cZNv#ckk9uE35L_M?b@%)%(4QTye&DVG`&wc2x=Hn~#nh+c5^ zb8B)PxM)1T9ediZ($*-k$#b>gI>$MD*~xaKYpf@5;a?^8Jo4-t-+a9mwt5Pp8Ts{VR~Nh#dTwgk~6@Eg5Yb zZZE2#1bs7YJ7tj4TZ zUdo6otgj^a2}5Q;sc#tJMxb*k6!u)(`!GQ=kE6Xq6tfiOnNgj;J0!SfiU+8w4!9|i zrA&8UaoFA)!mrwZvLU*TZ?ajbqSFN^J36xTFCeMiLrSiTZ7jeQD)Wq^UgeOmdWZ*} zI=}{+oUqof*EFIoL0c7~(nC~u3f+aEp4~vn(VQlzc5w*~P9;6riy2zg>$;H}D`M{( zOn1K<$pfoXLp|c4IW;qNb#t>ZLBBt^iaBoZ4-%HDbgurcck1jOkOst_Ze57-v&t%p zR2>UetA2p$nZkv%)3dV?K-nskr-Qi4UU?F5gD4=v$;z0SzT-GCgiGsH?V#wn zaWb`~nZmPiU%_3OvYo|fS|%rK!iegCJ({N*ysVbFu6ACUe{+};MW{#@%Oz=VqDW|0 zP2rRPhl(a*_q>pTaR4iOJGlN0u=ABUFEVjKdY1e>)3%V7!jV)ip~VWUAW$}eOfPH2 zG42d}UsqUo=3ePxX*ovu+WjA{(2!ygRVO#C6dfS!Y%1u-=!}rCG5kj*{MOS4WM@LK zs@CiKQ~4e~CX95p?}5`o{q?Z===LI2i5`odg6z!8;a=c-DGmZ8v7(s{l-Y;MGccTPGNkmJJ@$~n?%yV7BNVfDmDPy#x(^S z`zS%}KJ-1Y6gR#r2sOmq4as=9lDxsakQyQ`K5WV|zzMy^p61rk%#1bgp{?svY zd1t3Sm~sCqDSIG+)@V1tg0>b=rmOV3spn_Mxw?b11Idhmccw|maK7OFfS_uQz|shI z;9XdDskYxFDeKsEVNyyMisA)5&sgJAqD?&P>JchcU~)bITTZ$W;NxK;sOw-|hHZG` zGIch)3^=pP$O}V$T*EffMnP7{zz4|UFXnw1AU=Pk@M~_^uYSDn4{#dlZdD`3Pw25^ z4DaBKt}M7dTI!xS$Jv$$3-a=KfivQCcP@x6 z!H??+vTl3l)H?{$^$}~!Cj=O2KE=+470aV9=m2oGE)`V>LFUs~v_e%`7lIq`OzWFQ z3!B+8fFu5Xi?qC2(gN^$$Ft4hb*JS@B#t<5xoUcpiEI{1qF68lui*JUv%G4$UFajD zKqYK%Mn5kAUp4bRh5500z<1%%WsbwD8+EdnT*4B#&EjAuNIsLAPgnv-;dyVmSb5^z zxLFatqrh9&_(c17J1ax+)`q8-FZ^73%-E1i>vLkF)hTBAYQ=}KvzaPZb^>=gfA4iy zBV-ApaAi>R;Zh!^B>vPr;ww-23Ua(5^U>vs}LQD@E66FP$k~#LJnN z>^Ne{SH5jXE6^H@qM(8DndQC_B3zcf)tfOEFI0b)Jy2 z_==dfEj^BiD=@J9sqy{3*3DozL(aDOG3;R~cS6;7x8dlaWZD@c_su)44MFA6e+`kM zyZ?~b0{}R#^gr*{)PEP!f1MN=mC7F;tNI4&eaEQ;k7UD97%|QNiTGdm?WAaHM^b4j zR|B)sGnxq@#=!#}fs9SIadV&OcqjG&en`Erm#{yWy3BBIda&bKv|E~lZ)`2Kl)E3p zhU|@*(TyjNf5$fnd!v7Ofu9#yl@A9kE4LguOkk#MXlkaUq%1LN z^IlYpi!oMcd({?2Ry|M~mp;}|RavSmWt&u0FJ|t*ysllJ6De=Ut;EZ#YibMgJnvnn zQS6YM8K=~0T{u78&Bl-P7XHoA8awBk`xPpfM1HN}oIt0QNpC8wD z7spehpDdpORoGbwrcL9+1`%z*E)|^k>69jEx3K{zTjF+?R}c;ME`M5*Q}{mND&s9q zX$&ij7WL9T10`Q=c|-fj(wW!xyz_HsVBix8c0w5sA%_vYcd{)?dCX4ob+wT}h8cf# z+9^SkgAhA977D`;!t0TyJ-ecern3qD<6r2Lro+13+D?evKcxnw)}^D(jRV&~kLBmN z@ZF9eNOymrTuSKXA?iIc*cdZqz1A80SkBB6T(3`PxQxQ|J+_vbOn+Cmi>cWs`}Mc0kQQ{}^oDCc|E?^MWIti>Z)l7e z+mG!lTUX%^#68}c^-xfltFT&q=%al&Mv}H`n$P>rDT#JLGn+z`pGkT;Pat#}UcFN_ zqB21aWwB>DmYpD@anQ5h`8j09bMY4Qst4X%X&GG0ipX|VIL|DV6J34vGLL`c=Oo$L zQ+kP58wgXU06TV+RQPw&0W6`!_;!2(_5=Ls~@NQIbWAEXqf+J&yDJ7 z)4NT-kD-~l&d6hv@x9f?_l>d#o`T9zF^Nl3o~QrRLRoBh$^DE1(P z8}8xcI?3ZB6-Na$uX6T1HV(0p!ZPyoQ&8(2=ikPS*INPtD?7!8mm+rE2mtZDyqF$`sij=paMsZfP>0=WWRFRctbqYILQ zv|hbKM$bbiAGF(?4L&Ic1U-7%F3W=>*Mw{oiiovmKuv*|=Pyg#F6Oz^Et-ucj^OU9 zc>LHi461Y;l(pkxi6x>1_C#zgkPUj`qrCsN{ zF)vB~H$NgH9uGRcG}1w@5mi&gM8IB>`WZl6P8JXG?-54t8a*-wG=OazOdl6eZgUun z2rf~zvCkDBZX^H+U)F)KmS4|UFaew2PdVSY{T=@CDwYCWkXtcQN0(XJ6MTU}+Y(v; z0x@4q`6}<*KV1IZ5Wf<7Mrj>ge8OF%+3_t+v&CjCCEY2yJ%SjR;_!GZX;V=)$sTVJ zM=2Th4I?GJ3=!y9>`FkHZ;78FBH0{?Eo8A6nhgLGh)IJFHQ9nKzQGt^$)@W>J9GAu zOrOF^_2#9n?p!c`5YZ3+2_=F8>ho9;6}I!d{Skp+&GuD3-b<5dwj3>;hsB&_x`s`? z&i1_?i#`T~VpajVg8j0rW){qN-_}!ez(eMsc0)k8n`@>0gu(6(TCoh)$o_&^tt9Z0 zv|M0Y-!D{a(nKey8#mTk&80{A)#d zu=lu2v!8r$C zyX@s`bAtvW)OY~@bc~049I|SAh(5O8xzDpA%h6eAex!1*x?2wt%SvG{c&JI@2VJ+; z=#k8k0)q}ZUm@N$S-y0S@C7|meXuNTIeW`6@Oql$ zyjkwE{sih6OM_VMyKD>AtSt_jUf6jdS{MXr?17~-s5auZKhs(u0EI7f%zhEL00EQ7 zA5^J%MwNfvK}g$(Ne2J*A8#(BU$9U;T(|Ec-0AiJ@X_!nSy&_sE=zA6a!yx}44aDg66cWPbX^5w*=;K50+uLq^6VgN!Md$=fa`YpeH?xQNX%(7kaGgNI|J2(3UTB>+xsNGpBh6K z!~GJmlblkx^MTk^s4J}x4Xy>8DQ|_PGuG+c!|MekZECR2rOS9=?i3A72>+u2iAzg@GO1;TCRmG$zS9j|Ni->E8CqDp)%Kz z{SB#3Xt8%c-IAk)kRWlA;sBc;13Nx)kNO_*7FHOWX~6PH=;}g_H~RyBmqsD;gFlq? zpD&n(4Iyvo%m@4q&N|4UA+-EM2Mu81$)*T98(mx#hz?tzLaA?{`l~upQQBqa(@|Pq zh-7B7kVDuxVYKARO(j45ziv$UqAE;;pRtjqDY!k;hqsdiF-D2-l)QN&yN{Y~Dsdk# z$#|Uy-a=Nnmixo(*@q{PjU1|Tz|3w`M*uwkThBS`e0(}h_n1hB`YIM6?AVY+L77w6 zN|3+rLW?lO5Gn=(bdJD_(pwWEDr4N+&4p+FhVX4T47vm{A(*S0Iz9hD)2)DrBud&J z4PN|M>QI}zNd0&#?h#hy*2Q;NQsn>x2|;`4vXz#olOo3yhIx#Ge<^Ecor3j#dW_Kf0ZN3KhfNJKrzDd!t#KDl%~_p zYp|-fNzQDSch7;d+-KSMX8(0U*`InHJv_eG$)xT{pQkf-{dJc$bycL_uyMvE+=WcD zexJdqVKNZP<@DcvX>#r)v$-4`!Ba#TGB1a{;3;u7P@eus9sJRS(Zb$*{1Fq;xyPh(=^Z3wSt5!h4d@&d1*0lNLLJh{>vqCAOr(CEAxl+U)+ zl520#^?r(G2u+lS&&vBLFwQyFMSl`Tf zS2^{}*@xnbaRs+n7e8ZmWG(OUJG4y6wJ&g$;#{sb9&v_*IK{VaTi|ZC*lt%{v0}%+ zU^aD4cWq&gOmz)xv}C|!Y>6~n-9ySgV;w$kX;f^p)!wkkbAd;}y3O-tO_RUWs&>mGdJyXb9)Mb z-gwA6!L)f@ zXxn{(9zNHoRXhRmykHw2=V?DGD;b;a;a0QK%{@~FY^r+V)3<27S0yZtHihbaZT|Jwgaf2#tqZs949#Rtj zxV;)IPdlEMJE634KAja;S1Z?+>ZTO>sQcwNr{zb-q6Hv73~6TEc)h-AuVg$r(I2<4F_#5#2di`?7jCFOl!y8+8v!@f`GcE3cT<7I|(_r^Cu(*B#cRgFNh*h*b zDr)+Y=abw4cY?XNXI%p(V$Wmo-TR7FI?bJCBtiZA{i{BcCJ0q%`g=qMB5+>uZJ!dW4it)mtQw@=yn@zu= zBn7i&1w*;PfBkcgMQoSENt-G-%5t#=H-@wR0|#%l@_Lo)fns^-!Cno>?eqf6(F6s` zArJjNY#Ufnv!+?82wY$%E(FuezTCI2GVrEuu7*d{(*Ua?^PkE)D)}yRW9rH-LLm`t z+eb?Uo8@|soThV$X3XaC71L2wgo_PoZJP_NTRj>Rt7=s0o~yGiIPs2|B^LAu;2cBTomuB$};~=LRV4 z3abZ~^G#(g12VrBg?de>qItGQg$|?Y8^($?e!9u5 zF%eztg-&erk1vV2@auhw|+$$&%h&qpnG1T5b{)`M)Ga3lg;zv3*ph1Tvatp(GL zha=LSXIgWQHe(Z@V+$j+5e*4a%-F8I?7hDPcYckas%!KZi@WHU~TJ+LAwU#z)H(S0}(Px{-C z6b{zUy#uci)zm@PLBqLWqTf*?C31na&|q@c7DOdfxZdXZ5ma|NT=a1>koK#9s{!Em z>-HWd`Ep2a6|Jawk|^wd8o=pZQLs3gATLzp8slK`(Xbm?YXXHvawaJ@bnBP9YT9w) zPgCG`c2i~?wILHg*917|OUqsb&>1kz{FSrq;Yrq&oK)6IXE?3;L(?(Xc>WHj2>_~< z2&~YybEGL?)@$Vy1ncPx&F7fq^{aG4NTvKCpgL5xtc!~0_QpFJP>0vA`SV@cTzY|& zD+ay!++xY&Gl&Zn{*NtVx-JFR#VvOkHinb_PO<+0&V&dtS_bLuA`@81kOu@3skwTu zQA}ZM4-26hGHs$X*+PXnQRIQ{1i)RE8Q@bYOc*v?41I}9KCz%{q#lP8?W9_ zo4MFr4iKP2L)AG^xoMB8_%sKYOEwW%i5<%^icydeBp~XUn4Scx_WO+~h+`NyEbqSJ z{uRTViER6YXV@`2;8V5+uCA?*(0Ul5_L9UmsO~x~wAj$pWvb`JvNNRU88lwflMjxY zaMfla=7k?$wz3ds))^`aO|FEQf~b#$odBmH%P*o~Xzy4fV`}k=m#$F(SjiL)4(u|T zE1J(T_Aw6iPeqoqvL6^&` zap*LOF2mM5GoF1yL-O*zK{pbppzwH+Rv#AYs|>Y7P72dS4HIQL#^__?Bm`o34Q~fB zxp2y=G8{Q^_#bUnBT zd1$3XpAO|T^KxX-$X0 z*}o4ca=Mjd-Tp-VCqC~Cc~49ZNi(zgO4G)m@D`*SazX1iPREYY+(8<3PPipEv-iH` zcKCVkv4=THbRzo+(#Ej7W;<%r>9=P6 z8SsrtJeDHpEr^roF$`X2aaOrKy|JSI8dAM$t>^ZnDaet7zRz(i*KuMtdg#ob z&Ke2U?q}hD#+m1@>oKDwU7nOIo+0n2*&%r^M4oJ>B|a)*vg5nddWLA^AO|FS>Hm!E|tfFu-iW{Z~OZK?EQb`>18j{~}K*jG9Xv zlrFDzsjfpuu$RfN6Asl0*PC;T90jG*HI@uF>yvM)Rlgya=wsVnPxX?9GBeH_wN$e` z=#iCAx!T%O)w)S=6g)9IEJx5|)YFlw1!Kg{O7ntL4X>UldJ>KIz>o{%NU=lr~MWr~)n!hAE&vahm zYJ$*5@9^FiW!io6c;7b$zak+jToQ%3IQl>%jnalb4!F0sg2+ORL<+>)tNLzb*@Vf0V1G^k%2t9emtI^CVVz+1s zFvmGEi;5`c#^v4Ax^XhdYzAJ;>t?!)hqB4eR1;8B_BfYKE!0FTw-zbvuXWTfT6l}n z^wNl&nFz=Ps>z5ahDc~{w^rut`S;1_e)>AC@F$L z+S+bRYh~%-4n&}khrU^dsx!==bZ&rB`oX^3ctmwsyWBWpxRsKs^S~hqA3%vjz%o1$ zd&Y#2rff{r`N$5G8rHA4HRPLUyRr`h4}eQ-_;g4cnuToB?`^pqQB0FpUM`1O!>r+0 z5bS9)(jUU9d$tMrZNF4(GIN56o`LlI1F$DA;3bT-XoI}}u5)gs3R!~H;WQQZ<`RLI zVr$lXQeX1fL7b66gerrtpafk8SGAKPn;~SqmN$f4YwwW7(guGr(N}Wc2zS1iWu$Q4 znYS&xvH$dAGxp2=K;N8mP1sj=F_szcRY~@oiSMCMwm79Qgmj(9+MxnOKFVreS|0I0 z2Y=lfx3$yE;7R|++2=fBueV<$Vy_wBv<%`}6B`ImR&1V)1RXj9^#uyF>S`=X4*SA2O(BDHQbP}B_S6?pc``AT~0 z@mxxf?xH8n^CLc89j4rI>*RUw+4{t z>Z7uYK|i3d0)HplD9QTGsj%`E{86=k$1iwtmLGu{1eezf|IB%8zv|25+_Y%%nq9lf zG9DVHam^jcE<_(ry#0|6g~71(IPx-{!T|;1^NTW=&oat_NezWHbqyG^1+gDNXj(2sOO~vyMboyuGo38xnwR!bnVP*;r6NbWhX5R`07?-|Y%oIv!7PQrlZ%iw6om z{~%Z%@LXI;$!&x@NPm@#r(q{Pk@D$HPvd;f&L~$tA>>xgi@&wr@0usgN);8)-FRL- zsl>bz_}Rw!!&Lki+{tc1VxjY3r~71*!*X_$8()pF7H=vN$#?8O5%q@ilYMLa3{;j4 zW|`jFgOJg=0VRDp1x8lStH})Sl1$^ZmOB;zwz$=!MDgvJqSG-qDHRk`7uK+&mtZ<*g9DIth#}_$uBCne$OiPcQ`K*AqP-uoAyHjr__PeyR(uS-E zC<)|7q*8sy!TJCnOAzDW6jQlm{~}Ixhsj_@q1Or(-CMjNSyMP+OF8ExNbGgbXeR0% zRxN^cpVcd{1tY18vw2>NOzh>{O;ur-A?2p6r9HN}!}Oi0Rv<%5V5E^BWWJnTGwDi9 z%c;O8V4mxV-4KIEcOgNW_t}Mg;5>@`DqAjDer6lnL6`Ic#H?*Ded&5p zU~D`F{@LezI5QajLXh}TTPkG42&yF^#V-_9X6SRr5pTjKXNn*#+J&1Ep8|->ka^f$ z4@exE_(NM?h=oW!f%l3Dy1xC{l5F+5l*Z7D=pT4qvBw0x91;h>PxwcWNO|eyY1kI^ zKz{(jGT=aZT!{K8$Xj)ULra=Y7ugUYZejxBpz=DxP-+8W;|kr)|&Ab+3BG^r~qzLFNUG0a*Nab3sr49s{ypZ zOr3IzPk*1|;q)qMv4%udoL;*stX`C#g3E}8)vc3rN!)pJkqvYoB9U;*GQopno3B!3 zGLbT!HeRMINWE^AmzKHiavrzJ=lAuLpudKMk44@@Q0vJZMLER&mosA?28iOAjRZp( zKX^l>H#CbSn|493TvlkSH6u4Q{l~-KtonQW%TB0$ym3(-m0p*hBB1!Gu?hn=wbZ#V zrhH>ueSKPHuh>-N@WNET`n~?@O#NmjiLROw2>*)=Olzb6LLdR2-R!>D0N9)wc9XGx z{nbH4Pv^VzAZ`)1kU!j~1EtT3Xjy!Ov#5}QJ-EkXxtqRjl3WrU!l+y9)so-C_D%~w z%WWjMf`5!fGpnSrnXep$3|03a#5S^h0a~Xm5ei|1S=Wim63{$^66A^mO(MAZ9j|`8 zLXoK*wTq790IF`xdw?QWPMZk>Re)iGFU3sXJh+R+J7q8-S1Lp&w?_U?|fj z-3R?=F2Pw>w#5tyqDgxUbE!H`-#kE=-XaGQjWMn(|N5@ao?Q={?k8+4fM>XnMM1o> z?J@SW4T$X@c@|A_@P#sHG0ZBe78=aCD>xjl&ZEY5ArOd~EeAM^ey z=loUp_PTc)zPu=mkF zw`>ikqnpBu&eD)8aj3|>v8fk%AMYWhgGs4Va5y3%sm&QZ_|IoAtoZ&c1P+0&f#_{Ds?Vm%tIV63F zbPG*xv}-RxyF(^%JppH^OOeGJxx*3pro*^-hujZ;jzAT?;FPHq#fjv_@{HV0Cw*(0 zY%<4Zh5U_kLn@X!h857o;;CppRQD%+f}QHQitnB%XM_`~FSwn59w(t}HnM}dLFE@W z7D~S9Riy`_1fTm$ zlYWzCYKeYRzP;*B9l!sq)pyiHP{VY-w-JUmLu0jzX~OC21UvB;qJ@%)hoNGlC3y#Y zY~(PKUu;1%*t2JO&+c|t5PnHAW?A+{JQs~7VDU~wrK7y?uSGNaaR9Nn=}rCiycV)@ zMzxWluq!!4#y9y_>?%u(Q80SDi*^Erh_~iygL%#nz`d?SG@7S<3Y5D}!aMdm z5=rt76n|Q6|26jfy@Zb z3Qm9vNWlH}(qv#Rl`@7{Altq9!51(Tg;xNH z8jsj^PCX2gZcBRZ^V9FD-@iXm)WS#_tYJ$I^-pIxvT1&@7|FH@?hIK3{=|ZBXFfnY z((xo$H7Y<3@w^Me*zpA<7{ij##_?R@ay?1+*K-i%in^4hORsXpDAo!el^Dw^BT8=5 zJcW?E2l+O+Xl8G=a*l@7&-Qx(uSlbb)8WP645`ep&H-%b{8YBH)VEL!Uf-sHjH z+lGXg6+c}{l)(tq6wgNnlu}tCeqkco@+G^(;AP*}-Fn?@e9fv2df=JSqAo%1Xvs{| zeq$Qidda-RrNbe|@4zIBt-h;(q(58y?_c?s+^YYa1gVu>3AyUdof7?ifOfv62*>b$ zqaE7uu)?baOS4@Q0BitFeuPPX@;qX~cg7#+7D_-_vly?_{^^aI(I27X-?esB%EpGdHnf!HqD-?a=WyR_ui zaSY8gw=_6q@LjK+FQP`y#&k3UBtF%i@*DH_%BDZ7(>vzREwylOL#?>K<;O2C+s7MvHaRiC78Mbq1pxFW+@}MAU)$$tgcW^l@^zCncHW zkcgFW$)I~E;9?RJUeD5^sP&nQ2e`FH{B(7Bnp3x@I&{Vr2qPZ*2}Z63xstlk9W3~g zjG<7cvLAbk1k`*co-YhaOP1<33%-{a&c+c@R>9gk+BAS&#QAx?Z?lCMr=&76TDQjK z`9nBZdL;KBU&C^Zh*>=E6Px*?w9xVO1~FW=s(2!iwYl#Yob0bd^X(C?pzVavu6#n3 z;#-N08IY;9%MP?L@DYOVY`Y)#c^qlRPP)#qp<5Z?t)+<)7Gi-X@2L&rpSE+a?mH+ z-IoN~W|}i(;t$qYM)!nQ(A*@0Y^G7p57wR84%%8op*G)@PINxGyIfQtJ`OdBLF7-t z3H}SGIoN+1)c^vzGWnnNAs<_)An^W$A-tu-w4DBf0b&pa8enCPcnP6Y^goaPRi4>P z`o7Tynz+4O$R}tV;_L`Sr*6y^7M(&1sd4dvsJ0$y?j>8bFA@yR$*m5TQ=<3NJ_`@q z=dO*HWQCZxbp%+d(Ggl8c*q!}Z{mvV0PgFs2+Dl=Z{=)9058 z3>U6RTx1WR>>ZJZY?oOPht&GU9h38HAc1+>LuVKJlo&TvHjNZMQ-?LeB$MMG(J>FJ z+VuIZ5U9Kdv6@o$KSKF==FgvdiN*xTbgsL;*=zVI{(--3I}-@iJbDr)%gEdvVAQgM z21O9(Wo@HcRCGtKy8VsKBL3ypY2n4y43Kd_*#n!3GJFh$0GXnYbVgr%cM18BwXQmJ zFgq)ILuUIzh1GT)x0@qZT}m=bJm@pgAITa?KkqRyRI4-k4%Rc-2X+Ya zM?;f-PJOa#?QGHfOuQ&!rG3)fG&$NzNq*movrImq?hUgM( zvqD0eFMJ2mUurSo@34@^>#+06G({~es}_(^Z)2SCZ=`Ro^FPw}8`Oxr$e| z1tazieRIaLDZEq*E@?l!b)yasIors(A5Sj;l^@UoeG)opu3yPFB%#(vPCE_G(x*`p zFdMJ4vDf&vA4}ipaw;^B~4*|ogUr(*?N_D6TiRSaivJ`%g}@PqGrz0PMNDLg@NJvQ?vB6!Fq;Tk&5#m zT4A(iO}$&Dsf;ix`ygeJc(;l&)1rVjKOUa`E(mv;{b@*NkjKWeSy*aC_@pw_sp8GV z)t1V}&n4Iw1KPZl5LMq1wU;b$d~#pZwCM)nP;KFD1{jtYNm9@4LKpy&T}x?|H-t&I zQazBU0ov=);^k*i+`@? z+GYqhTE|wWUkHH)YY3TriL5pu4K*2rOhVtZD@)1WT^D{dNHKLlxpS+zCJ>%PS*1=! zxNm(4@1U2pREVN6T?*dek8AG3m1<tgok~*(~rdJRdE{Qs0{X$wTkUwNAjTGm;q~GP~~sAS~74B1uTO zRnUx?$XzVQ!QJxJh?F?v<)4O9?fb%LLfMEZs$MlO+Lv)6baDTPwtkvW!62w_#h{AF zUCjf2-3!b2r)1fY1j~|2$ibtD^LGnc%Vap48m$=ARvCd?E!kiU=ujeFl|ZCpT)u{oTreZMdCc%GwxVSQzgeWs63Dm{ocM|ED!fAZ&t2BR4x;Ym)WlH z94YRNy46Z}dyj4oU9L%CCox9H%uG*RZY5nhf;8|{SZW(JOGC}8&G5f2Q}@3S+)?(~ zfAe{`KJMVYQ|1d24K2v{U>a^88p}4%Pvfv`1HJME5G#og`s`88K@r4whesUx)AM(xu0Z&y&9yq%VfIM3hC93VaNt=6Ox)0zEi4?nXzK z)g4@$LLd0vhgaV%_LMTCttTW5_9|?84Qbc{5qZ&kbML$9V@^z(;Wlwr`=F1VR?4*$ zI}-MYp%UP5LQQn~NkMvZfc(Pn1mhZJJD(^0iq&R7+XlVuSB0Xk-6hy==UGfB zi8eJiM-R4vB&!~=(P=(5&8I%Th9=EQ9C0mqZS|gfd4V>qW3>j8bSFW2NDG>Qsg9+A zP~Lnv-yh#h*;6M%lx9e&;{-GUO7Ub$yE_`D3kxr+?Bm?2+YW!8c@>yx397YF(M|_J zY0xg%oJ`fZHfrHiwvblAfPpv+G_?Ez@_N^MLU_FAXTa#P~z+^EdxZGPD9&g`B?D8Gx zSSpjby6jwAp!7MG9WjpJpd>OaOCq|yOO4id4NEVz!K8aV*GJmTu02eydbInjd?$MM z$rFao@Ux$OsMm7`_s)Q?G$_>`UxpU=;_VqvMi~g^m@6(i3PhpUve&Q+5T4 zWX0li#Wsm8yzo+}+7*1U?&qcF`|zL6g&L%n!R$G-BdQDT!)WC2_^snKg`2-%3)qxi z0u^IBOR-h0s6N5bpXtGsKNKtnJ90Ca%yRh^os+0X5;wpElE-1 zpDQjgyFvUG+TgoI>K$%xRqn1i!OrxEsU9o+BjSjC3Fb zr(34CvWWd}Mr$}BE|m%SvqQv!2OpG?sLyaP_&e_XYTGq=77U6W7*);aOd))Lb z_uN2cyR?VJBnlmHmpS$c;`QsnxUquaR2W)pig%kyQ|5|It)=#eqfCx!oFz?ek#gNo zw+Hm>U>T{hAI-M(U}UB#>#U}tK9d>DlJwFM2{F`P_`Y5*IEb`xvcJT@*Aq-~zdIE1 z^D04OWR~3u)4432zIyfU0CL2MpO1OPSDz$$DS(SlDMx92K6#{;5yvy4>T^AJNI(*Q z2&=0zo+hmAGdbP;-jxT&t}kGT)bq~2C~Id2Ps;TNupT)KRy*%@sa?sHJ;o=9O?N*K zo96Tb98JW4_5#QVSEr=GSgT90b2p!0TCm?5&X$d~7uI&_4>ohUqgAk(1>PmdU%x4n z8?YrQ>RmyKpjJOTP--DMHKX4p<%W8$a4~y5d@xMM`rohv{Z1)Ox*PH90G~%wb-`z8 z_c+B@+fd%5@mfmw)QF%Pzq$GaG|uaA3)LeJ7`zq$AeTcv4@(2CKo^R{QZ#v+gmVu(Nr$(SPofF8XjlYi3H1B>)Cut7t z%vj9YjDJelei$M8;WcSVbaSCDTtOy|Ith~bW1%=)woq?-78o`uxnp{k$P2uCYSryXcHctR+4-}foYF)b*U+<- zrIcpju#Vz=;40sH0X1hH@3&In9{6Yep=TKCBrd>h)H;;r7l~K&AC{eYCM!`lypz4$ zjRqh8k!Mjc7@Y+=2%u-?>&t>U;$(VMcTH|N8uQ{oCt17h`HNm($Exg&`8Ik3G(?4Y;L`s9?xp)_ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..6c260ebb0176590de2cefa0937c6724b7eca5163 GIT binary patch literal 3200 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 F{{j5#ar*!O literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1.1/androidpublisher-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..d3ad9d6472c8015e47cc585c6bcc8cd2912a4df7 GIT binary patch literal 3046 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1/androidpublisher-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/androidpublisher/v1/androidpublisher-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..35f40b7fd0bec3a649b9118cf730386fa292391c GIT binary patch literal 4073 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 b2xc-m2_m`}At9ngFA=?DM9YZYdnbsN7@{+Y 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..803993ec4958f6d298f39af97f22f7cbacb05cd3 GIT binary patch literal 5248 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 SR>SFAX!?_(J|_Ps)4u=|4cdVK literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/audit/v1/audit-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..5dfb1c600527c897a748109cab1fdb8f7d457aff GIT binary patch literal 9812 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

J)s+B%q-!G`P;A>$UJ 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

Qz0+P-**qT=x*%{cPdc}_PknVqW_ykmxm^--4` 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 HuKND~irFy= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2/bigquery-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2/bigquery-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..9c455d2393db866439930b3e370be57a6c53c6a6 GIT binary patch literal 52206 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%0Dw#=1CJWLt=+&Lc`5BRju2rjA5l zK4H=d6EfO393NS{*{@zXR}@^;4ud&FBp$@9gVr$))Hjsym&aoqmRvU+7CR!+Sf?|f zWaW>1N;V_^%nFs5VCA&NA^{}ypE@l+k9W-%GCXti z<^uL5Mo%WyCXnV>z>wAO8^@oqwkG)PIm&20?Z}i8fcWg6RemyPt}PRxX)-&d|9}$v zBvsT}^OPOuHLc>|n6P!0@Y!uC*YA#K=6!ki{sHs~tRA|ihsegpEJd3|&u0@FwmoDu zKn&^)6zJSmFm9A;=(j3m{MsqL73>8$l=in1g{i1uqn&FnS)w*|5H0HV&NJ+!5)1H& zy4*9TX(DTM&Q#Qck9|o){v+4qswk4bcv?7e-^`XnW&u*C0;5plj8NtSU~>3x!#4+K zV*cafuVr-|$$u#T0HH60{$~D-0KG{s|BdGY$=VzE#jCv+fO@C@X#Rm)mUnzT;KywVYD(5c9oWIxbE|ZoDHh6iKTR5&CFK;;u4GJ}tOib~;ST3I zPPJN`5G?mf0iaDe@%OnAs#Av~y0L!``l~71^Sb1=5 zg4+u{w)uX=%;)bIcnSc}eCIp$6{No|nD5p}CbQbZ@e3Jw`GOd z?@ugU50t+#>;jJt!2enMNT&?RqX~seO+gdDgIwGkR^02}i{41#&g^U6Y6X-lbkzO+ z;nRENy1fy^a7<;Ye^^6%5>EPD6rijuOlhd+R|83czxScQOR5Yp%v4Me)qgxr4K&mA z2OFtgyd4$rnGv2AGCD$BmLESjLT@2wVzmRapLNk4Qfya7o)hLb!yyi`#GtpoCo2!3 zx+;IT&Sq@{PyS^{e?^~SdATb!(kU@(S%dfhh?+bC<`byAgo*Vw?3XU&F=|eEUs)1D zR1_74E86>7D2WDCa~X+81N*)qu=jfq(g6%Kxjp_0BjT3)rIZu75iSg$t+*iZp+cGX zPn#B+d$Sq@HnjrNU3nu{c*@}eY~4y^k@Zc+!Ds^_s+Zf z!wn%Cm~SWhI+JIR<}N)QCvZsIx(9SBJo;F+{UR%7Xz1jxq}VY7{|?pE5LyMB%{+;B zspfuWs0k3s<`S)j2*&MHxrXHJpW6A7Lv!E_$y!)S2?S0GWliFXCxVvl<%Iz7t{cZKj(VIjgV#+U)*+w}Bd z`*mm;&Y0g`hIKK&V=&M+dL{`kXTU7u(at9|_=Iz+b6M$+yN@^@C*BBOLeGx)%7>cF z(A1J1q;SA2p)(nekSCCZZW;_|LYATp?kc~^v~uXp&f$=S#+a&x>N*&bYS60~tndVJ zm7uw{S(*;?TBl?5pj8{U*TXjn8a;Fwno2Zy&|p*>AHNQJa0{6}*f3S$TrctLcJE+S zF+h6_WDTfMgbes%E*q+Ep@Y$3eiiB%PG9$M2loP?h+rgt_vze!%N#&a|DT~!=BpU? zdoVcFWaY{S+F1wc0Vsk}sv6?ITDtyk9QX%cW`~pI%#j3;hj)l2|YD z-Q?v&?=ED4`WygYum>v*FxK!dutilRo}2--CF6T~ zK?G|8yQA87@M)r~tIVRVRba$qxX z{T##BY~n6OML72<_CIPHH)uZJk-EWC*bjoF7qCF;qVK#Icta$>4}@>CivqM z%a{pJTRqs2roJpmjfVf{k}nm+?K6&>4oB#%h_4Es{?7M3HX2T~lDK5Nhpz+R_I1?K z2Qr8D2GVNga6 zFxPXa%M4i@#XL=A0H@@B9kg_hOlNAVU$bOUY%SCodAN&o!GL7JZ??MW?jp}^@IN0r zL$X%_5eF~QnE86FN2wq!Pgi&V%bq#hPqai>MX#M8&iBNRJ3m;j(_MTIVHssK+sVob ziIceL9{?_Ny+f4s0-hP zJI5Rnx1 zx+mJDe=}r(!gma^1psLAKbsWaj=~hZ83JObkCK@$MXr8{bp|w>fgT=g%;`*3pV<(;W>yfkRc1^y= z^}!e!OEcddUVNqT~xBg446)gBEeK4_6AN>a#9@6@UQMY~f!|j^!#)6YhQnIH*LINkc)Kt)-XBUxz$Qn3TY2Cz~}R;=S8Sxf@^J6^h_>qFt7 z8-89tKlkMrq_NX8bAtsQ0{{LoLJ9_VNrUG%CeG|nMzH7};NG7#i5#?Px9gvvIe<%1 zSx>%7A6P#rh#uWuF0S%}MwtjQi1y3557x>Ea5|)Pg*p@I(tCIJl<7ik2RV0i6W*u? z9d7e7)~X7Rg{4NlpT$+1Xx-$+NMME=BjdYW8R=}CLq?35;8ea^_7GTxwvY&V7Mh^Q z*xv*Uf1L{>hiYSxZP41O4keN?6>} zK`xcih&8uvCB%_NS?t7=o48E#w2HwaZneyo3i5?xm`*Yks;F(!Z7eJ-(}u~4@OPqct}8cV%%sFnKk;}6=+iZ|jw^F8S(tiQC4{Q2u+ujC&T-$u z_xn)1&0P66tANVw;4fdiJnYkg-I&k&(oXPLE@iDZ_;2oAc&OC{%%W`8Da#$PAz20f0wmx*p~eO`rzr}6T;W^##GA9bFmLE_C0 z1<4xtRcW=!SX+{xj>5UAa-T7Fe2sv_$8$)g&vh1u17wzYLJ`p`{eq-!7Hg@%Tm*|T!;y8VjN-sAc)-SwlFWQSy@ z{?s$NN9q{6y$3Hxv?lSYhYTC*b)|6SsgY=9+$a`5b!@!PI|jzaWVh+7U=(lC^9)jB zt#zV)Ez|PPl(!zIgSVX5c-L6#=+i-NjLeSZz4yr%<&Q=% zM@T?GnRl^>yMo4@MDqeT_vB&$$bLVwC)8x;i9>zxJ*eXr! z7AxOOC#S@HU(55^OXGw!@5l^BHwDqi1AgK#s~dGz-Tcj{_+HcA#o@oUZP)g5DXR7xU74Qw zLm?fz%n5PlP;mOJ>$&hIui4b}*x&XQRU<>-9)Z~Hb*c}H7_o0E33lBi(PAe&hHEGy z`#`J08b8eD{N)xt8)_7eQhZE;BDi?ci4eineHy0-N5tHXm-!?f&XhTFNsuV!fq5ck z(?RTbXcy5qBME8%cldPxdU1rpxE<8gR9&1WR#cd+FSHO6yapL1U#g0yk zdz6e~CKXR|ir~tfykUGA6V3=?{m?+&2{2~Ooec=rHW7}UX6@nsg4sP)_xl)DxuAjS zPDg8jSno@b0`@0AH<7^1zsWb71N$jb zGNRa1Pgv*pxm9P~bO}R8Lgt|lw(f7!Dy$e43~bCS2e1YFJ|nat?7<(tX@o7CiUm+f zr~;n@IkVu1oFe8O|KK-YK@CYlTI5VbhcXW)jyKQ)Qj|(Q-$)r4wmb&+bI&GiLjF@$ zHXeF#mN1A4+CzYW$0fFCTY)Etb>N32sw|Q8*6~Yl{reTs%=v+v zaVYAm@scl&iKhA$P=|uoala~pc_r*0!MgEUyiCgd{fkKq#pe5Lne7UVsiZ)z{QSKE z-6oJ9k`x#t6ZbTz1@gsG;~{yjOE_{IadA!<&QNDl#5(SFA~t;HivJtpmMgGCkj6(m zQrXziNjp-O@bh5ya30;7TofnlT#raJ(y+<# z7hIL=EWYedk?ftY;xKFS#y%abZJ~Vfei-~1m>$$Gs^4)2BxOzF?knKEOWqg!QplkP zAK1b#s6t|5USa_vt&bnawJL zC!p9`BMLnN>5kwhS^~Td(ux=a+C+qCey3k|nEhJyG?f&6>x4fkWQ?TFcLl=lf{$+0 zrO%I`&*GKWcLA6;U(T1RJk2AZvE&phW6+Qo-KqPs8HVCPwE7A8R}IqRPIr}oyi6kB zJAMy7-jCPk2LgN4TVzf2Uq+Nh<_5gop<^L!4N19qz3wY*8?C#$!2Z0oJ1Fskan`wZ zcmLMTm$~&yHq(zACWV4XH(I%%!X-7aUve=6#-QPRzw4SI5q&@Ctr`OcceIVZ9D$<{ ze|#YRS%5^;^8tKx0S&L!chzw}J|e5x>iF?!4jTTXYue29q#WnALsVB3FesLy9|(y^ zr)|{y8)ee|qW(&Mg-YD(Cm^a?T-!UspHN6dTWyo(R5+EmHs9Xe*+*jAlC`__Q6-rf3@co0MQ@E z`n$^Ne~VhsFaUr-|C1CnzKRjQ|1GC%Z66i1u$U^w22>awf?x*3EdKXB{|jzeTbgp_ z#2Og2exBmB9b_Wv$!3Kmo-Il|L}vt2>ShUTrr8q1#-^?$#;#NVGn+cT)I-t{RHdGegy#fa^Mk1Z2~RFNjx!-?-6a>%R59{3UQjQcUXClJXk zCoTp1>KGVj%#6Rvn3LFvf+wBWZ-;0&dF2^n1_@vzfGHZZG1F0jgn_I4Qf{;&8wLHG zZcgPQ)GpDpYnleqvvXvX2@>kH( zJJ%q^(rT(mEFfJ#pn3$exN-Gux8f0!0RoDI1?2pmF2*3_Pm#-{WQ}79`LJSgav=H5 zC@<1h44QbSQ)g~H&=nre%!z_Y8em`>!6Oc41%8p#K1rBoPyP8~Aki><0o@XiQsj7S z5EE_s348d|gg;E+h69hYP&ujHD|e{6#qU`Cb1}^9)}!uBzu3Z_(xnlx%ZsFiHA#Q; zAzfyk3kl^C^AT8^81rJt8u!O_bGL$c*Hc9X@Ef$^4fe;;g8m{7DoUPA+7ky6)o%BC zVMKzQ4@;5_&*;uPcVMpwBQy*t6f7g2cu+TFQSJASP+=(F3LaB0{8}LA3BZTF&A%Ta z6(oyDf|0fkjzkeG6gy^ON4LT{NP(4Ka6u~>Jf%tiZNoG?i`*6zPCHq zvx;3O2p?j-4!i(8IRUA}bnd_cTa~(`CfL*_Jx`)UVeobEI@6dr9ePP$kd}3hLQUhh#A}IEGvvxqZr5mNhCo9vr$UkMqe_F zhDF-hhKLG25RsQ0)FGZA@Yj1y`5syrLw-i@&fR1yf)Za|XBRZH>p{2TVbI}{==~#n zzI_#3_0Cwvd=#N+0&2g)4Cx)^BgHB9Se@`MBrGw3gduX!i>>HyKS)(rPGD*s`;A;1 zY-yvqjP2=`lH8edl8hR)3j&PoCP=@0GK=W81CPb7!>@9xPV4K^xUeh1fw40}`xo z)d$p+*ZO$Q9gy#2N!1(C4R%1^iePOlPYnmzQsN$0nEf?INzTz4eXb(u&JwcX%IROs zO!^-kFsc`d2SWWbD%3WpoPuza1(e04v%8NxC=bggrW&>cWbJl3jhk=bXIyt3vB#W? z50rfi%<(6}gvGSUr=eiv-^cGB-B&WTJ6GjK?O732-0fLnT(i&?i=*0nb&Ka9kwP>( zCd(h^osWB*)muK z?JY`p93*FZ(OAGlc^C~sY`Tt3VwGv3oi zA0Ja9uE18zAjsy2Gnuexi`oi&XqvPd=T zkw)fmiymZlu9LakdAiMb8 zZHgnVEWcW0=qu~7)J{J&0#2Hqk9JO97G|%tuvvmFt_6|-J@3-(Djo8E^Mm_}%ysV$ zSB6KqKy~l}`mJ3hqlD+|LCI-t{95=Fq=`pq>=-nPZ(bo%tBo2~5RKwmVsUAGpki{n za2i_H9L_`=n+DV-8q4_kA*fPfv0?5{d4WgE2)w5svY7ibFM)Z-n zyj{VbII%A$OkkfMWOZ&vb3#Sy_$3%5;jyeRpQGZ<= ziCHTzx~>}GqG4>D`!V;}y>)|gjupi`!OhLu2|d3H(^$SavWjUy=}(^v$dUI7@3WoSt=%@;jnfbBW1x|D3x|p#56B4K z1ynf*vJX*7TP-e~hQHl8Zs~)hYi~5}CtW=YJ?-6|Pzmt#?}H@O?VBLA-B=&NNp{$Y)3^KuSLJb+CZ`tk+~_uvq=n2!2B@lm?& zwXi6F{P)Y?_5(s;p8H;0*a3h)gysj!>bhQJvjLoaD^^T5Yr@_Z*@;mGZu`cV|HG{;w_zn$rFxN4TF#EZtdF(X`rSXSxAIuVAgv z!hIpK&82P^o3sVIT5y>g9QQ-r-5pvMD|?I!znU!Ra&??8HKK)IOUE*YuUUl--_oaL zO76iHyW2P(rf2v(!-SyNe_kG49um8pdf#upOutLGyL4p&kG(i__C~zTjOt*Vc$IUA ze{?c-+Kw>cei^KfE#qBM)_J$#JQQ=}C^JY~NpF^uQ0tcHW+!m{Kqf&tlg=;&$WiJE zY(QUP@nS{ZIg>>{XVeshpfrcBBue3%3!jV34o2e(JcgNM`*h25#aI@h<*i)*47kqC zR?g(cJ)jx>B?UQ?>;J2F`;p%hl@JbYgs5+S|B4Rv*Nz($0!&x0cij`(Cmik`P1%k+ zlxs@<7T$JxNC?Cy3}R34;kQuGKKdO4l70yj_ur|np#60reG3yRI_# z+6&}Q6>$3B1pflzwsoVB6t7LqG97Q~^$K}5^ z>jVG{PWrF)zK=&Cf4B0?c+;Oc@=|5wlC<5_Y2ylZN$7tTivHhLjvlXv1hmKgalHd` zmPVgehP6eJxL92pW$2vP(OX#a(a}hL2zmh8mfX)@PZ8Mz*R8TZ0-+^~n#6%5y)Tw!07*}!drY5pnSjjA!=L0)?0C1_z*g&Dz|6cnWzxK5>^{lYPF!0dg4WR@AG|9ok6_n#y*^djrC^;$?Bd-#)#c8Ks ztdK2aG}T+cv>U!*3`k3< zVh(z?xKXIrY$Ai2JtUvJ(F}={AI}FW5eH?+m^`Kp3!IZxbc~<6qdsYYIGk}9lP=aq z;^2>Ps;;>`jVw||c^uG*S+E&qdd0l{&59n7-pb1t=?nrigS3Kt!pJ{i3UiuCfVt$D zC{xziPg0b`a>8WM(+TeTfUJdBT8e%cr}bV0=!D1amAchSS|i&D9!un065Z=Rn{0#s zZsO+<^R}*I7f#_LkAyz-$RivCwr0A;HTKzsJEpc61BE|)$n~{BYItB;{GR}l2yORj zj=m*3(#SY~g%?|LJyS-8kYe2A&s}P%5Zwqtq6p?ruOQbK8QWh6uBV8rOar4RRf{>x zQTrnu1LY7#Lx|vL9j0-K=l&s#?*Pw7kZ0YBE;7q(lG!6Vj)usuC(>R{YGkT26G)Mg3^D#8gt5#=0~ zr9rL0V8Ksn-HoK9LIGVPVwb47?iyu$=v$0E@JEnwn5F=h(kw}|u`U9Ziff>;A%OVRq&0tn7JWD+TvhzUu%$8xK| zMapA|+6gnPY?=Q)`U{cHLgKRo&?LH!95xjroeQs7BLa&#Eg%Lw?ddEEG0_JAq*lgg z*wLGAu$LzdOH1*NRBF+gx1&#bdkRgLG~gF6`ThLzl@t)~V9B4ex(|CoKe5AumuJA7 zPdx&|f;n~6V-YCrDcW-i(6rimzG|a61$f7>jj8Gl_PHGa8u2T7t!OSW;fLvCv}bH#HZ3UHO+F`Nap}0J2WA9F zb+F^L0IN|0kUpZBaC4f^ObVi1xTews%5!2DTJoKSLr(}c8IKsNgCK+QR-MfTWx_uq zf^9Y&LZU#Xr9SybZHC8>B8)ke5W=2px0ah&dGpxxp!ltrjx{=ZLmEsxx!E&03fDO~ zrq#v8db4(mEFA(T32ca)ySU!~9BIzBes-~aVQa3$#Bt^#4yoaTeJ3Smvyi5T!YqkY z0GrGqE{y@`f;utMW+sNxa+!amX2uQ^$xrLG1s!)(H#4N%87)HOlLeMvC)rg@ z$J3(Qm0?Q{O6LZ!H?asH{=9&>+E)(b0s9oxUDvtO(|`q0){lLz=S#;j-J-{^afe+2 z{0IwcK8nh1UmX#_HZ$lch#oCY5m$}Z0>~&ufbJYd5d4g(<0H1PwBj}*)s5lM5>kVv z2^!&BA9#UVO9t~b4W|$9Q&F6o1PdZQpJ_0mDFL>Zvhhr z`M%=|q;P)QJZDHW%z?sffZzf&bWqKW6Hhkl^;*4*S)m59SX&1zV=(AMmN2lAvuoB@ z>aBTF!tv>6&;%3!kPey3jwAp^5u-!!{e;fqaC?~A7NWMata95pGCH0Yu;fi}WFnd+ zAPLIzrumYz}WHv zWA}Vx@3gpw_HSRbU;Zv*EBEf9{W}uvSC7JYW)Fn+KBx-wPF|a=C^;yUBC_3phfc2Y=W$%d599x}(c_#kt}ZZU z?5S_V_;daWz`t+FuijHDjBUiByv7q@pjESg<@hqMC!>T9b%t4Kl-!`D=my4~`KlXC zj>U-36b(hj&W(9bHCFZB_p{{UTXYSyb}zcYo+k+<%L})W6vxtw<#iWZM6gk$tp~al`w{Zm}iDmi1l(FaF!1UZdLDA1mXC|V*>*&(EAd#p_OQt&7 zkS!Srd;|PYP)RHKA8E|;gZ{N%I(OZFYlJuEe3uOm{Wo}c@L`bjLKVhOc0fVDep1u>D?|Y3+-47=@c7A6aL(D(+ z01QJX;{TaBF?#4(HuW%ic6bL0>kgKDf!7=6qtO8O|2ieE6%+EUFnUd M?tOaK4? literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2beta1/bigquery-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/bigquery/v2beta1/bigquery-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..57462bb13787201aab3ce368af87530a65413270 GIT binary patch literal 6371 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 QTUQ$w%YV-C|%sG9=`<$k) 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..1cf80414be9cd40c7d232734f6cebaec86cdddf0 GIT binary patch literal 11662 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 BXea;x literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/blogger/v3/blogger-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..a734a13a6fcc9caa29092e3213763cdfbe2129f6 GIT binary patch literal 20333 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/books/v1/books-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/books/v1/books-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..02f91d9299a68e0fb922ada3d9a602d096b1ef7f GIT binary patch literal 31360 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

um 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..5076fae28cbb7842acf672695c333ad1229d7175 GIT binary patch literal 216 zcmZQzWME`~fEhsQ1(ePB9|{~ABCfS>Txn9JH~;5d1H~_C4?e$#ssU3Kb55V}KBwvH z85(f0;5+}P@BA09=<9i1`|f+j?AU-=75JKHt2PWWAC&-}=L zt%v<$pW`{XS-)QX{Q1&y<*rWFnY&*8+;!4&=E_RdDuIJf{!9tk`{Yl|-<}ec)T+)H y#XiS(+g!4IwAQY=q;LGB=zIC+FNM6@SU;9t4*uNWwbQ7un&m}=9)oU%PZj`-*JE-3 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/buzz-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/buzz/v1/buzz-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..a4234c4fb9976337ed2e3a589f782e5637fcecc1 GIT binary patch literal 7131 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 C`DL>J literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/calendar/v3/calendar-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/calendar/v3/calendar-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..fbbe2275df9626e173eaa17612c71541ebcacb62 GIT binary patch literal 22407 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%0DHMLyM@>x>t??A+xBRBd?h%{JFeha1S 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 N*D@^N{RjIq+#S%fAWHxM literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..763ed136b76f14f40a14200b01e86ed2373a6b69 GIT binary patch literal 10644 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 LbpU-vGD`ms`Nl+$ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta12/compute-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..b62c905927c657df96c58a266a97ce654f57fd9a GIT binary patch literal 13426 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..6e262a1927d206e87f3df319936fb5313ed49965 GIT binary patch literal 11239 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta13/compute-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..4643a111879a9e084a67293a017bd793dc7ad05d GIT binary patch literal 15911 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 kwi4_K>|UxF0gVsjtpmHSRTP@9}5PwQ9|) z#vB^}5C9P1KT%i!045;)PY%HM{lBtMBC$To8fU{c61sWm?*h^NC=+4Ud zG21oapSELn0$;9kq`&jeEoN$6eQJ_pd}*cXX{E7F>r2!d&w48(QwqKUrKDWRlFYcWzx?TDgeuI_d-Q z+U!Mcw2H&J&r{$Oeio9OJk1tWv$yEFl=MPy2TwWc&@HV_Nu6C_wwIU%e>(1gg#{pc z9fK~{-($Grx3X8`%lb9GNs0LI{=s@Cayb#Ro^kO2TlG2~dyE6<-cR+i*(1H$DR9_# zy@@#X7{!Iz0p^1&knZz7+4qQBEPYKvZoekh#g}4JGCdm{5;(}P8}e!WB)KY+mCZ7W z?3{3CgX%YWf<9HKo2oxf3y^p-e5Lsm)RoJENaX+=lO(hI5b*@r>c~K{82WV(=0wkM z(3QY35{FE#5DEE^(KqIRS4bvIUgXXG720;v*J2$jJ21v@3+(+7`&l05k;&^u<{qe>95?~}=FMfht9!(d>%7P5?Z=1O|JV5%D+=-!aLsYGyN|_S zkNybOR|qeX%EaZRa|iYa1o*=fxO<*HGk<05^m&uxs+NDA!H(-e??ASnBCP#l;*

c$B4ykjk&STI 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 GHh7SDV@xmr literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta14/compute-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta14/compute-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..3878461779134b6aecfcab5fc49bde7e692e060f GIT binary patch literal 27348 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 W5$6D@%ZEqV{ZVa(f>Jv&booCdAn=<2 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta15/compute-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta15/compute-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..b5240d72ab2fc83e4766dad50233d10c64cc4e21 GIT binary patch literal 20673 zcmXtfQ?zJ7uI;vMoo(B;ZQHhO+qP}nwr%5VTkmxDeHpc8@{zBqjLNE+1ON~K5a7SU zC;K>GLpM7x1&Yn|cxBj|JSa>?#&rs-eX8v>)(JGlu?vWU}I44R92nSzk^dcSt9UXDF=;~@zK)^2j4 zElTsPeLQ=jLiha-LjN0zoSr004yNbRokBrWy zJleW9Kf1iF-TK|+{PFJD#qxO=+8YgGU-$j~csvVQ>iPZL``w?t@RNyqgY)xy+q><7 z|Ba+&E&sDKWri!d&fe_NBgNOj9PLY=F>Cm9>iLTFvHcz3`;Y_4=39JQI|CMNCggil ziKlyg-Mj7aZW!hpzO!DW`XWMg-H+G7Yvx53W@tW|d_eJ*2^$nYVl=x8J}`bn{b)Em zWYsq3_2g=Q^mu1O@1X7JC2aSk-#<|&=7?6v!f@uhFLt-nW)^MZz2g(Z7kA|TVe0jH zdRm&++;}6KjTqN@5prXJ0b}~@u2nmRE(^T5>9dpdL1c}A<@IjZJF458KbqUXrJ0@2 zmu1iAYVX0@{*z+K9k>eqmFYEr!a95{+}Z|PC%Q#|_YnW-)0?wNJ=bxJOWTjfZaSCK z&Vc9bQ2Phn*MWzvHw5r2LT-@!C?C&#oeqh-$M-_`OX)nrNW%0|dWW0^VTEb-jczxt z$Yy6e0y(ZBrPFK(Km3ZTSd7G_Jk<&u@pbG{<0Ggymy-ZN28OCCeE8n*9g+OQRT2bs zq=4#`M{LwCXI+3Zm%V}1Oudidx;tOn)8u@*d?%)laNzEa=G6?jgGu_wAMaP%mxZ5D zGM780M(lbtW~`st7bdvL1un>BAf98X;_M|NwzVn7GvEzS?BNzOALPef?1|gCgDqTB z<~!P}zMuZgeDd?}9U87Nn^7B|X(0m|`1JGVu66%`-YLEM&ALnX_J=aeRpeeP7IGm} z_ma^slqo@yAA=hJ)$w3Cp=;Eh)TVwcU;o_N9oILZD$1VYhYzku*7aT!zANj+K)hTK zeXQqo@~_uvsCU0u#Kk2`yuh`Oz_WLn(PtH{nrk;yWYk495 zpbS}nam?qwSP$&IJpUrA*bft=-`&^Yw~RYC#JBiWi5f544QiZFlO2BGi}83?MY$i* zf&J*&sMzNX3KN6rABm?-K{ty=Cab$Ul>pP$uq= zkQu=OPOme&$=`S#uzF|Naa0mmEbDCdu9ZlfTzWHlhy-gus(5umb|inBgQxg)&>Ud~ zXhHN?3bIprU3Is&nHc-*VG=k5bm`2`dUqcT#_B(@Aq#-WDskGl?&1$nP7yzP=N|qb zOea{8lyX4c3ON)XA=|}#U0><}akbE`rbaO(4MW-W-z(3HwPKU~i)&V2VJchk-_dpI%y+L7E zoj*Q|0ZoApqji$9i}`C)OT(=mj1Q8*5^Toy%ITqgE<9@gC1XXO>UGVxa_*K;$@`LaES^3bFFTXNE-=FDo}?QX0A&K zrUP)SpA<>MwN1B=d06-q^hewrmmU6ARi7^Y`tR%%UgEp#fjS8Dz{2-|_4oIg+pqWI z7@GI`#>f4f9amPJ+wD)hpUL^Ziy<}aS^Tb!^M+OWA}O>K?W9rNTU;Kk?1zIB$Z?rU^b+oDsk-51S7x8Sbb%a z?L4`z%92`B&84;JxzJ9k`m8u*G`~?31PeBSiE>Q-9seeFjQ(1DH($F#p;T#X*)$Vs zn99P!V|;jO=xVxLWa~z@z(N3*Luva*@gZ?pEw~gS2{o)<*I_aHL>=JQ51$|}b851f z*|K(HKFhdBPf;-vS8d%ZHVJk!o(1b3x#4vOLKm#283akpj=gWLf2gBvrgUcB@S?V0 zA!WF6J3=iy^I<)E_PY;~vx8JKW4CrW!*M>^wA!qrOLQt~3WyE>K)8swIiZ4V)$mZt znF1M1&K4yxZI*5C3=SPH^_;q_#UKSmH}!EkcOffZA+v95NjJQO=~059d3xiORP?C9 zj6@8ZYs|U4IIxf) zT}i4TuIkZ{+e1H)P&|COk}M5;>*=tpL0`qql-p;**eri%kfP823s2u+o85ZL(af7u zh2=|hX(N|LCsoOm2>+1X(q3|%20>dbkU=d|T9a#NDExO9QLgX1E05MIv z-Of2>6!)oIjdjT+LR-mA5wLkt0?8R8#32xlIEPQ9zrH^l(xEF^>MB19dOgQw_ZY7q zifNYyadKM$HqcoT@O-oDyto6!4n{tX9$qJIoGp=lSoRI*PLG&Q^9wSJN%*`JCFd~F zAz6*vT<~4MX3Le-XSTXRfYv4>1&#NnZHQ7TUDN=iPcB+WE_R_`^1K!jL*_->!TIr^ z($qe4wvS0W9Y7WTmEj>wtZG2bI|1s3)E`n3ARCICIADx?w3NtH`L$N_78PIFz? zQt=Uj%t8{?Wz8IYUOGMQ@P!HEbLHQp<&M=sL4UeK4Z>M%ZMVxIZD%-Q;49Y#2haM~ zmnpllurqLUZ0h+v96X=5wGmNO`l1c$@EZF780;bDNBM{lH(I40K_sIOv(GZGv(LWr zjy#;~+&{TFcsL0KKjh&gS*D`s7V`0?oNo}t!ni`KZYXF7S~3`mZ3WG4^c57fwX78- zbMb8ue1i?1sf?@>LBzjak4wYuY8gfGMhjZL7aiZCW|RJ2+^08~)6H>KUEQp!M+tzy zn4=I-fnN?wOh+=>#+o$Z_zU-9f>9n`cL)1l`!;{Q5p8PT=H+DJUtS-I;Ax8h)_g+7 ze7_zy7-+psj}=||_uJq;Dgu}nteFE19s!v$m&s%sdmvGhV0-t$89S4N4VjDM1+YP# z``piuG8FZp{)RqwJg+#AqhmvYYFk?uVk_2C{)otvRbV^(Rfj;s2qR*Z%g4HFnzKvX zfXb>%vfyq?BN+MUCrrBaV1MlXm)He$A;;uh#Mx0)M;=x}=z<`tsUqGoO2GU>4`v7( zhEGwLn3!J#V;KY~AdF_bM~CPkqHX{{58bpHx(>Ce!bGn|n{B5#h$jVP6PtObQ-RPS zJ!HPp2AG%ZhemjwOtzsYd&PyQj?$ffPjBhA+@R}H!XL6CW)Sd)sMNB%yEY83k%r&js`V570b}Fv5 zVJR3wqKcHObnQ0_NAPLgO|FIevFUv%u%ax;GT%$hLjp^Y2PTd%_KDNOdWC5;!0_*_ z%xC^!NtFOK6|)OUSA4?0t1>i}uAS8bhYEzv?F=|o#85?)`!<9t4oe}QrB2g7Yyc+C zf(Q`=7>j2ug%)Cq8Ob$5o0O(&i+8<=5swCgX2Vr}`n-BbX(jH@{w?FH=N zw!>sHQ|3H_!gJfm@zmIhvGLHJ3hF!^qIlt}9pTGiS!4`*;w(k0 z4(dL7olGgmi~Y^1%X00#VW#56-&41(I7xNf^CpO9<%@@4-dfChn1DXAck}b6*rA!h zq%+n3bH9qHw|J7|INS$J@-TYe4KsXRx1|mg_E2Klft-uJjnau>Ima_HaWDE zi9||akPtJJltg^c?Z4(ooHfUTn(CkD{3SrWDD}jgf~QN{;XphvS#JG@83j6zz|^A= z8}8Hn1f0!xF?Rapi}tS^+lDp0h|JQBT-msjie7=hN5LHs|}C(aXgRr0k{luP_o~zKeTRjhABy z`D<(;NbsVJvGVb_90a%<8H{OB!#UPt!8C*38~V?Hnpt4*`3F9UFr~v6?B|i;(MVKO z3?JM55}zwAD=QtVZjUGA9s7SkF-+$jfARexO}@Yd#C4Xhs= zb}x{H)mYwCY+b6t)&mjOQ^*T-Ivlb}lb_49c<;-FcAeaGxxNe8yAf_fT6Ilz&VPv4f;F0UE1- z6Q2iFxh?P}WK08MQ8?XfjzTf@He#F~QrMXZ{i96BB#P2@0jHUTj<|4A6bcuS4IWAr z%fL)!vo}hvs~hN4B+*T8`Q|R}QE=X9=ZGx(;XUEn3`DNKgxD!?_`qN;@RF)N(JE$| z#i2F{hVi71Y_jVTi6LR66?FzMq;UrMv~Y{WEg_NfA`vu*Ey?$IfV1|lp-N3ZVe*Fs zt&*i|nAb7u^5VNHX2WiYaaswseAub2S*)Fv@XD7XI|DUMqQbD7O*B@hly47V7E~a6 z3t}rfV{5ulBZGTWBO`gcDD?8oYz=R#v`=*F9Hr5tNP|+#6sdxW5~UL4%~#~JUH590 zH5TnO4)6+fSD|YJy;&u0PAq3aw`RHka>;@k$@2J%vOF9vqLb(sn{L&72g8xFluWhA zKIm;GM6Pm2_3IM^yqbINnQ`;=m|=niw)0ngoBj&%|;CE*G-O zqkhWVt89q}+RrOGV?dFPUBQNQu#35h-5ZZ>RnUc!dpP+S99PAGpiv1F^IvA${`Cjn zO7rXMzi}MpiOLI2--Q{@J}*)MH@$Duk^ zmS*VKWnO(c*3(^2q~HQUQiAib3_fNRoZN=87bc?UQJhHh2y(ofF!F7pCx4V~enwi2 z52MWm#f&m3P&l&_7-i+>-N4#D-aOmf-VXL@nvdX;<~NMxg>HVM10ffKkpXdXad3Kg zxIN+RNaQZlg)6thvN#Ao(M{o_z=b^}NOhA6?P7?bG2T(JP^4$@PVr4Mo>cjk*deo$ z6>R1yXf#7)mGl9`d-J3|>EvB;JAU*Sjwqq~4G3xIbiUo5b+vZ-lwZ@LGfa@5U7(@) z71i=H0Q>LZ%WebjMj@ll^Ggf+D>CqSvqzfZ>&I0Cw1X@6DDG_F{iF{^Eh+nRo283X zpMgfzQ}fYWUK}%?Fz+;cj6$ujPEJ+ap!=~Kt`t=x?zj(##cvdN2rOLLY!JP0OPEIf zvV;-gaAq8?W+;xAZeVy48n=MqAgnwhQ1Eta6JUU5e-bb3JN-gW^*0rS1 z=D^jC?}h)oA@grODswA-AY7WN(5I?iex5ca{sBaX42!roxt<3nj5QB_;9{8C#yQgF zOrF&^CZaQs!QOy*6F8%S;Jbpeh5_iH6ao z0%KhfT4rcm_jc0?@tVzPi&0|BGTzS}J}bUojQtFF5MaInF~7nY!XYspELxQ3Kfs~X z2rji_FJ#U&Kr|o&l;K1&UGwMVM_jDa9A0JQ>o1aErF z$x}c(JD6`^2wD^+v%<+FkzrtUJy&C0y75-f3k(X=UQm;<%m=RD7n z@AdQNz;xVMcxXKA!JxcUv=IWO0zZ;Ael7S$F~j7YT7z5hWCS}H0h|mDGnbhiuDBqr zv3TVueRuJ&O)*4XiK%w?pPgzsEV_|TMqN@XeZv0OU44_HrK7npv#>F-FtJ+^k@%*^ zp4X4KB{{KEx-l}ci#}z{gvX$zxG=HC2Qi<3tGEsSpBJPXQ`Y=EzZ}ol+jPtLW<-@3 zGTE@ba@fN1Y)#Lid~5+KM$WqZg`SL}*uYkG_MXhhKGI5wtq#eUh#lkq;)^4-B_K$Kl= z&SINEE$8|yX_h9jYluiUKh5*edQJ+XyqsY5@83ys$p$#WlbzPvrwaDrXxi!xA7$Jj z$k{RiT2$2xT1~1?geIkmJ(w(tn2-gb6qeJhS`8=Se@y2ED?cM1S8}FFCDfO<5;3YX zL*B_ZC-jsG8r`#MMDOiqJ5@kbjUt0E>~>~jVXk1BZg+pbd}c73P?!&r@Vmd)13YC% z+Y+|I8p25#0bwAUO2{valq5B2C>rq$4?QtiSQtSIus8AI@lvp){xMx@HV!0t^>|6U zl&$R$MA3rFr{hz11VyBE9lv9>i(dDbDZ3-EMeH1Yb~LiU*%EGcoV!zLfi#F7CkP zfrl(18Et)dXF3nIf5G~3w}yoG8)m2Djl5{vZ?n_g8??ipcL?qDM9VPHm;r@#oJ6+-FQf zVQxv7CW%`%sRu$kk&s96gFIhaxT7pZM{x69_v-ikbhFEFM?s!kXXI?vfnlBVATW>m zj(Ci_D{*3@kyYeDaB`d(+i4r?fhZ3A=3G)?Bh|hzYSjf|k1amp_ zvNHx4V=dNbD$2!2Bs@UfY(H>cNOffa%&Ar>-)_& zAk?SP{am#WZ|rK`*c>3XXj6Gw=4Tw;lj~%t<;Grav4#~vP1_xYa&dR~ijYWX&GAx5 z(OuFjpe`0jzXK{Jq?mOS(-phL#qEQq)K^KGO?I7D09HFvUM@~jV;smKQ_yQK%lHks z`gt#G`FzLi%G#NEy}I~p5VhcoWJHmACTMuNJ)Z3RBd44k7NmZDezvB%Y@W}cVJ&hT z*N*kEN@{CjlbmZV0rGQhMmt0{bFJDd-5Wdg1fpyz%{3vcNJpNOcXN^6P!h2^CH>>dfX z`TF62@#_BcxH*=uRwM=l8<&Hx9Q-&TC&83XYR{&n36L>qfS-j%tJ_{fF(|L-RN6werktaG)j6)MOVBi+r zvtVNFrl`@^W8t04Yd3-)T`ciD0kftr*aXzmkmv7bGRGO_qO2YwFtOej0;|2RtP zdM>{jKUHQI{@s?gzGPkl`O4_7QQ2FXq&*gma#U=h=)AaR(wwHvSK!XIl9Z}wJif`8 zLm6^*aPr8&T4-g26f0alg_Df!;^H!Xg`QYF1g~T#L!)3Ohtu)xhlbN}rK-U{M#L3} zvNsO1l@=@4#W6XJ9S%V=_h*%?GLl3z_YS2tk8e%}O=c&;MskCyda19)4DWE*moj3% z21xZy!(DKWvSfHD*o&Db`N!bS!VWF!|FQ zCjtjGyoziz6k5TSZ)dmb;HzoFt-cr@-P|t>G)|7Gc+7kZ_Ex}cUlUthP8iU%!BysS ztB!oycS=gg;Waszab9mTHE9XeaMa!N?tS>7Tq2b*eOe8 zvolwdjj+VcTcQwNg@Ky{n@FuJjDkt3={@2p^G&_V6Dep+*;F3W-$+JM!=c@3-HHWl z3Z+ylUm@YrDz;=LtDbdeT8TUfv{Ge7kH-#|T7nl(>pr-IMPRRhee%bF1x#`ECDpIzgsIQgQTtpZ_xID8*b$E*nY_ zvVJt80$gq-ej}K2dpsUcQ94;{+>h>9M`6zbQu{}DNCt2r(q6+nmD_0vLz$boCkB&h zEu1{9gcze7km@-7tCk|}*dV*B|J^HtiHktiJ#fOfa6JB)Ip?y55&}0YJEfJ!vwE~0@+fh;XFd^4+9L0> z?u|PH)e>!Nj4r-oqrJo6XcH3~D-z<2Te~}!7j9Ms7n>Z|?A=PPQlC|+D?N1>=h*lzGXfLg&QXi}fH*G=-v*iCh zZWBV%RAZQ@1Wb@>O9GRmBP*25f{4Wp6lc8jJnS~Z5fl!*C$SP*pek(Y#r|mAEX_$! z3oi{s4Qgrg3stu!1(ZJ;%Xf#=*y}39S>*DUn}yaka9R>Fk5BX|lc{i?c>r~|_JJg_ zgN=xV*RNQc+o7%%`e^=rrrh{-oeM^;|MPX2J!34#3TiZvO$5f=85s z4lmCvGf~Hg9q`K`Vwhoov+NB3R#q;$cl8QrDS#x*HQ3$Ry%4E@^jXAafsv zJTiuMSEU3*Szp^9mA{3&cGoBStI~^-I#av{zfx8FVNw)RzC=!8lL6 z4FdRud!;tYv9&RovrWCx498Jciy0(S!HVm27NE%?ph@`mnr=FszA#0QH$k@NX>;O% ztMO05nfMyQ9{T}*a^i%E4L*uDCb$yjFo9RQgNOwp!$l3vsLtd_F||@cDkQPd^*Ct) zP}2KrH0%5KPXIHhklRBVE>{AVBnTq}xvTs&3mA@M>OIKVd=d)-n(5w&Lz}j1y{)aArpBE5b60WdVEU#KH2#GN< z0X~UXK1jB9B1ep%-Zk4Cee_gx7ku&ey^$#*Ss*-Wu-0&REN5b+CZs*GF^%I^k>nBi6lxeTyr=Dtxg(ak+V<0F_FfY z%AvD4H%*Axy**}spLYW>nioB^^r`4WDrrKn>B-J9hd1*6>MmGgwn-k*t|ykhhCI66 zgME=SEUNNJ{g)_T2fiqcxJ*7vf+=hA7MS*y{}o54k0IdNocb)OvN7w*-kceWOhzPb z*Fv*>V+!k%u!=_Sgz~MutZE~g(!`&6xNLng0SvsQCQQ9#1Mp;0WaWSuea)Ne;&f0q824`o>*IiS-x8VLRrk0C~jH`|ra zBFtqgo?l?^spUcxfKpGHI+oErS0KKSw?fckAD9X!ux$u~C2n=@=hH>I1J?Ihl;!$u zu!_1ZYnf9*ZnO!}Rcc+Mp6UAf`9F3H%ymgrTb(jPMEq$}ERzLuD}D8>ssZbfRf~;7 zO3Y2XcN!&}rDAuq6S9H<*8%LJQ?||3NcAVauj>tTOp`Neqi~x=`c}dg@d4!132*4o zEg!vOIS5gw`@ZvOjh$ef_U|msr-w2K%L0cn!#5>7t3ILLQlNosS_N>=0QNDtT|sAx ze96a~`W@v6!R{7^+nFsw&ff~emIqG5?-fa4QBuQjlZ&1-DkLBWOK|TkQP20y7!t3h z(c0SVSQxd7hKCX1f{F|xCE&)$9+JFT`7WitnNs)FJOg+gw3gF-&X+2g7aCCeX|>s+ zqy*~U&Cw~duvg8-1Rs?-Scz;Zb%TGDj2Yt&@tFr9N2H=nbk>1 zjRKHSB}gyx#UZ^;t+u8Py^Yhnk3TL9El<3Z>KXZtJ`2k;J7wziOWy}AMr4}^LoHac zp;{;6s_bDp1jlPW`1;#dMyN$KzinBdlpyP}Uz(QtpnFRUDBkgbT&+O&$1-6F@yoc; ziRqwF&MiK!I-Hx6qwmI_8wNX67xr#H=^ zxpBdP9|a2sI}J0dl)YnZE6z}oF^r7!aE_q&j8&g@Tp#vb8R4GUQ-^=VjRw+o@v_ru zW+_gG9!6A<(pV6dN0>PI-z}r2h$dk^lDd7Twqpa=BfgG#AJ{A4i7h?obibTR=S zdUep{*DJw+>&m9r*WJ~A?(>`X=8~g#_{p~Si|m(H_xH#B^%tw>#b;s=@zl7u59bxH z=-HSkf@51;C0pOG5?$C{#aOax!bBg)HgfWWgvXMvar^6?0&n2o_O zMg&w`LeLs=$c-D|t<;*ww4lUWodmLWSlPqIkLARfE?|J4bO6~*5hFQbxk#-S-?I2*)lsfHvm6p728s!$(*g9%i4Y`gHiYTRGmD);N zjiW#4Z>m?Ab3)tPxc83I4YBtr!%z)eVM!izMb`~X9dql+>;mM_*`T~C;-Z%37CKGr zsUr=in#PFsHU9jn7ggxtDo15@(P}k0s3!9&S7mZ#q?&o5&lc)=qf1;8Hx?>hnkrKp zR2NMiqta(z2&v!yYI9KFJ~1)MZSr?_Cj%=>jTKg*EqMDN{S+TQlm!X}OJZsIY z@N}d=u49ohlQr>2pw!`zacf&~Tg~=YUxrYRbgfvLx3wmEZWnK>XF2w!OH=KAYjkL) zzMM2x9;QuaEUadPIZ`QDj*}gxp|TTFMze!eEMYidF-uxF$i|ow6c%-NVUvvTtVSD5 zasB~B@BF+n=mC|*e!M#GNEbY|e}}tm0_WVs?)wj&$^4H6r#;p>b)w*7ieMZ$KeaR~ zb*4<20EE7%k|AOqd%yqpxdBT#rp&sfd>kexmbv^DIULlYjX%M|KuF+tnc{_g1A^he zKwuDP7~1|_bOs#Cz((iXJMy0WqE zo}&N7;LRd2RU5Ls9eY?>6e<)nPeN$qWGhtjm zA4Hh*-G%)v$9Ymw>bb@~5#z7SO|S(>rg%@FC8V^j>VRlv!wBD+EXO?NFbD5|H(}hE zdklZ)?u8tr3RTC1%K?*2^KQ$66zS~-Qbpmo7h<`!y-U#PIYsU=)8|UiUo|OE!{~n6 zT%Y7Bd8TCvOI`AGV&DxCgr}N8pE!ag8ikGji$Iy1jrP3QiCS7iZxdocB~2%oo?738 zTd-5FBkT9Ys#4UA6Ot5mmYDcB(~J;*VM5uGSQTtLJ}xJM+d5c^%6f*#sui9bcn?OU zS=&zgCK06GC1n>0V4ct)4<&)cC3iMZll;rP)dU;aX#RRUZ!4l-RWi}IU*d7x5P6z8 zWdgP5*g9o^A${7S%NcUD6gc{-D5P23a@zorxLR+y@S9N7_cKc2-${D9ipox-X?`_2 z^q2$ZWPWAmp{X^83)YfWcK@#vH$jvOku5eef;IdxBsxmSQfdJmoz1WR*Go%$lFrxN zMNM!Z?kl+-!J5FG0KuC6<#NE*SN_KZH=>nityNint-Ga+wWx_P$2vpU+mdRkm8)etlq9u03T z67Q+Lv4}$>Eti;(Q5UxN)nQVm>E&@TeO9&6f)UL;Q5fopg#=0AG8B2#N{0v*_U3lV z7O7){My>)H(X~hiEB9ik*e1~wuEwjILM>;LD#sVoAp;H-Tx1aJEdArfyYi1W7fsco z^zo;&W-^Ab3ET~LV{HqVx_$G0d-R!b$t2TPKmB2z^ zA?S!0KqLqV6-fA8dPb}tXw`I2r12LeU#EA6#s=g2-3!~jfkCg+g0|6Ihr74!!|an~ zup$BuzOq5`zagW6+EiV`6eO@8EDR*ITpd?S9BS?H2=0EyL8v#4CunbaI4`dd$8 zXn(Ufo5P3E+Sys#(j=kO%%od-j7#Ny0@h4mEXW3_kSskMnAc4a57;$>eq4YT4;U}0 zdn@jWKqbl>N@rVm2;1J)kLgzneN8XI;T6CR#`t!%B0E6UX&ni!`jlw`B$3Sqvqu>= zPAw&XY9^~9#5!rORfJ;=i@UnSnq=pTaTD1VkBA3m*t(?T!(6(>UIGhTrygNBmbrIK zzNf)w)>rfRgGOb%v=V_HFCSZj*=I{j(<%~RS5YuwF&cjZP{&oK2R6qJwv(+Ds87oJ zYUOdNP1X7f`Savu_EqAJl_N6C7+VjQG&ICW^)5LX!<-o_kweWp*%)mJpcTn>BhZ;) z35i&fL=$-m7O90z*Th2<%a(dm%s+V2{nz+5_=<(WcznzWhF8^Ag<2p|!4*lLRml}) z8Xny#1Rie^E(+t2=xO4TE&#=X823LGz1G5pv8?p#L2YUz@58Or)ZwKH?Y<@Z)fIwBlL3S;xOjM?r^W`hQF`tTgFef*ha^>nWXQW zX-DG7N&4TFZg=w8iuT$f4BulL*mk?c( zDw^aXNPea5{s8f;en^OQw3JxVGD4}GqI!sfyQ&^V1>m5Ndc=Lbtm=v!)NpEK#oKyn zpFTBIzHO*b2idFwfM&v%M*Jdw>I4m;17IMsoNqEXQ1L!`xzF#k z&{`qfMSj5|M9F$RFj=E&+cLJi*wYQvz9tY3y+6UxE&JqovShJFYv(ln6le(efxmQ;u%cS=3h8>2T%!oFu63=Ox~P_+sJ3i#B~?K# z23_@RJM~&8DVKnw+rlxF`zI=+OT$t$RMOgdg_2gyfCd?@CCx5_A43y(Ncg|4Q_3es%j=}h&@nT}AOAM~@`x}7#r{Vm zyc9qWn61;W621yrhhBt*jwD5V^Dz2Umo>{FEN}*m8F_Y+ZAW8(hVjWjc8i%^-OhQPE(%6Dw^Ogk@wQ@ z>S{bo9RPiixS=Vl)!G~2 z!}5)J8;B+pDh!0h=`Y_m<7hUfQQ|5WxxBSjcgSHcx!X%;2hHou%a-fAMT=j%`7Mx- zOUv+xzhLwBj<>gylawBBT2~C+*7KFnM)lvQLvPz?p9&X~X=_LiR2D}O-iSDYDY`CN zIG983Ab4t4WeB7IhUIwc79j(SZub54q}>`m{~9YnQ{(W%c;|JnyG`^k0M#=Hsweoj zvu>;?cvkFRxnrc&89ni!Th6!Gd8So;4Vy-BD^PGRe{s%_`&t9 z%O(YRn=^m;nEL+y8>xBJmB1qY%5fjf0Wq-eb=)VMdWytjz|W@ez63QqhpS5_rOJB> zGvmv%szJH5bd*xnZsj12)T%yiPB->&$Yw1QkrqFaJKtFPDemqA5HXoU`_IuZ?fwUW z{w;Nt|5*P->E8$VpMx!Jx~~!)lX9S-P|P2mKkWLBnz;P0$NzzQ_KfmW>=Hc+EE4oG zpT3y}H7R*ak_XD73=7c=O1vp!Id%Ld?c(t%gQd}$D~0rUSi>p&8>}x7mrUuzG|+rK zej@7G$F|d4M}rN+`b-MCh3K!IS=JUN-c+nvXJ(=uYHaZ-u{nVw8DV&zKRAv|~0hQ0Il*WMl z4?XTp!j>R8LPoxfiTMp7z$R0Uko-v-m|F=54Tj`v_J9yuiImE^;A%;lf>Ad?3RK z2)1rkWyxhy5$dJaFJA}-L`#c%Lo+XXGXJ8_kvr=BCk$Br8$a;%0KmZW{}&c&|1{8l z;wNEW+!I0N68iDclkZ=}Xbp4n*Yp2;{;U2?r|HPqZI7bvp`44HWqV>-D~(eg>u^~H zu7g@av?6mf7zt>WiP#WfBs58lY9}7Rkl5iAlojF?@Xz%;AwSLIdY+?SsGV1g^|A>$ zP8|HMOloc*>mRK+p5D)7z53qH!Gr}3?2qcxLmW8qhf2?H+|gq8V&q0_xVib>YJtCQ z%ov?bk>&kqXbMW&f;a8+VdjnPsq1}0pM(3#NYAO~@`C9{+9qDd7#`LwdXQc7y)KdKl4Ixua-?EF3sb!vnKZD!r1L>m}B zyH0Mn{PRNX2nxKqJO0<$oXJ+imVCQkEHqCZFEddDL2S4*5NVA}PrUKC7k!wOLv=W` zfBWF|@^OJLVD?PFS(Iq&*-WeX0HV8U%0X(A4b>$7-0MK~JR z3Jp79Qz|%Y+OdrG=y=+JCM;NBKS5s-B*s)a-Y(ak5QtHw2a<%KMR(x#E{lt#7T<}I z8r%~)EFr^d();0S;h@)M2=H3Zy<> z!ZST#9Fh+e5FIgE(1jNI0Q+)88m>Q~$asOGDF9v&Rp2cL=reX|NdS-msX%(4%sSQ& zoR`A@?zxoTLYS1F@+KG37S~CD8-rn%b2oa4W7h#J8le)TaK}IxS0-YtG_c--9PK!C zrj+>wghQm%%@y()68aCT8RB#N8PnRMKO+9vPR88zf<0B;tklH|8ZsQDEduGc1MkY0 z)P%UhJpGftqHBbR0#k7>PNSeXVLf8@dLA-|=;r5$ks?Mgq!Z6+-V#L-&K)IBDar}X*B^&VdZ--UCm-J)+5A*G+C|z%6@u#s z@mTDJe0gXLjr{@euIpJrbqnrmj0Q+F@!%l{`s{6XzMW#!VWP`O)Q7{+UznSnGWP7d zK-Qw{{S#G+$9W9?1H;-o%dR(uONaOLX zZ5aLOZE59=F-Me}pS8=O!_apqr~-lj`0iS{1qO#|)<^_on8_qeWuDelbWJ;O(eoM! zWeTyQR*i@NX67wb|@FOT2xdP#Yrwz|V z?i-;<`B?}#b2`z=L(ccjrfRuQe5l^@aDvg)Z{|$-L1bPUrkVm&M)ft9Lc^;mQ#&N5 zX*uBsPE`O^d_hzcPO?MU{k8)eHb`oo`H8(FH2ooJA0om`H2R<82w7>Q(($AYrS4n# zn~y>Fm(Z7=6HqHaag?F4iu02*>lcHb-OEwClS+9+^gs=U2#g_;_EEJ6002J&d@*b# z*hM_rdCB2Gp(A~uZz;~e*TH-aXA0&&3Pw(7))$TQYE(B&qddFIlR>$|kszf_Wn_o5 z7?Wb!OtD0q7eK~nifEH+nKonUX^oV4tSRA}WJ*;6kN)n~vUByIJ~D)H1x)#Dly z3;_sx9Xs$yLa!}EJ-x)ld8fcs;LsN&5-%b`^H`FkAlBKcYfuts^_Lq1WJ>{2=9HtZ zcdYlSR#e{bnIL~A3qY!iV-@c*r64I51*-10(U+lyFp~bu&=;@$6WhKcXl^RSeL2O~ zMK}~bx>jUms@h1Y>xFMpJ=2r|fFEY%IS;W!lflVp$cpht9rHAgZ3>5gMB)8!L;Y!3 zAm_o?09K&1t&)4QQpg-(Z{f45O9f>XGeZ$)%Y6|cik?8R!=VzcJiGZ~pi5MT%Ya3> z_J6siJza)N;|bnVb2XY*v>@yT| zD5um6iG<;-lw0&wNfBuO-5o1E>;Uf zWh+Cx)b|VtR3*NH-S6$Mhc4wnQ};V)FsbP7)Fk5lTMjAPuSP|jbGqgl57lS`+$UiI z0b7>eX%W4vsW-f9;CzIoUk3px>U}l#%I! zpn@q9Wka;rK2LhJ>dVbHaUmJRqMUha*2cMMCwLkUWk$jzi)@CFnl!7YXQ~G?Mi+{$ zgbnTolBVW5Qm#!R=PjzUEUXXWlHTbA^InEvFovj=BsGgO$k{E`W2f;8e)=YkOR%276yXEuY3zEK236aJJ4MBwny~9X zr{r47_jpvwLgAyOKgqB>IpZa}aGug8?a=V+_)N8F{& zyY7XMVye2z;!;fwDBm-mhJpFb|69-(?3k|D)sIA6fjuCn3$aGJyU~D{*0Oj3dm&O- z+GGfW25zrE-9Gs2$YiKtR%sIw`bv&iZ~ZwcEQxcT(~#cXb+c8&5$*p46%gw01#ze% z4h>~P$nHS`klyE^Y3h3L(}fgkL_U{92z!mYk~pU2s8otHvWDE^Q%jb z?%gfayl(G)x_AEK#c1c3_;XuHZ0GLIJ-nWDy?y8W$4=dLY6K?%NCWSZ^*@blY46W< zxvIZkrX7^y;(4D_vt7KZ#IU@vL?NEPVcQ7<3G6N_F&#U|^9V42PKQzm7H#IS!Vc1A zj8B@^W4o$9^6?w>%wdh4}Jk$lUTVqB&aPujIx{ABC zfn*ib6@%wyoWr)44|2_MErc4^4&hXUWDrgtp+UI!8sVxRB;2%E&;{R2>MF4iQPs7<1M{H)F0elci^GSzc@}_g3iIT7#+vXAI7)6K6_z zBFEAnPBtLa^7_;bz2<7+iYU^%W>|N)0imbV^<-^0DOERNizzIc!lEfG8uw=0TdRBP z8ZK{g`IIv;(U;|#z1_0M8tV(=GSwb2wIffhOLr&4k*C~=elXfb)EHbpeXLe->!!X0 zBw)%8`UnkPUSGWITz05U6ZHKC8#ElXEAq4u?_ znHQW;Z>)D5ztMhK=bBaRqd+Zit3MNeQS+(e!z^1}OLScweJT%IxHjuJC8KW+v@UA# zy%%t)+Vc@QRP#*<-<0tCO{OW~D-!QLx_1tiHo2x9;;S^e1HEc~ zc{$eM{^b5a9r`~D?aPj!)DbeEu^S41VlLQh(d4jHNn9Vb$-7 z-5UJlHy_H+;FEul%JT*)9@Vw&N}Jc9GDmBqb*V?o(k_G?mGPV9ALrv5lHCho`?jr} zk&Wj;V1l0A#Z9)?xD$crhs+enUYr^gw-)$ z--DnZ+1CyJt6saZK|WwN!_Y_N!(tl&G;6;m^eoZq37y#+R#5Q_Y#P|SHn5p$u7OMm zdF5lTHxMto9S>80%oUD?$;ZEIS`{jszh#buX=2nY`?Sl*Ec+-D*W9P~hWrwo*F$pc zF~w^`==HAswCt(PV|xFiVCo{^HEyS^ddGr^fK3FvkrD6}?yG(~VeXZOs!dyk^H|pN zajc#|)_a$*K{113*9OI|aJ%?bqgeSM=1q&|fW6{*{cSLqKeqp3U^p&Q>t5CTf(ZqR z^FXFS7QVejd;M=^h9)N=6ctLf3kGxwDF%c7`osC-Z~N{cEo5mSvOrc!DUcEb@i zeUC6BnDD!DXGo&jCk)?7#NT1`y_`~M?fXhL6vta0V#$Me|6{q@E3MrgVyRMJa~zk! z=j(}1-I1t14BUVexbdl-JZ|(ohU*g6XR2P-V~*d__%w?+$^4o{9OKT6JG+GAx3o9T zZD>dwv3YRH`tE)$_gY7(qn>K_IQmG^sMrQOje@z^(Pe<+n$#)kH^M3_c`x^MU6ZY_ zYKD64hSj>P4^1zyCpLxBtW0KL)WGO9gVE}ZvF|a2ZuHjJEs{M>_J07xdyxPD002df z000001&{y(6G8w00000009gP400aO3|Nqp!ZfcPpTc$##??l&)6M~9p8k=@;oMo*t^ z?SFNCvVQ#RV(aDhUKDg|wdN{f{ff^Y9{sI;R6O2~4F770wV7$RTEpSckClp3;F&Of zp!zMI+oTo3z*wbu41ScS>GMEIt5u4uE>{^LgkSQA%+Rbp3p*UCsldKjtlr2!Hpf=_kZ!c57v?5hs6qZl!1dbRtp)|Fe3l6c)Xt| zfa@R;12`5J@Ni_oRM;)dZ7wJ6W-=8qn*bAi$KP`8#}}+bW=;bL9ruSKc8r1D#V%(l`;(mwF|&!Cy6lAuPlT} zNHC1E%!MJ_XZxnfxG^da+#N5(NR_H%m+u$NrA?|>uIj|ns zAt0O6^(Nam^SiPu>$AM;1iT1p6*5ggm(`fpvRf|G8OCYJ@;aZQUTn1>5y+bw>X^J2$6dD3& z8I;2X7HQLBq{E(M0XN{Pg-%}-frOb;3WKDwPT;1aiGmPpC7;R)6rRg6=_U_DqQV<dgW6i0Nm7Ft@;#hIJQoZ3Xs;Bqt8byR-}a-QU0Y3u>$v5edp`F#|J0R z_YQ9eN98E+rla$qsI^F4|DauQL_;6y~h`LzFHNy^=?ZE zuXZbceL|1tZ8LVO8!DRSombz};LaS8YC zgEs!3uJN^t^|gCvmmAHk&2hKuH$HW*@$K2%@OpD=V|-eEYdmPQ8xP!gId$XS_`4fT zYg{87ne&Qng)eU{TLJTrsP@_n-zdLXi`_cMB|pW;-MDoHN%j22-0k%4@?T`XIw!)c zOP4o@oGPKue?V8c_d?_GaAd*1glr^XqwxnNl<Zm8|tK zUSm|tQlT=+i?YI~kadqzqq3e>xyfinXgbSKUZO!wQwoeO6f`44WAJQg7ks3)1*^C{ z);ZgHH#7|Aob-RBqFm)gqi7wQ@OuAH{uX*ekiHL{B4|&BY6v=UL30Q?KZ5EAy89-! zdk2CVZfG7s?^jR*LCr}h(i*jO)}aRk_5YBzfj$JyI-xNHB_5#<1Z})PUkFmKp;rXe zG-ww=hnLV3f{qnv2SFD$Xb?d+4rmBL&n9$$pwAg-wKcMLM4=pldYZ)E+ujoW0>WDP zW&i*H08E(x00002XaEBikN^Mx00000TmS$71^@s5|If&aX*kLATe;{nVpRP8nA4Sb zGynhq00000000000C=3mlD}&dK@`X5E-Dy7L9DEv+ayJD?uoxa@drpEUIKE*Aw=S2 z_wDVN-Pz5|Y|cw!?+;LGwX`x~Wuq2C8i|6vR)U3?f566oZ*F5EA_z9K@LBf9yf>fk z+hvRmGsbda3_LWvEo?S#^|}m!TQYMLuqp&&PT_` zF8kM`6WP&;v*&`b^B00C&l?$JtiE1SSqC~iofRs;@sxLvx-Skw|EcNa_SVxz3E82# z@^OedP$D-XllE;hMkwn+*alE&48dd&DC7pg#6m+T^lS|#Wnl0BSRZo@Gl&vGOwdqm zq_VVJ*3$;lk+MZ3FbSb6k_2RCr~)*a5x{w>6cKQ_(XJ~@TvqcGLE6*i4hlz0tFY$v z)7&gW{XT&4@V`bdB*Gz>=ShK(Mg9H%HI1gdEGtspvw?oC4QUK26_UclNUc=ApRIx} zMcIh3HK(9Z3Z;Qe0f$`SyvPa-LTbb9#L0(4NAw3}owl;GO8Xk|fqt$|gPu z1`U2gq(urrR@l8Fnx-xiqpdN?D>Q|YG}+CCWi|?V#P{j@gp@1dRI&A>S(wv%W( zwl$K{In(K!3{^#y*sdy87g<)+UVrz+y?78$zUoC%=ra?m2oSiq1TKE}fs5fVxClod z!bud2lG$RFMZsd3e2m9Y8ib=!l%_$J1le5_ykf;~=973H1!ouMgD1lw`M=;Qih{c= zTcjt$;W+vjO_N2mOb3%BnM|VrX?Dn(9*&byI$TD#(K4EkqT$CEH&GV8_ycR_rxeJD zeh+7hX>`IK20=VqB+D!~7$xIKZgerEKaRsid^|~xN7Fc(XQD6O_yKKYFc{E3Sou}7 z{1}g-qaa!?gOgMKci}l(!oWzOe66`FmUi!GR@*-E=nl#pjDY3V9Ve#T1>+c`ErChGH~+t z`Ir z>F@wQ-}^H%178N|h%BWvSf%8H+&qxa6sL6I(ay;9BX$28NB2QE9|yB=4wLjDSuKO_ zu|Iv$E~Atbl2!fW3s!OkJ(Lg&t6?a(koQ@uqsu59C-dn;-3|v!_M*}AILtzr!JL9= zvKj|hS+XQdc=E;T=wnL%hMs?`)%94si@pCwyC)0lb~PUbAR*{l4xT|v112Scr_W@e zk}MB{PfxyxZv$5O^fZ{qQ+W2pGRjuVIs815ChgM$R+D^XQgm?mybAxR*7{4doJX8G_Cu}lHXPlNnRorL z;7!R-)VlAY>^@m?cJN-;#NxQ>H#M>r2&?QZ`-5u0f{dlh03{WQ3;ys{tZ*HOgRKTUG^GwE6se zrq4}MO6TP>c}|k2`Fwn)&qY#d%)@7nIY{cV`S(njd+=P$yJz~GBc*)4JyYizDN*Lx zGs_$!b;SI7rp+x&pO{lBMGJ3V`L#9$Gl4w(& zyD3s%FQvoSqZCrKQkfd9sDL27kusX}JyE7eEtBX`3*6Lb4V2Mh-FRh!EEOcGETwMJ zY)zHXXKeT~ZCas3msaAYNpGTz9s^v+^k{_=Jz9yI9=(Y&dYk}8rpr-DqR&yoO{c5L zYV;P7>7=eIQPpWt0h>aKTqIK>KQACedA*Dd6BWv&=%o@hdXbwTqmeS29Pm>n%vwdF z&RXs!(cWAYI^E`8?I>&2xujR z%-|9HH`rHB4nB}aN69SCqS+#QIQVa>LxW}G1piB0iG{6ignh0k!$^}@M{ROW9@(1A z&M!`avw0Bxo{{Y$oCfC?K}exm5TdDar_e*q=%t%piq44L7S3 ziajKhlZGW$FQWzdmnd+O}8WVua*&V;yRv1Mmx%}?c zS6_YgrywJrEg)l`g<0^F2)@ONeq6A`9FqQx1~p1Xdbvr{>nI&9;|0{hd7I#$WTHUd zEAsC+ub?lsZ|EeUhH}QBh}(JY@1nU<8|*nqP&6KZVJdG{C0gpxB=?-G`=93VKUbu= zG3f@T_!3y85=N-LC3r~CloHWG>e+aBJ`Pr7D*f?m-hV8KiX%!I?|nORN2a?fGqE9w zp*V3tCIvIL$X*=(@vC4&R&_Wc>m&`P$$WBz22wC7P9IPNVKZd5y?FlBAL__C3J1ui zxco6613Ussm&}qb)=-Lm6vlkPc-n^69c{(z@G6?#{us|coS?mhd`kX-fdc*W8(s0Y zwa!xZ*wP&lx+^9QQv90_laI>ig4WVHz=vk@Kau&UF^^F`S}m94gOks*N}(aTD>?dv zX0#s3ma!}nduNjgVKGdZA7e646d|~kwWX35Tb9E)`AJxP7R4*VQ0=Y;f=;CxO& z7ezw%^fB4m;?W&ILU5s`I47q%QP_^yt+ANUg}o5ESO>BNSPYz(F)~@FRoTYhR=D>n z8Ao)&^C95t#-bw>vI>AH$xAwnB#$h}G0eh~;BAzJ=z`Rnf{*g$hv?xX_!v%C(U%Oz z0`!CG`G>I#18Zoq)pV3kX6W zug@tpD2~1nAb3T$8GyR+oN0|z-Od-P(3GkEnd^KoOxC~{d!zsx8Nu|_Wpq0wnm39d z_7%WwJ|rSL!i^y$a%;Z&JxHke1y(2yHXtG$J}M={B#-OzvK}9TL=IQeOla_ZlEe}@ThFJZmPJw z74mcjLNcDSEdiK=>qzEIL_R7R*umwSv)8}cgucK*1 zdR5IH!t^3cDj>aLZLi$UpqSQEzHJpbW6Hzl5#VFKV;^r`Un9K+>5He}(9x#pU z9zYDTIUg)aH9k)1TQE9P*pSIqz;-Q+V`KIpL%zZ@yQDJUm$wyrTX8>Z#Z*H}L6=}Y zC{PrDr681Pp)Ql@)BT%)<9|ip-<;sT4q$bZ16qv2{g!DFMD-!uAOq&y7mEeI4_$2_ z37Jkry>R$<3}HC94F)N5E+5fp2yp8@CftiNin#x|ikG-VD5WYEPVt#@f>H>`-Pg?4 z&0ryWm>Z+0EEn*WhWtP|O!jw!aGE9bL=3 z1uUox%w-sTBrV3b5?i<%mF}HZI0o5=bA-M)3m;HbW%b7}X=V^TP9_TCYoR#bhs-<5;IiN<^BT}OLw3K9ak9!i z%Ty1Y#K1nG3vfCOz8JRDR4cCPEkTm`uCkuL1Y!mhf62cR${*%x!meC?CU{xv2VQsX z!`*R_;IK9Sh&cl99NCdI+r@grGXfRcHn*zQ{4U# zdb&XSc=*yLogkD7fHwjdI2|C`=xR7W9B+2X@nIiA+ngQ+RCd_m!H)-Me#YrExsMpA zLia-`a*p^_E3bNH=%3KIkcfFz2 z0rF+sVni15JQ}gsLq;0R8%{fa#66nyr;j)DHiW*~5ZGA)MF*JEXCMr?rC3^==%rjN z$Z*Ehrj7h!K5baX23o+U`?pVEJC`6?P(9$1ONwB+5O@{yK6J+A z-525sz9*|H-NgmN0VlyFGuC}0f+#W?Yc8My3oH;5;g&gB#581PBXEtf8FB+E(0xRP z`C*>i&-1p}7@lUM#Zj;tFZhg&N3+EtpH6b;^VRGo0>?#8vnGb}0&@mk5QLMe`#GOR z0Dky_g724qT{_q~b(!!_miv5Tietn1gTbQtms#-B>kAmi^{Wep!-zCrKHzr5t%;0D zxazWKLjFVp87?VXJc2Ya8RM79YH~+OfYS#u{ZIpIy`h;}NFPL&!$KKNSD=3Ua`5uy z!LQVE`^&+9JU=)(`1K-wln?=0#C#2V}) zDt+3R7HX*_=q1EN5p)?Y!+Y5!DSVnB&RIp4bb$Zjp(pfbOB5s;zs64=9$cRNd{92! z@^R}EPT*`a6fG46ZZFxDa-N8CRvjonBmPyvc}1&YBew~_59kqM2>&ZMX0cMV8R7So z<7R}r5W|dk+-f*}5Hs?-v-2O{ye4fymL~3)&WXDfHpMiV!Pg1NSm|1L^X~QeyYI=H zd2QkG!?Ufx<_RjIWSOuEG`5KC!jeOi`nRPB8#0OypdrW*o{Wc%IPdX}xkZadp5@L- zu#D3qsK~?`-biIz<#S#$JyRq6k_Aly8lqb#haH&gj)o*<1d67lc^WDUnmP-0gAm<8 zaCMigrVtewT%TPs@K62^bJm5z+`p8YN-+~0ohjHWlz~tQA>tUecW#b`d zUs>Q5A624-^Yg`b$?`s2j=_vUqx_MC+f}w&q9_NMAk|Y2ag3w_@1)p*X286`XUk>y zkUL^avQ22G2&had3CQP1Km4CxdIV?^Kz>1+WkmeJRd+#r}z*&!JqEMd7mSn!|`nMkN1I0w-j z)IBAunrv88Fe1-&UI# zDg+Dy(!fVe#1Bowo7_@3N1xNt8Dq3V(nF}D&aQY2dM)~eYA$l@e!NCE#Pl5cJfuM}@m>G<@ zU`;*~e~GvY`n#7F66Q0-aPM1)5|XwiB_og&s1ozaQWBs%p5iXK*Q(+0c#kmK9*=UpyEmd(tvhN0C#j+p*XAgd4!9O}(FiZFmlE>UlJaaz**wlGQxAR#D`nQ%v zi*c6wJeli9NCkpeV1LBHDYOEo)kpbom5OeQkc7M80du<3)t?)DP`r`a2N##`|9XCP z{{G$hyYCO^{5-h2KKmYj1_zfvy?e+0yt;mWaUuUr&v9M9xqN&6jvl+RL8@A@*|f3< zO_Q+Iksh8F{l1un^H4_3v{kF_q%>?L=B*`qjXAVcS2lXE>9=PwA?CgSNqMLsp}3Tu zsU}R1xjR2azbU$dspR6Kg}b{_!>A&A1;8Z6KQz}tsAxv=m|1KZ0-Tv8V=3m0g_ki0 zHJOrk$(T7kAtFFJK8^!MAuq{sNrqzs&+xy(y={vKC=0k31KC8-J)i#F3A`7>*Mjfu zBk=+FJGNg`3c}}=+c(#Y035qjjF!h@|gVGY2l8`&$I8_J}58TWQ@KV zvsIp`$TIR8vHAsXcPU=qJ&d-+?3Ym5;kf6g|;Np@~exV@Bl}W za=S$&o3q6$YW9Z-f7~`%jh>{d1%alRS_A&Tpz17RUS-Mm#VMefHJBHQy{jdDlS;Pd zRrx)ht!BCBlsR76b2GnL9xHBtRUN|2TBj-*JXZ-PCQC9hNez-9DF_v5-+y~pN}w&R zh@H%<;$$Olqgk?icuVNJxO+(B5g~1ck2FtBKC_jN|Mpvi!?X>J9QJf;+xch-=WDbR z*I#ktR29*kmB2H`EW1zVsbn3Wlu3FPhyG?`i44(#`vs^itgAam2aWhD4hfHX3E{eu}YRoseaog-nA>HKtcL4{`B)} zm-EYMu$1fMyPEtdi|m%l?Vt7!ECq0E)PTv_rGX{bf4LFU&X5{*%;E;RWXdcYN!zTM z<-~T_pea70GKTNSyU`Lai9eBl7|Cu2guJ^jy%UjLthq161zG^jQ+8^AX4;F{9qPax zP-ka^oAC%vZhyc4Jfh{U7ROm~Od4WG%f(ESNZ~<5A{;4(q`hM}laWx*^@DhE0GAl& zud2+E8g)Y(9yz2%crnj8Dmf_we{iN0;T^Kb_{C)Yi!_zRr@(X011L+ms~?3ZpNt}61lu9-BKm!C68sV#|Lg4dZ_kha zbo|?||4w7Q6qdYr`5y!vWHbbH8qFu!oj7vBTH?9xLyWwn7hm8$#-a}di4?WS9VxlP0Plh9bgDNnZY0Tre;OI3y7BrJW{U|}4GyM9yy6c;+ zR~LWD^h#;$*6lKij*-K(?es`YFpL1h7_C_pqNoU2klJDyWjWkpQN=XpKVz4w9O87w z=Ez(k-O#iUxB+5L1vZsqaS=llFLPzyoZ)0t1kixFDha-N`M>|jK5lI>B_%+S^BR2o z8na!2 zp1D84R$lz+<>191|6}lc@O=2M%1sG z=uQqm_Ho(Uj>}fqjYp;AJB``rR64J+3d9D+xqg&qjn-E3HzJD=e~BJ0PH|`q;6wug z{-f;f`4Rm01^jn3FpVIaNY<9$$iU8wNrAY0rq#~6#;5#+x`&)!{PpV`h;Ry|%b1;} z`h5NythU&OSm$vPKaC<Jh#L+U&P?Yh>M(W(%RxLSWgwW)PcM0gEtDgoNArN8ON!X@cuC8YU7nX%4slY0$@{}PTQ`A(_!tysg^CO}^KKkUhX$TD*}VWTP~@RHL@pCaJlzEFn4(qIzJfr=tz zN!g&H%gV@-_YP{O*t5h#)ob722y3~dtP`xJ;a^2#!$(ZH4!OaNp>s$Ew*uQjgfo8{ z$y_v9$N{&?6nw;<%gEcFyUzNWBZh&cW_Cp|@XIbM$1nVtP%n;pv3SJ&)7*56bDdu! z8qy7%QzMCZxF4Fpp9eXU3n}KEXcSG^7oC-5{Es#?^kV=O-Abl1kjN)e}`cH8FLwZ3ti7V6w=>ZjH2rj;|$G_R3|ndS<6 zL5!(%pSbO-=51^;x-@T9wURqSOKl9O5m;LEdMCj_`-4i$NbN9SxM1EFZRX5o$($z! zsFFHQPK*^!xog{<%_5J#v-f4DzZ+TWb;IZ5kJs<_c>RB_k}M>f3H{eh^q9{^R)dHq z{EIjHPkh{lP#sE^vRZ$PNj)|=vg?o^xzw9Q5ElvxE`2^tLh18iWt(t?msGYR2lD1< z6+?u=Lz`U+MKz1Vf%vsaBpivNNvx$)xN^$m+$P=6v+2~lzVTD(74E6=5@-7oM||DZ z3Y-GJ1@rs_2R~gLFc-wn?+)rZ9l%toWDGKIv5SK6x!;$3T8Yoff#j&;1odk8 zipY3Kx(ey-|BPK_wsRI^{`|4+M4bs`uYLzJ{pivK%wmYxkZYLyt;V-6gG~A%S+Elm zRQ>|7pvMO6v;>VOV9^|Rgf&xktuQ|@$L25-ad~qV8J8D2Y2iAqN{o~VxHdWRB`qdB zywpw5LXGm3u8M}^e1()@JDfTTWxB-UG+87adqvDC&K)+dz*m=tY{$27T|*sGToXqw zw1qdt2?Q0L1mBV=_<@Kph(EX?)!}9_+(VE{^k5x7mPTF}utI7y#MI<7xG!YMkL}&Z zb2iaqt{5z7bNKfZ0s(ksj0~cL=#fG6>E4lK@lDY-S-|dP9MX^ymgH{s2F3rPu=nadgtrt5DuH>#a## zhwZgEm{uw+xM=M<3l@2mW$P*n>4-=>xE1_8ZA_CPG`|D=UOd}_h~^_wF(FHjk};t7 zHDU!_g3!m?3YFfyNmaXvLyg0l5jk{1|B*otUp&$+BM@hW)wEL=@XRtyym^Fv3UO@- zKC@pqA|?#$6&uNWrp+0fB)i|lI_i12An-_^BVNPZ#LapzhtmYzU9%vG|C~tI1DhQFS2U^`8(pMHOxvlNlr(| z-lQrZ90LgfWeBeF0DCw`3HQr=jFXjgs2o%2Ok!Z4xOW-&rEtQ4aj8_~Hu&R=QH=gB z@zwa`fxZ#75!6b97UQ)-T(O&al)H75i{=1jqBPEcmeHo*Qf(Hp!j28yU_5{=5n8n* zXxMPw1ZeQmVD02*^ZdX7Hke=fRl3blVQswyjL&p!`54oje8Vuz{t@AQyHDSQwTPZpSi8_7$PPrg#_Q6X@4&9GxJGFw2)x zgxa^!B%agLr}!s5e=2THHfNQ2zLZcVTG5ER;m?~(4wHuFGDM`VAb&I)XwAeF=1jK^ zr^=j{KWZD1Cdv^jw8Wj%!^&;K%HfdRkP3&1A<~$%6%9lh%0Z|cfH^o}bLos%P!Gtw zf}JCuUTHx8$8Y?7^2H*Lxki^Qft0^Njaj((g+BXL*4;MUL2G0cDjG{xW@uw<*hteCCk&+>ff|JwW-wG;yBC~usNRI$L z|8_zK`XPF1AMN31(%gU(aLPk-pL{`+p#&qwj_=|rTzZ>A=mKvT#%F*u&ATXx4uR|-e2Fws(AmNs@0x7#jg@Zq2O+US5C0z~rxDT;4{k3>LxfEV@k@eMpD zoht9M!lU4JmJO~@E53bt@V`EiCm#<Xe=ghxhmQ15qu7+zmsveGNapxQVjx#UF-Dgr-B_ z_9yo1^Dy7khGN%%?|{Ak`)P3S=Y!zi14jLuIYbUTJ%kzc&!gZsAP;C5yo>HH>3n~B z@co->(gnPKgj0jo9*`}2a1j#K`IOD;l#B-t(mj=nW#VWvga2Gb%ZE4VC|pEO#inq0 z6ugjHe!mC-wh?-VLm-$x{~;kuG5-lY(3gI|$x6Qmq_sFcn-IhYyrGOdCY(H;B*)Z^ zFnm7v!vS`e;_Rnin{XOS2V}L7HtFnz(*J>L0KYq1dgLd*h+mcnSh7w?TZ3;2e+I9n zNs3HmZ!6#Y)m=3DaEUO!vTFl z9%Plfg=gfSBPs=mSftoG2xP5-$l-(9(1j(dA}zt3dy7yF8o~+3i(-6K3f@G0u}i!M zGaPyM7ghpgbgCV&C%>96!8ZFTe?dTv{Fym!9_=!)1Ck;%BFM&ed0Gl+^q;Us)M5aq zP{eF7qUdv8OT`Ns(Fg*d0kZw8EjtIKBaY^9L+y}ij?fp_n!b8jix2G9IqOJf@tl`E zw{s6b>4bb!EBjtL4>qgN}fP2 zUMPI}=M(aOzZ{3h|9XD>r(Zw4IQrvPpa1^%!QnG_OrHL#6hA-ux-^fjTZ^DE>=eXa#+nr6Dx*?AQ3bwtmgd(}>?Z zj;EIXP5VA!|I)2158U8Q=C+ptZJRcsY1v2o*bo1yQYq^K5*tkAJ1^XT(mfh5qD~og z@Q4$3%1JC!GjfuIdhtF_@U=yiVmCmVawZ*qqJMnOSMcx?`}6a9!20!@AKzTR**&(d z*fJZpwP9M;tX;u8Tf?l-YXeoa0kPy-paE1AqAuLe*FzcfXZuJk$S-YmbnePeSku+@ z0{%jE=%h1&h7VzK*@nQW6y$6G;&`;UF|=q-!0Mdj5MqOj+{Nsv0FWzfvK0Zdkc68B z$qj(+B(ivuzK`m=kTwEwNyq3{B4T_kd`sGC4sQAAO=QbTS_5ktJ-W%=V2^mYMX(Ghp`^Ub_T|tsjIk?mR@!lje&vbT|FCv!5o`a z1j4j;7M~8+Nz6@o#xhdn0-w{ef;{}t3Z5K-BjD`n9X(lnA%>0dIaa!0^RJ?{4oUMk}h$s96mN|-X>FXa~WPPz+I4@u7@&AuUy2| z7}i(D@E*{5K)XvoE5leEX-yQ{6&vo!`TRsyRPjsr;N*z#2DaGH_IGiW83 zfjl*B0XVfB640Qj3`7e~3T*IvfCYrM;K)Grg91G|9#H#Gz+*fLQ1<}92E+bc!TvtP zzh@!-+tT-X<-PGfmNFkp7mf{-KpYd_tmTfG);>wFhT`VW7WlIT#T@cy3%pgrTP12+ zB`P@AI(n1>GPF6<7C`Q|7NsmeT8q*ZAib4S6}Uzxj1P_qola5U7?acLP{gE8+8&$? zD7HXU;6qRC5Ke{_S|cj(tDa55Nd~h_K)KIB&|3qAbnFqgfexA_y!pUsJ}?(=Ypnn2%JI~&&s>rXDGKY$6(UFCc zj5!_QfBXR^PM05uq~aohc&=I(>((l9CoXMSt!DV_|HZO2BFXR*sXb+x?+GH}^qxv-_1!9mN#l-#PC1c}AnFva;2nN~e?C(|GyDYq zd>(46ufH*u<9_ECiB2Xi5Hj>>I0!L)*{qi{Fe?s*0<=lbk*+OKYdT8~!uo9xRe7@H;iQuYRqcRk+q zc(Si1m21 zP4N{TjCLN3!m4Tk4y`Hw8pnRDldG#W2-N55sy%3rKs^FgVk9~n6`^J2La5X*BbN)l zBGhV{j>|2%Tp3-UnTknWT)5Yfk;{a>_#Q{Twk%v)!A|in;lmZO>U=olM{KWKTuu0(E=|M6lKSJzH4>6asdPyBWO=Th!T|wg*i)xl>fxvRRqp7UHcqG3uB(Lt? z)#AnFJ>Ip!Z#>f5s~oP)u39*UUDfD*vTus5nh2V>O!z{VqkofU9c(I(Il7frq@<#P;T7k8g!*aDs^IKNO2OxX@E6d)<% z+=5=RFASw0T;K&BKXub$>%r4z!4qE(Ex=Ay#a07rtSX|rhnoB$1CN?EjGDgFCUYmv zSX%tO*!2rz@GHSC0TiktFEjSuT*(`~3fshNj=+0!Ofqt_#ob#9_l4i~7MFf&Y>d6l zJE%*OF2;`gIPX50(V7dz+;z-z~&<`odm{{msY<)v7(H0oCH5D z#$koXF+8PW8o8h$&CV5E!^&WsNmq+SvLr$inL)IcSxA=pC@s{ek+QNVko>_*yMrO; zv#EKDvhBGS^2aZw=P%0?7D3sb+zu}vq2FO+0W241*ROu?AuQg%(N_P)dcwY$q<8u~ z=wd0;aOf`Dz0jEzvf78vcsN`ubf(w7Ai5?@NKD023otPyq#-D#Sh#-p4DD=fyel!$ z1iX1+>kw~Fnuoj{guFlbm~9Vu9|_=fLfM}xnCjW)=aH;OvL4BH6Uow%3o6n5 zAZmHtPKQU856>AdRgsIG44|sQmg0!2dfe%0h*cFf7RFrF<6^xatSZFm3ZGiX2Wa&u zKr7!XhxrcVqqKUd`Kime1$tmjG{m4#gV3xpi0EUru#S(_^08V~=ZaV9x31FL_vX4< zxhnNL7`tT%Z!KM+j%bUs78d%g1e?u7JL_aF%$v1j+i~jijtqu6jTU{umdVgvXCuC+ zoT}5D!ip-0k=YRSi|*&*$rtVLllZ&e*$ky&+S(Sy9YgQi1@0PjZkAQhB4e7R6?BQ) zrY;geSasl>zfv7tnB(^e20f&5cu5?RdCz_eIboo_M;7D_+zz7QxdSByeO*9f%OY3- z%^2AP9ToPDWAyBTJxtHM4M@}G1cN=rGi|U&w$A?82usy5IN-}~y&hcqsh=*IJ#wLTHo{n7{+CiJNctI$kWx*Wubph;+(FvtlFWHE* zgZ6$(sc>ipddGeCZqO+={DlAZJ5YlS(bg^&d4SzThejnC)hsMT6~|587}!d6@Jy>$ zM;GcyeE^7uQw}(#N&1eQbQNom!23~XK}GDjGg5^A&lWMl|EGf`vxN5#Xfz8mqGddL zojWSKM$bbri6k;C#rOuJb`~ejCga!l*O_{6ZR`&?5~d1Q-xp zG9nybI-80K^<{YFawn%ELDba|XRvz!zh^WU$<5O=vY>gMa zg{Z9Ga0?ee3!qjdVbs9SF3H*!fumxBp^tU;uxVok!*hA|cF*^!U8qiX@xt5G%b^n8 z^(#Up;~Mq3zGBPo|AlrcUZSp{EXNJ%lmc2=04>|a>3YeI;nvMXj#s#6qT-W_qGPegBbE=Gj zd6eBJ%Ma&Va})(3QZ_=$X!kO$mZ0R~+k4cZp1=dNuhDJ-)(?>aU~^-{ewhZ0JbLvc zYgAUPIV@VX+eD^zuig{6NawOuLo&b5;m({eFmcl1C-~>{ zP>8YNC;sQ>p)S!n=%}gKGBUy1ER-~i_ThZA2mG*7?^x=wW2xS*CvAC+{6Q_Y^)ajXEy;+7YvB3^DVlo|L9Aj zx*kbk=mwR@T}Rx>eQOyymywVPTXcLXlew}KLoOgeZYN0Mwat&$`-4?Z{Ul*Si zjLYrXEMZtT{hURNC~<2_J-ySj>Rj^a188bmQ(n@8a|RGVd?jlE2KdZi`)I5(@0Dt4vQ;&kG9k)!Xz0Lq{<5 z1LHd1b&}ZgMs1m=4BYQXWnYB(Wn6E~Zf_Ru49^z>_MRucFI~yKPJ-VLXzVfXp400a z(z9WPeSI5gJ>pd|Y3W?>+4nt8_Bgp@ckL*`Ej}Ui+NiUaLqefMfKuQ*Jyh>>kU7j8 zUmMZVx65Rv#!EvJX2^6o@LuDfkiwCY(?cd?uW(4nUU8SEd3l7V%77~$BdVehZ0e}c z22SXNN?fY-bdFr*uzv@9EHcTP^S#dEbrxA?sjwq$`~;6>VQ%vfPiX5XSm$t$(qb{5 zJyV#w`;#v{c2f9rNM2v``l1W!bWnwK2Ufj~$^)yc%A!S0v?z%A4R+7~PAQA-SEBXh zQB?Hr+y}02sU_N6!|*ACcvV#^iJDR?>`*n6$Uc?EP_A!nB4TO-dR9)dLq*Cfv`abi zF-~47@=B4W6qN|>b@iU@MJ-9sB#Bg6qmkYz##=x=6Vr%KsXGV8RS!u^DC_TkzyF2& z|KJ$l)yqG8{n=|kUY+pj#9q}2TbNci)ClDUKmOExiQg`wtcq^-s}*8pyWg*Be3g0S zpH|Y6$SUJDKvv+Rs#|C1V#3;k_F(oAf!Vr8 zl{rVK2935lZMm0&^MfkqO1uM9iu{j7tf ztsJysYg^6sU~L<90(gU+ZDHDwerSUKgSp`&l<3d)J_s z2kjoT@6iG+ZNe4tyCEmKjN@bNhIL+WUUbQNGqf(yU{%0=Zn=EjFiaF*Eey?+-Y#4O z=Fja{u-oywcwdI_=eCR4&BB%d_4B>m*>2bbA6Z@?A06Yf^z<*#WewTArEB5!t#2)q zUm4MRXzQWvE}(72Y&UKjbXTG;rq-(<8eIUvA#1G*A@CZAz;TPMF6r=CP8Pc9T6M6 z8NzuVguex%XSYCXL$m9RcgK5RN&}+yb)$soeQAzrbV#$7TV`7Owu;6Yn!mlm-(FG7 zA%A;?H$QmuLuK}>qdfxrlGWTDTtz}E@K6xGc$UYz0=k<^F&YTTJ_E{Eup;uH?@2ppp zjQKj8q*he~3bvw#WTau*3UpCJ1%c{J{lGTr?+-k_ucGP!9oAGkkT4vWrfvv!T2&2R zxQxG_Qh1f3u1e8xyV$Hcf$P_+5?+cjD#Qo!NusHm)aozvnLDMGJEW2}S2LutAbS;S&yu@}5m}hIioGp@ zytIJ{0IxpZ2y|y%pE4R8z+CNEKyv!H2WR0Y)8r(^Z zU*${++tVAJNLl*?indtOAp97{)9_}>Rb%z+3G2TAR#^_8XY1O!RXiiPJ0_QrZIG3@bSdXsGm7c2AW$Y`|va55ip3+@L6w|?_YHBU7 zlJ`g@&v(M1yhD23yidBhb1Ao0RWHUoIpArao)-Z@udQ=U)@$otTld;}JG6Dz9$isw zcS`@RYw>bqpA2dXZmbL(cir1AyU&vnbokPHEKO=PUBUk0|Utqie3={}|t`7<=t65b7whsb+0>n&9<^; z+eO#dc4ApgV7QhF>|JKwW#(OG-k9Ny89Op&G%#Ou)H67bvioHDAsvjPDcMkj0plHe z{u&?GHeax2>zOZTUnlHe-8{{kw0QhDvBDrhTQE!#DpiO1i_$2CO~NeOh(&_aaLTE1 z=wfE~O%wFB+K0zN>iIMreqw*E>9u?P=EpbJZ(6H-h(X#~W`$k_>0(m4in7b4Q}B6f zS1WX3-BhVy?Nrw*_zTq`gFa$_jFjp&V+M~l_i&ubBKs@CuYKoA6YEh9sp1=VlWb{? zU{gV;R2|G@i;!{xCL6&7fzefw#vOx3 zKB~w=qm4qNcj`RuqD3kugIk)o>Kq?8hE^OER0LPFx0B!%83^cgp}BmG+irQ+tCY@l z45}&2KwbdLC;?7n#$S-InZzIip5LR499_It!e7(SCyUrx zl5_JHH|X2TcFwMPh_q{nR52yL6Bl*F(xgNg^KErMsb%%$TtArD06X^lI>s;!SksFf zI{ILo0m4>(bTT;D9CC4BaM8$n8We1@s4yV7h(q;)fz6Ipv#JjQ?pYAmzZCIpia8y>{D3yRBgM?`SY82PR59#RYrVB%Wg3 z_zB*gC4PdFRS-XMnAbAmCA5MKE3N{>YuyM8&z>!PV~l7`)9sjNY}>YN+qP}nwr!rV zZQHi(Iiowzci)xNN+r8~byB^nyH{7c@i7k+E%6p8v(jt^$XAU8ft@KKINCJwS}{OE zEPQ=i-^{AK9zs7ax;W6uj;|#AYBWBxw*#e2Js@l`jKX>xmz_&e8jq5Z#t+x3`k8jZ zleuf{x!e>T5cgvC3y%?20yAKbA})OkVm{IVmRNF>K;`=-3inUg*6qn#)rRbVEs<4s z#o7JyUzFi>1EruWHXNb>$leh^Alp`(;Lz^&fxJLkaM#I<1-{gEC!c3!D9*1u@vHA_8$CN~Ao`IYM<(vv}0H$SdgiIiYI;_|* z6ueD_N}9vR||mF!q0*PU-nCl@3j{ZY2#n{=2-3~YhJRd>CRMX9nB13zmt z!4#_-R)yFiIflw!>vJVEsGrtci--NRiV>H)m!H{&_MvmG4VAGD*=$?8hP?Mm4HTKD z=gIVR!$6~*3cKp&?qimZwA2y!NWdH0in~$YGC~Du(n4 zMGc7;v4_uuE<@ONB99&9gPcGV0eKx@aj{uqMpSj~xENVtRz`Q^Y@dL~ zM-TAUOJr*KzCUSrK3hV5d1^FWmI}3+bLYFTIfa4Jmemy2Lyf8$e0T7cxA2u(xnp1e zm6Vnp$|ttq`-#IUO=Zj>8%vdWCGy~kFT^4L&|R*UqL4#2)Fr#vyB&6xp4Pc})ns_! zrbn=uO8G*0UuV*NIgL2WaXe^Bg`+H*-HMU9tVsz9fHGU0eAl@6x*m(tg?8TW%~@VA zBCUD8nyW~EfjjVFs90%Z~o+in*?~{GDo|es=!`Ju%kUs!)M3LE3j+cj;&7wGLtzpHFk;!#4 z>4(h#9C^d&`7>H{IB@p@1vW_i`@$uvfR0GUhwxq^2P=d`r;H3J4-c+JfM-QF9^o5{ zbNk~Ty$0@nksxP9?T!0#wP726wZV5(K^&c_4(z0H**|j#%+($4r4D_iJ<-_epDU{#vZOBO-BKnmX9CF<{-j(G zO*E&3lMkl-58 zyBU}Z5ZC=6} zZYf5hg~v!V!dSTvhg5;0@%Vb>1zZ-!9 zG$B|FbI^>kpdzrteS!jcz(T{sIR9;yb8$1{mDE`1UI4nI#azoAYc{qi2=%bVlx)8x*9L zri}hWaiq|_2QRgnDR>|x{11bWkhKW*!dTaiayd&Ahg=bsqw*l8*_j&e_p`Wg1{^^J zw^~=T{%NG6&UIT+0I@wvt#d^Rs>}mhNfUeV(8(e^C(}+_)X!wIxvxjs{;4|I90(_6 z7ZcZN+H!viXx1E8&^lbsn@~54)@MZ3h$uFp_zs1l1k3MDDGS+ZAtHzQVPqs_Va_XT zz|`VFxx2VW!6RPqlD)o~X+eob*5l4%8kneqSPO(r6?|sqUFyAJs-rp(ogrR*tMjsOHsbwE^Kteqy&e`vFm&IMBrFUC&+Ppy&Hb2ka5DGndC;I ze;F*2m8jtAIBRtNBPzBbZVrP`rLRtQM4~-Z51U$LCL~u>x_wOromFL~#deVq(h5slCa5)Hoe zS|Fm20%sRzO3aI417{QB5Z%;Vb~Vd)W!x;Pl2~vPp;)9vJs`R6s^YlXL|98sT`Gzt zNzLot@@Tjf4iQ>`Ld}aPH+gsPkYCdAX1lP!>2A6%egA=582x7Xuj9~fo1$L;rvU(8 zVgBd+LjHffihfp>Yre@{O%+>oZ32)`i8106PiFpq$p2^e?3`3Nb8Hpt(cPI1!PIbM zFNpAKC+N&G*RpzZhoUg_YOoDWwIJ}I6O-4p91F5X(%bHJ2b&`CgqQre1=eo$s{&A( zCbWV`h-QQzWF8PH3QOTL0YX8QIvQNf&l}sAv-7YpxTzcOlaHQW4c8M$h841*wQ%_M z8lE0HF=g&d>lIR^Qr(0>g<>Wu9e7QQk(G)z(FF?&irPuxW!J<;Mra-U8d;c`7+bm~ zCFO40G0g_WPX9kZ%G5$_oKYnM&7qdatmnHJE)BHNDbOxckd%}26+g<81LTQG#7a^w z71XK!xXKH#O)5#6`;RAcNmf_jX^cGAYv7y%=_`y?%3|jlxKt%HmoJ9clN8OinOiFQ zBf^nK&YH}__IIQ!#uVG}heA|zhODlss+Rh+QQA3%7mSu^Ao2)>T5Zic1J2PIp$9ba zfo*hJ*Qhv2*W-94ex<9<*v()QA-T4NO*6p`Lb6wN;dHJ-lAfH-%sFkU4u$@dd_7P* zVks;>{(b#u%hV`&+S{l%TUu(&PSu2w^*A0pB`IIZW}+Wb$|;PuWWcMf|ZU+&e}~!kxyK*vxA$()~f)(ocWi^1Z_t?fT+w8)x`nW}jiW z<$z|tjs5IHNa+3HO$YZ>MAFdkkp6ZOLHWojmr#kUgS1lgW3Z>KN7ca)L) z0Kh_g$O=k2TG|uxHGG1t#iPO_bP>PL765^<%b=c!1jjZGB4pIRr1xe!}GB|EM?B%MQzayW{PS z>^;aZO<&fhMKn=FjKI)92HDE}|wf8?IMtg2wQ$qEnqg8CJiMgK>UQi&lHwH%CSZ2<_Yjy0q4W*7!a zm3Pw;MS;WutD?%UuJx<(t7==J&~kR?1jR=qUibj#w(~X?Pa?>(+%-6q0~Oi zwV+g9nqX>Kr@M(fazb6>*gRM?h;=HkZ)X*P&+{XFI<0}aU%h*Z#yU_5czbpo=0YXG z$X?Ux8EkyAG13w@yGISBgJWlp=^0FAQ_XfHr<$zhzNMV{B4f&75kv+a-YktT$cmB5 z$BchK@PdN9C7-em8U&6eaJ^xIV8MRn@fLlAM*hg733`H&_(&L;n#)0pVp zbB~=7doW0cU5Wf|OP{CE$|gd3u$)1kB&%CtN6!5%RKf3Ne-BrgTLqOBR%KN%afGPs&M> z%(agpm}kc15*Q?iU38U@qe2f_^V+2@VGT48E9Le9hSX%A5QVn77FLbS+EuH0Ii|p+ zbk|5}wZT>M<2!?m=b_?kqs5raWGtfv7{1J=G`o)bzcL$?>qwsTfp>(#;ByRqn#Y!r z3R61XX?;|tQ%yro+HvRv=vifhk2|DNC2J4R&={~Qp2cC9eUk(8hU~0|9r5=5>k8rYb zHIlmMOF_3M>Kye=^}tZLQ_J{t&<$m$2L@+^F-YWe613u|GgRV3!4ltwCtZ4+84bZ- zqWJ~Te`GE6WE?~lNvZF7XtLX=QyeC@MQ$OU90T696fJ5f2U*hJHjNbHV;m^8#lBWH z#{0AaL7zc1tT`X74d*q-^y6fQSv`rbPl}lw4!?nem6+RUEoJdc;c?x>LnGkK*7=;= z0;60rUwa1Dzi%?n%GzZ@oNIL~Dw70BbHaRT#y-Z44FhcBcx=})Y+nOl0&HQ0t+igY z?z000rd=t)ld3XZ0WqM3rX9R=tmg^R6^|E;mYUdHyNwA%XE+jqUR&oySTW`%-}mmX zPq;mptx31Zd)8u(tV2X?DRqk44iBNz2sU{zUusF$Z;$U)UfH(Is539NDLm4-|CM^Y zD-M}if49aCX?XX4(>lMkz1u6Re|l)0GrN1^ZPEq*WH@%Tnp$xo6kRFZ%;O5WjUL_j zeo7uj2YfiuZ%s~53pIMNeh!BDYj1@7V4lr_z83$*`S*nc9wR~hUmnX1|Hl~a0HAz% z|9QVq`!%5dCIB_=jai(7I7fM9F_v~#o(}du5upDU@jv=)LZ~C>gvH@{s!TbqDM6y* zH3Mj1W4J(+@ZxSpIT&F%k-%eQHfmHuJd53>YZnDFj?32R)seMej-paR`Hs#}>Nr6V zru{&oC_$2<{YcErbDv>VcE`{BBd?a9=~3RmW%=;>HDzGr*KqS^Nn@TZBl1MQ{fF3^bz zef{Rh{ALaw!cS(lBy5zKy)mo_$@TtP??LXe?C!;BZ=a(%+uW1BWbpO=@?ml7qxTE% zbI}vvHc!1jSTrp6bm%V>oTJ^>8QweiP9leI{)sF2?mxP3i|ZXK`+xj{Bt5N%@v4}#LxB->1xPWcfzv?t zXO?GVodIalp}m5({`7&dXb!=xSIcfg^q{I_I3gub9r zHjb}mgv=jMH8&t2(}|G3I;^B;K7Vpt$yQ< zfG3}ezO0o3Mv~8>v!+~|a@P|elbgI53ZJxK`8+HZdwV6LbWUnWN&aM93%--FCzB`u z5J)FiKH%b_T;8$#sRR6I#h;rPkOuQ4lxKz4CLSMQa()!^%Ht*-tUys83=hn8;&uxx zaufz2e47D%x-p*^-B@PeV=aoStmMuZ{}eSu86^${fWoy+oHuAda+_WaDb%759h{<@j#} zN?ROsZQoIQs{ew+58LR+|6eTVSJbmnSs!g)0R|C8tzo;rkt(`9cA8Stq7nrOhvAG7 z?1cnpK?2fS09&E=7ICwoFq9EmTMSb^2>{*r9v&{mT@Q)|@I#^~s+L!xgu&vrpBx<+ zHs5w!4IIc-diR|D@I;+AWOCT82&yhnZUa1LkEC_XxwmP%SDUm+j-VMjpj!)4iXaQHL}F?I+HfQz7p_FaU#I>7eMo)gkK9Qx z_;PG&uyOzw+war!#XP6)2V;>(db)gSP|Hz2ez3Qc zJ+{q|Jle%EL0yw~Y7qvnA!J8-b^vHh=r$_f))hx64>aW_&`~l5S=T$zBPzaB3c&u zt34UhX9huzBJk(6(eci5tYSs+nJpa23e$B%m`T(waP4gAfQuz3(Q;%#J3DJoFMnZlrHdVJmAip8c`l?hvNBxF{`__W-N>5SQ!=u!cHd0@Qd~U$ZAHh+rh zD+a-K!u(WTn7YM)Ekp*w?7>Q}0_z=uO;eYO{wk@is{H{f+7x&H!6>w*$8&j+R{L@xxVF=1f&=CFEKnfy@vG{I`HNygVrK$Qn2VqE*Z zNBjBS{t%ayf#}09Yr`-f#oApBjeCMRXVTY0yA1vn%caL;nlKfUcN?FGijy&EWWjj) z0|J!ZG-{n|DvR-X!yYYq;(=hsoNpYG4=fOi{g>gzbjeZZL_FrSID)M^JG&QPg^}!3g=W}4CnnwdPpu~3A&~Gxa96GF`R~mNahKS*4QPO*NFSJ@`-&64qpx2 z_YKyI1&%JG6ji1ty{K4m%$O7IeC|=>jYfM$9gqA6!QDbQCu;@NRoFn-4c&_yMmC1*t+WP+>1frVrxp zRNE`uk-~oiuJ#o4LpYJ-+0OHQ;90sM2t?A7?;w%Yt=*i0&N!92(lS;3pF@)qCC@~3GlaAM5aTng&Cw;Gvn7qE2ejqiU% z&$otef`S9np`w?SK={?6G94szn--y<%j0l)tI3k1w`E5V^z3V>unI)U^RCPUM1i0v zkP`BYfgy9$la#^2zp8OsiiKyb;qa@&eL%!P-Wh*o%PxSt77qqY*$51bccFsU)H%-QcC14V2AsIJ`3MnGQ7kNIJxZ*>zq1Q#=EzP zZezrb3m=)eqqNPkACqQe^6)*qlbjH<+rXc@M&B)8ZG&O*RA63Qh7DtcWQ!l~*T?QaI^;9hd107?qTpW8g{9(D)U_rvwy zgFB-(FQ#LhTz1;<)Kb^|=zy7BjfNL^4YaeF9JsD`N!??Zj=^i-%TBkm{P5ktqtF>o z2dz#r*thtCdnkrD12<+Wk^W}lqa~*~4GCFP$YR*6>q?Q+7|w`bojl(lxWXw?X8Ric zn{R92G~)%71P2XV<;SizPe?*}FSdg4of}eM013F4W)g|hxGKTH=UV4~9w^ZnjPFTh z`Khtupid!}^7_a$Dc$%BW=&ng6@F#;vlO`UP<%t?fMM*$P%M8~2e?l(L# zol}k{4xu6}z)<4>`hvMlY(k8U8@Q>*(Z;U1sG)s8;`k~_!Z7HhG?Fr|NiE=(7liP+ z0$5cd<%Y1AGrRnyYvH7r(~XaPNHAcIRZzC!D*%Cl*d4l+_uyXLj+FKx|3Id$y?X=v zbgwtQ_**aQkFQ`L=zG7ge#{|Ghcg7I<}%j??pbI$zdP z_N>V|1;5k>M@E5VMy?^9c-u_L7s<~JihOkVrwTs{=P~`5I!%=aCOuuf9NCU>HB*A}Lie6VrD60$_Xt;83x1x*`*E>8 z-k2ry%tA3LD35qzF*%=NQeK!hYgC;WsFDcV36_rkocwp@PFz%oWs@kk*>W9w;A!IH z?;EimKg9OUqlKbk=P7Kp$JRDqF`hRNGE=hpCqp5}tvS)wh> z4;%e={>InS(Z4+>x30!FRD(?fSfuibSvjf`%Z7Ov7+AKM+Ovop-Y#9BrQ$qD`+Y$L zhoWBSDS%BHt8GrH!bz&vX=*=GXTCWw17dKAJWe&>p!N+3d8%7WL=05>2ciU!{)(>+w?gJg zsiGMa_BKa?bCzIO*E`^oNPwkoY}v;h1&FEOa5UiQ4F`lIBm1C1s_nI9o#Y(gXwV53#No7m41xaOxt3%S8<4INpD?cz=iK)Sas z$K`JvmO8Orc*V9^`=2=Y6p6*<@ICNxBoyt%QvY@qqhQ1bQFIzmatJ{H5ayvCPsX6u z78En5ZOFArp{gjjESIcdcbKGW*J^G0uwRWoZ>CvkPg_o_oQC=&A`XsFXl#|w&nAc8 ztFby?7T-s)PSa`Hz-oqwF=6FuwY4v}CS}pI;a?9S2Wzrnv|%=mrt?gy{fgpfKA?CM zE^t!&ES~J;vP=9-t`Fgca&K;Y%*CWOKQ`c^Yh) zSVzsHNagLSTeg2W6ZrGYNL(YQHhZROMh@m0n^VN#rLk|99RE4C-s(xpwS1ff2%4yn zh-XBvme1F9lp<>1Bm-<)*Hd?;o~ei}K13}$#K{t#X!~=41)e1#Y0cxN!6!v99>xIz>C1II2Wcbvq zLY+AHYXz=jaqjF-alUD)DOFsoGqG z=fLKOjqQf=?dEja6Vp~x>H;>-$`(w;`MzWo>gH9r(i-cC^f?VAPAysjBu=ZTE31rk z7HlFcOg>HdHT<%DWh*;8!;6iU+3Gcufpnbs)$cPfZqg%=Q7!6y`pWVffgd^N=>#zy!MnEmfjb;i7^UJE3BqQ$pRm%Yv?XvTh`uP<^gGh>_t-E;h!(s{@0-12$%w(?)8`Ttf)H~RGdafP2Zn}4~u^h$E;VAa|7bpT#& z0zVS^{!2Vq&$o{c%~q#? zP?F%1Vndx_RcBWzEigHdmz?WsFqOQ|o~VXLYWQ6wcR@PIojEL5u7!F!Of2Pi6<2*H*Z-pPU{(+yx8)F>MwITv;O=!YU4%1L9XSvPh3t_2}n%E{Ut z2{>r=NSRY=HQpqSM}w#t?=ezt1f+B#Jl2Ki<(M@v_2x>GVq zxAG0ODWK^M8mH+`t$F7aicc8seSxK|1sZoCZ5?O8+=bS1drHc#h{#EWT8Ez;!vc!{ ziQ4vO+XORuJCgF+9wpM7!w*|nqH@er)Mi9t6{*b7JS>)$*Wq#J)=w*bR)2F9{23K>UtN{4U8ex+Ugagfwa~{o^^Iq1wS(3ud7T~ zDirecEjo&EHv}=Le!Q8b@QiR&nnsU5&unT2R;z@nrgrI4O`_FM_a?rQ{3_?;;KtIs z4p|c!LZj;&_PNqi)y`R--(6%9-CMd!c?_xHj69f;jn#w~O>ASQ*RhVw2bR;I6y@OU zYVw~OZ}6xUqM_ld3FCDJ{(59RFh3O7M3;3hg$~KRsiFXw~D)S+6R2lw#s+=t4duALdxy+&Ni_b?XgwF*)3k z!uI?Y0OW9Q^)MxBNS4=$6|<<5uq4KIr^ zx|hY~1l`k3IB8rcmxecPme~o$weF0liS_Z88sa5LvzFCFPRmIQG0_&v_myRx7N|D2 zK5{>Bj~;yQ{~fYc9HmCHDB5EJbF7?#B_@c$~_S<-Vhzq z274M%U=pgJ)cAlp^&+&2z(;{Z-rXSe6zaYzLjykDN!r-}zr`rG*pYIHVl`r`R%aYV zR;oWt(7cqSu8f-ov=jB8XkS%SSODN!_n-4#(9T-IP1a88A}h$%QJ{C?17f6+*7P!p z8YYNU!>O_eBn@D;zq|v}KPi`ZMS8by!BEA76f z1BYy3akv!tJTM3<2=Wx~Hm7N&T#>Q#K_u6tVhaB?dIiD-bYL;&c}0EJ>IjZ0^&#ji z9d;!W)pQ2y=Ci?KY0E-B{Jj3eeldTD8GITWv()4aBSQKU5pk-W1t#^N`A%Hx{MH=paTa7|9U?zT|=uQGsr#@qWlto4>vM%Wa z9Oq9_=(e@ixY)Q{JGixgDaLrq%mnrE2*|cQd8K4h!o_4vBwiz;G#Ch;tPFV_#=wVB z>yN#t!BeqQwJCVR_ zxBymx`o!{Gp%ViKT}y-wL*bBG2m(znEB7E|_Ry-mgAU55lY(wi5eUb36Ykd&9S$Uh;utDXJaxJ`v|t@t^8G4{VUV+QR~NtU zYY7f>Bep)?bZxR!ItJhyjBsNW(AlgI#iNlGEg&COLv%W1h*X!Mc5>26hx^7XYk^p` z!lXkx-Zvv?d7a(VeU{KJKrC(&-AK0HTW4B-)VS?u z$fawm`4pt6@ZNBmn1>nLk0xQ{9^MAqc~MW@vo~LwD$cH;6n|r}ETDd7;?DQ2nVW}1 z`To9o8>_vp$u8gB9ykOp_}toC$c6s7U$&mxE_7yW2G;VZl_8eVU=uI~? zzW5lia#w76=RgUOE;~>zR_8|PWQ9q6BQ*yz;8 z4-g;$$Hnvc@Dz0ye8{-vgi^uZXqm_OKS0dkdDl+6WUqu-fC;D$Y0SD45 zpyt}Q4F-4BaMd+T50A6qg#8rX4)DVDCr2SfhLRZ*^J{2^;{p4Pbaz$y12K+^OHMRh zf@{;p8# z*;*EL+4#?Tux;$pTP{|YHYgo{x7J^c9!RT2N*eaC5A6gPv<#2jOnVvolM5>>C5tMq z484S*4O2w0j4P!IwTzQ~N+mnU5Y77wfsJR)gsGU@r^Vm~P`a+oUhLrln_&nD){&iW z06#P?@6+eOoLO2sw;-|JOut8&GroL-Xx)}6xFE64N9fn--B<8$-u3N;?b#E*4fBlM zmoUS=M%rWie^&LWlCPU*nv^=BHZwmy33%F9VG&_+@6FN+nX=<-y7lIQ~ z3Qf?Lo4BDm*R@cU?{O!Xem~$fHY`p56&nsk|1lu|8#s6OT?kt4>_^WXVg*FP z1cCxVqI4t)o0>99hN??@*X_8ZB#72NaX4iJA=$$&<$5T-pB0-pbED zBhP~CsJol0D9q0GN3lz&`{^xyoC~mnAj1v~cahwVN$ecSEv8!eVCO3B#r;iZ#Em-I zMvrJ*7uS2i+&TR%Ev!P4+qKcs!S*PPr;(0(Vbq%+V*8~{X+ZKK>r*2JFLlLJ+#k1 zT^O~qhs99V&tf3;{}=H;`mGStJkI+h`ROTp#j@6(|spT@vw!IE4e{b%f*3_Ea7SDaGM+F4-CjF@(cj z=C$6axgJkmeR^l@3{2DF7axbn)Rh*u{@}DsHZq%B1TjNqaD(pW0i5Ijs>uUmV>M)7 zz=D#^f}l%lTLrpOUE(Z;qcxO~{)I-*Ujhn3Ef0F;u+7>j!Jil?Fs(*RGHTN2k3fOa zUx!syPAo?P<_un@2JdLb(J++lNzBheroOc?LzBg#+QyJc$kemuXV2CMn)6dxQ)Q%d zRWocEuZt^GihU6y?1dpPQ68D=iv~kqfTjiII=%f$i+B^jxUEw(xiGP|KlKC_>z6St zkj^#4er4*GBrlj~3FM>V8`qld$X1#J%nE`Pkqt|~hSE>9ceeYtmIfO%g_pXzsr!?B ze+pR~-OYp_Km=JV4k2;4lMU6n2l3a2d2h*~J>)Q?iFZnRbqiH^k?Ee@R|0I}*tvR5 zBV2!M+`S7j=&~ao^iR*ZhKjC2P$adPNZ7h6GvvJMPm=E1Hi1=VuG`J7*8NBLNL|w7 zuEd_8V4xu;%AzE>>kEDyG5L#u{ca&tcE4<5NRoSZCfGTiu^VY>;gpO-fJOADDuz+rZLrL6rnUY zLN;Z2Y#dQtDf#R(e%|tYc8(BgDS7V>S;1LPW%+Cxf<{E-U7LhC?Ov!zDw=RA0f!n` z3?+UAF3y;06+H#6mC*9Lxw!+0Vq$^%64dsRK*Lq9LKh^+$bUYCFu^MFUA(d4Z&KAU z((u=|;-JH)R>EEibOQG#JP-V!!zx|d)e~*o)~tkb$nt;4MC0Ets6w^;;_udf2M5gz V9nhacR(rpsU6hReI# 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 CXiI|t literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta16/compute-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/compute/v1beta16/compute-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..45bc842466e2e4e9f27bcbbef979ddf55c4e510e GIT binary patch literal 28179 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/coordinate/v1/coordinate-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/coordinate/v1/coordinate-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..3a1ddb431de8f2ab52beacbd1ffee9a5782894ba GIT binary patch literal 11914 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 c-?o4D86wZ%{zZzlJD0A~|IA^-pY literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..ae4c90d80e7b04a64413a60e606ec0441075b8b0 GIT binary patch literal 223 zcmZQzWME`~fcZe`2b9hD9}0FfC+w6iSbch%bOXoVb!FvVz-}I!~7}0sndq<&>v0j!gc$WE;OwPP7w@^R(mzY^-e{;)sm_WS1P#Xx|(n1 zXNgy4zW@2yn=GHnMuC}smUEmo`CaE^>vTBYebTAZU)8!Q&aZUbzUs(7yKQ~y`GvcK Gz5xJ=mtqwF literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/customsearch-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/customsearch/v1/customsearch-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..164149f2031e903730cef156297c7bfeabbc50a2 GIT binary patch literal 8343 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 Y!M3uMn!o(GJm+$KC?9ZWg)Te(9|1T%+yDRo literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..07c1d19be50a1a5cc1eb1dbb3e39240b1a3b8146 GIT binary patch literal 6713 zcma)AWl$X4k{#R`Y=97CAi>?;3GU872=1-}1cwmZ-6gma0)s<<;I07%2^xYOS}1tph*;AOZdbQd$7OL;OEufYI~6(VZZP%`NP5{;sbX1U1oH z`ZgO<{qLTCIcVOA_?pMsNYmL<3^TpnH)X9f&e4oSghxA(HE)Jeot)@u?H66J@araI zByuvPb@u1`qwxtd06tTQ2Z`jNHM@n2_=b33;i_aobho2q-bptofLAhKUXaJ=nK{|s zhi%?|=UX;SWB}D6J+EtMH^)uFCVP(+5l* z-TUnPXJ2*d6#gC>EUt_X9}gbdt{4~3`Br;r#K5eM?+NcJV<_xD=i!_zk?ZO96AsmT zr)7LtXH}Kn17GnZ$>){Csl4fAf}m9?Kpc6y)jK{H}_XYLe{%0SjV8~NMW2qT*5)jeGgUdJ@wXO`7hsk%H=W#0vHH6LmFmeX{(b0W#uhES;)a*iw% z_Qf4%Wq~J&%$Q47(GO@HX^-o=;)J-2m64d@LLDZY`K(U&_&6;gff?pKVXnPfz@{7H zv2UQ~ebd{UhBpSsh807No~`;UE{{&k2_;-8`aSKuKe$os z@?t$>YXG)+HgNLIVRq0p$=+)vKOet$puGOS&ISqjU8_neRL#lX;V)ki1Gl9Y_zEFSA+y!VODQ(IJ0k!cIX}ZRj`3+OLV9bA*13lJ_@Rrs%7I$KpVO^ z9@?{VB9Vuy$Se+N2Q@7_?;%W5m5&E*Ghosu6ID8?e2g(|_qkf6ZKxM(9PU(vU@ra0 z7ch5{k+vkt06RU~qy+(~5-%bB(*Uqr6}crGE8#DgFjAFGVoktZ`n?)sO-gug09janL>Sl2^9i8_IK(m`eI70sU zd}USYWo(r*R7V^_=Yn-kS~7~Pu5nu+n%3?>=9HM3axuZOjIoNGvnbIvy?92V`dVnP z@n?{NA~207l|cnhEuwrbZcU7EY|YGhgbzhTJP#nLob>9)AdU_}a3h`|V(H332~#p2 z`Ag+&n2*_VM!d^!8#ICeRYv5z2G+X}#w1Vs!y)jVmU77{Ab0qgYEji-3s)JYr||X6 zqR9T3Db*egLW(~+CtLHnM9)d_JfcVj>6?tbFL;3^Cv^4Au6*%OsX6E_p^Mw7W&Mi{ z@`>yk8eKzwJu^EGnsvn=%mmiF5m2MEebi)8WHbdztS!|=JIGG9G35_lFX!DsIQ(d9 zvztcazJvHZ)%6qyJaIUNGq_bjl-7%{g%q`+=O;O_(uI zP9x4jWa1j9q>=H>{*Fkhp0_+yG)CWyqJ26DR!9FK#Cg}HQ`dApO3g*tZpO!cs z@HG}b3+1A?R!@EtRl2QrWGVj6#fyEV=Hbsvw@SKumgz3+N&dF?3u?ya#Zj4D#nx|b zxP@v_ngLYU8A#NM$zU^KT?y5<7u*n@bmU`r_~a~ots39cjT|1 zmI1)8{bP30F49?LpPr&{mrt#sFRo>-@RHDV-}(z~6Q#H#dAB&m^OTo}rE2$x}b`la6KaiiGeQssLR) zqkF7%1s_}uQ)7b&j{Kc@@9ivrH=Xb^2lcyU4ln&v%})Gjd?KnJV>uZ4Q2!hH+vpMv zYt`&&cK1m5#R;<$*M$kb4YOGX)~)0$Bs)MFn+P)zI5gxXm0XtXk!R>0not_aVkk#? zMjuNR#xLZ7uHY(d8)YEJ8bfz2^8wxxP;{T8jCjCDvN6$f|gN+4U1ptYtkRoXX4gBqYvsk{X}C?pe>+zu@sc= zPffBf$Ixl!ulTB_^Qkw}?aRTrIO<2NC0HSN(%ZFrIUxxld|n*<%3Md7Uf~_J8N@~Y z;!1RYEQ@g0k5hcureNO`Y+A&%k(E3vLK)wdvNqFz`Xzfpp@VR;-oXx?j^a(Qw|B-w z4A=V0DL^DS*V8ke;v3DkjTd^3>CVJJp(bM)GZo{|97cO$#LQ8aVN_RZsFDxokx8jr z@DbI+n&|E0&*|QrUQ^14vxZ=#))5=aw8Ze8l`HgwWh5!C}PV7AZ z^4NLv390s%mJAYzD3he3G^X+AvMk~gSkz~$nXM;PERtozSXY2Tr}S+FmLGnO=a9WQ zPK!WRk!t;zUv-75Ps&7KWL!=Zk_QtFPk%A-S+9ee$M{Z(yK&A~qvq~Mxs*WvsvO&k z&)Ym80YI(wdTHcQZ>zVvs3nI;yPwvO3T z8n@&05KbykuEz1b*fft1au%_4d<2mfn!uP|9{&W2d6i;e=DN+f zfxnC5t4{Y=v+s>{1uboYLK1_#J-~nq;)(MqAs)g3?$M^hzSm|e*=XA@t5#5xvIA>S zZDv=HxaUFPuq4X#LAJ075dljrH>nF8Z@jh}_DjzVcA2HZ)+LD%IRG@;IJA0VIrC2} zSp$6*BmN17#Z6SN{+y)=!!k91NEJjN(brbqQ<)w(_&d1!a!pCv;L#RuyD_ruy<`OF zL)6C28J9~TgwS~Md~Y}-=Qei>z`XzAfiI>Wv63&q)Fv)deUHLmiey!aw`GU{h#0Zt z)+k9Ibq49h-o&s~u*dFFWs`5%EVSFzh3fLxgn@-FkhYZ>Zv=kaxzvhUZl@1tKnsiS zQL3xE4Q~dEJ3-0l%1&l1=u_m6#PaN%YMt1=JiPClE*e^0ps;U$l zW>?ycqiDk}eyD}Yj=mqLFH}Si8$r?nGGBDlskHJiOqub!zg~|`+%%;OYdaaJo41+^ zEqHG3R3cR0&MG`-RqNMoA>{jU3|<<+=i8WFxGAyLHze-(3?uAjJ)3g&D#(+#WOo%> zz7G}xO){)Rd5J+0JGj`f53*Crv_XQVy;SOY4~vodA1X3!XN#`-&=WDvO zijiz=UTMs8M*S!P5_T5+_NjJ_bHBXDH%f2K z#ZR}^F$%VudQ&=2>BF1s_v?1<@V1FCRvMZ;(lo-pdke>F_Hrb`o0(cO4L*B3;H&rt zxO~A}y-3-ygemsj^+{8IL6R|$_NqE7|LvQGkyPa6uYO|`_{*Aj;?4s(63bo!TgKhz zLlD`~4c*h=^6&PK($4ur+5VV%j{D7}bp0mMp)QPYjIG<{P16-$u;MeV<`B2r?{7MQ z9Vo%D-*CP*Zs*TCh)e-GQgMVi=J4haPsh-?d6WyQ8J`v$H0zh0E$t8z*ig(`fRbG* z#_L$E`8vb-&^`TVfo~%)uG??OM>lO=H^-~-K~|4p0jXEoOS@FGK(&k@zCrR;{m5E* zyOUr>n)w8!fv)~bmPH8Y1Jg(;Cx zGz-v-gA>clWS?VhOE1x+9O?0vGovf2DqJwzva5iljm;GaUtwb{Ch0j;d%b5TFY9BS%U?pO*mxduYK=G z2%_`NgxT=9eB6zj{ADVVZeofm7F+tqfHpw%`|uCP@N(I}R>Y82FjS1ZhgE31-L>ar z*gbJb30>S6%S82mXq5;WAoTv2jTb-A-TqWwHO(=`HQOa zp2j&={f{|4(w`nN^`Z018K&iK7!3lCw|;N8kFUcF>eFbGEmboQlEZv@>B2``Zrx9$ z=DN{jGNO@>XXNYzw$KP!1`msB996+=kpAP#v2>QxoRHa;&AtJ+m1$;c{L%J?%b4~O z4cOAdC|7Y|9E|~@!7cH5)=rgph1JiKY-@Mw^zb#*_lf0Qm9ny!O^kwYcl1oSnqoT! z#Y8eEfxl1muiA?AQTttaIfO8Qt6))nU-@#7Nr*_Y=Y$lYO?#Lx&N*6CCTIZXU_*A< zCdFgmGxtHGYP|>+y}5Y{v2WCTQWQhg(uZdw*-pbsHv%8A$zG7ZVGAB9<{OjiI#$h; z5=-gB zJstwt$3z8|=h;5RvDw043WUGP+?PGn3{D-;{U}rGyfY>9A^3AqPtyja+egzwnJtJ} z$vZFJtA6UFaUS+<8#1Hfp`5B07B;u&-mHdiOn@toPDlrmycrBMn_;n6#tJds=}}0R zCxgI8FJ@aR^SaHi?iID~2M#S~H8qwKOA$|te$PAeN96C}#9lEP7&I6^!l=K_-u|@W zqBQ9`qgi{`@T>Tlu%y%_ey^4qCd%y0&-yW>Dk_mdni#8xA5$;ZOC6{JSYwf0~{%RnXgDq)*&7esdRKo8&GY*V$ zTjd}dchBy^o*=*|wVJiZ{hYi&6bsIQhSo%xW|!w=kP7~Arh+=b!Luz3p11DLWf*Lb zbI7x2un@;k0LSn_X+G7_iP!`CCK1=`bqmDO&nson+jJw9c=kV6(ybFzp=7utUpv?e zR3CJ-!!T8XWBn$6ICyVtV15iU+fi%S*!!}$l)-e%DfwbHhHyeXAFc7_Bs=$PeOwDN zgqr1kPN_uMQKgSGJ+|2balIjc-F<(gYj69T|8l0QRAvd)wsXd?RI>d?HS}9)`&2aN zwzG+^f8M?6<|=ywC;viwCQ1A#;B~KqLJY=oxhF@NcA+{~dw3L@PN#-tD~x_#!-=du z<_DhO)SlNYt{u1T0Lsg0`t@-)vu0!%M(>(DIro@Zwk5nd;!6mC~6eQ=uc)BEG%8k!#4hvX$jgr668 z{YJpv5Im+)eU>K!k@vOn&YpOmsSZzf_?v-X;-8#|bjnreWa0Kot;s*%D%nahAWD{K zHmO1Ci*bYfVnHn1c{53f+O018J5Y^lNF6I@&?;(vZqw$Jxp^SjVaShJ}%cd(;E zjZ6CWzM3*a%bdsVTi zX%Jj(`33FYZALGR2ic*pOSxaZWBm{KQpEWB;%)A3pHw{YCG-**(#Q$(GquC6qG>ku zX<&B!iRrc!Jvu?Ex@_H83OPM%P>)g_&-%gkp1vmQ*}K6c`kw0YP)Osh{LXHGwK7QC zWiYMdOuxL=$6+eXWZcT2OzgrkyNX4)LEynqjq1JY!>uZbR;2B_!bizmKGCSZD)C=w z`5);1H-XvYZ{n}U{B_vK@XOn9Zg%EA-QE;e=$6&K`QO@q1JggT+do$kOlR$7Zc8Tu zrZb^)SF?kWwJp0|h_35Mz57@9f0_T2 zleT~&pShu-vlX`v#N5E`jirK)qb!e(m$SO>|But?-v!A3yfqN%->dBZCjN2~7#&af z9ooR49%${sdZj!2RVR(_-#!0w(7e|4>4Z5=lBhF(1_lboVM&}O9IALJFRQRrauf(U zCCMS66gL_+4-Zv_wXMTNxHwFXP{<4W<5djm-=h&P4-cj@NQAPg0MlQ#iF5R*$@X~q z--%+#jEK+1AQ^pAl(O7Wxuq(L6rBcf#Of;%8wB>kO%$Cb2hFb2 zw6)0|Wwl*VgcVZi^xNFM_snS{>0%lyx=lI6hE7DyQbQnpNhB*^o6Hstbz}QrG>g== zP9{@J==fU7Wytq2kV$ZAsx8voGtm0;vT!R}lKxMTn?dL=mPdN^V6=~s49k#r_jpNf zaXUGY4Vq$(-{cqu?_)?&mo4R*z#K@8rvs4`iAO2oU;j2+KX`|XN#*F-eohU(T39-X zUdGOjP%?SIO+wFUdyUa_r%erBt6CJr?dX0WmBKVGo8Yga$f16zAQ^jgOoJ4mw(1VE zRDV2lCtwe7>J>pE$mrr2WcqzY-+N6gWhb8Os8Vo(gn1M|&QhI{y#4?Hd*wr0)w)_S zz*e0~)}Qy2d-ex^$^fOv6?L!+M~BQiTF}7{!i?}>ZRibE2-jsE%5qU`{&K_*atBu=7Wl9~!uI0WE{uIIad@zkw2>vi<)7xH^J8 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/datastore/v1beta2/datastore-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..34f848d0c6756caaba3b475be756ec1a85f01d0f GIT binary patch literal 6751 zcmY*;RZtuX)9fP4;%>p+-QC^Yf-D4C+}%ll#ex&u-9vB)9^5rSf-e@_CGekf?)P%L zW~Te0YigdS0dN2~z<(g-0007E|4##q-~I>dunl^H*&J&wExf$vI`+|*dHy56 z+*8v)PclJ|x149@q$z!uvG^-O`jn^f3Zn6sqUF8ga&U5X_pY=(Rv!RiXg`(qC4y5{3H-cSDiADW@hJ@bwA z5yh);{|;F(Fw^`bM~A@H67_JX@JeNt1*sqHkTqg`|gIHr`O@bX~{IV#(!bRzAj3})f#Hq zSP>lzDuaNRB2Gt8evVX|JuIfh6Ep6S3^%|EZN@E^O_MTg@ZC)0%7d&o_rOdKMqcwq41K)5h=0? z_OCv0y;`>+G5I;nH~^ugk@a>kQS`#_F9z-8D{){BtfrKw#@n0s^}XcUK1uf&<$*<5 zHS^+U_7pqn&eDpoTEWHZvTf-MM_x@r6h96`llZTZqjoei^a`2X0FyOvc0dmu3mYjH z94o%f4}8xogRBk>*W6qy>_u_Kw{=s7U;ahkbY@tQt-oiBGGFU`IAWgO6>F@vN64q$ zXZeAeEP`|QaNId0$@7l&YKMWF0N~f0}h=ziA zfklDxa*%r73hhP{u5p4)d9GFI`k1g8VeGX&zfr#I?)1}PxcF8Xf^jcM9W4s#IfOBB zkA-52VlY-3AXF=(&PSWYFCsP+Oq{yX%uki5a1Qx=MbLfPa_b6+M5Z;u+gZ$IDY1p? zlfgF;ewGOJd^kSco_ieoRWqnt12wd3;D~_V!jEY+LJZET=j*9r-GExrYf5h}6DHTP zZ@TxgdHcUw`)d-+AUSD~O!BCQW6*Fr{*pm-qTP~CZRndr&c%@Cf0V-=NgUFI<4yW#-q%Np54QLC7PxB zXQ*TA3xoii^No(T7!H{vJ&GAvjL^qYo9kY=OW4;kJNQew6Hg)1)=z4WvorMpmq54wR6A_7NkX0?B>Taew_aMS-<1%`1i)s?~sOeVO#1MIS zjvSubyI}836H>m(caD7-Zw3tb`8oS{avkE9uwT^V$pw;~&qHeQfSN<&`zpZ}Zu*-3 z=e|2!YjUsyN6Fy39{wp`{)bK}dxIF}_qZlq@Kj5SI-+dg^MoW<5~ta?l}UT1T51m5 z!$j2}NjXQbLAa=Phnwx=_KvyvQ*PD1JyibSPJfriIdt8=H);A{`$W29lkdAbe&vbIs`@?GpjU_@pn+T`VC5AaiB^UqT zD|S_IfetmgRon8%aqwm`F36|wSgAI#LZL{X?8?ICR!A!dEE#@?@6;Ib>NWx%1vMsK zsa~IJ7=GyLw8fQ5nW;F_eE1bjKWt?Qt_C*xmK@_&1+~OIqM8;C!4P5qJDf$wWwvlj zHg&qi*K9KUCK590JtCr;mFhLw^%P|Ni25?e?ZjFj06}tSG@7{qbg~2ZQzYEu0%bk| z50*q>8kxaRx%2)m&8;(FGtJ3M?N8a|R7oe3DDP&j`CZqngyuD?S-3M1Y(7Y9mlD(W zP4oQq?~bozr^SrV+wMr-S1>%EvV)Xf>D&+bW>5ERL%7HI5vvmR&!gS4A%0D3+mbq` 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.1/dfareporting-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.1/dfareporting-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..41962ee37cd490f3f20acd8df0ca592914ec2492 GIT binary patch literal 9027 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 TBl;=xgJD0$6FfsbXxsk>3&kPx literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..623f2e037b92f782d70955d9796b75f2c669c640 GIT binary patch literal 8014 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 z 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.2/dfareporting-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..3051c1050c053738fbc62f9d527573cbc436044c GIT binary patch literal 9757 zcmXwfQ*EoA#M!ZJ+qN~aZQD*JwzFf~=1e?sCjU9-d;eOiyQGe7 zFS@|M!N9@(1DOjLINb98X)w93{~?OcLRn;#!@>GB;L*9FEQv>h3G_eDf8>?>o8Q`X zi#xsG$S`PyDE)hU?(F0Asux{rnU+j3p`j`LL}^!7PYcvmu2gAw>8~e`GMlflzrCN7 z@5o?KQi;5FAQv5d{rJd-Uf6woFE9^}5oeYcG(8#C9ym0fs1$}+rcsKhhT$SPaTc6$ zc1&%CpY*i6j$4N#7&gSuI{18ixBc8{DthJ{6gxW`xRbU#(bR0xx*5)XJjr#!z+K$2 zrH3Sf*rCA;?7>?d5p-IN4Oai_%5s5HxVR5W97PEiO-h7s@lCl_h=)ZjTY0~3K`};X zeI2oeLMUvL9(Hyf^#NABHcsE`G-3kQp%u(s2$7H55~ayJ4Een4M7@_{L##di5Z!K- zthRGf5f$6p(ct9Z&*7c5XUXB;nksnld|Pack1fQ4`1{NrPeUqw7@FOUWBH6;yUYne?M!ri4ISVUOa*&1ZkF3B}$Plx7BiheG3SXiz?W4CC3_iUXV#ex<> zQYHr;31Vh4r$`}55e-^55I>m18ahq|}qx{Q1ev z5)~+O>Z8pv9elqKch1Jg_c-rEZ9ujYke>w-OFJ zu^8M5M1XNIg)D>|De`cH+d%Tw^7MYnM2i^I!kW_BsP<$q)&#-^6Txm^mS2UrxVkQ} z8CCSiL@#+%2t#@=M-joxf2R=QRin=9S^k@jkf>7+8Qs157}a;Brkd*6gSqMqU~*XX_%ejCc!v4$Ljw z8)*FwKmc(eqftK)OX^$v3VvL z>XAc}kfEG?4t8ekLO$vc6&G%aq~gHG?Lc9Aqo?fz%v7`3{H=AN>apX_80cee9N@E1 zLgVE^eR0|RQLj2QZgKi8*c;#@`#Sourbsmz4^N#vGlk)1H++Rq5nqH46g;I+A3jzE z1cV>vHWfKNFmP`pLPmYpR?k|@WgON$9|JUHapYU@pR1{^susqs`?)=FaKvoywptFK z(Hae&P1J?Yt*K%9sTJ{$4_&bUf@ZyWj1B{hVGw;Ze?<(e9|4p`D);L;_H)zEL%fJC z)k*5JpvBO{AgyfAlC$9@$Vo*}kKx;d`HS~ASL!&R;Gn2a^wAWls8XaAu7@I-u$4nRL;KuY&O~S%Hq-*&XxF zU#cP+=2yx-yp!hc;7uH6IX8gxd_t}uP%&_{8ssXRgy8Lfa4PId)RK7QWf=*-U5>;% zWWBUHOCHlep^G;<1e=dI-fbjA`sVOGmj|kOjDz_V6%u%xWH;Nyi3Y~Lm_pK(%2d_8 zfa;1P06&9t5Ca!>1sy=G1y4#4TW;;es9Rk3er&RgTq$z|#vV1s`0;$Wzdz~}IVHkj z2&Uq4DVk_gxu9o8n>(%y=BkH>$BM}F1_qNcU!GUKIFlBOh=hZ%+@5UR!gvT5^GjtF zuy9W7zFC0(cIEoqvd7<~D&XE7z;i{M=f3&LM0pt-QZoG4ml{^}>#fKif-!Yb&~s~4 z>}`u%;Nr(GLVs@l;dnXc6q(-C6m_n@>5a^)=KcPgg72Q^&kt2OPwyG|BZAsd4i|!d z2UR~-5)etKG9+qP#-v&Mf%_HOiDs`oig&JqS&F}n7NWBpyJ&8rBonSiPJS>ME!^Wx_5YznHWUUcdPP_p*VEhhDvil0?& z+(|bQn+{ldbopB-806x8q)YJY60g4n|&X`Z>82i zxCvrs$Sx$~K@4b9whrVWWiS|K_FZ~pxpUlf-&}ODk1+Oh5`4X)(p^kK_#**ia@1SR zJEVgaX({`m+{6-6wgXly$=V>v=GfwmU;{emL1%k;KBi_kGCgt2HH!@h# z7S3&z(WgMjR^NyUtT~@0e^_|S0-w)kx)W8${^m7-i(L0F7{B|+7Ed>t>_Wd0uE@R9 z2YDRSZ*cdedZXlSTQslmCCQ=OSSA!DvN%

WP8(VRk})O{0luC>&ti;*?5~E=V%Z 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 HpG^M+;KUkw literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.3/dfareporting-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1.3/dfareporting-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..14358fef291b9f7ffee34fbf71ad92e48bda52cb GIT binary patch literal 10454 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1/dfareporting-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dfareporting/v1/dfareporting-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..10fbb8e1f691564a9e700df16d571653f87dfe83 GIT binary patch literal 10782 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 M#u|6OIzOlXAN@KxI{*Lx literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..416ffcc661650df8caa7e386f14f49ab8cf13402 GIT binary patch literal 222 zcmZQzWME`~fO$ab3zW_H9|ra=Zr#a$P^002qJ^^UUYC`#bX%Zmz*NPY(`UTTY5IDG z23#!o&j0B<|HUi%dS2JQ`=0T;3Y2=r#Zkmt#JeT*A_vb`{=(AEc1^7le%IMEKk{Ge zVZYetcusECua`f6zO-DqtCMx+u9rV|owS^}vQo85;NX)#Q$qGW`4jWEr$i;SsxwBh z&+*+hmn@%?K0bPy?mTLr2B E0K~CnrvLx| literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/diacritize-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/diacritize/v1/diacritize-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..4237a915dd26f8a23c8ee94b35c447ee7b1f8101 GIT binary patch literal 1341 zcmV-D1;Y9O0RRC20000000Zg(01K4>0000000061|NsC0|NsB6a=Z$;7NYOL@i3W} zHx5G+ZpMTF00000000000001ZoUK+%Z`(!?zUx;E)E;HBc7Pmw3*xpg;2?&Zq9_8x zSnZC;jmTYkcUFoT=)Y%n`4Af!jNFH`J zfKUp0!%|dG3%B+_7J@nWQ$YBcT9DEj&lbMS0Op_1Uq@plQFEE++wC?htSu_cq^)yZ zivoR~6!OMd6(r>zg_Gsk`RlCEt7wpoyt?=?Bd;!!ks0h$fL4YY4T%`yjW+9%QE3&9 zt%^qbyb`7eY&}23nQzYX;I%0pVtulb>M8|Yi6vGs>W>jHe|h$LA2|$(th7~h7Il*N zQh2--R7T>Yn6`o*d&znR-&hD?tKQ*42XI1E@q`5Dn)F zvq5DgLb5ymnCB#(h-ATsx<16CR<3Qc2COyiUWAE94Ol0Ge{FEkeSub-A(AdmjCiNJMe$CXywkCp3ccYGthwDHmLs<(H>RUU+((q@ww}h)m%MN7&hL?m z>-H4O#~~ZDCi}Jh+b_ltJv~&s9k^4cksj@bX{dixqG(TnigzhZAVY3fRrCO@hxSHn ztyADj8!81$gz@hm-fqUyPY$t9+>aLGU8^4hJcj!-aQ1KeiEeuDRI19yr?LD`1s5m1 z*MHt0toNJzxKn?1xO&!}8Su`Ip8KbpVz!@s1&1+rF8}}l00Zg(00000(*OVrssI20 z000004FCWD0RR90|FyfqMer5RucI$^JEt;!P*8SVy8r+H00000000000C=1&kFid~ zFbsyvz;ZkLug<*_0}~r!Vq)R}oW^&JRK+D9sdRMin$;oJFy#P?{DowjH^5 zVLe)k3@T+#BW(&h;hi#q!@Pntq^hJV?vWs~bjchyIc<6!5L$&z(&mUP75qK254=2M zoJeV`tS0RRC20000000MLX00m0`0000000061|NsC0|NsA@dIvOFB(k_6XX6sR z zxV1=5Ze3LdvY*7M;Df4~64PJ=&{bosgQ(|Tc-}=}7FnsWc0sVyX3=f&Tq)`)q?G+; zbgt3vbcS<4Yav~pc;pT4r$)7I`_h#w1MMC6lodGwwuP)4(LWV}e zbT*8JA^F8xV`F#}6P-iAFPBj3l5G=)PmhYvJP(&L7^L!`YcXeBi@- a)p?&-tluBUrY|mhSLZ;n&*&daD#PDSpHxBs literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..e835da8045565469a3f4e2adbe6684f0ae042235 GIT binary patch literal 221 zcmZQzWME`~fVn{G6O_&P9}1G=mVMQ_c(=}DY17w@fu5C}O}lxaYQR**oYQB#&uRL4 zh6Y?L_|E_7JO9Ni`g&g1zWbi>y9$(g#>G*@Tg1C1^dbk(SN_7%&UQ_$6Mom(Ge7cQ z>tVmx=Xg$T)~}a8f4;O_xvP_P=B}4Ncb&AHxw2BVO5os=KT|^XKKT>#x2HrUwW>2l zvCr|{HkT})lRAFq^u2XgUC}pwQuMw2^Or*2ZLQp|mMwqAXj+*1=$p`mn=uU8(g7_1 D`W0oQ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/discovery-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/discovery/v1/discovery-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..44c2b5a8e28356aba2265e8f81eb4bdfd32c5fd8 GIT binary patch literal 10785 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..30437e018e1b3f4e57b7a18cfc61cae2c070b036 GIT binary patch literal 3833 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 vNHbzVPd0IPIc-TVc6MSxRB?D@UvN}XadI literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/dns/v1beta1/dns-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..3b051b6c83d695412409d3e72690dac584cced7a GIT binary patch literal 4919 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..989b7be6a3f5bf30e2c3acbcdc97745abfea951b GIT binary patch literal 7509 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..8664e97ed1dcd01977411eb2ce1dfbfa11a3fad3 GIT binary patch literal 6156 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..4fd3b60f889b8220bf9c116c7c2cc347ae792095 GIT binary patch literal 7634 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 O3T6-Yhk*y+qyG<=Zfb4- literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/doubleclicksearch/v2/doubleclicksearch-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..024f42ea3cc674268811538411f4737b63e51899 GIT binary patch literal 9212 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..f61fc728ebcf0a2e6b079a9371c58b2ed4185824 GIT binary patch literal 6725 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/drive/v1/drive-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..3406899091ac9b1f780a98fa18347a12aecc2544 GIT binary patch literal 10993 zcmaJ{V|ZObw~ljS+qP}nwrv}YZ6}Rw8;#Le4Vs+TXw;xdo7|+g-}l^KcRkOnwPwyc z*zaC5vuB?T0tx~O@>dXpK|mC8|JMhheETQ#?CUz;1ak=Me)!b4X2?1xML`k&!~8Yg zxtI8Vyf)fztZo_xIvG;+!(}ttHkN(-67CKehyt5{uSuDiqU7dHMba4{mz6%R+g@HE zGC`&0>oObcE=C0sppiYp0lPnhEm%z=`TeJqAY)^m;U;h8l;ssVMlZeY}a7$Ph*|CCHUyQdtNO%2Nl{1!Us z<{~)lU4^L>v>qVJcI)alm2cIF?F;^?T~+k?n%RiU4(AQe>~({5@H)3Z-f!xb zG^iL-I_r3KNO|={lZ<=~>PgbUafXg6Xp`wj$$YOdxQB>KR#SvWxBlEY36(@V)xqFN zZvnssv=mQc$mr)Y;y*)_N9K5mQO^qzl5 zlom=E8fE&4e3OQ@Cf|EDvpBzb3_&y3cE?ITMywu_TUY1%uU|gOY-9{s}s`%oI-7hX-=R{Zg6DHYa;i7+iq_ddBGU~M}wbg3Nku?gH)Fm| zLFV?U2)_0rtI?>wN2r@zoE@M+#u!Wj0&LMF>1czQoRZkKFjznHVPfxKI9JjMO9%YX zBd)2f^Pc;4)Cef^Pi4?anp9>7>aQ%OKNWq(}00^z{7|qKqBy)Jy%Y2-BxRCHY*TGeCEcRZ+Fl)y8%Fv)oK7q}L9k0rmzdy;LA5d6 z8Hw7RY>VS6YGK=`ESpR#p+YBxfKuk!43LiLZCEBJ8**B4tDz&A zy>To~^Pl8@bvDV-A*cVL$;FRb;dnFB$ z!xw6iANx~yH2yII-$6i@ip3^9N9BWpv@9Hrlj*cqKU#Z^s11dhg-L&tiqoX_4LPn=Z-50$lD_vXfB>33#>?Esy(InWLks>$r%;r zRC8%YG2yxEAMym!JOQ#`*% zj_+icgFG8|=T~UXieWzk)mnPn%y>z2IE~u0JHgOfP!}=D&}R7YBKR$Ia%zQbJ*+iI z!wb(Q{VQrBCRZ*88I1_A@>!?ySOSqj8qdPX#Pg~b8=`2*4xw3tU)FcoI-4PV|EvR+G@VP4spddD&lg= z(S@uWu|^kWd1?_Im#DZT=fNdj%u7=n{Wk&b6_y z4p+N;*Kd|qrO+zzr|hrz52K_LUsB?vGQc$%eJ|GdEFIC!i03U%TFCQo53zfxtA zVVA%v#xi)zuT;|P<`T%2+N5MgyQ0R_OeLW7hKX)uao`vivxACb6Fvu zj%Iz;ybU<3YHyFbfo<+XG#rqI`zzY=1a?(BJIo^@ma~Tcw3F_dib$ zIe#H2z!1S!+x|Vn3BY&2#y?kBMvWL)HXoOJ(j>UWXdngyU)t)&F(jJqKsw+zu&5&7 z@i=W`iE{$%{sH|7iXqk|IQy7I4jq*v;z<&E0iDK~FX`2qnQu;FH}BcETF+^r%m`{ugN@rfh24b1k2cE*`67P8eiB$j^2 zY}N@Ek9DF87VCAn{v650n&^(ar#bTNY%dT*JB#EJLHemx#3||U3_n*F}@Cw51B?o5k>Kf=+{QFh#d8TfPR)WcOgZ1kI+ zqta-2W8Y*1EfE^Xz&9>1`AC+XT*jL|t3tR=J3FbZZR)XHZ10|cF+;GlukQhfqQBQS z`7g!8#N)Su=r^Frrd*nLor(y@jGMe9F+5p7Z;eMVkk41qvNF?wRU(e_!tRh#H4Xm8 zT$atQBp!Aat{Krxjjfh+)5c88F4>6NMHf1hNHZqm{p|PbUY^2K(!U#0Q6YLf%N9(} z;8RL7=R?Y2lgUWZG<*;BOrQUV3^syeY6B1z3B5~~cFz%ewfT-(GU+(f&JgFj%ywZL zbhZ*G20O27cyDvb@!-lgY){|rcW=|t(KJu6SdVu zN?^~JtRm*Vc4VseOWU7o(FTgI*@tn~D5gcb!uIn>3TIH@Qr3=rhB=$K`cYcpV77*6 zVD&jfR)mG|zHc540E42&m@flTOPks~`?i5~8IrOaBjI}uY!TcTf@s?VXX{$Oe%gbf zO3aFvR*;>H&_u-A#F$A>Yu}1tR>PV&S-a&N=|0aqFGFAmb0Cv-59vIB~i0?r@(37&gwh zl$!_YWye{f4N*BqC@+Y0PHBIYCF!_Q8p29fljLDLdf`CG7WSIm3MMcrV}yCH=FXuu zri2z!?vC8U*iMTMr0L?#q0tuUn^MrLUWf6 zp?Fr6jENfWhx_*bPzC9yimI(#527`zF%$&kMQ@J9;p2#yU4RY`{dw4;5#B@eb3(d; zFnVcKT_Hq+A|}j17`O*HUQskD#1B{g2BG`4MICm4Qfk{V6m|?5347=|c|UV$_8U1V z!jF%!*(6!sM6?gmOT+>7#2 z4&i{(UTR@Pkl&NjC!M&QbM)+b{((JYz&nLK~)99U7#X?nkc(-?!Q&O1UOfP^Khp!`05+ z3bsiYDQNbbgP+GKRkJXds|l^QdVx(ZfquuOFnf{av2ic7;=%Fr`-}sEU8ti`Np`1= zy+2EQyyWTXseP;cX^Vq{ds(Z4lUZumm#3o$h82fyygx&m?R`!84{UK0$O`94y$OXd zz@FN*W$q@GZFfaSUaEf2V+bS0I{9zSVKWHn2&KPgmUwfBmksR9`t^^;4uq8?e5)~? z#-46B*!pxj&Xdc&y`+CV6Yl3PBpiNc}|^e)jGiD;dkhX5+6sjKeQEu1bpU8 z3Yn_2@!4!m2}G(ZZ4)4655FfMRnu5THn*obAa^7Q>tCBlS34UxnKiGVSuoVoI7#Ur z)`Cmg1o9^ZKK_e zvi^I!-fE3o%{tUuglN|&FeAJ<{yCN=O~`Zo@vFLjf&S>j-buOnOPp-GozyM|iMNA~ zlxNGAFKkweSgPB9Cd+^i8hPo^0V_1~Rn~_>i4sn?Ek^_wQ`j1B|-|9N?~++G%&Wa{fYb60mQ3Fhte{DHviHw|as)-jB?izM|xKfmCaW zuNd#tYU0)BPv;Z4qI2GYBW+1Dm=>@y^si;a0FhSXw=D~=Env^EBQS*N zZHVd9F}vQlnD-ZJ(WA>AWcqRV#W1+5H;JoW?T=IF$I%r81h)MB0Gs#Wy$j8U`Z&W% z%&Gb3^CnZ+JKi!S1PC5CBxG`a{PrJtKfvn9CF0AVFp{rna6yM%!+P!}p|71iJg9G+ z8<6{26zTZIL-X6&5uS(Qtn+BB14q@hGU!?=1hg^tAo_#A6Tvs1;5NJ5ME1b;ptJ%( zP>sx2dWhKeZv@Q~5A*A1<9_cYCnuw*B;1YmbI)cH@+RC_1*8Ey>Ea;Nc=Mif1ROe^ z1K64gUghD}X0g@0O`?5kQ>p-fBTHOD*aqMvj;Z{oD}#rV3fVDmudMio1M+3ll#>#|5%~S&mr4W# z!reP3>n5>W&f(~_U{1{gm_QsLt!alI4?+ty&u1A<{pO~pH<#SiEy&jfgfH+zCe$IH z=N$%qIG1IQ@fHq)jnT5zuaTF81Yjp7n$v4rQ7^%)c1g550*zPe4PL(J)Ug+k8=M$P zILT^d+e$xu_j~#ciV79xuSP9|fJR`7p=V`FuQn6n+UOVy>k(>VA(OgIL~!ik&(}{9 zXdap<#==_!!ha|F#G5r*9qDYKlXvP)?kzym}vcPZ#pm-Grd8;PpOTnbAc~9g`mM0tzwFJ~Lck=kzAV`-+fG zWY#-jB4Qm*!gXBz(LzF8-N4Y2NZA=0^|2TJ6)FmgW6YmHY)UBraq|sAyfW7u=AwWY zW;jPMflqL~zZk}S&Z&?Ou_!gaQtxN&!PvUwooceS-?$ajk9WgY?SPgt7tg6O2a9v} zkzTgzL2M#NaI=T`*v+{xK9Ec^!I%jEM88`QF4&HA-ea@0W3!W1@0;6q;4)tf8X6!P z7C1$@-@po9377JbFGl7hN+YgiCDP`rJ3|Q-+f>RfD{R^&v?vbJkZux@&1?4%?Nt4& zL|v8S`+d9+M?{0EYr8E{)vJ;vtae`#iql&m}qY`j0&k%-%t9JIPbw1@8?=z zP89J0k`8qr!#>ZY)g@;h{jg0^fS3uIvTvsWc(+M5s;(Mf9$L%!x_wD(2^7i;eBS?4(ny*6dFm@1k%CO`5q*>sVd3#p{ol1U_D=Huyua@{{4hD#pS~7f*DIgk#c?`#pfgE zpGXZ4FpIe;tF~%uy~Qae9s+#Pu>L844W*PJ8BG@#EhQzi$(+N8;_jZX2pmQN*%89-JN3H=d(1ojq^xH% z@~rL?vT>6)JSJy3tfQ^CTmgYw!BLuex|RqUtQ|eCSx*^zgN7b1@gd@#8=XnOCHt?q zK>Hn)k${T5Y>*$Y4Bmh5|H+8`g(PcxNg zngnofAdDH(xtxVnKVGPUhp=}?Ojo)z_*k*YwJ6oL(OZXUf_;gSf(7_OKm$w}*&`bA z1-=2YIQNZfbqTw`j|9EY4N*gYhO<%nR!jQABje8sf>=3CkY1`HCi-rx_%KOFi)JA& zU!X6l ztGgQZQez?4y*2Yfq?t(=vss}wq7?n+>8a6speFDmlQC`oGTUi0hI2zZ1x!Tklm1-L zkA?YSh)VfSK|{?01&5;FvD}{jguY)f<2P{0JKakQNs2LT;EMg-RNC4i zBvQUPZCl?JY+^cIPPBtwxGP!&!ki%QyZ92dv0w}u19QAZl!RyAIA;WX26{Dncmqiy zx+uQOv`XBs;kCG5OKGtDoMQ%R#%oX`f{@&9bI^ulKw9{fy0ew4C@0(9QP0PTP9)pz zA1rP{2mQzJ)&iAV&UzN(r}zS!gxv1y#Y3vo$jT}v)hE56(y`S9TxN1;-qsVjwYWBp zlv9k24yB9b%XsI55oGyLjUiy{CezIh=|>GhM>l{-a1YKx=~5WSfZ?uY4~{QTrQiDv z1`BrU^Q<6@WvD5{E*NHxDHn>$V_mc}hJYA?%>4p+zX-Uu$S^N(dB%QUqrO$P6DB?; zqZ1*vwv?^^(1eyDEUzHFJdqT1!I) z!^JS06ebr5We&-nx0m>5uTmU#A@mQ=n z!cYFa)r?IcYT@=61y}}}4+Rl}Eyacgy5hLB=)waryOsM6Vk<>*?RHbcX12o`keko5 z@f$O+KYCGLF6f$$l@N|^hsq?ffG>v{Sqiaq_rjhkn+hh8zLp82K4St(Mod-oCA!hy z<^|4MwYJ}sH7)fsPMX|_{(P&tle{O z$`UR7n_tJ9>mv+$y6aR_8n;%dsb=x;sO;?1F!^+>N=%;bR>tHOzE}DVp8Da%2J9W$ zIZo@HmIC87FnJaH%)0pHjF`A|3NG$lF`j$fT(@|BwenFF#CF^k=pP@k`PTINy{f)p z*ikTCqFmPdD-~#9G)(yU;&})HGw<*CwN_e>3A*nPfj*Hxdd0l9ie7R(PhOGCiMbv> zo>pyB1>TpPO6Zp*8e1SHxpRBkjztUQ_rZn)z|91BpqB zwcD-ow?A_=k&XP>7Uf^Vy1BcS!hO88clCv}lHD(Rj^NQ}K;dr~$Pn&j_i!ueyJ$LW zEKbkFuD&mrDYIJh>d7Yt0d6=M916^#_$tAg3BL3iE&G$p?jjerrwmy7)r z-zs3UzI@HZT&Cb`%m!7C!Mpt4FDh9quzx8a~ zmIa-xjQiq&(gY<;LlU;Dcw3Ddhdts3`E)I?Gt2zL`iz>wp66*ceDjr>+Y!*UqWr#- z`+mMEehrJrtX0YG{>N@l&Ekw3_s?Hjl-B3xc1~AH;Pwobb^BBlo06|z@7PBg3h(m| z5PDdHdadzBNjbV@edhZ4+@Pl?)P=9wPeWNHd=2Rg%j7u85>zk^HzN|m;FHhN8V#bbLu^2&^fLsQNeUIqeeAOizPJRXsd|nWS3+`XrvWjV?&mG zxZ|s=_;L9Zh9emKLAD1f2B;cCjCQ~0%UI?{%92y0Zi*7sDlPPt7tM5mt?7*C56_vm?+^I$=b&mKWimFUE#9`w7^+lO#~+re zpfu`yYVgV2KwN%-T4ne!)mEc~s}f!{gE}Io5xkj76>?V_P#jBMxvN}<-b#=(WKl`%A}CQiz8Lo1^ z$iK*4vgv^RgP^Aj|Ch`_ZrB)yyGBsy`Qgl9w!9USn0CqH2hkv zF%De|xaRE&j82C)XSU^^Rn8ZAhd6RUj2fxXCozdb{ra(ai`38H#qth9bj{0)EQ22B zlCv#1x)JpBw_<)X^DbH8sfL{UNrv8n6$I0o0llLsUzCFga#;Hl9W!8YHNlw}({G6_ z)~0W8i!l*~%r4b+(o$()sbn8=lRkIAbZIV)>E$bR)mrr*u2gHXR*6jJvjH4EQw2Nt ztF~BpC&tsZHb^)KmBE#Ux)ui6L$Qz~^mBE`W_Mp1?HwHYs1xg(J*Xgi-MM8hiEA$( zteq)eP!Joj5pg*Htb-Fbyx&DUShMN_RUR0h-$4AbNCI|}0(Eo(8)7FLX zQ@A6WtEEpr=UWVq7d)QCxUB@T>oFcnK@XA(!o^)*j={m2pdnR_B^)VJnEL_IxUW~y(O?wYo zgnYk__itrmp)l4A>QFIESn@e=(_b>5ywBC?5^%U*waX9E=L`a4KLK>U zxBSisM0I^b5Oh~?momupat(nf?9}6VKN6Q5(0u^R~!0?6u;o?C%cp4+r9%Yi6w6 zZUtfng`hYaGEzLUY1+55jEYdU7?S&YBrRz&M4f^FvTSoPH$}eCJvxOF3p{j513+nr z1d<$1kowUK;rll9E}I}AiX4AE5D=Dk3-QrC^2tW7+??gWwC;9!9;GS;X0M;^Kg?hA zzOcj#I1V$zho?I}Kz5_%fRQKgx=(JBOd!pdt@Bo5UILO7M2gW4=nY_h7MEQVu{VJgX19gD6WI4_~LfpT$pQ0Dkl+W*v$(;(n~_-z+cA@`NgGL6Q4sfiKp z(&j>-xr=#RNT8H?a=NPgl~-bJC^M(pANhgwA)LjzHG7WG>BNwJ-!msTAaVe!py&p4 z*OE=Yg5aq$Hj&v}zR{lABLgSTUpo+X+tq`^5YpQyvt`~VDjD?{jn`@0l=%E7CN~0g z(~_e1AFB&!8&0kKj|(K4|9hG5oAZCU`FQ07`N2)x;LB;opb_8}R@!uM{W zKQ1r1R@|T>C>cpf@*HzU`t58;-)|eWF1o=ZsYx&U=3Hyfzeb-7+AKtsjzbBZF zLHagYX6#UM2bxp&?CN2vL6Se|*8WBOQ{K5VNi(wGEa>4Sou~XF=Vz>~+@maFaEu1l z1jxS~-aq;nIp8HApj;w1!-?s2p<^nI&=*I! zuvF8uQT7gnbxSZFt3-hvyV4Hf4ckz~lXlyYUnOl^oT!6vQ=cvbVTANuIl*P)fh18m z#*6R`t0m->zRRcS3?Z18Eb}Qo1;oa=v~n<5_>kS(1aMENiS35vCnlWWu1V5 zUgU80(w}dRc^}(`>x6iv zTS$)1o4U*WRMp*+Wa33uS6cZHoBzyF=5dS{Q}$&a0v)QZcrq;I{%DOCgM`XWwZJtJ z@nuj7Z+gN@3_QJu7pxP$hJb21Hvl5UVp7FDq^tftI@ zsM?>FSEE*KY|&t@WR_J?Rs(mn7skI656{6R9$(QE=~E=AMYXg8Lz@ZLrFJ;8ktDQh=>WeVLF#K@($Qzqv~u(J5| z`Y+<2^3Lsh58h#6bV(_f)c4>OWh@(o*h}-g61CHOZQqj>AIrAGMaXuyG=-7yN7WJx zb`0RoGZ%&+`N8X~`8YfNi;)D+sWez0DbhKKL8nY)SAce!CnUQ>k{bJyIm{V=P}YHX zCYTKfADk}vgCeWM6bjOrX1+tjE9)x-AewiZW0}hQZcT(&Nq&&wB9xPM22H_A+dQrW zcuG43ZDaU2CE}{I8)7)4cmm0G_Yt`J0N)yQ{zp=34ao|MYTA`t3~c9|80HX_6Tj#* znTT5HQ;M9s5QfQuq^bNB=sXc4A*?;hTmsfH~ZLzuhg)kvKxB9^rdDe#pecww|%s;$$ z(SJ|yA2j#!FEPW|)-rKJ%P8wQX5GM?1bi#C)uFxeRV0g%YBUQC2o!JN zL=xb*fF&OZn}jJbPO(}hfZL=C%xF631J4X-7RR!tYpCG-p@oDd;WCK8Mxl<-SXrZY5OOD(- zpJD%KGI_TMAACk=a^MS5)6UsSUN@}%P+#w_@B#ma`D;Grf0E|=p3rV=Y^=N^FQXvG zpej8#r!*&{KtHkUHv5%H(PL7nYMEM=VdcQoSh){jq##<&4i#zSaHQ&<8Pt@>bQuh! z?Sj?jqdkhdzpcK$55@Se2Lkd@j`%SY;UYN_Q74JomY4dwm0@&HJG|1Ff0)1K?^0A{ zYHXbSbzs1FTBp|7qNWftS64kFJ6AU^H#Iv)%d`xn$OAnWHC7G$ebuQ&PbsX`Wh`8I z5&jKX2~0*SRu&Nvp(`mZ6`sSHKHLjCRikF4nVgo>nqSp&hQC&qo{^)On1iT>&MrsB zJpgByZ-$O407Gawre~N0<)ac15)z=|Xd+f)qHg0Bs-Wkf=AddKZ=u&9(`nE~vTRQX zQPs6nv~3FXu#~M!p`53-kRr~9WuJ_ZFBvGWyaL&q5>_+k37&-lE!!N4*_p0Zr=WwR s5CbPe^P-|4C=@MG7yvmakC`$U4)PYzh`WW5jKdNVIR*zYdr4RNA9nceW3nT{AVis%Nj- zy$1jg01)7Rz*+zRxVHKKVgUM||6nI=b?(O)o|bJv8A&Y|y(oF-GXG!B|D1dF6|a@u zAzR|k7d6BUpadG87hcvb+YXLbBC{>oK@+bAPGc0XmZ2N9suZq*O`O~AkFUy57)6Al zlw}J(Gb~6_t1xPmad#Ar@3zs$iUQL0&*<}jIM`Xt==FCZWJVqortut8+`RFR{*1>* z)+h;IFukqrT$Q*_t_b`7NY=_D#U8W){(KVl3G)&eGJAr@%ss%9y0we z8@#Zju&U9B#yDe-b&|EQ^O5pH_eBTKkjN%MWtBXH2Y_Zhu!Cw6W+pzgQQN;!N)m$ zAye$yN`MeN&`6rHJhVLhI^r~2V9~n8`5AG{2TzYCo$S{1c{d(c19AI-uYkbJjWllY z7yEO7{|@^7sdl$a=&RA(H9K2U*p!4aN;jsb4cJJN!_=catiVt0sSJu$b`ENIe*)DG zp|_1JB14QA*0?fDFG3TDGfb046kh5!8^1MOq(6&06$|3J*kh1o+{U za{TF!WonpV+QDOtzCWXq91&lWh=Da1h6Tl9j3288aQL(*h4IrO&IQACbUXB;aG@Ji z^JsiVuWo_~lV0Ob%H{lLQaE=fN9dQ!d|ol-t;YV%kKkbyO@b@$(qjM)JCVrz;E)2* zDhcwZrY8r{jH)4TY%?6b0nbI0C{`0TeMjc#f-b_h;mxA6y_9CJ}|(vMI-#GaSAi1oSMUEB8%C+5JBGHsLVnTz|u21zF-SQE- z`uPC$<9p1NU^|guCZFj&BGcV!`;g zuRzKDnEdu+1NnVT(L0m`csw*9uHN^tCIF!foXz+InIdVh16KS9_{5`932At21Sfs) zF&=_Yr9zf2P|enN#Tq=$fXa6^0v(ta?}w^-?C=E!C=S6)-s4d9ERpB=`q^Qq`niZ5 zUsgx^JzZ|!?QQ{m_I>DM*Y?6Oz>X~{8{sT8A#G+TbVy#gdCzJAg?)WOl&sa>6rkge zrmqSCiV=;hLzgP?vp;|6AqyFFZYerIgaAAFTz?UME+Pr~PR+<;*#Mq=CeqQ!pX&MjSk)T(f~naOpU6H{%JigXYWut%+Z; zt9g1^q_&>i%;U_OVn9&S>zMjE9e$_U?s%+gsH&{J_aG0+3S87N&3Vb}ER`eyf{K#T zv8ba)u#p53=#aj-OVxP2s|g!tr_}7=~tA;5Rk^Jo09rd7pE{vFD-`_I5zu50V%dbZEGDO&m7edJHaYv^ER3l=d zc&_^MQn#b^*9Ds#3^p*<@R_-CIjATqvha=$s4&v1VoSdeC8qadh=jp%*Az>0O0Yt`ZI42%b}HXaCqwg0;K-tDVl*g`*{NRL!e-ZdC8Neb2+`Zw?LX(f4kMGO zk-2pRzd%I(?sUNfTpD(XQDdB5fsI$k;F}(SkNIJCU)X$0U*5n?^#PTY>0h)FOC2** zA{{guGhb=q_-kMlxQpJ0W~qq{gO4-{L3!VG6vn5^-E2g>>ENPpt+ZGAvwEpQaH4|e z3*8X%np_$vvp7-Le+iLR6?);C4T@1LDcG8>aE-^Vm3zDE`cwlJ*)zX@RZ@7#B!1w^ z6&_g2e1o}Lr>7cwdx@r>Vp!Q{8D&Q=1!f?i*C{7VjlhOUxJ=x5$z4fdDlg#owl7ed zoG5TfF63(_1La*+JpuPIfjj9teTJKE)=)iiRAL^9w@@|u&uLMEUEFw!87)0e49{# zyJb=7f^dIr19tD&@5d2@uKsNKXYe^q6&t*5Y+xSqcBDeI$z={~d0ggMZA!%|l#?{R^? zK6a?Zlp=o!Ep!uS3%&BV(N=)(O)0*)$mZBVptg0DM1sTP77 z(cuoVIxOwk$F8fnHMh#9jC(rzsZZ{OtEAlSOs$-RI{GSpVm3ms0-}U*kTV*5-*?@* z^E972(lKh!{6SVUSZhDR%=Nj9QRYOOMAKb!V)B%Gs^m9X)GdWdX}}4l9~r~9y4N-? z&VTW9c|YLyeS44E0wiYA@HuTJnNR!xl$G2-?Y8PBc!<+>#}OyRr&v<<$ksRc6%VmR z`UD)+rVj?=p2B8Fht&{SdreQZd?hGfzl0UQuamlNACx6s1l&0t|hR(Rd?YdoUmJr(6u zvfz6RSxIQEa5`N?z~@H2A>wv3t;R}{Yw5(UFHPza^Tj=dJ(CEC-&J?R^jtIy{4COu zM*Zm7?gT?(mZVNqQ3^oj+IcWGq3einj<-wPftrOj9@I@9r*DGtBC<>q)g7B>3y*vc zJgtO9C(a{5Hg+09s|C>*hUX%2{=f-#@q4Hi1ionZtzC{nw^l#FvuQlz4Xc=FH7Fml z(Y$dygl0_mnHCCdj1Zz}s>r!8m|AWIqq7vM9P(n!rABeIDO-f>Nox}Y#gJjxqYrX~R)U02pu%Q357*OmnxTtwZ!lm>J0V^P z=PW|Zx=lJzcbH|huMNNEz|*66602_*R5g|j3H88JgU+PMHy`ZMoDGlm$3^_*d!6h( zHeqEKa(EzUK&?eBSOcz%%WM)@F>EPScYFGe=)l+6bvK5w;U6L8v0l2;`&2eQw5D<= z^Vlh$y9Y?GhvTW8FwCu}+mECUh+5K|&l`&!(#x;2mtEP)o2UmK&Ay6k{j?0c!clat zCLVFgKfkYQzVTYz%l|cWG40(c|I<7HtuKThqO5cr4#42Of z_=sJEfj~$L50!3C$$TGcKBs5#02}?Z?&dL$FB?Hainv#>8<2m;Wj+rfAan;U72i47 zx+imle>1=NpHTUSKL9&fu5^jU`ImZkj870kX@jwPE9v$+JC9D6(n#3+v4so_0)hw_ z5{dT6M}yR}u&Qi+N%awTet+y8f~IZK2&CR5EcTXln!{6abuErVc)#fQ;{(k-QL|0A zU{vMBWVt&{oV>I>;|Guihcd24vDxd#mZhjoS;n5a9#eb(b?gntoO4To7r^0+vmRJI znMjGk+UrAT)4pBqb^IS+iHT0bKa^IW;IfEnIHvEbSfC=&avmr=MglT z4kjGHSO`EWKG|bZ7@Dj}Bni7wA@AXVPfi# zx&@z9wD6#KVfGu6ORo+-IY()IVE}(RiV(*T*>Qc_V|r2%ufMc))IGbYS!%JLTck*= zxUTfk?#TvU^5Mj9$$q2U=76N;tWetO9_Vs?uM%z$$QFub_rS6ZUj;iWzSB4~jSqBkKX~}EZ9SYe{%qhC5 z_LJPvl(j-RtE?Lz3r5w&SveHg)BtH1f?s)cDi^7wOUbD?l?dqs24c7X#opUpd%09b zMlQ~HkmzpJv71ODyh>FPuedepeC1LMoymab9T4yNJTxCMoZSyZ@3=WU1T6jYFF-P&b-WfWCr6bOQb;7yWX9mi1TFF>@Cu)XP4hR7w5 z%b+*LM;31iN7e-OFeFcA;6ye?Yw$iJeh%c$k#$b>5AR9J79Wip|I(UtW)$#Tp?8(+ zVS7E;YBID|SiWkV9n zxH!2{iF7-ezmqtn7W*3AVbsLbW@dsbLAA6`l`8Z80F+APM7n)2?}@(Va2La=D9C%; z$!nc|1i35t=2d(EZzHRFzf5dYl@@#kiX0`l7HXEXomU{Ff1yN`u16K0Dq<-W?+BDT z`XpcluiyGX?qhZ4S$8cow-1SF##ip=^NIBy0320wO3o@`-d-xFay@PW3E6e2g>gI% zmP1r>#`y#S(%ulPTxt8&QG2%(RY%?$;_GheamHDRwR^=tveS6UX1rj`MhIkT3xJd{ zv|Vf33~|*h=NDY1h_>4qI`b*GYNM>t^3}WbecEQa{f0fxS95Y>RRX(^cQW<@nB6 zAO#B*_f^X2CI5K(T{IJ5y6_PY>5ra}Y1x7NM;)Fm0lLOT#~f5e9ecfy;<<@!N&whQ zEBlu*;nw_<7pz^kx=whhHqzk*Di|5t!sJP)YIn7*yFNi1dhtG`WYhE~M@_2x`t0+p zNeWd-EPD$P-n1$ftO^UlH{emc7r@eaQ-*JgQt2J9Iq} z8p_~?-_{YI%>4?jO=;Alh!@7nOQmU6WYE_KyHs$}R=``$& zJVZZ;1hVz3v|L{Xd?pg|?7W$zn>iC_SaC zwuM(VEEFh|_Mq_!Evyuo3X?L4;hR1eZ{&n+j48u-5ui=w{IGWn*sz8BQJ;oe-D3*y z6R5UzE6)(RT2Ijvy&ih! zmHtlE;@7zdCFiy*2TKTJ!w)@99ByzYO->wtc);gfYi>k+==;O{NK)yu20o(ZvAOZO z;+!*niynOI#eG|n&1QO}JItAdzvy*;9+d%^<=^nY&bMbr5dLm!J_G7qgPw>_IcX#Y;{J0-_&Ge+6wkZdSw^>dgdCMn)DC@IGq2Esfl|fw ztB32Yj!fb$0SI_KqEQ%v#yPmd-o;o8Usd&OYG2hs5YpVFuYu!6^Xwh;&9^AbQpMf0 z7z3B%U`dc`fGn#?B3rguD44yXW?z1VewNQqp%|#zBU9X@Wx-8YVts*0OmqS-jWaP1 zQl-YHISHKmM+EhKzdeeI z=cK&<;DohYC#+i3Ohu_d+b!cQkvFTXiuJkLa?W-JF9q9WMoK$!Ulr5-8#N)gvrt)+ zNxXQ}Ha@v~srj9)bihnhy*;Tgr@nlMtDlPXTvq+&Nr7$U$~}7u_ej^RxGC3J zb5={|u>W4b;F@ zAYBK+6g~L=AF4+ky_J9(Sg+{aU#Ip5vgz@RvZ2ehp>l0D{h)~nQ?t{((5xHL{aiRl zABnf|y;u8M>o$yRK2}RTJFo6?S1Rx=XMplz6YHyV?%EOP`h=+Z;Ha4THHKNkyw(0P zUC43uNB#~90)0m6L{hM<1rY77kaXca!%Q_3j1IP)kg@{ z@g(t2tf)W_kL`?gar7N(sAv$Y<)umSd*uGkjsg@K3L zt@qEzH@FtnL1gsUTt26>5RHE;d{L*pXVj>@Z}f}x+s_R zTz3DF<(tg|KEt)U=~y?s7`NwiY=S2APB@r2RP=sV=-9PqvAn67six(psG~e@mQ^|< zMrh*QqmA|#|LUXYl798L8p=!|eNaF*2>++TZ9I<)T)jDx!7~cO{Gh0Y&`0v{Pg?qM+Jh$v11AqYY~fZ)e!fUxVqjqCuvJ_H>4cHBS&=^n0IS;`z-BNsfdeqvn){o2X8%pMhn;CK zLY!c@S}k%s}))IH9jYxi2M9J^Vg2BgCq;ouT_6rX|Ty#DgoP@_5hsMq2G{HUNZ zq!6Igw*EMSv#eV_CCU*{^0Z0)w2>FOZ9NM5HFfBA?`~JvD*CW}D&Pyn@Tyy&VPQA3 zd8HThN&qRQl0~lug!AMPW$gX&h@I>z<57xfo(Bm?km^$pKT%~;+ru&aO&F4$y*h6v z!tCv`9JP8rlW6vIJ@I`x(2L6PPL3`2VLeC)0bL(174Xxw%Y;8LK27Wuew9c6*f3Sz z9r}?(71rIX5!R6)FME|8eL`~mzoEi@{@;M{{p~t#{x@`Ne?8#8AuiPYZ1RuCCJog7 z+L**x#vZ;S2Kz7PKL@b`008+fpNZffh>T5~j2tcOoh|HaiMR-eR4q*02t4du90|ni z?98l92!tIiTulfJ?CqV1p#I$ghvgqb=uoQC=v+FD#}0iMWRr=^M7T>$|ecXSc>LZZN3=-{oQK!VY4z>g0irp89k z%E~-6+${}EM7__RmlqLoiF?OHlAV5c_zO%2f||ujx1^`#ypEplNv8|!?j=;|Z*GZN z49!vXo7;C-&3JCLwJa;EWwfsZm(8)}ymLp|g^CirkY-z%RBw{orBPr9y;9AsKfXnJ z6^P|XB{5IX^6Tm^$pAN3zXsfKZ+iw$7bb#bVyd+V#%r-Gl^oy4U-?&J*E%bk9f*v0 zCP-v%12J_VCa4Tn<qeE;UCwo<0Bd!lT_+pHOt%~mySB=nAi}iTW9l>mmzaKw)0*kFveaW`w%_g z{Powa#!@lvJMH=J?MZiu89=P_2_ z`WJW5H2O{us!4L+9J*4$M_RyJS_p@_(bqN)ODGiIKw=cU$G0-nu1Nnu`NjjBiGeu~ z>vi%AP(o3>@)|ppq^J$@k0>3 zSMy8c2>vRYM@{ky-Pk<%)fQWz6Gs_l2`)&%Rx+(k@JG^eMV>+kXo!!ZsIVf!eM!8?{%3A4vqJFmaMOK?+EY}nBiJLchDoR|1qyD#IG8#| zk}&a+lM;1N>6D%R%fKvZ>_`RB$;Roy$qh;>m9(H*|KlhMBu>D==x8P#c&It6li1P; zPlo%bph#gl*ksirDSp%nZHVRZhOmm546=jloo!-J!PNf6=aG5EYg|l$qlsvEz6c1L zLvh8DU~u=M9Z#}4jETvkldy|6yH^!^XeyoaF@-A`HiKyV$-H;^((cB5sp{p@Gj^eh4*$1&$L?EX;4Ii2C zH+gisg7qC={MGlfjK`i@Euh5U3ocYW7aNkl4#*a@XIL%-_=3G2InL z;x6TO3XhJgNKIxU*=Z_6m!H%Ue3D;eE{%C`2jjm5UlD?)>L1{!b~u-!T}0WgzHshb zp^n!gZP#(mZE+)fb6}(Kl1M`>xt2WjpxAbm3vaQcQj!P-irNHWhJs0p7z{&c)&RH| ztSb?=Of*?w)wAvP`GrMX$OnZ<(I=BNJEGzCQI1OcF0NUlr<7W$>qj!)&n~|t^Yzi& zsPlZt!M095T?un-KX%-?goSFi&DtUb_Iua#ARFP#S06Pe}G?YAY`bA)gHq1SEidbZHvCY;O9V_`)NZ8WD&~+Cw z?9LXS*S5e)pB{bsi<5wN)9uK7?b;7AVon6y@dSxmTjHyh6?J4N9zx`gg9HiQ^U<7} z(3n%>`uEv}U-YT#Xi%$bz|p8k&}5>xRcUI(DJ2ZHM|x!G@fXf1izQ1}QWC>nKS(fZ zf%XTO&%YfFV19B*ie7++S7soC2&c6&LZT5ruN>o1;Te0Njc;OdT|Vcd=EWmEHTgI! zQr_h-)V3d`L<_yH$eDLK+$RoHOg>n)T+cVtK6x|My~1~XuPJa#q}_NS#6P3Bw%*W= zZ*lh%X3Nsc2$VTtBFMOrwZ0Y|vtc)x^h;DUc`aIxI+mg>M95Cyr}Hhl@&rB~fUQ*{ zzhMpTZAdwIz?AANWsU{~^Fjq0#VdW19xi@oXEGNeh;2GN_qf)gc>WcVn2X zB$aCtcdOc3J}dfd*KoD;i*(FNPM0flr6>9>j=9hS`kaRYH^HxEfw zC`nPUP*Jc{FfvIlZ5WsZm4J4XatdicpkzhGsH7++XvzG_0cJ%hCdDWe$$L~JDM>{q zXi1dMoFJ6@2b9M~sCgHZN2q&#V^7n}SV3RJ_^iZIdCmBwymZBC@Kys03IzI+5?HNP zMh0t>q7vAV>VWnv*S{h!pVZ6k-%F5M{A1{906?i<|DwO({A(cpUTU+=`RK0r0ri;9!uC(OrHbzm^8rbuq&_opU^U>77>q+erw?rH%&Ieuhb-3BAJF>1l z6{1HAMl<&rvI|UX;^7sVck*`%!hGZKJgMFRJ+E4P>`cYsNaqtNJPxc;gC(S=yF4Dg zzmK~ms+QKR&rV1!m?glk%8Gr~j`jX$PrZVe?;byMKes%!qRvtOP)~2Rq|md*9oi zj17!f&d%hWmp!Qg{aLqDq&sVBFy0qraC2i2U-g#+TiCWmU=@rt`fQ*zMiK_jFVOof z%^`sx)g(G&Mj{#JlZtSSD3bD+KqC=A_n9=yKtj)f9~?c)foAMP4_Uj0#tDl`oivtAbk|I>3&0pfIHNf^J6eC;q2DNV)IY+z$p(v)PYz9Wjn1Bl0mmO9d?H7g zF@YHZsQ?H=(b~!o*KwNP(sIZ32s4bxa|Jp>cstC@DR@#(s-9cR7EpbcS zaMTZ$UX(Fr=8^*__`HPEuf8 z$a4t737GP>Y?I&@8YX;***t`*A{D)Ly#Am^5*VbAhp*9g-*fU6mSG{Xa6W#9Lgshw zFdZ2F!<*LE%WsRZZDomN*KW(P%#MunA-a7?vpHLviYKCOZh9jstYBb-hn^Mh@ zr7j$Nyc^_fd5lC;Sz!U3rpf&K7~m8utkNm8%_4-@vI96e>Q#O*JSj5NLV~b_9cbF9zIHclFkv*-26WJv#wrWN@*d*n%475DyupCP$FpBiU=d!K zjRm${HPb(}F<`EV{3oFrUGTbbhpz6ZaoI_YXWQ8FcxJ>(Ve5TkY-g7SQBbv zpIC6_8VIPoznRMPr0>nKEH7Hbk})wH*>3}vyil#PM2(ceOpzJ75%$S28-f$!1M5sK z=yt6`#X-|pBu?97$C#Vgj9G>ZCPPR|_!|uRR^(On8pEad71`a67YX2nCG@{4;lx@_Ae|VK(p2<-+6hYBj zxt?krAxbblec>BCHo7_aD>T;}MCpRw!_6v5T`WLB>E%iKgTkv5tk9fQVW2UK9Z@z~ z2r97~V9evuIH8R9ukn!QECuS?xZmL4Tk=@~*gcJy?AG43Vd}ro?dhdB)$oAjor#!& z8bB{>qQcNzT4Oe|>vl3Ik-9!!i5l<0L?Ldj6Mz_RhQnF5>%uH!i~%|Lgdi!%mhPzx zigqws@=8WAh$XSHTu|gXa&$Zra+V7MtP1q!CNlNR-$t70SBf)%!cj9|!wuw(nqt{x zVZv8aGAEhvUQ_Yap?H&m=Ib%}(18vnHa4;T65o`;NQaL@rRwy{uU>keN_&4h%@Zv} zQAsCTdZOR*Xz$)lMNAhZ+O^;dL(kf7B~vzjRcyZ(ls$6Rm@W`Xoi*ykkBJI^>N0lW z7pYC1i0sTa@E2;eo(7z@oetEJ#DlJ_K?;{Vh=-!_(T7VwiLr3{dD;sYYp_Jw{bTT% zABgA*46Zrr2;U^Bqy(wK;vZC(AS&tzeGsJ|zoXL-AK)Gj;bUE=!o(7gb3TU*!bws* z*ywM`b3J=2epTMUj}jwI<6=eq1_Kxza7rq5oQ&B1w)3>`UWADQ;fvRVKY|E1yQmeFy?b?Sg}L zA;~Ra6dxbj!hs|P8KXzIQ^kw~Yrssm4LDZA=K zka;w^pBVsdmxIP7D>xI)iI>3v7;s>u?$q9arN;`t3zjg_pApD%C}7aJgLW)v;%YtS zHp-E?dyG*o1rufzwVj96->q^lHgml4iAD?><0y2|LtQA-?XYY(b1Yq6<^O(u)f)$h{=F3)nwh=6J2s*@wb2_~{H;i4whiy6O# znYbUpdos^yOKhS)GddgDOOV@%$*!dlJ$0BV6aJOjC7yzXAF6JJ+b&IeTWx=*c^$ry zG$uaPs)NbyucEJQ-yFQ>MaO==a}+6Zo_5^DmbmFy0=Wm~$_Nru;Z)?5uXJ)@H{@{^X(Z|wpXgGy7?0`MhX0NujI zc`NH5;MRIdC&hAeK&y9tSO%Cu=?CbCPD7)E-=w3464L3B`y+*gXP!4Uv@2o=oCfEO z-D5pdL`z{paS&u}i%(n9Xzuf3EmdxieDTrLa50a^(rHLpYB2ty4ANoCxTYMxI4gR&7ok|NH4I~f@RgdqY|fy7 zb88H_vF7^7fP0J9*Kg3^nA4n?+Q!%MD<=Ys=qE(ZCfM$f_!e7m zx=yB*5-y6G((RqGmwDkbCB#teBtrwqXGq(`fZ%w};oerXP7^c6u+S zS2Q|qr(w(4SohbdWtg2?m1Nwo(4Um>*E8PD*9EQ)vSN#}qvyoQmy`P%tbc`64oQ-}Pwq|n5&}?*YxV6$k zU(FP^C4;**ztI``30z6IBLa~_kLDYWx=ItzM%O#-1ESteV)aAc>>}XmV@q-2R&o*w zk4ChmDUkd6E5_}7Gb$x{CG4wZVLkElm%}=2qFV0{_%~$u;6Gu{i29F#IROA={}=r| z;Qni%|FnK4lacZFJ^!s7zmA^Ej!vjMnGNZ`?Eee*>>*`2J0&rM9qlA|c?Aay-lurc z;Z*?@$~F+S7(zjUM8Oj6<(rrTmF3?P*L>Vy4!bjuDqjE{51{RZk|B7WXAyYRD(40J zqYW$5mtJsiy9A&jEj;({SC^mPlU=BSG|+@NLtw@jN4BnzjXBb~ueRM?I<`Ys__jVx z-##CvYJ1OWS(XnMcW=)_-P9|hH9jpqKC3!PNp@oBwYe9UI$aH^H^v%936|Z(uSxqb z#&}{>6jtrmmQ~&Bwl%e-#S<$Op2?4xx8zaCVc95!YNqTZo2%u5n=+X59kJ2(jjV_= zFv;F_cc*K)Em$Q514|D;Lf0u#tlu?&!+@UQz^M6kEI?mWLO+P*?gB#vb}j)u86{9J z86xHiI0#WQRfT%)mrgAgr(skiHpwpZ@}E)~G4O(Rh{A2at$DrKkHz_8CwQM!g9GHw zwszN?Crk40knTugpO)Vy1ex`vEx1O2#1&F7{4Vr>m+4M_7xR+u$BSsrk5;R~a}Drw zN?xP%Kb#CqayRCM^_}7X4e=}*E^N-`E9-?MTJIGzBUnenxo~IgH}!nT{T9CCX1#dwUXh&u0I3lSZkT_sf3CJJo3QV?MwamXu7rs9Ktk{fDy9>9Ory7CnI4*R#5J54ihSr`7Fxx z5RO~zn|YLga$i4V_+nB)d_bmV*4jLEl)R9G^cB35py!LWFOpUK^NRSK$gx;miMFyE zlZpA@7xtCFqmEa_kzeB+1g!ToZE$B&QX6(Dbmqa*P6|yeMH&2h<#!FTke9u=HxPgX zUGqy3;%r<$o^x{3jjbh(SOlj{O!>Ifc+~x(f#HD zS!wJq3E_~^pvq1Xn`!Cu|7H9~?%7*va^~717EexV3#w8eCP}Ge zrIa?v8(?gi z%gA2ub}nsg?~g76NTDQa-^0bn-QeV6dvEly7-1mrPkT0c7z0;+OB~|zaVrpHlp~6hq>*%| zM9kE$tF7pdC&6{thXEw`BHuw;WP`=c0%RDOA})8_V_@F{gug{iyO*!rYhgLQ-wytIkZA zm341@*3*>aLPPF8Lg?CZyh?vw@cF8*%WD6`eA$=?S+=Wbam6cRKG<#TJlaarchwV& zQb^TQalbW(Js8vNPBCW%GTAluXUDjvpCyOHKrPHFB7w9o*GOZ=FvXTDf7OP!kc9+> zdP(3ORzypc_NS|uw8+fwS~2Dd4g{`V%j6a7`D_g6|@eDtB9MT+}+Yy&Up{S8B z8aZ-g2kum7g47ZRtx$-aP%+Vy{=@aqAIo_jHo_WYkkhh8_R7HFm#+CVqwf%4ijJsi zc(DMuRxSb|X;)T*5h|2Hd<kvSi z+7>lXM5Vl5f*{*!$o4^k*a$^sY95Ae1~+{Oxv3fWy%j*^k06Hd<{a7GLHlUWaq9w$ z0+!pB;fGH#e{P1Rw%=ejrglXry_WV{(&+si45h+aQb9^9iv8MT+2+?)UW$$|mAxE; z9SSRQCK(~KL-2^29zdU)*FE8hBEriJ!Nrnl32U_!(CrwZg3@8xDrkg=C(+ZP@DC^RAIAOXctaP~~hV=_|{tvPFsow~iyrgyvWll$s}66S4$ zU9dq$_JT{H_cpXjou4_t^R9=)Hppu+#V+u^w`IVZ4bCz%%sG)3H}{5vF?5%nt8MaP zG1(Oi(Z6Xo6#@6+@db`6wrE=Npdh|JV}7q~cf++eY+tsIAiO`(kKAr3!JVcuFYwR^Zp%V) zG&t%gGxOw6l(N#znrz)2wx7$-9jFsd#@4UhaClo-!RtO8au`Po7bhj|*ioinJE6kewz*7=7B_R) z`pY66zVG>}$X!C3>6ldQIr&F^3rhP7}O zjxW$7S8MRLGJHI?_F%A_#a*yeyx}X0#bLGeXIrDq*DfMK2@a!9(yuElK5Z7fAsgqVP#%BY%v6#0r8~%?kJKVDFZD7bB$PK zjBr2^MSa3TXvs!p2!_-)p>0vOwz4k-Qeqv1;;4XPxk%+VXiBBx33_q-Vke^)-``@2 zOwwqfI#|01hg+9f>~?0k2>Yc7g#tYJ(cL&EFBIJ4e7|^kp0%*uuAl#`tMhvB@bPUp zUPpXAXKkam;a}U>UfR~-(EU2y2r}qt@@ss*o%?3=t;09bI1$qS3VB6$$YGi&TenaW z+e|s)c1u%BT~VAL@q@k_LreT7DU@!QsImPdajMf#lsOn}WbQkbj$tjs(jci=oKC__ z%p-df^yGn$rA3`jsLe?;8LJdBx`O`1$I=>ukag4#Bv17~oY}TN6kNc#&`_}Z-6rzg zWw26EK$r14>4ZCW5KxVZsoY#lkVL1$?$Yp#Ow{_Dtt`rA7QgWb>$4khpnwup3uOvg zrxLB;M>%}UivKm%9B$Ya(9!%21tbM?r6eKp`GdQ+Q6gZpS;{L!bSG9?Cs)ZRQ+|9^ zQ92T`7L|ydmFxbntHHg>YQ35N+I08s)QS*}4=C>E*D?H9v*sdhM>MVzW4d~=sx246rV7%-Rva-E%!m5O?HbwQPrEx zz}0~lu|n|c95cQrFRDpb$<7INVf?KDddd2@l$X@7PM4hzU6I6Odza7ml-L&}=X%q| za#eM`WGyP+ab67N{tOZ5HwB+oeOL{&$Z%TR*Slc&jwDXi@w1=2z2@7ZaU=RwB7m&w zZSHd$%xi7;w9*76bt5)J_U2m$vloC)O22y$p`AonNGL0~5>0Z847a+Gv4<4m5sSTmZ7`X{dJDJp2?urPI zg5tD=rOBX{JFKYoC1#I>O!ksV4N?X>V1RWhNFYcX3)Ca8Bm0X6nNO?0EZ$HUw)I~^ zk>-KyPMF#(K&znf+Es7PVq}4&r4Idv;b$Zm^me36wc5CZzG2sT(@WNW`Xp?@GpR6q zfPm^Y;*FR(XlKEF2K{c1{E*-DfHp!qPX84iZ`D5rX#oIq)&3X#1^-`z_*b##Gt752 zr%04HE58w{UBm*K3XlJ{3+i9eKm4s&^%wQq=Pd*fGj4*Ns+-SL1n>a|21%I}2a(#4Fm zRo$zP=c|nyFFUnVlWsc=)$l9427$Q(pRComtE;#h-|ZN@zGvXJ3;gRC<%^5%($kn> zy=LsI4?U5#^&qo6@3$$lBD1iAnz?6; zzEAUu<7FA<)2Ww4(=Yzp8|S9dU)FLJ^4qp7!v_vNqi?g|SWFsjuMR)|B>qnmUjbA{({zoyT-*un?(P;Gf=loa z+#P~@aCdiich_LS-TmS&KjeSjs;{f&?95c}t?AvX*DNoeaqJ`n<*(wbSmzKTk;;vqi!`=l8_1+LWwZWxO)on#TfJr%5Rgw zFAnrx7vR*EIM`kL%QLoq!CSoFt49<-lPPP>s!poVHZlIq+w~oQpWr;nHA^N5(EFk! z2!^U$*pVyE3o*`xBjJ_B9k9dsn@Lp&osw-T(opa((=9r;><`oE0ps5EC77?|8cgMI zie-|)0m!mK%2QnMfi*%!NkM1C_{-$O&Al`~F`H@iPx#{lo{Vs13>P2dIfQ?(XUA04 zi`z*}L&Cmg_xa@|Bp&7wAALKJ0?xU?v!`{=pu_6!_bZLH{qZbRTPYcDx6jpj`ZLZ& z?j8J9H3$CsCyo`@>is42+q}Fn#74SOgsibBWV_VbVf9|a&W^n)M<6v9gN&vM3~tsR znvyW)VGVw8=~EX-1h_{kH`}Llr+Ma+j578&^C0khQcsBF>TfHgZ15qG+ArJ~vpwIrpXydJ=P zh$6|97_b*=VG2*oo$pGQEPS_rpfe|%0o#l#2B6UqibK^fp+OWOK6p&x4;2F1A}OH2 zR-VNlA=K|avhdDvrmAJX^KG`g$(vTr_>P%pd`-vDp$9slisx&P{9&97!%=hSxkxGB z4tlIIhy0D?3cr;xR76~8J5bbh?nGU-Bh^z7G^%P@s#P|&;Pz6#7AyHZs;YW((eQSyx~odBKqe&N91R5+AkSD=G&gKBRC0l`?D|4@__7{_D;~vi zU?Z1qz|BD_CPDvdr|X`pq~m8oh}R$z&ELV4N5wER=<-lZ!Ah;v9)^D!RZ%(qs{lWC z^@!l4M5s*Pw^}xN$1?LM%OJ$FW>RWCsm{;2dLQcoUZ4dLo%R6Gk?s<43`AI%D!}y)k$ClZNtx;Z})4n}c^qSZ{Z9n#1Oat# z_^f@1=tqJ540>3OVzFlkgtqyFnqH5VlGYGC(%b(u{sY(aj<^YVJZAL3HAHyAoHE)n zRJu}-T%Q>NnBFKUa7b#Rnqr)d5iUDRBVO3zZNw)8uc%J(jY91gRuo}H40dx#o|(f) zAoqP6t0;^nML=>kc=n-Y)Gr8k@ie@OyvgG5iEryMuXl?;-NvS~N7t((+k%!x*6#%M z3=1}kZqGmApVxF9n5h>y1-+YdZ(d1=fxnDVV7GFW%hnlMd*OBh)rhxFNb)J)CiM{< z*Wv!cceIRW;TNs|2=oi#S|Rj^nT&AR*w=65Cs|JbjbHd{jxWiqV@Qoy|anCbn`HcgxLLgrh9 zcn@D`z5AMrt|D9()>kx$D3{?dbFGq?ZR42qR|9A|r9T7Q8F6+D+tIR_i?-cQ7wr5q z{2pd4o`P#L;KBYbL!U2EjPMh|ut7k*|0NN8G-N*t+~?b;2SFES5F_ImqT_@jP4n0V z&6wpA9OtvqLaHIv0 z)zzJ7UF5s`@l$^XN4eP++|+!5=X1N>?UAjWhr{T{dC;M7%ewFU3PWrPOFU|aM^az^ zg>BOgY4{DtG=k@I+?m0K3Tk z(0Njg^9XR#p#5tCPo5EC*wj{!3?r;^pO;G|ecAoG9`e_Ke0&wV8tZgb#+yqJ#b4Q_ zB}ZOJzYGk~67F4PQF}m;(Q+X z0_f?G`iTLJr{qu)+`j;5AgJeJPoGaiQs@)GF#nH-Dt>ezd_GBw*eB?SP1`mcwws_F z@S!xSaWLUe?f=QAhj!VZeR${^EVan#TBbY=5rj*QFb)lKef*S^9PiW@Fekh7bl#@O ztQxNtu^d#i({ZWt7ibt*%s0><{d(Q~gZ(~#kP4*4MOMFN?VaAc0WH!1_8EX&d~E=; z%=J&i+`M8h5s$o#J4eTt2iMoF*P~svPR3h<7){ypvn9$EXzi$gb0YpjjJ8FB8>rV( z-mg))hd;(z1b8~R5{YLldl4lyJ=9m4c+Yst2)fM7$c0(~2IML0{mgs6^dghtF^jmI zd9liP9mkIwpg;VxvhtsQ284}x(cdj-Tw^|9@P6x@*O)N*&ie}doucAkf;D@F zfpD6OElsZ%(`?@~!kqe>@vK5!f2nNi+vgVxoCZ zJg(NSyasYyjJY{G7|oq0!qI?|UrTxlY^<1q+GF{3RjZ{mkd>6uAOWLktdE^ zyp7&)w0|1^!N;eL)TgH(3}=CVIc2$_vqCx!n>#*dT7H|8IHQ$hpKNym_m| zk5NbU2Gzf;Z9$t#=r-;bR5Wkk?w9#gRD@y|WK^!0!orO1N*f-3*JkTj>qcZHQN9kZ zWE_>=m#J5+o8HcwH+YygXo1~OmBA0S-3DvCE9GlwRoH9C#{^A+szUP{%Sms zPq${|T$z3vm2iD2VSRa78p@K7BsUDMqF_<>ys+%}wacXM1$RR*MPF_$rl(bcu}!G! zy4e$0kQdH&H070PZo~4R4&+W+3{IWs(VsdrUyFcH$hU&vvA&wSP0fk%n%?}1YCi;e zx@{ognN#f>6FQd2#W>(&hf$kMyN)5tGj=0XBUBc7S{Sq=7KANJ(^&ScPkz?CJP>{k z_7-)t=_aMfU$2{n(nE(DW$$F(BqV%KA!>@XDGkQ6bcHdb+XNXc56vJQy)n9FvTq8; zLMClkvw~IGiT~tbz0uvzq+Qk}*}qBxLgdaj7t6lOxBhN|cZ!f!UgG_f&D508d~uZor)=y!f9*B}RJIJQ_f7ud~)V|Zn@44AUC z0P;yB1=3~o#ajY26RGB{OR_pD?KueQUd3%wLS_+wJa#w~@OLB$I!&GLn#gM7;brGs zq0cVl;9zr){NJHuDtZ(#eMfyaS>G?1+tqgr-!7QzSe(s_H(F}d4!A%E9DDU-d!|LX zbdaDhaw#2!-o}OboH>3PoD`$*FkZn9t!%#VG2yn;#AhHqz$McXk`yD5CRHfJJFg74 zc#>{P)8br6b&`odIj6MPQz#Q(5=J>b`6aL62n(*(7qH^XZz!0oY7t1C>sRwcfh`gDa{tG)L$Rw-1DH3 z8^=bnXT&E`DVug!T`YaVc8pSsW|A*KP2OP#Lk0P$mqO@f#E@r@$V4}HAr^CwfiiUv zCd>1n@C5&@7Aa(5^DWVy3W54engkrMNwJC6%Rv?HeUVtSTti1Po;ZZEo#(=@>htj6 zp@2ao@HjA=qqU?pLM@ZHb=`R&A$sCR_>#UVg?b*HlNrGwDXCP+zU7{3%Q4T{RH(V| zV|fs$&%Ei2gH1p*w8IiH$MM1T*)8^CK}jGPoC0yVLz@nNZU7$~uT5BmWGB zhUgu{3p8QG9p952MI(?&NNHT896T8*s+>#Yn#3&Qeit8abQFvyRJng+0xQ5FwG&lE zl4+ZW&?oB&Ft+tG4=@;P?VaF=cb(zT3)YrVtWsPprk;Ext-Hg^B5zbU(~Ni}Tt60p z($CRbAR!lX>l+w2(=DZRzd1c4MTb%8BMM)4M(+#fZNbJUU!^+e-01rXTA+GWwwhsz z1{$WlBaeD=Y+Tooj-83a3QHBgIXusViDhl$xSCuzRxm&t`*0DmsW{MG?X(wdSA>#b zug*HS1^$je#{p6#(&j;7+ML_WN5^Q2xKmfV6y)m}QR1fd!|_DZjY!%7-SJ!;Uf|E2 zPR;?_S2nUUI-mW*z#hYLI70#U9y1Kk9KvrBG)~2e{$$U_{KnQ(>0dRGCDTaro{c+} z&Ms1wUh5S9`?xl+IUXPhYZ~#58vl6g=1$KpnwQ-5xA%AOxY{p3o z+M&BMvHmcXl?R_OdgeTB2tCdXtwe)j;ta<+6=@bATCoNIJE_j|9fefkZ=j~GnuALS zQ(~>PX^Rq@{#YhJ1?HBgKEtLlLAPJ79zX6?B=9Mq3zP5IAl_R^)_j}*XG3BDWL`ge z*dI?4a+!@lmew`2FSJOO!u*q&7yX6^zn<|RSSL=gKb!cRzqgdY(%>X@vI4S zvgX;e`-jz=0bne6&BSu><%Oqc3s+GK18m`d*EhKXD3xi7$@V5$nirYQ2U@@AH@_mLN<_#n{$cf{crFdVg8HNLAM7sFBRI|igkd*4u00kfp_<8E<;|PXIca^9;MM-FitDPdur4sJ zq?{RTnWvQ?jbM`0i$Y|3vORmL-%(bTf_5!UFn?)7W>%Qr?d=5Jgj@MZ)M?ph_EWs6 zA;-}o8L{LR#Hifhal@ppbqtKueH*~{*>h>E<2z+lAPr4JKgKiA^)d8zPsZsNfH(Mt zIYr0k96`z96Cuk$K+E$!YagQiQII|-7yU>BFr#rB3&q(bbE}hwOh%!u|E41Uv_9Zt zNkLujV{!q=I@Big#L&x6c|dMonZO};!6Qv?dC_EUiEfi&TB7P;ZQvy^ZKYh}Z_@1L z7Z3GA_Ja`XQ6Pf(1ul*vM*Kh{@Nnz`C_m23NLgD!Y=L)GZ1R{@{o7Ugr21C}08s@Y z9G$15Pplz;z)N=;NXpyZ;H)cwHQ9Zob~QQhmzJq@N^c4K`$=Q4`}Ohw@_eO@b9Ne-%{M;IEeE-n;VXGrgUeF)nP_l^0asdW%Q5B=+ z*^YzsIQ_0;ESdr5Kcj>)Uf5yOHbfNFvDSNbH2j$@<9(ng5-J#&fA7R$E7yceGWV77 z#Zql4i!8%k2C0tU9wWQ04 zM32TS1qS=WyV-(Mkudw6asLT8ncNE457JQ#P^&>{QrcFQp%i6N`RPxs7#Nv7Pr6wszSNHx_LHu99#s$eQQY$(5L z?p+EF0KyfRqOCoy%h+z{#$Vf&y7C3@c@-#c+M`S?EUkR^JyXs`?}%nLfe(qrZv0W; z5CltLXGU!8S2D8xNDCw15gaX$=^bZGbD&~r-2EmZn&9v|MR|+H|8X!^ZraC6b6p|k zZ;aX^=VCm#C9>Jl(;h?L>a-(MBwdk!s9T5+13gT~+;JFytHnsU^{*Wt}{ z?nkqKPRVUMGlK}oE${~;W7Ie(Itk;j8a#B7-dUhJ1uf#u2)iy-UrQr?b4^Iz=1Q}u z86!P4uf`-5g)u9YsAo^O#6t+kL@FKGt^&Go`}vc$>-Zk2#qpxo>}XvNn^Z}c9B=py zCnDb?6XI9S4Xz#lx>{&vDA;@qh+E7z#_c-t-`W$eeje?&b#&OOgKi9mA41% z-VLehuXm(9EER5cR*uOBO`aafwpN|jqzivGin74Mvp%d22t0@DY7^CSb<`LuL#b!9 zGCtYD!Y2RQ3$oGuxL%%_NASHYO6NMam9H1|&aKVwt(V*df0WzUxVAjHRjX9h|I`=W zQbPV|k(27uG@b1{aks6SkuINL+y+ygynn1)2`_erw9F|;A;603jIEo{?MrT-W>12a z4Q`CSh+@S*`X#t}fg!@1ym;^p8}FQLl>wrYE1R(lz8G0~Z-ZWElFDUoAnUj7vPLs;8jI^* z3M)URT?>U#E$tj6YgtLC!#mrW}{g?Fzxk34F3KDcRvqmmnk-uE^_I!qH z_5Z(qm~UR6lR~gxw1nZk#-I|fkd6XuP@pP`(qO;uAZ238~8_No|BKZLN&jppUzY_4AT+|1pjEhUcy-Z%$F#! zPqIX=_f;ek6Zqn)@Qbf3@&2X=oH5vcv}g*280HsmvH$S!ql84_CLVx#6yXJm-I7U5 ze_N3?#ShVX?GKd}6n%Rid5Akg@<;Od^wC$-rEDJRp798=Y6LX>Sqi`kKQ8kqokk&v zR7$m4;0(2)Lny34feC|08)RVwjft2~)KFYsX4M9%jTjWnV5JJ{FKRm3ocP8cbD6A> z@Moia^tdTQR`G49@>DHmU`*^~!*k_IHBytuaUw<1T<#Is8pEr(ed zdHH`|SlUB(6T>vg3Bnr|r72<(1D9P*l--5Lq#%hJNmRldvKChzFJ`zOs^Z#*`?6~$ zR77IQgN+#kqi;mwd_LuuBkE`lAPLwszpcy_s+=cKZ9uZ*zGjl!pbB zJaZda&8#ZlG7(%`$0>B%uIOXudLAeXd$m4JW)y4@@3kpS8%C{m#0037p%z{f7e9T0 ztmhhKJ2*c=L_rlzA~;#U<9+A&cf|9yT^D66En0tPgc$T9)v5)PYs-llU2>G5?3$sJ z%L@InieYg{dbEY1tHR^mv9rr(4AWG8l^p3at%ZtlN4Qr~I3-22lEUVt=)ZUvb4FV5 zh@Zm?_Pkvh$O-@7FfJCpVFK16O)K$*EcYiD2{~p!NT1AC1oqVZbM= za~k1-{o65}!*_g+eXP>3N%=zeKDGZRAFCtZ{;_&p=NkQ+9#t`y6eR5J@)cUPn4dq{hff^ z?Q48gGEFkc=ydV}&AV(%+ba@LN?MPnU-oZY9^&W>3eXdmc{{`my>$!0ls1`k@)D#e z9U0HzS8Eq^Uy+_fP9xf8+dzKBuI7>9FBeTx-58~-2Lb6E{|0mTCaShm__jAfeseSk zB))GYIkSA>VL|<8X(P0K6Ae>ld7@*phfTVWGXprj*?m1L{-+~%cfOi_6~h$sVy5e zn_L{`BnFg8foN*mqtLtxQv8AMM!oacO}vLv>@HGu^i_yTxx2P4{y}3h_d8k5REGFM zbLU|X<@Cz)U|t9G#X^Rhv~iT%`ovr_^<09TvM`md)m$MvAA_U53S1w~cs{J_)N|L!0cLv34(gdKrHyQ}U^=_n3u{~Z%1se#n3iQO1@k$1@da^-El zB725ak9+wq9BOaYz%177xI7IA-Bop^(TDsOW3sBSZ$-2bqe1 zkP0xu;3gUwvBFYJEVQZ#WleOXJRh2{!)xQfomZhZL+cVqs{f5TZ4B&A2NnPW*~Vct z$3gC*1Z~B|lwrmqPSfYiQ$64koNMFL<>1^V;!zb&E2yT-@RN7g6PL45)b4}A^^{@T za1ZqQ^4R{RROkeJ4i+@$!^F1F+J}7pSrzruL}pe{MPBg|Q{F8^AmndI_n`xv-~TlJ zgO3k_*cxjzVL%WkeH0*dnqA(20Tzn3P#B7GQQ82OBs(NvzRBTovu*8m(mI5iI$JW= z4~*x#zaRAGSAb3TX^RxbwB53v*2KiSMdvh4!Ck!aceX&VyiO`YA-nJ8k?Pv#J?S%Oc6V$AI9Qs}{X48Ig%m2mT{RJ#I=jHq^IU9fwKA z=b~?L{yLCXG3gVRrZNFRTz+Le&&1AHqVs_gS&+ZAw6H)44 zUPw(hcAA##GO=^P?1avb-Z8?BxI5s2KXP@-jMyUv$)lhP%bD=Iqk_|^A4k5D7j_Q{ zzUkVbjrJ?6&qNju4%&O+$~L-Zp%+e4cV>+gQe@&b+{3v)!h^~n`oft$ntKgF2NI-D zH+I2*$+N~h_dE)I9ICU+=4hMD7MLTIlHxynyaHcvV@02V|KW{%yd;T$4`81SEId_W z|KRAsG}$lc`hfJ~HW|FSopw%oePKr#>?RM4++?H$yDKCWQi3pEBbUinP0+#nsUA~M zi91!F3CWz2_#z*_`(13~650sgjr5A(jbw~%c*^(5P_{piT;=-#xQ}3rs>*50TUVO=Tb|1ruwSw`c85_624yeAU+(Y7jEu_<*K% zNGNUyp&yceeF2ClfXQ1P$FKm4Y7=c!YdAQyLz|?k&WeptuJ{&K8@e5QfRY@R>1=Pu z6xV~Y&eZ<>v8xNs+~0;)yW9mA2KlUqKojNy8|X)qf!gS1W~F9n`j$l61=0TtXQCgm z3CQ+Al74U!I$)1RV^TLF99PtD-7*%4zdq%J_L5WQJ7bpv24Vk->yWhG#aEq|x9x$_ zbiodF`e=|ey3a0I+Uj+KF6S~4+0m~LH=5s2o^LoguAmc4nn2VBl@DVg<=>@_Cq%D= z8M{u;21$)s$R;&F=ndP=DG-Ky;WvH2h!bjzA*I(76Zw?#s-2)_U_sZPvc@DCkZ%HB zLa$zgcvDDtpT9>L!*K9LgTb?$uAg!XuKSWhlIX|g^TQ>UNSVSte&`Ti`gZE?k`fBM zgQS930ru%B+jGNB8CU5uDEcEn6Z4j)#_eGrPowv=hy5bROdS&tP@%tAukp58&ea38 zIGMKmn43d3?vyo3*_^*CQ@CnHlLz{_uLP`XI0+2w|u`&U}_@KT61 z$yaTfJv%HGF%bqC{{e&Ft;IjR$*%EOlPn0ZR zblk>>yu1v(nF@?fQ9NuK2NGI|C!D^=D5SUr5~guMl(3DYHfUDJ1JYG^FlESbj4JA;V7bc(d(N|A#X)ui&%3JlpgXEUEzMK?sT z`V(xB6f6MU8h&~Me*)Qs+4*EjwWvkqTf`*&gq~9Q#(;QwF$S|gj8p;{S4&YRL@YTn z)h9}&OqwZjQAV2({phm%$iNdv4A;i`g~2#!rSv~z5-F(dr)_Es)TB3fC`9woRqVMz zn~+g#!!d%Eger^IY%yC_c?9A) zS2F3rLsXFtIWZThq{`{T)Xd|e^o1%3_q2ZQb%)m!8x^D-`RK#ecS3S`r%Kh?c_e>o zY}?h}IMnJQ^7^n`3=Zi#3@qgRt|0j6Jtt}OP#xn;M9L%CGZ2HUBfvm;o6$n`T0+D{ ztgd59*z5E1c@}OX_Ku7Z&;T2BTiO*_H?{6QfzRl-ujR+~bq? z;myvn2V*Jy6%S?!w5MqGn1CB{>k!$%Uvt#7r-r|cR8(kdu#N-~9jV;NjnI-A{LqxF_VC>f0|fvv3x##pN2{blC0f2QK>$XDSJ}Vimsm0ol_-VK-?t$(h0u+H+>; z9m#mJz^H>|*+I2*tfh~uUA^F3?3L-0%2YHrv1Mqwjiv=qDa^ORuR zt2-m~qh?j{`Kc0L;#JIK1wvXVt`X#go_U;LyM_eM0$>D-Su#1mpD+qmIYeN@5vVxD738Cak!iAuiVUcd0@e13 zq7T4W(P6-&o0*!9;^j05K}3FiN*N33wuvAb>3RQYs^DM)la8I`a7}*^D+dy};6@xW z(DO%C?R2tbj-+L=zj$^?%I2`q5^|4?~Z;59se6`&QwhgP8iv#+84xUe87Bd7uz#;snfzzV>I&!Radu?#b8 zmVXeQXtwRan$aDenR^Yg{S6$%=wsgumRIIx6Cdtq7biG4B8rF;{y1U|aCNAtFnAoo zht=_gsnaoezmESR?be@jL+RqXg|n-_wCm{86NOWPR+}}2cuL~X_PgaJZiM+b`%+hV z#3Pac;x%53YtdFiQBPXiCpoBAv30ru6dS<+O=f{@eibS(zsU(h|2#(EOtga|wTWUU z@!CR8mn%1grYH4-bPF6Sy~jxs?t`I+fK~z25Mb1t66(w}f)NX%)OSK9PgOOB*6!Ex zIq6_f*}VlHZd@CN_XrqacLftU2C_mm@6qc*91DVNi%Jn1Xs9u`gXLe*Kv~Ib$C)*r z(qcT2Ht2~ewKuN>vl7(lFVGpX$BHV4{M&GzY9HoaE!r#_q~DSjo9>IW6sC|4C&vwR z-`^q^Cp8tmSY?#h7>@$LPB!dYB$F%UZ33Fq@i){IlXGB&k|f>2K8)+@n*u*e0t=al2a3n5qBu0^)wV$crxq#HU&3wO0#Kn zcNal@rovKCp|aI>v4nmmpK)p`8;oSLE=pTs8TO(!dJAZB)7zi#*j=Ad4SzDG%-h3+ zO8qNgRhFEtfVQv)qZk!1A}y_ab7qy`kc1$Q)QWl}aHVKE&wVoCR9q&InKc}~M9ef2 zB^wOzqS*Rsr$nhzKoeVks1dLX)5qbYaw)TpIue``PRLXvc@qxkD)H5H*5POP z1tL+)G|IrDri4~+p#Wc3^-cF)Xpig?Wa39hwsO0rM<;TiA_ri99xN9YSPI&$iU)&< zve{J4DDH|$H|~jheU_F_vS8OU1cU#%2m%!wP! zi&6_sHdU2b<7B&j|D1{Z(7%vyM$mn`15}?`l%WbSiB0 zO4j&D7`->;l0L1|5WSGqqb4}=mp>UFE{K8-tOgO}>iR3#K90Ose$La8)eLAJnIXIY zS&ga!EpU9g%o;+2#W8^U^b_f(L6F!s)i{hJn%h8>=w8q>D}jmj)w=Y2Pq#ZK{LYF^ zo~Y?}0Bpzb5cpfgQByh>#K6vVz_haB*+JF9tF}VuEZUjTDBInO4iZVLsEf_Znr4O* z>)YmyooF@8m{28Au~UbFYDJF00W=me2Xb?MdARp^+xrWzc+lbKrpJQa=GTM!yZ=TN z!-E!yNo|SM<^2vW*Hy-6e1Bg!y23vvIiG>QqT!ylCR<`S6mw zb-y8kQhgQgUT>a^T%{nAJ|k`6?h%5kG^|aK|8WgDn{eZg6}c#nO2rI zkvZ$2T-F%Fa^ROJUASIRk-o<2&pN=`{-4T?ziSXCSrq$49I`iN{r3TR_B7QK{sWQzpsgs@{sI-hsk}ndyy=u3px6*9Q?~-F{S( z!)5F;uN>MI%IJvz2H)U9GPOMp#?-o_&G{onE+^ta=Iix5?pWA7Hb|8aNea2^+ zzp|o~!q`%kbDNv*s2Efww0#%Xg!NOnP|aY?_ic@0oB50Yr$x+>Ms|N| znCm$*eA)&5>ghGw?!Hi!x!i?`2{DjX6pEC zr#d8B!)!9e;lp?OmZD(Eq0SGj^6TJS20;R(6V)?Nw&TD4Oqwa)7j3UgV5?Dr8Q9O(imDF=AFbr3; z&^*`pFi+Ys5fM!52AR<`c_a7{4jCS#c(&)(DuB z45l0Ed88Nu@?9QU@irdz4i#nwE#aB}5jJ+QkoTW;GJ!abHlRj^s2 zV!UJEeUWA8MGW`Y9DPFzhbh6Ai7wv~uc^eB*gaftp4)`mlr!Jlj2#KPP7n2DezL#8 z@?ZkfWCdQ4ZF)f;u4!O=#0%gu#OlYv#-V@RV>$aRQ$83+*uDxRoZzm|7zBmcNO7ig zpVII1c?61r?*lvVjsK8ZHP8AK;8866DZ+ZXvLdD0#qQ0J7{6?OV;~OsC4*=D=Jx^a z5T|ZHP9Ln$rs691V#fyza&0bgdnX&+av|Ww*VvSqgOI9xP~jNyFV-aFIRgZq>L)X- z0L|fDDPt?>bRWeYypZATxkHFUvJ8C(+8g1@=M64Ru!DLo0=naf&s3so?{yF z_W9#%_c}1SqaE*f#fq7MilRftbs75?s_KF$R#M?NCSH`(nPp;E`NTrdIqZ@K-)r$i zQy;*(ye$bNSU%*Sl157l%Teyc8xM zZXNn20g+fo8RyJ9p(N&4i~%WbtqL#)^u|xH8NVqCiG9;6e()}J8u7fPGcJ$e2{2<9 z`0W5_XcILJB|V@=O$)^>69sJcn2DFjk9Z%<^DHGge$){wc!1GD2pLFO2U3I^@|Ywc zo&hOcoWN~m+LPJA3ZI>YIlP-PvLV-pDjKf^FmH8P>cvJLZJfP?+;$_5aI6d*JA~_c zO&NR?V==a8zNqt>R@@H#x@^Up4r{x&g6g%Wrc5H*#+-#^6=9<(0cvnYFW1;`$^z@| z-?9hIl4{SvzEI2gi;+5t0Y%${UcSfsPO+S5rSpR}HSkWy{9Fs!Ay1}{;`=^P8bBCx z_dE6(JWG?8#c$BSkv$}orx`-`MbMfkn|Q#-<)l3a>^`{V#bJ$qigEKO0La$UJ(AP1 zD0%P(b~@JYKR2+ln6#|s6AFyH5X z@8J&*gGK6J5>IR&v{u%bbojg!1ExwA#4DQKKdO%+&;+utU-^ots8(_zFIHa*;;^VV zZ*dSV`GUYv?&X;@%^(y{C4t2D@YhGAF@Yn9E65pP+>vJ-p2Zn5R>-Qi$iQ>?fRaqs zQggn>bZZu*WXe0f3C6UN4O4Agg`AJO-l~G(Wj(AiIl8p$?n4XSWY<;J;q5q^qA# z9VND8uGsG64jInbqZ&xJBqo_1n0_r$a~I2di)~{iZ+Db7U6*caH{7~vU?bo5xNB*@ z4_p{uvjlIceuK|YyP7efpKZoGxFEgzMOV*LxrdpG9#2N>Z}-a_Q9SM3Pg@^!C7NT{y`cfOTYM=1Q@Kq6{dxjK949Is$ zoRIoW2EV+UFrdclGFZDX>-uY}qNCDP+;35ZF+O}qQDq=d6Dx~)m|udmX$33%6)Fg4 z=wyD#us2jA#W46dVVHLEyNuRB(tdxaDv(r+F3B4-8m53UAj5!b$CfKF6{uffz`>iz zQi#FuqHbx+x&tP%95d!oJ+csVFWOlu<#7k8e&7!HR=ky`xeOYS&TlOkZYa#B>&;a6 z=t=&h3?zQ`cbRPr+)KieDcIHUS#(6U;3>V=)^5LOR7^Fz@4o8mU89j8II6_ z&8R&&{AGRg8dm3>))wyxp$_|y2HCG(fUGL4aQNrYT^8(zEpSbf!VqUzl zc-zBxN-^obMfs}Pt0kp?7UA~qn$2K@76Io|r`I@tK#Nl7XxdL&5T2#0QohzGh5}@N z!V=Cy_S}&RY2S65u2w!GoClru&+Igo2M6k0LTx zV+8AKNB&t|U_q{k%XE7Zc%XQEc7AA7L%x|*i8&mmz8z^Rh|fB8M_9&=KjBI!l)tZ` zXYPTA>xD4toq)`7R5(n9Tyu^fw6FGGc_9ds;~%1{%&H#|6z=~H-0RFyZqZL}GH&rx zRLPo}nNm2Vt$BW;1&@-FA%BT7(v4)4hreZgr> z2?%@PzEXu^%6HtnTYI>?$!Lwh4Rh_^0D*Jc^pApd zAg{9%xf|^nGCXf#SHkMyc%8%1ar^OBqUSCI!kd1ajbufqH1~JOtP^E=m=xmSL!l{o zV|Ean3TzDwX2qpvkMalv!@3{R#uB&&FPb*|TMmE2n@z@WL2 zQt!>%oKH|JRLuxyRH0KDd$#3@V+l)v;UR6zez9rG309wVtabjm>pEbWQpAqE z;&VBQ;rt~@pWcme2_>6NYDFcefV|P-madw)ZiXWz79bPy5s}>mzoB*tAA{t&c;!q* zuCj3zpOdCrC4kNX1K{iGB){k-`Zis2g=HHtADN5N3wzA1G2O$)^V>cPj-hdf1M=^0 zrrFUiWdXQotBST{{kjwQB=~0LxzX;GFRfYwv`x$;Jz2Y2Hhw)1(gEGqh8m>ipGN0z zkId3^dVX&esJuF^zE8b3`J{4Gb~TQE9apl|&gfeEPqbrMFDm?GJoS7aYZkvjX1qJ| zCbBg@7)N^NH_G(%X>V;VyqhoI)3&ATAyevsR2#H9CDd5> zCmV_uD~r3JPVljX2D(oMgZ0CAO~R)tPr9Udno3uS+vw8fs5c^&caJ2|1hf#DP6`!s zm`@5ONgG?IOI{9_5ZYE^rMHA@`qqf-A0hiqdQMY0Wa0HVxZz_8 z#aQipqY!xxHv2bEV|iHs6lu)VV3l>M!$wE==8`R~?B&r>0_fWmH~Zg`ppD8Mu(2=; z3jUgLeTP5Su8*p;&C6Rl?2#P&X`=20_(7wN0H?d#HhPgpHut8#D?0ZVgn{LQ8*4GW zesOmUk8a|NI+!^DpMK@a!!HO!XUDp+Pth55AGB0QWWmBYM>lpO>`W!-H7Dxn$vSpI z8hPpL9C~1OUgLAo?PEGBjI?B;EpDqJ;}aZK<1;#Zqn)_CpDfrKg3YDKo}S#>zBi96 zW*<4TbyVw~$5};4n>|Bv0{rmPl8=Uw;tHzAj_-R%1bkZs|H`EA)*`^S5fESoF_Ix; z$MUfNSOpI@0O&$$4o%=Km>dPMLKo&55S>K+E_eEBakv}3{XJZF1*BqrR*MJ^O^2(d zH@~<`A#nT}-o3%iu!ZGcWM+}58cn6?)DvRD zp#RIw+$g`wVTE>_J!rAy4wp*!R%*XN!=32zb5W`Qd%Ny9;-pJIH|Juu&s2Eg6N_1S zd01QdQrXSgb}*u4Q4P~|Gp{=BWPPe>*jXj`lHN2{v89}7r_t0?O%0Pb#UGk=6Wia$#<>5#t<`>T+xmHLQSY=Sn()f&bs=sw^)@c0`P4z&&^Tn99^o7G-*lmT4;R{(L0+$RuzZP za+AhLTz3;-UJTzJy{fiFG8{V-OzFLy2oM*pjowPoF4Dg~Y9zD5_UYtQjI6Fjv#gIO z(r}Abu554mYTr!Sy}2sXKGBOh(tp@9xc*&5?O4002WB}xew){Zq^22%K>6|^W9RaX zM{+2ZoJw#zwD`Okv-a&OOc0Ro6{vD=<1#xx+Lrw%+T&b8owe_mXZ8mS3-?pS%vvDF zimk5{!LB1r820Iwes1k6vR;@`5Z_o~2TcF3N#IOEZ(~Rco7zr_(j3ewmR|A^;<^qL zdrAZOuhZN&eQ0v{Z^97U0djz|7+uxMjHlm{-*az>3gG9TtfVVLmw)-)VIv068Bn<+ zaj)s#DZjw8di_us)+9k}1Y)x@!Z2X=gkjn$H0En(_~=lxf;lOCT~d6jP{zFx(Zq{h=1Ia! z4+nBoTm-`nTB|`!L1j=?S87I_JF>!Bv_7@toV?4kQ7^Ua8n0wx@|@+<&)J+?lcYTf z%+fL5{>_raJGNp3_gZ{lUT{doTucgD9L{mSp2#7UVaAhw7t`N!)r8B3U+M!ZTd=&C zI6CmT*fClYK#jDPG2p79Zf7!rUoiJ>n#qkcNhss0Z`3U9k2;#)9Y)uYIRg#xZXO{> zzkMxl=x#g?IG9Gw^;sGzo2C29gq^d|HwJR{i=?ZBgR{~j8xjsIc2^n4sy;7OB;4*X zS21TRzFx%!Llz@jc~?MbAu2lMMMu(8_qbK}SgzTyr|_g$rg()gw%*?us?Vb-9*#sS zeV-VT-1!*$?%zg}6n<|ON|!aL?!uHu^h&pZW4)HN6iB5;x)5J$ry`N0+IKP;y2;92 zzGk?{)}W;GY9Ya}qnW1^PTeqUXd)btT?EN5k;(U~1aT-3D@+h;Cllkm!9&bwSP0XkGILXZXGt zX|yYhkqzaJ_E=`EX~F1+6` zeo<`aX`u$Vy57gRiKUd40h|YxwPYwJ?53o;9@^V~9AF4Fun*$ut5 zNGx)rD~Iy0Gwn6wZAu9@iFRiqZ7zd4Ik^*7n^ZoCUX{b zGb|fnKG!}vPj&$dh^m(CKjTHN{P5ss9*6A~?$OG%KkoD4A6O=%%wT|?o{=77KnNm( z>(345WCfe23oVo3W>&pZ@&>n?UynbC-lydbweV!llBk3l@sv2*lN-^Llv|YPV}qeD zUIBp9OB5QPAt z4Lc##FjJXBz_O%emKPI;p)CIFI6)PKnEPA$Fe{u zpK^G_o5i1Cq}nzzc&e4Yo9O7Xy3n5Rb6;{EMpIn>l2O*4LFR&%eDl@I>jqYXZp~%% zV)|n1r97LZSnD5@%J{>%=lVc#9W=>C$7nb3bUSTD7s=ut&T!=Vbh(lqFNS)AM$LL0 zb#~jhx7B0MR%P3#S7bpXZKM%j(%YHXjZl*qUbZySuuPd8OE^MfddX71_r<5Y$*)@=p4>Q(k zA)0oqk`qXw>n$7X%~h`ic!gHl;j}zsy{vb5x7;|acZ}F*3F_2b=V-z{O}amSG#&C> zx5;weKxl@Zx@kaKQ+dn z28a$=K;p^w$n+DRxFH0DUI*&jaf$RRdK0Cl&{(lqXIj?!Q9@aGW}gEDVn!fp|EUH#|vme)GSP8iJd3H+7zJ{dgcMH=)zsaHOyOF*zM-%Jq0A3jG}})dXwK zm%i1+>92Dq>tU(ft0&X)oe~d`t?c#3z zr}dw5%Gck{nhdFu%z#g%HRXy-11l)1nfnpr3{^O3mUHE-9S$(oeOataJg1RahCB}f3}@ciY+{OiYBqR&ANJjSk6>Et!*LLc4Udc zp3Gdxa#wehsN|vuFybMP7>?>#yX}~nR&~8TPkXhvk*Mn66VGlTS6v!JW~CL>gc6gh zus(k?y!zH#_7EbLatZnk9j#6qMNAWmXLrrZ9J(W}NQ|CqZq`EyTUUrrwG|+FC^z0p zkB|jD;Pi0ZXBZn3eay$Tl(gY5DvZ~5`gw?%f%UxqN*i+QR=2wTp4J@8_O#xMq&}d( zzxC7H0QENQlISm6VS4i|=^%{t(vy^t{@wdst{?cT7>Y? zF2a&3&N6eVe@0erW<(X{f7%ME*U^`++mbd_XSALPa4y7jvRut|IXyWooOoU12`&q_ zbnd0LxWBXRpy_b-5SDE9Dx|G9tPm5m?t5coMJH3<9qBnF2LCv15WH7N@+;H`XoNSx zUZgy~^5NaAP@8Q8TOmmq)BZFK#19YhG%ER0@n%`&$d%l@LEW9c22EC#V~Nc8K`yEm z*7~p1s4->Bud$*6{;y{+-Z#0l4oAxDBp$Q4Fk(=NZ+Z^}come;pR>$>d0MMa5no%m z4b^TaWL5B!c0kSKtY`j)Nq&pq*?n}}Ur*;D>_?C6dyPmQGw;$o=fiRxD!XgO7US;2 z4T)OOyMp#kO!W2`4RSfAHb^6j%Gm*duY!B{!CCry>>3iVHj2h~q3qZM5V||dL);=g9 zYxEEv1gGx^JSwwPy7X}Q$82mjPy*pGbd%m*D$TbajHB5eMt7~}OGaOZtv{(lZdPTp zj>nTCA!!kI+^fxwFfT}8Hb!j5B@dkY&~ai>ml}r%M;ml-Qe7iy6sK$EQ{Axi3Ivww zNI#vbyXC!<2UyOu+L1q$(RF6I)>}J#A$r8NF#ig0_PRO{S&QP0d{3NkPBgg`l*^8( ziLeexnCT`hV|;m5sW~%?DY^zqs7eL88T*yf>7V_5qF^5dZ)P7ja1Qd@hltpumYO87 zNa(ftLfbELslgT&$!$w%zJz0Ge!6@k=?=P&_n`W)TcaA(ztzpc|6TGVYguNp2d~jM zZ^}cpU5FGzc;0U&I2*L=MjqtGUpXCP2Go9)ZuGn?pnBwDNY45d=57Y-uN&NSD zQYgWERfkj~b?&JrWnIF?!vuA-h3Ae36(P=;XV!Iv~c_d!P5bn`dY$e zo?~+GD6G59C+nbNM$HevC)WlrEW+$$2eR(Pc zzZxcK$jsJ@(>?uSG99;(QM>+PdfbU#PS^rQ`^&?DVY|Z_>!w1Y(hO;y%iwo#;maZ1OHwn>syx=fupB@;8wF@i`$=J`2tbLG(q*`PUcJAe z;ZO0M^+a`-F6!iTsTJzh-Km0$O0E}2QqDxRVjh=!VmH{brJQ%ok>GOf-&66w4tc6k z9>Zt#6e3c38(WQW^UxpY^#`R2b%(9{USZz+r(@`pWteZjS7N}DV}ZXucwV3HpSFRv zJ^s8u(7$i3amy2nu)V!hV0TxX>>uEOVU4w(zwo?cYDNE*1OKZb{zrgi0DwdG|F!-R z!+-3*Vq%M56PPyup@DlFbhgr`m3bxm4gF%PXrjVcmD0a(M|ITY0_Ur_R~ zLcL^55Aj|^>?+SHY%U)uP#hsE6W*M|uy+~dO1DQxQxX?Zk(ztP6gX)7HIh>bBk!fS zM5o_4RtcGajKc8n#VSEqieDM>ajtM)@X^ z=DTG$%ZhKi_++tN;1+Nm5e3<&#v9FF>rnGuAYvQD!?wPRF@(p^S=x+8uf6+AjpVw6W`C00J z{$u@zfdBc~XK-SFB23Y-W86Q>(6>~WM^%jSe>(pI;D2KSxaFTf07*wjpki+9O5kqm z>_8xDYinv{Od#Z7?qW=!Z)fNDuOfYj_J20;AR*072pkA_xC!Xp7>x+X$o>gj{|RjR z1fKsl?r0(YGXMn#0Jy~aKT~Y~5a_>NZ8D4|rA#O4fzJKt8P>r?9#=N1{ZHrrz%6T7 zO*#rk6x9Y8F++aOZ`?nRVpxxq>7@<4L7V_sMeX*(G=7z}^M_xkzvjFqz1&JxwX@P= z6x$LWr>ze#95@ae37pn%2#}o!js!djTTBdxonQ=*Qp|3D?6so9qr=pDOz-Jo7%D3T9C_rF<(a z?LH#sSZ|IR**(*5gb{J-%9zNgwIpCV2~3lWh$AI_+ce}B!JC!{F_IZcpA&+|1L~3} zNgUEJk+&$d*lO+q*v<6 z=&OZ3PMm%;6PkeI@I7a{Ual8DU@;c>f{}kaKnNVUd?{=x>8}(Ak94ulh!N6_3D+bN zq*o!t{S(CHC|{R7y~u6#p;iW^5M*uHbC~MOlWySNp)62`Y$qEo=sw)Kg)wGTmUuNK zAlEMW4=#vo4@ghIn@yAsa=dz)g|tvn(l*`o6eHSk0Cw3D>OP5)rD9H|&KT>63Ms?n zl+Lb&L=$Che^ohELRvJ)A7-n>a@K&+qCQ324%Dwc#@&^JgPjhHMLK8y5(^15?#8N6r z0ss^bBK(PEW6fKr(2N}?35;CgX%h9ZLgPv*Bw0i>qek-uIQ|Qd&6?oMRv^mMxvWIc zjyz}~ zao)bAa9Px%*X_KZ{S%=G&Ae+rM5YGvjjU{}bjrb#yFm-kZ?hkIDi}Nh?D{hC{Cb}fxUQSy99IXCRN?)*nf6Dtc6e~qHRCf6OFb;o^KlEB=D$$Z7S;r@YWkf=EQn^~USZhs{rOh4wOIm=(_G&;)lp}mKvoF0G@SGj)KOjuyY;TZr2Aoo z;1Lam{SCplyIfina!`$0!MXJZL#lMYSlnF_$=;AI$Qh_Eldm~RBC8n`lDHP@7s-kM zq~puM!dy2;PUMf!EEIQif|Czz5koPbLeQIvK)i5Ph=JGfazE^H$s>lB%Rel~4y2D8 zB0<26Nmy)(YnQpGob0l1(^3!Nb-fIvTjTT+$_Fy=cR!0y_EsJnUuvVy+L+zZtw9;k zPxqpzGKp#70AkN6Aqw)8=6Ho&N6jbWn6<-ISFqW*UyyxNhN3PKNIB)L*it$5L80u$ zUow(RS3quHpzDqAf{@~LEH9sscHn37DumCgVL`&x-E&Jtysehb2f zz70>^=ibz(OqRKL`?-wAJeo}&0fV(*7Z) zthl(+-XNIouy%1lrrAHnXFi zWIt4`*Dq*}^~10&m818;o7y93=Vi7;ZMscrmu>mxixJ|+2Ls3^CX(4;J1kqfnDRM- z-qNg}`@_4h*LOuJKI6v9d{FyHClMYUsm&KApw&4}wJ_x~S5GHQj zuOy(Py6djgLG(B+s53 zeqFs6+sR3Qpj$RsNr-Pr(btSZ(S+p>Za5nxn`s^O~Ttwhm0& zElJx8>fJn_RiYfO{?0l#b&gd{M+#WwYEGU(9q;hG@)ZGr}Xmi=@ z59x()wHmD)rduNUoV|bf$4P;+>`(Q#-^2gnlP(Q_=R)e9smWL$@+A}?tZXhK$ODnh zFo-Umms&AXDDVuuSzvBfe@9g8-!_+rx$Hf`uxJ5DzxLQ6QCuOy;n`{*iPgqP*OSUt zK|d(Sr0okk@SVBT>B~?Dz1)@FHo&A#PJ_4o*3Ze)GG*YFLEyOT${|Y_M9h>_gQuhj z9L5%HYg8aCn=k9y9Myp))i!yw^Sx%k}7c zH`bXuwDGO$cC^h4-p{M@D;fI*-oc>l{a;AP{{QYd7XFJSZT}Z3vj0Qi|Ds6{mIYsB znRZ4;UC>{>MSL%wcii*;>HHtKWf|(NRZaEPt*86@^GoaM^3zokXp8dK62J?Un3kMV z9H9fYQ<_5+gL1rwQx1D*!N7!K`Moj9iIR}ZL4!~f7om}(8>1x|ot#ptQ&I$*7Nr;! zp;0Cs{UJ$7Dmp<+qIly3r#w1E)DKR8n@ivX_j?1Robeci8PacZMkBUFMVKY(SC2}- z@DWio1qAr0ue|)PpX}}bal{`0AQO)NTL0)j1o`h1t-4Q4 z*xtSQf_ber$zS62mebO){!in7?BB&tZE;5&aa0=upg5U6f8c(?bNw_M*~()~;Qpte zfO)kBn!1sZ1WY0>6EfxOZSAs-3N7VoQXD9oJNP$fYI52wc83#qyZsScKjho)sj3ML zPx(okabclY&Gs%Drrl2mcj?0WWnQ+kMK@2HtDWZ&!+jCLO#|M!U3eio1I+{DHN*X3 zkHY(A+ez6&nzK8hw-}nT?vD)1AG&vQFISoppFe`0xEtQyf<9Qg>Wf0Q#o`K;zZ0^C z#D8BwC+GC_QKYKEy0vrzcRDsfU9>){|0SW87^K?^cG-R?d82!4t!)}~rMkj=z3{^C z%qc!L2lWX;xRAJA*pa5Pqhf{nx&S@>r`Hf$43W(sbTM83&9BFh7&TFetyjU74ah6x zdHq=H$k47qAtUF_?dN7B)+v`l{NFh5`^-5<&uR4G=)XH_F+*#yGn{$J*KnD-d3d`Y ziC@e&$ew3NV&(57SpJaw0T3Xd=D-L5mFqMgwFe=nkmh;oW?LV*UtW*!Cu$fiAUvBj zEDwH*tib11v%;4EyeqF&kj-#G_+bb=fR1>KGd?bNXUJrvw++DgRl-IGI$Qz@z|@F{ zt=Vz?xx}|g!gxtAR_IF(pJud(0PkZ(``|fr0T5vLPe})qE*i?~^u<+6pw!2dmH8ZN z=VOMY{@}pK(N}Tm3jks%8YQq}<DIM$khj-n$fQRHWSIOk+B!n0POik_i>__g z4Psfsd`T0>RUnq?{(I{0`S4%Hp+aNNL@#@Gzl6~5d>Sk`?#QL^Xs$Es@o`CJM+0Gj z+WcI*z>~z!47@3a<5ZNXIit4k=%Pn$~)pKwu*+B6)yg zp-(81{sNXZbAq0P->u^>Rbe#i6}`xGZ#)?{C@QiOK36DJ40VC@3M<#dvqiQllSO2+ z4x;QpRGwFh@c`EW%!P=eu>Rhis^h{x8-CZLN7oMe6Z;ROQTbiy*u4@_sDHAWH~rL`baN<9g( z`UN++N7|11dauGXM;Y#i96Gc`&g4+h5klseA&ajCK4?p`&b5uPP3%)wcEUOZ!x7{t z_lN>f)t|YJ8THjgh%vc^%?<;SsXLjARQKSU?BxXmZMJYsI!?2~ zdM*-NsXG9j0T8)WjYM#(Nl**SIQIa)X$=JBr6;5SDx{k7yltVFaRh+P2fw?&wMDKE z^U5|lTW+Coh^?|P@vq|WGj$zIfsFJ^?uV+yN%F%&4Jb-m_emKMgDCh>^gU~mLPJTg zQ}>fQ_8!noy{-a%<$jWgPU7=uw<5^42nCixwaO9i%t`Uxk(FYMX3SgzjFnlvA>cTy z=eW(F8WX7a)P^BOV=SVc3)2bi1A>{hcL`$My=KVu0!FsZ^tN?N5N4`h0=z z4TuEHiP33J1U;94L+lRXuqdf8dur5GjoHpQ7w(*)jtYhUvh8K!XNdEtLQjQ-0#1^! z+0F1J3b`>5mI7Z6yYS1NnZonI6gUzE5I->X)Q#mgraa(g`ty}8>HwTb_iHW)>Tql% zSV`2WbU37oNxuJ19#pm8h2_kshKS@)fK3LHjFYHQU9ivIjyBmVIfob#NJ0<5Rlzhb zwot5L7z~P_hzi!Y9_UCX zz{{}`k|Z1m9@L;7WQnkj9$CRZF1=?9P%a#Q8$142mfcg)OxG`y$}J!}L?ij;&^krd zb7+5Fn@4IMOe1)nrnex6a{wnb%OfKutOBIrz7>o?W8xawqI92&Rd*iH1dAOV`$NO4 zYp%#V5|}BThXbhUdkjoA^%f5fTHPPQl{mOp$k_;JW`t8{&Io!R8Y|rQN~k0eg28Nv zBjH?J#Q-+k{r@rb4#1T)&;M|4tc`8kwl=nH+qP}nb~d)njg5_MC!06>{J+1dx2vXS z&eW&ooLi^w^z=-3pGHE8S_+fX0B$v&+w)E73ME3dYD!3Ni)+c><9J!6!VuUF+5RA%;#9 zF$D}4Ff#xGwy3*gX0R(9N`5>_6@®pY?lN0WbwnZq$*MG+i(y#TfP2o!6{l~Er^ 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/bigquery.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/bigquery.go.i new file mode 100644 index 0000000000000000000000000000000000000000..1e6851e7f5817d418e9f45793044f4131af154c6 GIT binary patch literal 3832 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/buzz.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/buzz.go.i new file mode 100644 index 0000000000000000000000000000000000000000..f0f7ff0cd1e163ab0ac35a701b53d8691fb70608 GIT binary patch literal 596 zcmV-a0;~N10RRC20000000I;M00X`N0000000030|NsC0|NsAKuJ#F0E|_svDsrcb z6mVSVNoS1!00000000000001ZoMls8Z`&{oe71iDp`n8uIP&_MA;8wJp$}aOv~R;O zs0!_9lO;n^ytYIB`zSfhkSqu!>%=3EXL^w8m+TOFscl*6esDelFALTh*)iHTF%D^W zA+5#{SQby)*H>VjbDhDt9Q3?%b7eHzC?-(3H45eWX45q(xEaq`S(RnGwFRlP=oZ{2;aVk=(X)~ znKr;;38^FT6@TB*{($jNFXPwGIRjHb|mp&j*La65=jH-qoDNk;VB^_n9#&49$yCH(J#N)MbpTA4B3TJ z^q~oAgS~9d#fQeah&gR>>1-syR55N4)N}&Z!l{5AExY7k3$r5^Q*{E{8qoXfskZAc zZrGr|(FS?-F<&f~V71B7*&C7BysZ+j#uh!a^rjuzo1k5p{%<`Ta%bk1OCdC|;+`fU zww$G*g8y7z06%*-)^IjfXme@J%^%Nx@G literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/compute.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/compute.go.i new file mode 100644 index 0000000000000000000000000000000000000000..668f5922bbb87db0b60bc6759ec02ba1c414c7e4 GIT binary patch literal 653 zcmV;80&@KT0RRC20000000K<_00e3P00000001-p|NsC0|Ns9Q%J0J%L`5T-1ABQ% z=g|0T52w>6 z0?%H(H({+EP18i^-mE1}e73pz4xV4lX*x^O zW~~H~O8RU@{-lY8Ryq&%4tkx@c!K66uFBidJ_&7L@;+eavve21j-1(8nOua%%iCd- z6K>lLd09GdrD}(&vLPL)ECgoc-8Gp9XM+68PX?2Gr!wuzCtriLIiX)2-dD9RM2yux zK=_rck%;qL30NuK1IfH5xX0_{Y6{Kh46!ZvwN+_?O(zcQMhc{}BGvW8bOGDgKIX>~ z_jSk!ZN7Y1V%rgN5sK{tSIacyLnD6%9}U!9#n^VcjT)gUZqVspL0Bx~7$uivs(C0B z0MGXg-bZJ+s?b42;_tYv9D{e@gq6littztDlsMj-4yI%pGQVkcfQcL~31z?0@7UTE zz@0Dnko&;Jt5op(%ixit+I9s`aA@S5AYm>0sV3ox(HgXLXOOZPV5EWmHIeY;mU zbqyEbDx8grg9@k7KsGu5Z#20Ph~jRwYGiwgb{rXV4_GI$krjPhd|W+0u7X+IJkwo1 zoQWnDKOwJ1pJO#NeBJqh;dmhY?b1Y>oZu7(CF9&pLb|X5>$6Gu{4llUoz8F&@ncYa n2~VQQ=x6PxX?-+!t3lxby&`AtH#s@m;LD8#!~6UT?I3XcU1K;; literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/debug.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/debug.go.i new file mode 100644 index 0000000000000000000000000000000000000000..6e649cd0492b406be1c11180c7af2d5c07ab5557 GIT binary patch literal 807 zcmZQzWME_f1I9-T3@l3^YzBt^P%tsuvSWV4sYyX5W$mtPX1U6oL91YDKy<~NwLy+~ zw+#ery4T;}%21GGyS$lEw4?dU4Uwz{IT`tsPOpwrDw~%uNwodDrz)vEsrOsJ6Q#~8 zXWpE9Gi%kqSX<5;;X#IK-`y5B_o%*n_n^i1<>I^6|EtQ*{n&oxW2J8C`;_PWvkEMe z-zBh={Cdf#o!Z=2dgD4@pU%Q&@dr!ag??_hB+;0Yu;y(j@66_-Q>Gv0I32L(fKt#= zZ+)G=XZ+Hcw6&)#(B1ERWyWu>^`eK?o%;tH#aBn<;y=6|A1$-@5bd7SS283s=l4eV@10QpW#) zYD}O!vnHR;hUAAEC;r!QofY^=zHi<0X*HF*SsFQ3Gs(CgPiL%V@tyhKVP(whrBgh5 z%sx2Jo@f2CplhG@>EA`H^W!fE95QELv{{Lv{2rUAt3CHGzISg<%AVXC8m3x3_aZ=-7OqZgfamGdtP{MjuhIw$GFZ1HVh=NjD%?KWLmTyGs4)N<5%PS})r zGaF}E>8iFCZtKkIk+IDDbfTkD>jzhS)AG-Tv(9?uK5n^Rq~Eom`u|&{Uly-!u4%it zW>)mvH80}#s`Zxsldzf@J^zCJIqM>=ikH9d9FRXVy=)&SmO*I)2#x|%$b2x1fk6pG zgAz&lA$_&VsL+PY_N=Ryf;Zk#nz4}=ss>C|%xUd0C>Tays?Dr0Qcy6!g;?8kV{3%QRD?jf=FX#7M zTq|`y{Mo@X{9*47nm(9&wa|0onJr3}TLU5`^))Z*C33}G{Os(bnYx8I4zP3%4>0)qG_LyQH fdnT@O>&Z11@^xR2oH{V8^U_cI|H6ycddmR-s8Ms3 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/drive.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/drive.go.i new file mode 100644 index 0000000000000000000000000000000000000000..7bce5eb0119fc26e88aebf431633a71fdbaadc70 GIT binary patch literal 458 zcmZQzWME_f1I8`}2Btm;n?e6S6#Q5$$>gLfUaxt&Uvl%xiD&oU`FI4X2254V37vQ_ z?~Z~%+xcgjYA!1kK0Pu!KDFpo)@r#+VP4f;i@0tkcQrL8U9)tl{LXh{ww8GEznMRu z&sKc(&r`a^Gy43Dxk(<9EZILSQvKSwm&wQ#e^-AV@$c{%$?Uciah7}Sj8i!eT7=Zj z*mYy=^tpXy>4(;pi`Bl%D%*aiKuuEGe;@nnTrr`zh{+djSSDLN5MfzAb5Cp4D(9c~ zzAHXjc1Lh|%KF(SXRBPZD~MIN`n)RBQGN4)!;j}o{<`ejCS{8+i&#`*?i^aKWM;D3 z%FXN4xo(5izikq{bU(x!zfIe}t?^>e%6S4Vd<9*4FBnTgRi{6hWH5hHI`2VK<7G#` zvHX?(w*9uw{STFgm%K4I<`SRP-rpaRc4*=ku@%*v0;j%v?0B9M$*$q(^!-|BMU`Ud zmB`(J1zfExTXg-I4`01+8>74BbaAcewAO;!edTA(QbLbJ)_yHH|LAa6+?MI{&8(x2 y-Fy?e%35ZPnD&;Cc7+qWAN19W&&IiPOl~=!TaS8x7;@A2B literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/gopher.png.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/gopher.png.i new file mode 100644 index 0000000000000000000000000000000000000000..5212212a8bdebc8000f3c41368c3e29eb5485637 GIT binary patch literal 22745 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 k=|3S2ruXrmAdKl@0m^@L3<2 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/main.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/main.go.i new file mode 100644 index 0000000000000000000000000000000000000000..60d60f6205a9ff6926dad1f6548901f8f11d8539 GIT binary patch literal 2849 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/storage.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/storage.go.i new file mode 100644 index 0000000000000000000000000000000000000000..07389c9eea2e4653799b70eb3f0831960fe4e66b GIT binary patch literal 496 zcmVBZrd;rMc3k2Oj#tL3Yn_2G>}yd7hNPN8e|n1 z0WFPGHWH~)V`UNe-#gR`ExHmpk2~iM)tTbe)CjGyP6*p}J`gC8$f_mDpT^hm8sdqOf>DN-S-vn#+l zODctTkp!%5PZ;*tdL`!unZbP0dmQHD4>aY=Td;(Wh3{}JxnmcpxXj9b1=U0WpP~u< zWxQlyLOsCqv8P~NJtEi&8gwcqQuuHSH!+y-F7%<}B5IuSy?&$;L&!ir^{l^J20>-H z*|Z3!bMcD2NAhs)8gEK44*cmC7L>}A6$8>aIFVf9CNT`QU=uH}yIsxR4xGK{DctLCjw7Td)C{f{cT@iTo;7!?`X$wOSX!ed m7pdNR#ls@s_qcrK`|1h))fh)J=EotMSpNr$f5abuMf3%4=j?a@ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/tasks.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/examples/tasks.go.i new file mode 100644 index 0000000000000000000000000000000000000000..f95712e75e8cf533142cafa3c4479a652a27a434 GIT binary patch literal 540 zcmZQzWME_f14c&%2F803HUqgRvncus=be!sfy z$+ij{)w|?ek#rq}m*@C)7`a`Yal%jil#1)xjjD#tt(FTl zd^WGUQkAs6y=QaB#!dO$7uGH_Xp$F;2)QMAOV>>8iSXp(2CjuN=eHj!*`cuhUf2;m z?@8Js=cYc)E76>{+?(gpDn>gy*~q)AR$kNi5SRR;=}+RyjmO`+%AIYIxNvKK`T2RV z9kH)31f7ugk2tkYE&tQE`%C@hWK6HlVAiiKUdOa*OY`!>e8)T+4vDQ*Np{~8YV)mW zuVP8u1@k)J6WhLXGW<|GyGg}+@|%A%azB}Tjb4)Z%Wjh1#2d3N%>Ej$$hXg2%lTgt z$GT_55qEhE*R-Wh5Vq)hD=ztNniD7xK|v1$(LmNCFpGgf2}Fb9V9RCKCArp%ADU`+ ztSXAS({~^*YaLV#n5vkQoRA=po{%shy@A10*|w|z-n8XXyS%4yy%qn_F@m(-IUUeh*y+xo%X+`p&gkWiPj#6wXL}I$EzikoL-U-a zu4FWFCbt}_yn1@4!RIK?EAx(@y=8JD`?9EXpiFnyT~+VTCb`>pv8`NszUaqnHL=zb zxwoceYRSi$%$gso#>?x5ZGBm25ih%KUvOgOFQd4Es!6W>9}KUYwCC@Z3<-Pl;Gy9( z%NrAQHLgTjoOpPbN$+r)Q_l}yf5&}idmd}wU$E6UA=};Kbf+(e_!L)1gB<}!?RYqp zKeJ6S^xyDyp<}$~(@*nfJzc+~-QwKR~I^Q0v$IW_G0Ilf0enq;(oeVKd?#ccd$r*m3{cTJ&8kdgu8?Q*``Sr(4?C z?-zZi_L0$C_I!f?i*|}l$-H_;`%^`AxtjvyEjb;psOnx-@Og3f)9h2>tIpo|bzI0J z^w7~h-j_|!QjgTiXKq$4ZIMcf+EF0#k|VaJ?4aD)8c)~Df0x^Io^F`Cfv4uu=4JU? zonLR}U;f^r;;&k1aN9ROxxdv>6PUf~(`_QwO!>tuweet^$>N!x9!%IHlktcD@f24R zU@Nelaiev5W}si8TV0@MR$SJ^rl6uauT^nXb#+yKtKy34*3~uIwJe?; gF=6HGdFyA-nLKk=_@e$bp8L-PbaFGKiYZ(M0LhP5kN^Mx literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..d4d6bdc2dece9dd7d460ba125a3ba2e7633eadd8 GIT binary patch literal 227 zcmZQzWME`~fW<)S2b9hC9}4tzlb`v%zNubdtg_~^x9weJ--r27HDIb@PH+E4u0sYA zE#GZgo!iSin)oj)%vjSTH2c`jB`@zwL`}Z5;>V9|9tT|utaj|?f4AoH-^GogBF|$A z^n|6{eEnB3C(U(BKggneNkdOBW>fCgDQ)L2NIpyrIygA_enUq6;_%O*%3LRXp1ho&V9j(zi=lR1VZgeTf4QI5lv`{viZ#kP;H$A|f4}eJ Ki_*bQg0cX3u4Cc= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..3157129f277c31c06db092de0f7c4d3f0a3ea770 GIT binary patch literal 6128 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1-sandbox/freebase-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..e3d6768f295839d3924645a46393f3992a1bfa54 GIT binary patch literal 13708 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 Chh<{` literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1/freebase-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1/freebase-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..2d53ba835746d7635633adffe07b8746f0baf5c9 GIT binary patch literal 10368 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 BC&`iundF@ZN#-3S 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 JW}Y{ORbXHV<)8on literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..dbf0c9f69862895aba0e3ba15a17401e4d199511 GIT binary patch literal 9406 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/freebase/v1sandbox/freebase-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..80275650cbcdc8e7597253abf263275a04bc015e GIT binary patch literal 12712 zcmaKSV|1in@MdgdV%xTD+cqY)J+W=ub~2gRww-ir&CbmJ_WXCh>~qd7yj_=X_3f%U z4Fn7X4D=6hi$FkJ(*IiqV*33bUOp7U$Uz8yF+zy8S6QWUcFfS%)u;KT|puQ*`E$TSfpA4VzE{Vi27^%FND1GtzVY zYhBKxHdR6BZba0LQ?gCnh>7x`y3p?c6I37_|m66w0+@qW!o#(g@E9R<$gXvh~>~Ei)FWBlH|L@zMZL zaeO53aub$dwy`h8@>dGw&b{QSc*1{Tc8 z`&A1|6tC-5Cgq!GEym|n_99Z8M)%+%!)ds?HLR#$q>)(Wf;-ybm4uSM3(QGD;!!Mw zSbInb6u@m@!H2wwESwyecij*?k_F<8MIbqaEXeFl0!cAPJ09F3Ir=2wUh7G(aG>@g z7F=w^O@ml#v0;psDk;ylxKH*FOoSBQM~&h)ZruJf;bS7pdl=m?Vfze^B-o0fNgP}& z!iBI&Ke3H0PAvG?L`p?s>80UUbWh+4$#OGhlY#0+D29mLWNuWF2^Jsk$)EM)%pX)G z{6TBcdiqwW!9}EME42G(CHU<@O@xhH;g3CRx<8J=9{OEV58sMsM3`{iwGvA~z=Yw3 zQ}(}5^alj)#=VD6iJR3rmd@eXv@nXPOtBgdqM9gdpwS%aL@_oOyPl-(0w#|3=5^N- z4GN-Y3~+32gLY`e>NP9BN+MubHKEf{L_LQly9vqZf^d+f*%g>eT3(5xds$h7gqw$d3kbxv zOpBNCy*f2yM#76DM>$8urEEuLI%lKY7o8sz5t(=HJs>T?jhiK5mqUr*+bvhwgS>~Y zJ@)NiYaZRBV}-K;AnE^uF}jW&9@fZ|g01%c1Uf0%VbE`vRf~LA=6&J}jYB7%xR@FsXGJ-%j0=jXDEh*D2Tj46W(BIhVeBh9T0r9wg9l_Em zY06%uNvy-Tls6x=gpd$lP>B8m6)VKXN0eBq2;zr^0iX&7p(fpgY~J86-T0wQW2N7<Ma*!NP^RY3KE%M=+tv~#<%>uDooDlcsyGkJ%3Bg?|cbBc5E!b#XT(Z zU$Z$Np28@|%kjJQe6KaK?h8PjEip=%*b*Bc7I^dd?DPIg={e9iLiJY z3Q5@SXE|b`qoz*k(2a(wC$T4SU<~gK+jeWTj;!tYQsJJqxFqhE)~GslC!$th3yluB z*3CCunD&d9J@m*9<9MukxHvOdIkgv+U2atLPh{C68V9vizJL%M6bRP0UbEB9G(2)Y z431)&0C}9_0<<3WO${F0Vu#fWMGS154BC__m5R=%rz9_F4G^`R_5V07_jn;}XT?J%G6LhzosUxc7sUe!V>UHor z1X;9o1|~a(fxR;fFinvSBXHhPrnv?mH=kTIv!-e6;2bLqYge#BComPZiP>~uTC5Ue%Ub!Pzm$K3`k`%_ z=R!v|1Qx?-^6bicQ-L|ln0F=9g^IdHrG*VDsG;eLRPUZ42#GX3jJY)& zF_n1sJ$~1PDtJ?GaKlW86#P685uVO35;Ovs=}>IN89&7Gw1@i$-p4|?6`CiwL75;M z%a^UzA!7j0+*FEbpR^#arV}FaE9)no-OL-+moH8p`)IKqT@457M>t-NGLLa<>jQ0w z?|XaOqEGOh`Y6^@C)dFYHanQg%P z{Ni>|3UT05$%>n(PDLA`-=F(Y$@ODSwbwwUqb0Iap{ac}f~O^_g`>xLq+K23(RHcS zrqml<_PMg>y%SzNVS&P@3CLPi;Mq>ND=kj`Yf51|H`mAUGr|3F$H1>6#9!m5!c{?Z zt^3suk5yeV!s1OmIGuD}FWU}v6hiN#x>b`*wD#J)KHJPdOF0IOo=%)y;dV})2A3V# z^j=MVwM=I*KLEW$Yl>AmW2cPg_f50j+V*yLg*kU$1(6T!zJ83ibb+4h>;OPs;X;5r zj_~jo4Kg`Z4!CWA$wmqbmZAyH0ruRQLih9M?2>wjtNmo6MN^KsN7_7qK2IKdvi?46 za_2&1RHO6e9z8um+nkUt&edr7Mf`?0?X-fDOK2k#5({n@eiJvV5-A4OhWiCFVA|e; z#ND$`o^!k6q2DvD#-Y3YwMG%L7aSU`iYI=7F=Lq?Xjj93(xs9X5>rt8;bAH2T9zwk zsWt;4VRsoIp>xwHWe;zh#Cwn60GZf*9Qz&@YSFXHBpTJ$F1<=Q;X%trTh5kB%M>0K z$iv~&`9NdOVWsY(m4Lr-^%zR5zqx0eCr-m%{}DD|lxd8VO@c=tPx8!k@QZIjmiLJT zac*LGFRZaYZUL!#eMCH!9$hA3Gtp*E=wh}BWk&aN;X7VU8a9V@Py0wr*6kI2w#J-UMGDd)(d2v`&`?HBYM>l`)^?B6KpC>5$*=fE_f1x_3TzZ9#Ae1 zgFPn?FEEJ39IbuLu(H$Iw1KC)_vea>2}8FRZ^KZLYw4&_z~f4y8Rcp$sQY+Ge)XEX zLMAU0*5SqTSnPv-1G?8Ea+0?BD(2zNXdE2#Sb;y!LCCbb^r`Hv*ggHo1a;1!vb091 zDvFaQ$k(BJk4(dTE;a_8LJ@RXyt|GAOq@=2K7^ z{dDLh>x9Xu^sT>B#;y~~Qyhz%*Zmol_YIK#S1g170T^8m1@DeJ!qXv9yE>$4=&m*@6-F&tN$$iBOcjXSR3{S!%LD$kkFK~WxdDAk~ZTsO4|=X%L9cD z?#^q59Bu$Rm_?>+CbmQhaxUFzMeUV2gTso?NPe`>kS~$G(vwLzDy3peD*%`n#%^S` zvw-ul?l2FJfS1JxFV7BqxPwdjMHQk@DDx4F(=Q1JPtZ4MN={xsd>4@nN_fAv;Px`( z!~jV_nHSQ7k3=d2mV&xn@nfud#$?aJt{f0IY2H0(4-M_Ib3@MTDf0o*aj79KYE`6h zk5R=phfAn#`??LWtuLdzoM#?t4>A>G;v|FgG?iRAvC;2Kz~x+pz3;KUZhq?k&B-1! z-a)9#rlzv*idklqlsQKQVH@@m1NuVD6zJQZS-#uvGePH}$t#|nq7Ocz1jHHrD?5}K zxE{ufX$`Zy@{cjku5BA!)3cx%y^h*i2uFoQ(p&DK-&!5u`;dDQ=;T;&mIe^6%l17A7RidWwnwSx^63w8DmKo`d-zD%BQO~h*F$d z_W8}eX)yMYBEw8i*U%j|5i;)MKu1@qT`d^<_Gr<>YOg+4PS*}slv<}`f!3~ci=j$% zom(Vq?j3c3x`3u!*S-7>ctbQBdNz|5`$(%Qqdt(GuniTl)M$HJgAMDamJg8uWK5Jd zEA0>d9Nalw`WYlsrAd73v3uZx-lF+^-P(zDW*Cm9zq>KRowF&ITP~I0V~bzli{e{b z`UMRa2op%%XtdA=cc$6sDvtxLL1$tNZ-Br8Hg3U{EG+Gikb5=-(My!m5{=ZSSpnZ_Re2T@~o;Gk6OYnnU%L6{rCKLcl(OS+NMQDa4 za&iaPJ!|9%dGl(ucMDb!z>bh|0ZY3mD6zHQqN?9F2gD zCzomJ_VC_~M;rkb;1Npsi(;QePPd*Q2)e8r2riN^D7p%bBSGc&5Ne7AZh04qwDTkp z)D%h2_MtFKU$R@-SV^X-)2$NAt0yz@YYhZ!aPYAoxdkRQ^sv^Sm;)?PQ?tIHRHS1W zf@a+Pl-#DZ{5mA@?y05pEf1})|0gnRiQ*9~mwg+tf!K(%T?ZzLSYUgA2(iSdh3#4f z{+L@A1jkVUCagTPNlgda<3}ch`*&kKD_j`t!zcAo5) zo+R(w`dOr#;!R~oP+?uQrmRO4yn}DdM}8Z{>anm3Bavi9GOy;6-Ug|oxu`c#ki9$J zH&EGy1QbNMBz+RVZ=Hx3#lSzHdv}{qV+-G8T9Nz;`Y%Ob?sVN{vxc95sPa z%qzBAlA+8Hc*ke+B7BYsp_(9vJZHXS@!m8*B;mnFIs=} zz#(jqteYV$~H-TJqp*sLTln6o;C^M-~Qg3 zqCEp0W>wUXYWD7jM}Ew>7Q2*e+a*AfV1zs(+IB>4xIUVYERWUt;d23ReafT#*yk>C z$4GR%eJsNzWPohWH?Vr~)7p6LWBEJVb2+b^S?Q7tKgwlBHd%sc=si4w8>e}|JD~6K zKFPlhYnL@9K*;oJW}L|WOuoh{RwvqV6lV9bn|Y)q)-m-A*e9}LKyCy?0WDQ#J{F$w z2cuyc^GZ5&Ly7=%U)#NqhGo}Q4JVZI5&c$Uj@sU^x$DfVn^0V71{!vq6fjGU^vgV3;DgE@892)af-vdWQz z&6;NoSo`vf5!TpYL?ys#&;K;)W*Dz_YsJTyo#!M-KjJ00R`z+$@*V4VYsqtgg^I>K&0 z+=|Ph68rF-&pgwx^8!D(^_P7717y=LyWwb~>lUbkZ&Oof?G5|SIXQaI?N`>p6gBQR zc5)}ncqhS-j&q!~EcTB<#RKiyeI05|uK~~8IC|Twu}(Q1Cf}&GtsQL`w7-k)j00KA zHJE>QLTubbO77oBsn7Hl7=2m2Tr12*M>&?!!2S)MmU#g2HwZ%i_!kQOiOux${tJqD z{&0}L(Nnic6espvsW!7>H717`E*d0OQ0IR(|1o{VKmF|gDAfPIIL*iBPteB4M@ZpE z@n6jLjrrdIl|VoSEB_6}|A&MAos~tHnGrq1$D1mXb*;V_Vl(aoOZh*Wf6OD>E>;d^ zkP#`g$xhcJbhhLH%uNfC@TJLK5;DU$DPA^|xRy8SnU!7L@_e7}__jCBD7tP9Q{5ar zk(5>2Hg>p>d%^~>uhzb2ZbR4ideB93Rtx(s^FE)_L^A`@NYnI+0_s1T zf9&s02VjB(k-|=9OMD}_LcJWWWqO4%g7bB1ilC3jW3>r;jq4U#(8<)#Z+_1BO!|NV zc>@t*P?432df04)r6glLs%C`Ij)XFai8ZjhXXq4Ogi65#$n7R}sI?ruNX~pi<()OL zrdsP=M021dH_udNaHzz0#n5-&O?Gej;tH5k7K!E!2wv3|PuZQ$La2_HkSGV(#-#qD zB>&}&klh!#ghLZ9;q!yz%jOjbe%mbh@47MK{!(BmARuF;ztSJb{%PQUw_MVKP79dk z19Yrg(=KE*yAMwbZN>GpnWkMS+>T)xns>N?|j5HC)pr=sYZLSEE1~Q>u9{vM2D877w zOk^TtQUXD_#}uYh5zKQ^Zg+{d;HLt=}3d{6GrIYaz? z5ry)WBq-gldxTv*xHIjY$Q^pFVE^xnFflaToayf;{RIRe8y@iTErhNUBM2*-OD4)G z65SR(QYMo5em?3kNEy}%B}s)%aF82DdMSgdMVcFCjH}{@C-4t4tN}wa>@lwlsyT>; zOm3L4OkFrQV?thN<7Q3snTaSW1xPz@0z{WC^-mpk{f%SZSf{ZEI zM@LXY6hz|Q-XM;|A$VAb1FDVWPVk^2Xp3n|f;*x@zDcA&18}hI^V0W;Owm+f+Evgc z=#?FuQOYvXQFpsnw{okGOtht}n2zuOQUa~q9tosHEZ^A-u#Yd$T{oDed8#|-g6oT7OcN%m z84(DB9}+T#lm{6K@W%xc;z!wlj_)H4Fd|7MfQlECobFNkOg|gBbRdJSR8!D+>^M>1 z>U6ELZwuM=pU(HOH51cs$ieg08PhLbOvR(&iWt;ut1`CYiH$VL2w^^>@nov$E4>^& zYr_a_e{Mwz->%w2@I^Q>czm285ck~HH4uD_MiO`)Gv!sht8^OdcjR;3M(DI(kx!0J zvOFcdd)fzC%|;By4}pw5AElvoQjJIAn%Ppy-9Y?F-@Xd{)!yL34D~@6`Ln-=O*Q&p zebB-5tHj+?L4lt7by`Gs`rEnbG`5Ry5v|b4kE92 zbtl{b1mG9AaKRVhzIb!Ej#VFvII!> zxu`?(tss~EjGEpVRt!-nejbVl61tNMh0CF9V<;oB&c(p+CgUz}Hs)OOh?kKl^JLwD z8LV`b^4!}=h|B7(g;Fnc@P}IrUMVH&u?O^)trthhK|a6@Q|Vei^J??0x5u{A1^Y2g$tZ|x_m;+EOD^VV%H4n=(4V_)m6Q2OlXhCY9Z zYWL(ZE@Dn^^!wiI#k`MlSGqpCkZnu}-KXM4TTx*ET0P(CIk|6MAmi0%!FNbIPrO2S zT3EQE+DKMO{-ar}j;7VsYQ_ND%uzmT*hLG?Gv`utZ-l9Y7h33`9wtkp69lfQd zaDC#LY_3jGmCQW*Q}8f`B%fc$4duB0E}s!!ir@47SA~BBmwlw?V3Dl$UX=WGYQ6db zl^rd!uGYP~s{r>Hh>ru0HTV#G)u+nGLoaKM$pReX@_RxQK!z#Kf{O|P?=15@tAQ0! zZtCqlHeWY{;oZq<*~U31{f)qV?5^(Ttp_vao6f2A&2<+qXqXU&X*qOfQ~kb@YiNOm zAV2MBjFdx~E4*acBNdWBF1a7{QI+uKz4Z@|$``Ol4B_yRrX)S&$7YJHe9IroEo~d^ zWsuBG*xG6f7G>({&RxQCv{E;NIWE(Z20QsLBEWbJN^(eVfOv#(=8vQivOA zJ^dZhsrMm3%$du0)3 zH3)3}DiH=B0<8YFf4sIlIVKG0c_;3U2yb!AAK{2j*C!!`Nx|h#2JmiqUX<5Z0q2h- zDJ$94vx)-|+q`QtM$#3lJ)YN+O5Tm5*^i04#zm2r-R_Gs9Fc*IkeG${rz~Lh`eZ2L zK1+V7D8{#;)OJm~1^oV8*!>+i`nL`7=uon}%Ow=%DhRDNkVcIDPg<%FU%Gj~@@%LY zoqVS?HeVM~d+}Ef-AXv)xN!9ve@{*`B=Fef9Q#47fqm-ySgDv7h!GzbN*d%^UK4KAtKu%mo;p;6;T9zZ(v|PZ+y1eU?SFn0(f8 zYuov=Adkn5ea2@mnCrZyE|6VF3$A?2o#cD!#LyYcB*7-qegS*B|2kOL)Q}aXwkL1) zmFoGZ5)aL&$sV~qoZR9m$Rs{@loROWcCj6OVS>3iT3x^zI$mpZOiVr9VQQQ~`Zjdk z?L(K!M7BdUuuRTawiv2&r>5>K33<*ho~V`^8={Y5He?=J8FVqD=Ao;%0tVRI8(+n* zCGa*1_dN>t(NJ}+=q6Q2cGyiU$M;O>YU5zDwfm%}7T{({FZGL4`m0NNI-${@H|22YTK8)Gw*{`ilYpcTjelz5E>rQCt zSdcMmumSZ&-mL(AS(DYX=SmyaR)XrcH?=cHcc<64{&d(-dFr<_P;)#5R91}#AMB{9 zSLKlgw>LF1W5=v(HMIjmzNE30sxSG`e;(O}deijVAKijC_=k*_#^T_=A|~hU?hk}6 zj)Jb3bct0VRu^=u>UiUY+5%KmrHVn>8Y7<&Q)UG$`7%TIvx*BBoW-Vn>Ei#oEZwC!(a;MMP6wXJ#&M&sC4wuc@if0!SRb*t{KZ) zWG#1)_ivQ)Ti`NfF21X^i`O9jtiUUsy|C$Q$%avJ*{%L>g@F*-!CqvkaQ|wx`;EEQi7^)AXqqUUNt%g0n zX+PV`zG)TdN}f^t4juF}mK0k-UBWv5Gz4r3suJCO=-c@7EV6&L5?g@`>QZL?u^`iw ztz7?ug)r}1K<;Q9f7BgD^XbW?oT#!zKpA#T9omR0B$Mkf_=?*(X_L=Go}wR|d0AD= z#o?LPhH-$wTRsv2KIpCn^OEf3JS(NjEgXsO%l8n@#-B0{k*3DcEF;AAqobPk7WS~|1fk_Q_RThW^^QHySHJ(qw$PSDRv1+PFaHE4c*8{Y}~ z>X2r9>oVivNj0HA5A>rPLaj%<on_kxQSRfwX2AXxiZA znA+2idDCt-16qigMO&jt4dr~}kN@NjsSfRx8+n#9?b-~BLo5e1>~(QKL(ru--Xm)C z(ahE=^aEKa3M)&s&M;r<$+V-5_E^_Gl{s~I5TX2yfY%GTh5;h4$#$OK9&_gKB_yGE z43``y*rH%Lq4AUG)vhAWtw1dnq(!YCa^iF7nK>PsjEznP%WX;;+poB|mz1mljQ4dz zc+)#Ld9x`8>)lFBE`ML9d2@_0-bch@a57^c7Mp|~s@oCI!fSAT#xAr#VaazEGMA17@-vslz}gUlu*CRX4RS~)zd>95ywhY%OI8Oex5bhxl`A` zM1ntBvE~{*`p5p$W}$Way-2F3+c$T*l#Y9|AMYb690!*9ao>i&jKGT+&(G6E33yfL z_Ckc<4NwdpwWL`zQblC3oH9>J0_1;WWpr*r=o*~SOjib!^>Sc+*Q&it-5|M<)IG~?_=moUbsg(G6V4Zpc^I4PdI5hK(u z6TMDJW}@Y(OkOAjo2{16$DJyP`@l!FZJ$NCQx%Pj>&?cWZ zNsi22Nr(a7HC=P%UkA&SDQsB|mb~p9wPVO~SEw~)IY|5MBX5C7GUUE}4{^e{{<;PP z1cg307z}FU81wL^W?loT%NF#pzk84fT0+`SVx(_e4%DITsk0g}QqsMg)!@fm?}sMT#RrR#EV7OaO*cR3&46Z!_&R}7Y@-$Wg5e*lx(+vgaporB z0uaWp4{k}8sFX>5Wci6iplhGhE|qDPB2GWMTTkCq(NOvm4i%t!zOnJe*^i$uW~*@! zsLqVL0R&#t$$crI8}!o1r=}~j(5xcKs}LFxQ%USbb=0ilb5vKzh<@tVF~Ms&4*J#~ z0Hmy_cV!R6_wcXgQBeWK7!=xg}+;#^hs?(ED zUw_CrT79#x)@yfq9DF^gHPGBhUKxdg$1HssrS}0AA~-elomrO8PwUTZn-g+oK-s)Wd%&nU|3l zvDl2&jy)+>S_m9VWJEMJ7-Dy!Ki?zjAs9=qM4h2&gBfEjNGPniQ#SZj6)cvm+$*>Z z(>y>#$o?4j;KU43N;JVt6SbcPld`%tr7`xLZ4S6J!S_lZ%FZ{@s6>Xa#1 zF!8@5q4baNa3H~Xrhb?<(#R~h4-xYB^%IusMrxINIUR< zVSl^T`tF>gYv;1pvewA8eU$ksyk60Vx__3&RMQjPD(}x$SH@P+5KLcAgY)Iq*w)e5 z;I)59{*}Gv)Y$|0y5PwrfU_r3UBd&!_}?EN1Ikhr_Nzr)b&{~K)h&*cB7 zB5C#K3C!Qgm!+WvmF_pEDRlukME#v&`)A&N{WA@+E!oq!iYCa>(PGIUlSXAv?qYa~Fiq`CBXV1YO6^ClT!<%02=kX1XCbFie bW)>33G-X~4&wu!jCDb>X9z*}~P}BQgAb$H% literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/games/v1/games-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/games/v1/games-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..983a857ee95c997b973d061b194f01110238a277 GIT binary patch literal 21142 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 L`+!buL~8yYXo|Ka literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..ddc40862112bbdccceadb821d0143ac10d187d4d GIT binary patch literal 4991 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 CHbL|N literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gamesmanagement/v1management/gamesmanagement-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..66752ffe499f3d728b8ae8c9bded22b935b9d694 GIT binary patch literal 6774 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 nUtn-A6~F5NW>g)O5K885=cX)inKNn^4 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gan/v1beta1/gan-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/gan/v1beta1/gan-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..a3e7c0832f3be94aa1a9b4044e2036132d29f0f2 GIT binary patch literal 37379 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..a8137cbe56e2a73016389d4a1714742d75f77441 GIT binary patch literal 24029 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen__test.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/gen__test.go.i new file mode 100644 index 0000000000000000000000000000000000000000..5add2d65faefdca8e0e5055bd9ddea9b403c91ba GIT binary patch literal 1204 zcmZQzWME_f1IGUh3@l0zHbcaJD43sr+%!3R*_DDVE0*qY<*i?2R$T#A1EwnG^alIp zUojA{Ro|bKm8rVicaukmOxHJt(Cu364jHO^qES0LWqJB!{{*(I`ukq?_RTU)rm9nK zDxU2%®oR-4Y;KG8FFTG5=IuMVf1?)>?5N06r_$@!1h<|%3wD)ds4*?T`@kd-}`E3o2bi#Z)**^CjHqYdr5euqruY(-X~rS+Zh-4u^yMr z5%_raxHkK}GZ_=A6+T%txhTDOx3I6uVqWN$*<9~VIc*j!JQr5*_h@DJPwS$^XABB% z?@`&kN#NL_ZEX=^t934Cxa1vr*W|m2Eibp`a7FIf9d2p6Vv_@c3H)1QcCZw&b>EgW)9jq!nr?DV z!s3{P^F_^bUlyMGHYq#r;=1C?#lL(+o!@mjS>-fmoIPaQZvS3IO8Dph*Ju5g+0Jy8 z{a>cyd0j_z;-|G+=db-@bMv1^i~6MYx{t5EY^nNtyujkFl&9!j?|WyXlq>(XJP=O* zEBvRv+U4=!gtHaW`T#ZrMgkBpKTd^>iwR^NENa6QK_xydH7 z`g~ip%b(ir{OB|VlmI$wwc|Vqk~@(V!Hxb;DE1$=M#4m@~ru%4C~1Pkr(F zB2*2Gx(#If24Y>#yu{qpVg)N(h3MGglA_GK^lGJ~oc#3k)FNGDB^?E&!qWVb)Rer^ zT%}qrkZvXm5XsO2w73V%Vqk~`(u^RB|89Q9_+)Q@a{WmM&Js;&{v{vPS)gjbRK=X+ zgoGVu4;(mg@W6o!M`uo-F*|BaLh5P(+31*{DKn?XojrPT<&-It=g*rLwIqAZ66Qx@ z)1FOVvh2y!XHGj@S04Sj)b-@bT?%J4cO6~nnmY63N-ry}U%$8l=Ke}O_RGLoh}-Dv zrmoMQMYf1`eVyCTw9r9zUS;ObUk3%|{)(BiHHKkEitZ_pLzwn}oudHs!vZjifguA( zGlBe|*SzBN-u>sl8b@+$b~~u3@M%|615^!+dJklPum~roQesh2Vr70Bn9?;=(t(80 z9k5abp!r+CECz-wAk7RiU+$_@uiC}MkNy_Qa5cY{hwc@=HsS@>42d=KldJ1;zx+L#U=4Ak6|Yf6M18=f}Cr(?e`^?w^f(Reo_-5-_e1 z02~J?X$;A1o_>Byk1Ser1gZTjTb;pY(eD?<)=Q zyH7e*l^4(^7k8Sg7D0mA;9BzxBU&!Dh~g6VF#=ZqM69q0aR=XArU|hAWKHJpQ_{e-0)35=3(|-Y;{;9vlsoic+v*Kr6i+o;3^2*V zxwRBD!3-ofF81RwM+dw!sP31E6%$Odn7YiN(w9Sw2H`eKsU%M45ZG;S@3@r4{^q&9 zQqWdF*@cS*h&mK1ccBXIDpba^10}Ai)VgQH6c%Jn?}*@k-ZA0<=27Y)?vAXMatgY} zW`2ZPa!W4)ms2;x3fp*lo9$XGn?j_N-uKSkEurFL=8Zy7Rzz+V%+7>i#Vi?jcah0_ tcFnYy-Of~Sy}Q)6(!4)6qX>S~xwRK<>UkyCtB#WY+_&*I-Y-{|DwX%r?fC!z literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofarray-1.want.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofarray-1.want.i new file mode 100644 index 0000000000000000000000000000000000000000..19f483d7fc03bd185d2f2e6adb98b63e72238c37 GIT binary patch literal 726 zcmV;{0xA6f0RRC20000000Nc(00lk(00000003zJ|NsC0|NsB3Kk|kQqo%NMzYk2P zu9|R_EtsXuXdE4EfgVhr zqxTR9!VclxZ?kVIg!A=Et2E^w+;~aG-jPKkfZaFb0wg&VsJBGh3UyBVv`PET!ZdcV zrA1y@tV233o*rH$J&4x2UyR+?=ngi=IiPcpEuZ=H7d%eMv|;xlgyyoto~h;^3YCfs zr)rXHP62(wi~nTX8`&l~SaX)Gx9Odyx-&ROu7fN0K|Yq`U1Lah%<6I7x=NNlxSZ-k zTrv)4&XmYLua4&A!C{Gxi=do~6hdORNWK-qVbQCOeT0i8^1D%M1)vaNHF3GBxN&Lm&QDTL|S zcyh_j;9gB^2{CxNgxXeOn>Y-ut7SVM^<$dENbALw%+%yTO}t!z7ZLfskH{kC94?}m zY>>q%5uOK#Vbp_C;nW~R2*ukLI3~& literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofmapofstrings.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/arrayofmapofstrings.json.i new file mode 100644 index 0000000000000000000000000000000000000000..da00e2b8a635be08af8697398b90ffff4a1dc5b4 GIT binary patch literal 460 zcmV;-0W$G-YDICA zUimH(tV7pRy3MyUceh#O)%;iYZTj}pY?Xao{NBGe_wQzAZa*v+clrF`&(G<@Y?JBb zGJC$UR6nJWb2{Y*Sr_1*xtqq4iZRey?6@-6a^=LTrgqmuLxYC?(-P~u3#2H~(UL!- zX*EIic;CkuUC)=luL(viP?F)sqfy8KHV{t)uKEu*i45L1WN+D^ij11M)-);DoU31k z#2;fV>aAtrf_0F?prh!DH5qhXdr1J&tU=xVrD1!V%u&6HnsjYM^J+td45Ej(WJS>t zo zm!)d;a%-1Gt$4!_br6>aws?# z?Z@hch~3Xbl0NkTeM*P_R5F5uaSj^FBFgO9TQdO8SvSyCP2fLm`Drj@J8JIj+_{>M z)K6i}J|4NXRLlj>;=Den-h;ym9Th>|jz@^1`~sdkA3z%@lpijE^xNeY4LTLD1XjaD zPgvUnloq}D9HiJQ2R~s2gK8e!MORUY36CAgb+BpzNs7E{slQN77z^h7ugI0&3AB}$ zw(X~PQYtsfd7O}Gfbu&!udSJG#^EvRaX-U~Z?UaafkIGsB%HF>C0(Z{wwtrBrm!2; z;0J+6QLz&ae9wNO(QZ`OG0MyHd6pdx2RRAwgHKBB3%f_xlc6(4Qz5F(6u`C|O#^3~ zFQYYKc6RJ)>*nwx5?w(IUai3Bnz6)T=$zr##nE(TX^hmKuhO|lUPa>h^Y|2*U&e?$ zaxUN^ipeKgloIL5PDCSKg$R9%5Gi=}T@kpCSPuTtA(A)FxFulUZq|UNY%Q5(s08=7 z*Aw%(QFZ_4n3+b;~zrBTR Rbik$!efmg+{{jZGv$IBuJ}3YH literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.json.i new file mode 100644 index 0000000000000000000000000000000000000000..0839bc79373c3ffb15bcd17f9c70a6c7d5ae779a GIT binary patch literal 6020 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.want.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/blogger-3.want.i new file mode 100644 index 0000000000000000000000000000000000000000..5f124874df2a56811b3e436ce2f3c8c78622d1c7 GIT binary patch literal 10800 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 uZpN&=_?&Q;d~PMpv}>u3*Czkb_$*sgSq{QYAgq zL9rr7c*kJc1e*EB?IoU7sK4y`FiioXrBfUJjx;tCJ@BZL~4b4`%0s+ zw`d|QODk0o4CxkHk?^hi;BopmHt!y;rpwEJwqGt@|2|&ae7gFv{w1G{#`&fG_4?}F z^zuXX*TskN!%cR5eY5#ZV{#w3IQuN$P#X?TF;^GPBwZN^+O@Q)s_a6=+evLJM2>x{ zGp%}othAZCJ>7`B%n)uq&wTPuQ)Hf}2%ResW3CEgwXkSF!29VOI2rw`@kd3Vgf5C& z7pQMlE~JZ+D3xRwMk;Tuf7Io^cQ$ukYGqZVGCpR2-Jyw6%!Q$|rvX6lQ5t)PR?Fy% zPgoloZ2I=0v)XOx(y7G*M$O@gX6rUUE#VNzFn3WK(v>!0ChLB|)n1~u5}Qh4FB|{W zmO${yBJqCxB4#lbRxT+JtW#lugK#wjh^lmiU{h&8nh?H;tilO>BP`_xWAK6D{zw9^ zvSUo{gRql+DXPr&mD6_%oXc)d|JeWPZ5}d0?EMD9wdCEfY7g!Du!fXj8wMqRCfx4EFn|#YCh&YyfRb&hVl}j5zBZ!rd znOM-mSSn2xN{B0wg)mnjq6m#~@H8%^plRcSvdx{zTv9%R)+4)ORH>rop6?DwlzL0w znpTNL9Ukj*;7|z~mi9ZOr<%QD$&#wLBNv9dgW{?Edq#wNh)ZEp_Ie^Yve0*26wk8R(CxXe+dL>G>_A*Q zwan3Jq^hDrUS|koVKG77`1j$x6C0UV`SXy`ZgJ&@@YN6=toByJZgL7mSdL5T} zLGTtX-n(fP0^#TMzr*1DLB_Q6_SHwC;Q4YjRynemnv1hrAno|juNQ)$YE1m7>z2oI_sHagBEKQ)4xBss)6j@bF<#a8YNXk4HsCCHI52*DpSfseJZke853 zP(U1-q|w&8;+y^YL2)JI*QApjE3y37-DK%6&4aot=FS9J??XqA$>cY~2sj2^NWM0TQ z9h3{Di9(j(Miv6zsrEo6?*faHR7r|CFIJrmMNalkz@YWuY#5m4D6Sf_fr6%YL5QY4 zXHgRd1K0MzDEqYin35clu~Hf2**@N4y`SBJBM{F{B|qoJl`M)u_V53-)i9#5<0GcF zNAre9BUa;;>rfz14r(SEsmlI3l)aYKdoSYywHDM1Iyvqif}bp5=01UKq-=DjXB$1Q z5VD@T@LFmbBFcI_M@<|7uDxxr%}L(8jV5LjsKenr03UnSZk#ps z-0&lHM-IFRmE$sQzT*_J9A9FOTpkQ^qsxmXd3+`Xe+LE$-$N69x;>5^Vo4J#kM0D{ ziO{j8+olK~7{{A#vxU2^7If@zoM#lC+}s=_8nqz1@lDBz(U8#~+43Fu3o7Hy;Qb_jCYAueUq~N}GxV z%)3E*VxyvC z*t_H;eRAJ2FGl>x{r#0mWyMYe;&=kjNOI>cVf8~L$%aN;(EGj11P>+kAbs(iE{!hC zN3Xk2#Xn=mY1)f71LvuN@{nZu)L`nLPF`YMP%^&G_Cj)1D1$Eu6Ov*&DTAOdM7| z95NYVxbGO6L%v&b@mxs4gKeXOxz!9uVtr~j_#%^m8w-Z&iFYlXWz-nI`TLMqs8lwF zxrhzPYj10CYtOHBUbe&`g>M2uAub8ec_!Rk+n1`!_z~r#7OS!@zb{59JP1e2-? k&9Hqu@=}mrKkvQP7MjjmRTjIp-MDX>^B$uA0+3n62LTw_P5=M^ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/mapofstrings-1.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/mapofstrings-1.json.i new file mode 100644 index 0000000000000000000000000000000000000000..992557808ab607cad0cd9efd58474699d9ee4baa GIT binary patch literal 535 zcmV+y0_gn!0RRC20000000Gwk00b`p00000003O0z4I$Z>7f@$g%F7DjTW{=E48btYA-8Q z#u*ZW6Q`abY_#IP*LIR6Ejjg&56_!<@6C)~Mi3oUkwkY8C5oh}(AIA(60eb@RV6D^ zL}QnQEK;BK6dgCm8QmWioBjM({cSq=Jln0lE`Fci=i7I)d~QE17x$a_!|CVrVRl&Q z<#P4>(PH`(1)f)xA85&wJI-nvAQfzgBvD>f=+c^!?pm-AIS#-9t8S=Ru@32*XOWj0 zVfDCe-r+|gHGt5RB?ZbY=AxJXAT#$>sjKCREITBih)Gff+7V8Eym@*CtT$e%A><%co z4Gy&23lW$-2w+DF4Qt%i`T3${7wHT@q{R;P^*pRNtVzgT>WKBE68eNt3S|j66WsdQ zp*tz+dl`c&q&_98NP&e-ktbB5RC^_%@#40WK#pvc{1=K}?OZR-<84#DF5KpwQdc(E zMxcI6;O}D`HHnw-xin=_V`gARf3pvfds06ncK;1cE75VgorF364|!V)+cmI(bEaf= ZGjDLsnIff5cGSMya~WMme*i@nNWGdg$5#3(yroyX`Uz zt12^zI$IJXIax6DzmK$3H_dt&VAv8r9{H#z*EKAa{-xFks%cCz&Z^c2=OfU2YZ{E8 zw8j`AIY=9XkH1ytTZHrFLW;Vk2fjwm$LyFFBY^3=3kfRi8kB42)-6iyy4u%yGgIEo z)^4U-gErMi_3Q2XD&t5g^WrGt7Q@zPoC1ab^Rr{OyvE&$Q+?WeO37agMNWl(ovje1 z+Y>RV?)M2}MT`IJJR8ZzIcO=%*meC7ogEAzxG=!2y2Kyj_-!%O8*1!n-G`Q!F$L}H zwk!#UGEW8bKW}$xA0glh0~J9&jfhYP#VI`WF@dq5RUDi^+}&)A7K2LI0JCABdu-hf z8i&!oO;T)CfS+&%18W}IhkivRMtkWwEm2PnT`h;%BWCl8NN5BuS<$Q$&n(kKLVN5m<6(U7}3I@vkvXbibl9ljED z5K%hdpy$kc8tGD{4O{up;=HbRyPX^xkAprM6Sdo7*pql`wpK!{daHq@n8gC`IA0by z!pXZs6}xZ>f5gPBpah?tfi*4LCIM3)EN`a=Q#q+hq>1dRPQ~O=Od?;0HwF1mj+htB zDSRko<|8diDexpCf)S5Gq`gNd5Iplk-?QXt z2#IhZ15XDSV|Cl}g@mNS8q+L#)MjNgv_k<sersF^(g)V@^cL0BLR0L literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/quotednum.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/quotednum.json.i new file mode 100644 index 0000000000000000000000000000000000000000..99bdadb03a8094c7a664fa0b1b9c6487836ab9dd GIT binary patch literal 1174 zcmV;H1Zn#K0RRC20000000dS501FZT00000003J5|NsC0|NsA}&@pzUed5Mc5u7pm zpm#%qoe%r~00000000000001ZoTXOVZsRr(efL)k+*ilS4cSHBvPqk!$RKO|xKzLYwMceuj!*ZG@8;K^?EUOw z`}5W9P4(eaod5CR>$h>l8N7T!>jF4qHak(IVi+RBdszsbW9nCE51XB7E7qdIXB48W z*#ztKNl_UMjxzYQvw%;*1de8BZ7>^2vf??CgO%}62`yNeA6fT_wUE+yP16WrmKyDe zsf3CUxiNW(Q)#NT^r8#=G|JjkrO}ShzK;OL_d5qcToBcVNwQonr)!i%RUC;+qCrwy zlX*!=W_((rER|er?Ho*VH4mtaw72^|koI;X(g+@6ZH)94Y7(J3=SnYnWXI4MHdvaP ztG?+$WLte}lGvNAz@(Tk`y(Sw89;`^R5-k`G8Gp+4$&5*nNg_A^060C+{s z8bd#K6IC7BM#%y6HPNm z5)}S`3Ir}#%}vAUU@{jz;*M`!JD+@t+E;w^cX;Up;qjlfbYrI7TJx$ycd%4cz_HQ9 zZQr`)V8P5m)HSmsvLN{pv^1?CL~`eOsDtn!QgN=Z%-p+D{}Y*s#5ubfrJAo;5tfCL z1+-v529%bi&yfE?09TuoD4*2lm9Q4LdRI)mDS&OJ@HOs&_6=0V6;d3PYj*^*`<6oo zp|kMZu)JL)v7*6>cLq8)fje(VOroO2+E{W^xWYTHEN0+!$x6|%Lt#a@Jn{^(JKg5| z7pUKmq!DcKZ`6KQvOjnl_$R%!oG^GEk2kolEfTF}?B^-B3C0;C_+K)ZEeC3g`==W zc>B57!S(!buaCK*X=v*TgiRG$VOP+)1mT>@HS>VMMJ)CNQcvIteg{tgycg zyq2txVbe_ElAYPexnOiwgPKEXxOBo|&!p@PjccvnRgtq9h%B>#w!A9>S)3wnT!HMm z-CgX&5g4m-r3E3!%XMd&av{z*C4$MtNu%cCNe-E77h>T~SBl*0k$2ZspnSh`BmZ}Y zJotm7#$gq`e%G+!#!WJ9zc6~sC)s~~;X5JS{7wMAaOW!bwhcZaJ&d}aK71z&ti*6@ z95cH~H8|wZej5$PlSd6QY1lq5P!?oo6laIa39<}Kn|GvyjBlL2#7q`0KB>)eiL41n zfg9OIDSGF^TCr-)pSjKWE@YBsum<7fISGyD5eTb~zZr}!`SCgsA};z(!t<;+q_FNg oBK2$tH6g6lalSyvYK_!Q!aP}IQS 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 H-Wf3B*8!tn literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/resource-named-service.want.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api-go-generator/testdata/resource-named-service.want.i new file mode 100644 index 0000000000000000000000000000000000000000..7663d0120d7f78d11dbf772beb9fafe380012a4d GIT binary patch literal 10812 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 GZo2SwmG_AN literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/google-api/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..2fc658a8234bf93790dc464aded93c2f29d6ddfd GIT binary patch literal 167 zcmZQzWME`~fOH_$1!Xh*hl1NmjhQ!|Y9IN2Bu_b1C^gk_dFck+Q#1i00000000000001ZoTXUXa^uDkeHOoBf~wsGWD3-}oTMy=aaotxO01Pi z)Mg)Cu3ZoqieurHnE@GE#edJ~p23BbR+~!nAQG7Fp6=6kPA1~4syABQFRl3c`0ZQq zV^!VfQe2j4EPlvy!AC}DX{27sEFMiJ;=PfgS_r#TMwqJ6sT66INrA`vY9)0kGcn(Y zM4ZmfkBr^qlDKk}$`YJ*nOKn~rI<^xsG2eps>Dkve!e`rcsIKc3zf@wL@YN+`jFg9 zNF}9`TH&73CaN^dkXA)emF{k{OtiliT6-&gxVdyU&vl}eH1Vk3mpB@!qOP%%{zAOq$A4_X%`c#$sKT%a~m8J$VGDJFxL&m&)6^Y8kP68yV1!ZhJvx#jC1N7G^ z^7~l4e!YM27aV;1EituLmMR||Y)1zsZ*)B-mBq%qtPnS z;)Alw^TZ|}bW&6JPj?7I!~mkBB?QDT&@Pf3es1G+4Wga%Nc??v{m#{kaMkD8<2DkZ zs$zFC?&2gO6z9#NbrcuB__RT$Yv)zIf}jRf{6Q-#!(V|^vg}r?Dw!PD{f?~`;+vdu>v{zK?xU9IU*V(^| zh0E~Br;K%#uX-R$m@f{8wJZ9L&IU>|&Din9JGG4T8y(<)LROOaA{MGla-W)>5p9Vg`TB1zYw5YH$|Dy?^wbzhqlK}!&o`pyHR%hn z?&Aaz-DS$4N$BTgMBJytS~wRX$heO?2ks=Ccj^@XW9?j8@6=Fl6v`ebtFj79?Lh|5R@=!=`Xr3W;05yGu^E1|_*Tf7I zfpIey(`!;!=D159!^hz~cs}0I=-F_8^usI_312jVAY${k&ss3@|F&HyTvP0<73_lJ zm&rP1eDpIT@^q3}j+T@7^0mk0Bx*rCq!ZiOv`@$7>*XP$ECjV@q?C;Tus9`jO zqpwt@TVCj*?}e!qRtDUcDf1wbg{ABVKWL?DU}i2cE!K%~L=wBQ-`(ZkQ$5H#FGO+HbYQ8gvRzw4`c~1v^)a#Tw}* zG@1wogE{@8kmyZo&>dF{_Wml#8=edX8|+ceZLC!jZ`$0u9~Os$ zHy+l*Hk(6R*(CQl={l(kS?+7JJ+w2a6F%Lamw5t!c|S_)oXTX3I5ku5lx(}pI$9n@ z!N2l&FcN0ZXs_3VWLs4+FC}FPPz~y#a{vkRA{I&;J7!k*gG63c4~P|~gsEk!7AoEG ze1`(cwV#*ygT@r9UAuFOn=*GPxehwYy|JDqVPNeLZ^;gQtQ|Vgha}J6Ip;N&jXHa_ zJLxQ4g6Ga_Apq5|Jr}3i?+=rSWpzZ%O|hI8Rs5E~j`#>BhLW$FE)Re3`e` z<|SozUGTqX)5iXnn73iy`kn?9Mt6awznPGz! zAb9oXQ_M2KBmNz|{Q~7VQEppGk4j@;|9=2=9(o@D00009FaQ7m00Bw>02c-T00000 z0018V00030|NsB(@=CrcQrfTk5_eY~+HGdeRp`ztC3Z-Ag1^QQ>3H#uy~KLZ(P;abwI$c5 zUSiGrGn2DzNwsfnwn+Q*XisN41&I(1jVVkB9ApTUHM9fN)Y$wW{ZMhAi%&94A7iY_ zLRTmaRuDOIZ)t^qZU(ouzJyqDz;n-eF-ZxRiK((AAKQ6O#TVnzRgB35jeG{BEt+YP zV*MI|R7KBc4*bZFX9n9Ow|fwv_njG$p2$319Ap5s`-|7gW_**M6oQMggqz#Dxh1^R z4$6RkkT=pN&D#ysl#_!2&_2V_8Fag3^bpzu&?@Khjd#*Fl^-tdgtVAx>-a`lhvoQ} MyQF&JFUQ(~1;&k66951J literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/go11.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/go11.go.i new file mode 100644 index 0000000000000000000000000000000000000000..9012950ba095701a921fda485ed12e46e012615f GIT binary patch literal 131 zcmZQzWME`~0B0cO1ZDgGhk}kt2QQXF)qtr|eSHP(q|(fs z6ovGBLp?(-u7bqm?8Nj`AU8ifCpEDklZz{@G%r~pGcU75LsOwzA+y*$-_TIOR-vS* JG*zLN3jm0LDX;(l literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/googleapi.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/googleapi.go.i new file mode 100644 index 0000000000000000000000000000000000000000..6eedb22cb97a3cc0938aa9cb358c773fdff054b4 GIT binary patch literal 4771 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 aY^XfVUPcZaDILdh;_N$mYewQs!*(6@F7_ z&PtP@=qv|#>} z=B;zX@#H#ly&9>u%a&G6@B>*Q>%#GA_}(6a4#$1x>hm7JyAN}g)+2+S5uM==X~BE*(_NhH=o`HE8z@kQ~0^H$T_2hkr zmO>&pN0JU<;6?S$2i3%-#TxVFL>f~C?@B0JDbNfyW$~5@xsI4aX5#OyWQF|25^}C5 z>K9oU5w{EbEb6WgF4gNRYlEi2StP0=CB9`O{GY6z|J1%7xI$rSbw)+IHPAvaXe^j5 zfc%C#ZT#6^PvAbhzpI{@86})9gk{x#D=SmIA^FAZ5n*u)H?2qP;=piaLlVCd%w9&2 zj+t#R?jY7Ex8jK9+JYtCKEbx>dn#$~mi(2=0+=FNN2rtIh0mpQN$M zPof7LJQrdI9NM)cfoB9OP&jv?LZuGGy26@2r}_#SY{Jq_?Fo@CxAD!0n7!3>x>nx8 zeuq;M!p+byC_KiN_U}48Zrv*c%4?mu`&sXa?HtsxNx!cuaH`F)c0H8dn(eoy7`l#N zl>Rt`&by!6)GU(kHzXLjNET>&x!D3LV~#|Z{C%RaBxaZy8Xe6SQ&qR^@g>(BHMCCG z8#yWY-DcRsb&8q0{ld%R?StO;4ZSH+jsCvr`q2DLcm;}2Q^?PsaEj&LSp*Ba6k{oq zDtUCS=Jk~crRM|K3xjZF;F+Ni*C2Y>oH7NsEb*6yMae5un#lG%AAagNnKFre`)!i7 z2SzjL6gMxxOw>f!aL$4#Y=-C zRhllwnM+w!4)^Vml0!R-nh`#uCkcqJOK0VRi^pV`$%OB+d1aP+rq`=1nLtKDy{lsA$&p7CiJ05F%%-XS z49OT%Re8@Al8{c@#|<_F%Sje_Ini3E@s^n!J1Wn#TYnZ)+QiQ~muEJUsTHgoPUq;7`qI^>quHbGB?y&SP>9L3v8uza99ngT_A{qgu3uhxTTSjHlJLGhr zVXLs#7x@&sY21vnN{w8pF2`5QVXVfwwHvyzoxN<^t~!e)&qLNEX3Q;q7Nq@JJJ@C4 z=zlrL5EqVNr?(Bf=~dltpsjaRGxS7T64jZ_NfK{g(Zi(TGtiTgj9}z6ZVXNiJ20U( z+lww$><5v)H|db*mJ>fbf&dNNsB63f?Nj729|8b?xboZ{0`?w|cUZoVJcS0DwVJs~ zk zkfwo>797UZr6E%KRmMn{yG3wKey)_}oXQvq^5T!b>>{0oLB@t(Wljy&Sr(l7-rTWq zJpbz)Q))cx*|KT#=LDZo#!zaPXmI(_MKjO&Z0|Qd^WnN_BWEvlTaQ&;HzMuGfww=o zSg`_Lz>71|Mx-}=EbyNb29`cSUXZP+*4A{%Z%HLhq73 z!2~%3z7!$`u8P0?8M2A6_o>f!mQj@3f{ox*{+*>;~w6Tor`Ew|C9MGdqqn%1-Bl9THxo4a)fK3 zk}dopg=*mOmkvQ61$BHK5Bgs)wF;avbd#-^1Hz;zo7=m_CR|`F79gb{A#x2>cV~cX z$6>IK7wg_Q|82F~|CNhr;;1%;(lDB*K=&^|z8-5JLBv#h$1X_E+LuWIl+Guxp+C7! zity+KNNKQqYXnO`byRcnLXD`^&Bd5;r_plbY!%V3&Dl<+v*eu;^>+m!`jOSWio;u% QbQoJ=uFCnD>`OoY3sfn;OaK4? literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/transport/apikey.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/transport/apikey.go.i new file mode 100644 index 0000000000000000000000000000000000000000..2a06017bf74684cc2e72e376a8ad06101de74477 GIT binary patch literal 825 zcmZQzWME_f1147n29^K_n?e0Q6iD^z+6YVCe0kz!Tyd6Ju&+7iE*7X7FjX-pH~4hk zZ36+D+3_2%dUD0=`fAv~U%Ak97Te0VH4M6IRg}0^eoA!K`1Jnn()*c=vP+(xD@ZFd zoq1sHTlVF%%?^AyeO7oR6hSy+7SXU{#JHcx4%`JGB96{pEtZ14@5&$6cP(6+UD(KoEF zE)U++x=wma=D8!hJK$*-*{!~vZI^%uDHGQTWfuWE2&oekBeBfE1zm_M9-9LoA5<{L@)AIZqz=h z+Gex%*o--aHZ4=QxBA9DQ8l%d`1e!7x#qIU)SZ+3FYV^}zBaLYES%eJRYe(jO? z>~|tM+R)tfzytsE&RDkzTi$1H;Sk?EOU&f_{&=1oM^H)vB|ji20VYB)14#IR7@%~> zc&XfuBmU=Bu|M7XGtx|YRi&PG!4!e$iaE&%33}-X3G+@KII!UG%;`~bQ=(QRq^@2N zIwk7F(U}ob;&>i89{K9jT=Rv=JGfiR)MRHvm6?&jh98VyEsK>-va3#Oo~m&}tD)re u&S$F6moH&5Ef8BeZHm}aO_8ZDSf5URwzNegRV-tLV@XyKBZKoKwP*k$$!uu= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/types.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/googleapi/types.go.i new file mode 100644 index 0000000000000000000000000000000000000000..4e07ba379d7fab9511dfc8b15e5abff8080f86bc GIT binary patch literal 813 zcmV+|1Je8e0RRC20000000Qj*01W{E00000003J5|NsC0|NsB+S(W3zl+Rf@?@wAC zZtuqgP}#Ns00000000000001ZoZVJUZyGTWJ>y?7S?B|=sHdp+J=N}^3r$N{A%v@_#3&+qNb(rm(ony<8&Of7U;?Jj&(YLam1 z$*2M6Ndi7)Ky$WgTUQ z-~bKM`F8W;xtowPGtna0_s_ULSN=kcqq{9&ee`qmQ&zbD-C~0rM`eO z2gUiioimPR;;t(^w-SS_torp{Ks!-5E%cAYw&xn`((sQn@FU z*fshUf#jv^n00000000000001ZoOM&dZqq;zJ!ijSx(G;+>kzxC+Rz@LZBQlP()dIx zb!(541!vcI*RG-{|IUo@og($0H3Z|2Rc$78s#<)+fhm51p4B!jFa|N|pXpOC(9|NR?U$y)JF#VJHR?4VBbp zIsW0Skpxtj7npiJdUT#BDMmu%wMk(?z+zLP8+v%xv*BU{TQTqi!vdVI>eMqZxQ-*T z@8igEaD2qU@ev0JF^S$&2~iw%+?=9$VO1CI#GrxMIlNi)inCsFdpHRo3LxGEo%*bo z-xCu!JA=5R6VB@kZkg^-PU;J9|4o`Rz3*f@38z#n>^SObX?*}#Room;F8r!0w^GHh z8Hs_;Tk7B(j4s+)_;9W~u>_CW{6}Rx=iYB6xstQ*@^B&p8PONZyFikozrd5}$?0i) zG(C-&O}dnhx-km=04^-xwetLcApYK{C;)`fS^=3X^V?)XSWJ5?^b K6Tbm6og5Buxh-P= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupsmigration/v1/groupsmigration-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupsmigration/v1/groupsmigration-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..65d646c8816434ce67863357dd5006014cc2ba7d GIT binary patch literal 2840 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 IKNRu}0L~a?3W`z$0R=<^L`5%% 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupssettings/v1/groupssettings-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/groupssettings/v1/groupssettings-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..055eea61a7a2bd4810be622f94dbf27557c29ea7 GIT binary patch literal 11682 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/identitytoolkit/v3/identitytoolkit-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/identitytoolkit/v3/identitytoolkit-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..96b9ec30363f8c55d701e9b7cd150d04ab5e7da0 GIT binary patch literal 6761 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/last-change.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/last-change.i new file mode 100644 index 0000000000000000000000000000000000000000..16b0bd0e03ca1122f8997939b7f0c11fd4b96a3e GIT binary patch literal 1146 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/latitude/v1/latitude-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/latitude/v1/latitude-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..6fa8024b768261c56291b0f2784d35cdd589857c GIT binary patch literal 12126 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 Ux`M`S-rj&I`@az9KS8(u58WdX0ssI2 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/lib/codereview/codereview.cfg.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/lib/codereview/codereview.cfg.i new file mode 100644 index 0000000000000000000000000000000000000000..b860e488201f0adb735fd5673b94f81caaacb1bf GIT binary patch literal 216 zcmZQzWME`~01Y6e4rR;!hk_I7;s>gG73`+X;4hh55zl$HwKN8*227Qvq^2d7=9DBS zTPdXH=OpH(>!zfZIi%<3r{|=m7v+~06ze7D=W>A+gKS`6FaTnGAO_hR2gD2@t3GZD q%B_4jzctm&=cVe6vwL4`n$QiBg8?k|B!$Y?K literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..3a1b2b921743d5d65cd5718118430c26e6353e1a GIT binary patch literal 4075 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 bfpDassb>_y7~%l+w!*{1Ip)ER|CQ-Kod6mo literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/licensing/v1/licensing-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..cb4b638238089648fba021825d8efd5691dd6b8e GIT binary patch literal 5116 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 Qf&KN_-meGNL%0_I16Hs$FaQ7m literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mapsengine/v1/mapsengine-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mapsengine/v1/mapsengine-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..375c67c5be5ebaa96fe40d35237553740a53a583 GIT binary patch literal 11189 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 YTu)a}Orhlkh=&gC{{6@Q2baLg-Y+2!C;$Ke literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..b22379db1260f7b84d1e4eda7febd0db1204b1e5 GIT binary patch literal 17456 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 O`W;f%#@1gG?H!r1pYJ{Z literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/mirror/v1/mirror-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..895fdc64791ed51aed07bdf07e24cb03c204d07b GIT binary patch literal 19175 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 z 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

1d7Gyzw{{DiaF&$WXhF01Qd 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 C2WCA0 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..3d695b82cc2d8b139d0672f027051b11c155aa51 GIT binary patch literal 5194 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/moderator/v1/moderator-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..dd7dce488fb061560e56bbf2cde8a2255c38d8c5 GIT binary patch literal 32380 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v1/oauth2-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v1/oauth2-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..914b0bbfcce9f74b79379921db9a4ce481bd3d06 GIT binary patch literal 6951 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..0a6170404fb51c038236b8df39d0a19fd5f7c11b GIT binary patch literal 6492 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/oauth2/v2/oauth2-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..b60df7de7cdc04bde645addbf46dacf48d87d5f3 GIT binary patch literal 9051 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 MVa=ax86#u=A9xD>`~Uy| literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..0d06a31c024c547a8b6c692ff161b00e1d32e965 GIT binary patch literal 217 zcmZQzWME`~fSEw*6_m~P9}3t{eK~365bny?U>w(0Ui8l3)%WR8HDIb@&gnDW=QMpi zLjx`reCPl4o&Vw$eLb&h-+j;cT?I-#3BT*?nIHMD z^{`*;b37+E>(|SlKVMp|+||iCbJxqCyG~lpTv@4FC2;V`pD7`GpZtmW+f$;FTGbh& z*ys3en@iRi{Zo3n7xj%F6@4%N{H2h08!PvVWy_y2iWa9n`o?u(XAHxI_rCT3y+dP8 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/orkut-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/orkut/v2/orkut-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..15e413e194706fc50128bc8513543c82b0acaccf GIT binary patch literal 13150 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

L~|8Z${zVQ^Ks#MdM+v|zmItrBgr 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 X?Wn_#6CReF=~Y_U2X-O`7wZ2XaZR|w literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..1363d7cd308038cc0ab6615fcd396bc1831e78c9 GIT binary patch literal 225 zcmZQzWME`~fQ3NnAC%4b9}0q3?Mavt$M8F4>#Vy^cDbwn$YM`|ssU3Kb9(zXavd^| zX!&l_>fB!D(ZqjYVMb4r(ClkFTfRIuH&Hvd>U@4ThZ2V$d-;9YIo#LoS4X7m42fE~ z?ZM-#pPD5bb|#z*y!2(jzlSici;EEWU6GU IObE3C0JpPX^Z)<= literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..d0b0ea0ef995bbaec6e75cc65f94450780e442fe GIT binary patch literal 7468 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 OkD1sz06+rYyZ#SR9{>vg literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/pagespeedonline/v1/pagespeedonline-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..8473b90fe44215e645737311e48f331e9b1d99ff GIT binary patch literal 12138 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 Xd4F0O?IKc1B$12e2_cq7@Z0|Z>ZBYN literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..643f852981ae0e900aa4cede9d8e4e3f1ad71fe3 GIT binary patch literal 216 zcmZQzWME`~fEhsQ1(ePH9|~suN4RRg9f=A1s`eNNNY zGc@30!FT>o-}x_I(bx03_TBf4-&LU0GcJxI-Xh*Dp%*!LzVa8AcD8G3o$$NPp81jg zS`YihKF4!%vwpq&`SYda%3YnTGk3lGx$C6m%$1d@RRRZ}{FxH6_sO4_zda=?sa2gZ yihYjnwz*{KoY2(0rf>YD=zIC+FNM6@SU;9t4*uNWwbQ7un&m}=9)s39pBMo7i(-rb literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..83568465606c608a3313f3a473b43880b223d4b3 GIT binary patch literal 27646 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1/plus-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..d8240d9779a64f95b4594b469b2833386077b17c GIT binary patch literal 56126 zcmYg%18}9m8f9!J6K7)Ewr$(CZQFJxwr$(CZF6VdzPGif>O*y%uG`)B>;9VnfB=91 z{{fl~0D$q!|MdaDfBuV^hg_xD8Ms8JI#S~Mk{P9JLRXaka{go7vaYx-9XCW0a;J3Z zLpvhHLkqGFe>bf!*pRy*ahkGIOo*RTh`aOKiOIkKL4Yk1^8CD9jBwq>iAlCyE)6yP zLVP&AK07;GVX6%c-KUz`E~X?e_o@(9PDQi8ZxU;evY^gTV6r4PDI5@d&3#ol5OYtq zDcAa)E`q;UOmQJXR8g;WbdOiH*jLUq>OdT6G90bm7S~X@iCwK48g_QOpBO|sW5W3D zKXp>yEtj4JrM|L%nzn92dvw$))iU+2zMv!vac-mpY7{FH5^#6Q&(LF2B(po>u&|rU zEY;srKKS!pIRW&O!X(7nM4|F*s)CC4>Zp10YC5v?sy}ANfT>;7x?eogDbWdfyyc)5&BpMo;nwrWOs)}qo z$%0ElxVd91qX*3Ui-VF9p{6PYS`QH-b$*D1U9H{huodKdcvBzn;;GsTA6CX zBax*w4crvqRVjzCNK=e2AD_bnOT43D6E&UBeg6t2*6x0CGzp#8;a>H84b5458TroU zk&ikU!`F)nD%o%&P=jToy;l?yme0JOjb2b+e>PQ01b#dAw;9TDEX<=T*ZwHL(Dhn6 z)t*?N1JAy$ODPXh23VF+bh}(M&~YE$&myK->Aa#4j|VR%^GYu zdhx!z5O5>-D6X>{C)Hdf0GgBq{1w2O`KvP>)Zn3VyByxg@eN9lkd+ZI5;RslQJ3<> zFNvEYjpYPmYUVfyzI5Y__LRu7QN1rZ6a4uQl4CrJDHnWU4JsiWR7xM9B{e3CGQB(s zh(U>zA{Y_)G^job;ZNAu8+ipr^CJ;v2Sw(Uu^kbnD=JyWH!pjl9NwlzmDNSjaze+D z0@()*H42-n0>JL%r+ByMU4Poa2qfQq^8jHXHlnxlX@ zCa6aUx;uxedS^?V)H1N*-68|^V|Vv4ib?+rDD6E|3-v$F>$CkZ&!}x8 zX6=LDB@}Wbl}YBs6)Bib_86Q>zG9mx0T&@Ef?ueaoa1@QB&#YE zSWkjLZ)r6@dv^#L1_tYCSoy>t6*Qr}s{l8X@aCxO@cDXgD^(a8D&qX}Qkyi&2&M%4 zEazqmI3qnfBwtOw8zwPRdJ}vY>($!blhAA*tm1AvX)bLmKy8j~_OnZRbE#+2+|x<; zSVx=s<}{l97YM?YdfO-aND&_DCkcsruc|P1mff)&vR}xdo!$uU1g-021a0Lc*9w_S z(Oxq=js2yyv1ed$tC$A;I3lEW;0oIx)W2DS^>oN>5`Xi=FVhujq<#hLaWtS9Lg*27wxOmW%H=~5)HVtWS( znDhLRR}9(OsrtO@8aC-&sa--R9aG_MT~5RVYs*75wD>4F(4h6411H*qJnR5$5VGJ* zW!Dn2{p%H4NzqDk0F_|xiAyg49+^t(Kzz^@k6m_zGH~mv<55OaV0M8tGX*N3+4sDwxm;Ru1`wt+L6Q7IgMgFM5>?EKU zIVfPxmOC15XAw8~&VbPXv?Rm(VB|;Ay_^rL6 z7dVSa2@zdB$DqsMc@=YkjxN9_#l~y=6tA%~;2|VJGh)PHbP)Y@Q+Ev?UR{6Pp4z#s zoi(Y7gpv(X%|p(L6-WL^=-&&~2$-Fj)@0&@6>r^K&CUzQj$ET(6FoJe-O>&HG-bnn z&}+dJWL15r-0-BajjMc8(Kiqd?ZkNvH9wayJMa9+<`@-1?)&`yIMg@Kz8n(d&xqe0 zdPRzkQHrPFG%Lv?Hj##opZ6zn3Y8IvZyz-pvF!!~M6VztU@5V^K<^Sw@0T6Gpt9{* z8coaF;-kN>su>$Cg{jUTl3ok2l|B@Bxz?owK`z1=*~<7Ok*Q*4=>lN{SURj{r=dp7 zmB>?5hH0><8s$H_~1B7&2|(+nPZbrrrQRI-xb8f4s|OE5RTRX6tFD$P&X>+fh7c`J=^ z4oGC|PNI)oWl)Pl`L=os#@E@-QlT=M@koc5!?WoOz$3f)xA{ie28@Z}5pNLzySGU~ zh@i05(q{`$G9Rf06Lu*I?5(TntA6co|2CXsGH)h%8iN6f75*clrYBp9!s(3dmEJJ9lOghKRC7WZvw>PvmBRdg+tiQbYSb+Sej0UO}0g5VLt3ZBvh6}CnT zm(kiB{JwzQALxzAMu@Dc!7>Ekp4p3C2=aXE{z^9{@j?rIA_wQo0{7Yy)%HK@?2`(} z-JT|T&B3y&%sy>7Q=&#~dwjGyO)s^Blx>dl+lIH%-)W7>kwkRHhmO??j)n2rcpu)|*`#_S1R|w>GLi2tnp6 zbNT`@GMl@w%5h@6ClL*HMP{Ea>_AmbBS>(Blmu}NmY#=fO&gO;U(O4*goqtK%+XRQ zhF%5KK)DIo<3EcNxamj2W3_@eWjR)!%p*;+qs>4gfw$V%v2j|{cTM{AX*zCFM7OuC z5m~96XNQG3R(sLQKLvE`<4L(~@4Rss%`EX5K)Fr23@TkVR`dWK3UjFwCv}9lmlbb* z#H0*8F4tNzZ|c5Q55?H*p4wgRHX5X$UaS#vA0+9ZKfOQDrx@^0a^KzUsnR?BR=!|R zJXT@v-(|;U?P%niT}`bTYqP8>cieqe2|WUWzq?<9@AU$WIt7vU0!Ic_z+@YepH9~V zZh4~<{bf7Pitoj{x!p=BB^E09X{BDNXNg7+wQwrhXJ7s+iebj5=nSIN{1MA;{8Xe$ zzm+Py?>(9wDg=~YlQ`0UX*JmoPnBe3y@%x1y{-~3#~ky34#};B><&oX*tWdU=GG?< zt)zB9h^`Wt5_p8hw}INP;5Wh|Woasdi*>v?T9*@;(@{+Hq_{pU#XCILu@xT4(dSz+ z1@v=TDgo>!&_N!cv60_zP@81@($gm?7qaGBj$RFd>iXT`E(@yegy4=HC#9OwyXK@p zk|ReaC|~I@MA-)5lzF(f1RrNGr+G*z=@PO(r(GyVRNAE@1zw4l3!fwnCrpX%ENNyw zu~I@9_p2kf96tjO`}qExpkTDh&&_tza{4*#y_c=1Vx0P+VTCJe9W8EwcHLr;OQ=qT zJT>Dj^Q};A)+iYo+Tz8UnwFSW=248XAD&v*O1Vl)dL+w>8=&7=6uskz?ApJ?sO;&E z>8#bPdxS6hypfh1_Xe%B1AzJv6m^tu7qsl@*j(cIJH)U8O~OEA#=>Xj13NM-*~Ga) zT>6ZZSp8LXp{Y1FOM%3GQx+&tv|A4O^k8!kyOd?AN0s_e8XKFtELETK=m4}sieL%YV&tm7g@rE*pLT!TGQLK_KYO6GH$3N*jy33Yb{NA#Ot&uVQuH&U$VQ% zcDbC~cmD+Vf|rzl%jN4VahI(pT>96@S&+ z=vp0LksaUA7(VT#=lciE`jq9Zgm`!&+z^7J?D%Sgbtm*4WAIYpA1*cce_;^?QqlG# z#eZf^c)bCo{}Nm%ZWI2LbYFUmqLFfhzwwfmJ-6&k78h4(EyUikc_1mjvH!Kky7-s} z2|8&CaMaYo?j~OzK|P@?C=#d(4q%TLG}TViQo)Q~;z4Y^3iBGA0z3TMOB!(*FD|jX z#W5N+-z>}6>~=f-d{6%b0?DDkR2?y$d(zPx_gL737~OC3H_^-~7KNKU%=0~+Eu|t( zL0@teQj*Qtxp#8aGpA8t)>;F4(lRz`&^Ev;O{!)$nf{58Z<8S6AUMhAfS2gXp-|4F z-aW`EXggfvyK;S@;B0RR!yi6kp)S}|taIIFKJMgffl9u@y{x5ahacr14=-kB)YtLN zBcwD?2x)#=q_zn>D572qsL8OaqRRv2k+B%FCwq>`KYf*EK^TaSb{~m)Z+g!aJ2Z`X z&uV`DY5+T^W-Qef#(O#Bghm!68na(TGIs@6uXzPw2vgR~h`T~MsuYC@TEVt6egk@s z!IDnD4qL8Wt#4!-6IXL5+PJryN+r3Z11r}GKR>W5Y;*e0VNb}}Zu>@Oh}#~$84gUE zr|PY5APXah=*qQdGIfMZRG^~|m$fZ^6S%b)Vfsy_5x=%)IpQ}=9Pvjf9Irad^td>2 zM!SI@wX>|XpQc>BdlA~y*z-XMh(6ww*sY|l`Gk?&P@i@6SZ?4a`^>9yLD=_Uno-e_ z3vzhhayYr-aBA%_qp5-Jfl2{h>e#v9GO(mph@3>jSE}~-2$gu7Hnq~|e>k8^(E$>Ppz3Bh=xrnja;bf@u zxe^0}Wog;^T#inxAKa9bYZEB8P(tkUOfUcXU7Uy)Fl-x&hquKu_e$b9c84Fd%Nc5d zvnAGub--IfWfMN^WVo{?f8CUwty9EM!A(a?Grx@5mn?rlOkpC%MTtOuvvML>4q8TIGA(LNf@Mtpk=n1u=mBI5R`TUz6*SDIJes!odW?YfH}UM}{Q7e7*KIj;Mbu3B@4E^YVKKFHD_ zRE^-S0^%_}q!fdN$8gkM9{sshrx%*N$ok&6c&|V zzHBZZ8mjIt(N8*p63<)kVdNGx`}SGIZ$++v)`$Vu&czqF*E;>W9DQ{nI#Vf7TmpN- z5+EZc>RU>J6DB7scGmO=S*onqSmFB>Aup;)i*B;prnftg^!Ev+&OYT?a4Mbg3Dv9z zEK*(XJIr22fkUj=9B#s8dckf`DR5HCS<%*r?wd|*o}4dB0mh~eRB0AqxLZ{{y&iz$ zpl+CeuAkW-b%fJ`8s9W|#F;bcY1QK1?dG9bPV;*9BSJ z5kk6;DvNN+Au8F$&~}WH`!^}A70-tY?_S|vuSM{>Ol{oA6RO) zk7Z#nd@VnifpwI8r9)3!M>;4Xj_qw{o-#&!qq@1wh-oO2J*5#$QAgQYqRTNKr^ zri@XJ5a)k&J%eB0g#qPW=q0UnR?Q&LU(vZH?sp^-km_1y-(M-BWO;g+Zj+umcp%Z~ zU7pyvn7i$mw9@kiNxg|kkheNOG8h^|*C zNrsG}zZN8(2GHk&jD>Z%%akW;UL9Ve=5Wv*lsjj-Q~Gi{#!XzC_xfH5+GMTX5`46{ z823H20btv%abHAy<<`M#XCa8t>0$b~+h%<}fHrDLkt~~E^pfCTf{q7Wfm7?b(@O35 zA|LKdX7fJ2-`{4d&cECo!w*2#J@?&z`3Avuguw2-eR4wlzTQW0?#%ZVjA^cEmEGL? zIv-qU@?`2KY5EmGwLs0>5RkczPy(~IuOo>4cRg4mL|L$$3+$>LL}}+3kjc804Ie7# z<^4S+`Op`nFQ@M&sJ>#<0`Vtzr$y8;Fql>^%znXjKV~d{%b%ANZy$!Z$e*WapI2;8 zID5#Ql*Gkw5IzC`_*>-qF)qyK{Z#}Iw)6JGzVGJP_l0xk4l3#p=uWe?A=jG&JLP4x zN}clA=e~6)Bbq`>x2Mr?wh>5pp#vv>$D^b1Mp4_fL$ITU^~3OT`aA6vx~H1411-=M zaT8wbZWkqU7qaN#$I{1i_H2Xx2H69x$MKo8Gv@Ygd^Z{7`=Je2b9t^Sqt};HM>c3@ zyMtUd&=nacNPcj+t?<<8Dl-}K76)B$jS`W^LrW!*;XoXlFuT zXQ|_x@P1>V59?7oq;Vyud))TABo5!ALhNcXv#ibS-8ncV~ag>=cbE-?G+>m;Pn*aO%YdXZ3y$+~U6sQ?!bwzl zF*;4jQ9suHJ4odaQ5Q+GiY2VFQ*F`BZS)2`;rmajSw|ylAR=D(zh6Qd_@`lS0RY;g z|9O7_^H%`>6_Tbls({g}VD;7Q8hDEcGxRg28~ZhdYtXro{Pd9NxZF$WSd_q(l-L)l9V`wnRs4#q=Ef*;_*Jq0ya;3(eLXeeJn z1+?Cj@AHnw0&uhw#Ke@%$QXG|`;%E8SsRn%_B!7k2c4g`BlbRAtD8hU5o?I-8T1a5 z4Ev4}YEm|gE(mkXBko5v=l0v!5H}o|Gv--P_0m2jJU8;)5Ww$3QQ>UMjIm--_JRKbOIr{Nu0LZN7T6pvOGN zb7@>@^7nVw+Wo~u!LdBk-jZ=a4d&?b36pB$T=#y6GOR+c%*hP`kdv{bNHV?Z0{uxv zQLjQ?$^Ka)gR)4NvWJ&74CAqg&gi&tFM}%^v7&g2Q1f0=0{)6bY2pxr5eP)s!$gp{ z3u1W6i|{5wLCEJ-uzm)>Cy}(Eks~(4g@~D<A6 z?&1!1NLb^Ckp_#V?-8Z+N<@C_4q$ZU{KRIPWb`Ze4&Olo$nT-&hxLiACq4vuIFY`M z5%4Z_Ar6W;SFw))j^YtfzqcR^2xJ%i^)b*73Xt|7sX@$5fh6};USwoYxsGx-`J87vywD3$j&qeBboe2vQz&~9+zHGKeG9Vf6rng353_o5? zUKzX}c;w}ieKnG)3~?O=Fgt<# zVBQ63+@HkSkB?Zp^y%9Oso?OFjCCnI_nnY{YzaD^=fe6QC!->;87`&j(WZ z9$FcSv&qfe$eB0ZIUr|IodISt@^Ct>bISe);ur|T?;uLzxM{WtI1{4#H-7>pNRUy1 z{LK?9LNp38nsXE`h=nkUwc=O#wtP9JLT#+kw_l?U`dg5l(~A%D zn$5JIWsCxgyj|!2E?_4G=Jn`51Lwcxvo*VSM964WVxr654_4L&DTK9$ZBov-Ms>;xT}UbJ~>7^TCK+& z&Xw=N9MziDdq31FP)*SeguwYof>a3JN1zPbF} z*{h*$*ee%AlyPJvAala8y$MR8aR2lw#{zSlYg2&tDP)Tt)FOijJ>U3#$-AQt}tbe#a%K15nYSn!bK^ZHA>OHstyBku2VJIC7;~bDC-4NCT z@hGW6yFrrMazO&ywe#K2!5CdsWXIkIX#?}<+ekH0p8;(6dk3$DG%s=C&f1_A34E~w z2q;i6Bm^yPF1>QQ@qoHMWenR5zUEgvWXkR}i0UnOv@9MNO=N2*Vv>6IZD`s`moqEr zlDZNq%w+mD|E(m#Iff*-iH{(|*6#IvK|kACWO;$DvOdFTNIL;p()t8-wTn(PdF7ok zlE_wWb_=Z~iiGIOa$Qn=uM15vKzn&UJ$;JDodeyjy@G3Jv&y;BR&eSH{&9+i@>@@* zDKniXuc@7NZ^EM^x9v44{L+Oez8e$I6Y%??5ONUN@V#$9m=i%7B~rF**>r}9Jzq%Y zvaMz+T?n(pa%4I?Yp)33uu9-elwN48r-4x1J3WGrSm@MZO)db;On8qZkVygZ;@Hm#R8IC&bAbw*KIn7w++@3Y<>wqoL6cm?c1b zt(x4Go1DikvY(6jC&X}UY?V64*|Z-Ftgbwq<;gewS_x6Vi3-Oonz;@4I$l~bU~|c;HiR5~8R1rg;8y1DyD{Tu;<*p|Iz(e#l=oSjY z$WRQJD3~`s{xnh&_r`)AVR3@1@dMdMJizLCANW~=$juF&9UI?dP^toor z0uVa{7BsT;KW~fjyPd;!ig6MSxZWBTH50z#D3c@X%alU6k$sV|Nwqiz?8U%9T5i;j{Tget|Q4AUv?Q#5sKdYu{>&Cwp%2H%$Dj;)N-$7r-_ zptfQax?ms$4;B;ozNr{A>Ts7=waLrjonPq3Ccr=Qw1)-+Wf-uNX;$6?EL~A|D5$hb z1*y`sK+Q^!N)!?v$B6wW@UR9&o>aasnY_|GHZUF4LX?ZN(|!^ICb~SDY^LB z+HnZ8si@gojtcc6X>3v;>e%) zBKw7>$lo&r4yPTo0qr(L(qY0 zqR>rXowt85h24WnV;-RqPu7vB>myI<$u*KU%Ztql;XGJ{eXFi5o5fZCxEMN6MixY) zJV+Vmo>!L~N>MZ2snayMwxlVO>2PetTR|E z^7W*c!fquVhqkLd7H209n5umuo z1aacQ2Ew?=FC-^ROeu?K^|Uh(FjwDqR`Z)Bb5!vhlx^Acp(@L)HdBW^RNXg{$ROh{ z!p1U!L#nUR*4&;m+^C#U&zamr+;A$fIU{<9zL#p>my{)DK)fxlNX}?FH(WM~yCYm; zW2P?s(e-V=z_0;WK27wE18%7cR-=8aQJRZjLn+B zD7A@O*M**_u*Y(~LTQYz?(Db0P&o61VRQ*9rV2f@&)&~mfm$R< zSb^QfXMB}*ZcOsczQxk0rJ2v|*%0lVy0@nNR)u_1$9-aXSajR$h)9kk+*!bWW1-Az zs;ZMf{L;Xj0y%XFDWlF&79@P(kERA^TyIIXx3Bzk!lXqLoydMieJ1gM<3N*qDDKt{ z^B8xv@B9?Np+#FeW>B`n9GzMzh&dK&%J}1A9(Ac0zwAli@0^bO^JE=%NuRU6To>CO zbJ`yZY|+o928tWcj$DQzImUFj6e7de_<1w2o7+^#j$X6@aJERwe$@Be(hStoN;o^u ze7cTOYdF)^0{RV~5kyk=Z`nuO@J|Ca0swT4|MUI=_OJYBy{HntIOhKNvx1DRm;^I- z6j=j(Q~Dpqf0bKSw1TwkCLau}=sl_3i$a;OI==ll=$r$Y0VNTSOzE$N1{nrAWKrZ$ z3(cnyC1qc*AJ`e9TB5vWa7&_%hwX=kM57ZyBty&G71;iK6Gu}w@AgjqsnAIYRX9r< zUW(y_&OTI)=WLVLc$=9MyJ|`&icms_@kKt+M*0Tmv}6pWNok(kRG~jZQi&7uSKpF; z^v;kgtkg?yR)1R8<78n-!({nfI6?}v;OyTNccNhI(U!uRR3P~;q+yh! zqFU0+<7OfI^;ktB&v#V>Zapt9#5l##^^1B!B(tQN-b6iu#*X6bS*)efh%x7!9zgka zhrx!9R{jdyYY_EfVsYsj9l$Uo&rTG*)cGIT3*1fAbMcnK`m!qbW)kgDzFU zT=Bfo%!AeJui!a0e)pVWKXFTV=U|t418ny2dj9+CNKOA~;4%P!{*iy)U%>qppnrP= zAF(BsY^-ET&zVbX?H0vHDIK0pH5ZG#Rc>2GY9d}cp!7R%gaH0qn-CvcqAT+Ehy;Q#EG~{aw6(f>bu*449stFa2&#H8_?l7?z9vbot6)^4;Gl5K!z&$F5|S zO|CEb2CLl9IV{E8ozc&JkhQO9qOfwxr?C!9Ux;nHomflnf1p=ae_H#fq!KXcMeQ7! z*{oTrC3AN(Bprinj!o?Wd{RYGVt2*>2!p&p3|1`nJ92y`QIbCXWA|@aF%PoxlPpC| zA`003(GjUvvigk94mCVS66tLfk{aKlM*(|cqGzX-LhKvW38Oik5Jijcae+|kHJ~Xk z${)=f)Ayd?4zx;M{q1BVWxL?2KAk>S5b@HeU^6!WI=db4yOlmbWF#;ZaEJLonN2@UK!?32ZvA*fU^U-N z=lcs`f1$LEBsFICCE++G5%4frR`gf&&`HlyP_M>t%ja%P3xCo2OFZhGD z+H(nDEge;jJbha8VP@>&U=@(5>Pw~RiIV-^220nem*;cqaa+wN&93!X&xZn8P~+0= zi!y>=viQ|rl8Zg=Y-lc|NTC#?#kmn?xgiFrM;Ua9S7-uZsVQk{o0Y$$bIjZ{30J(I zafWVWuk%%7<+O;h7_&ojraLppYi7CoMN^?wJ0H)h5cY3*Xn*ZL$O>S4-1Rig`|cLO z6S(DN@)!}s+ASvkpy7AF3Wr&`1`=!i(1U!<@Kl>Z)_q7o*x#+at8UVqJAMqA>4 z|MA^wMHcvc_kE}_wbs@3!P(yp{ida07mNGXUnvp(X&|@%Z*YhIm+-Hn_icwW&HF`9 zJ>6N&45Mbc_<-_L{bTf+(mhBbi z%3W1JY`1^_FTlNNj2saq!l4BuIpc=$c?5I6vcu>oY_Y_?nLG&259z_o`Nv(^&!Kzw zQsuHET`{nhr`My1SukTncnGN#f?-CT=O?v>)r_pIlcb7Ej10tr3G&`Rr&FtdAD`_u zg+nR`CIg99E z6)IP7Ons2&aS?3&wRxW-&k+l9ER*iO#qf+7}giTKrBfomfbhM5RSkQ7SW} zkV(dZkm&1-PM;*uYQmA-QE(WTELXc0fhs~H$`V#xt5W)M6PBoDt4!A@UiQX0{B^$_ zuK+JlV&KiNH)z4G116*oa{(g;&vmWTdW#4JsW8)Y`i|MYQ_kGnr$A(uGM+V!ECO4= zLh9}`F;b2DGhAzTGYfQFvmKP)S1@L%6o06DH=!+Oyg}1^Cx3a;+ji-3tK5!LB$ zuqDU$C(=ycdSHg9iw$1I++eRA_ON=Jyqg<1ZvaqVzCRSGW9X|LHeZhwvRAE~M-8mK zKaJZ^bs2fq4N}zJk64$xT^E6tU9BBLml~%YZ4|$EWNycahov`G$4UK`43~Aftm`-z zI$iwj2N2P~n|HU75*#DyN|4mB%MKb7L0fwm=_7vn&+^1B) zi+^cScIIJry!#*ffA;_82c`!A=-d2n+P}N zXm)zpObjotnIItAB_KIEK=>O1i&B$+=Thq${4E%h|91Ca)tzyt^TyM5hrz`olAdiG zz2jU;c7S=iw-&5r1A=E|Rl*2Opg{#N8FC5>Um#A*3@SOK6PmcPxqSDoHePs_lwG1m z%Ne8NVLc$5vC0J>)wrsQT5=grKs_v?BcHvvE05 znlBggq$aLSBZCGmn0!&Av!bCv$dQ_LU`Dymju@frF?282A!lgh0~He^a-#eUCB*`Q zaCb2a;@G$Z5ZcR|dkZ<)IW+ziE9Mi$a6pN0>D6su4t$10cq+)PYK48aP7@aM0*di| zM;ZY|BEiH5IzfiTh!@v$3V1S!z{qDt{~)Xpw2(5|1n>>`;X*LOY(k?~#de_ z76bvMVSAf5<-LmD;{5Q}`zrld=W9k1%gWcY3)IVe#YIu&i&9A)d94~C{-TPfB&#|8 zG0wyVi5|dl;}t}}!(U?8{MKMD>yCXwqpkGY{BEr0n{gS(OSBL>)&Y{XRIBa}EP!r- zEbaK2kK;>veNBiFYmFZ>k-rKw-p%^DVOXM>bZzaDmNU`q>cdjFYZ!jZb)yJlW$ucN z{1)l3c{zX0))!zb_0{h|FVx?Xmj2GMR<}jaAZPl~vwGt;_i1T?V2mxL6cTE@vP#`X*kKeJVI#mV<_yYGk3@l36MIi@UDm@< zjK0BU*?0W2J-VKUX=Al!#JWP|<7i~v-T0a-vi#73`q6XB3wWdYlJl?A(6#;3fcXF4 zjPlptg#SEV8Sk8?S*70jmfj+*835jO%DVCy`^Wwt{(flUxMhIp5rVf&Wck?Z^9a^Z zoIC*~;sgLe6|hZRR^kma>sZb9@Mimx5lZrQ;U;aqi4d3&Q-*_2rZQjD!y07gQr)nk zM(pS{^JG-5dx6@qydVL|J-}Z`mWKPJO#{T`;dsq*Oh|R|Tt*>MUfl9}=F^ zF49xET=Z8&@1sbN6ZYWA_+)@A6r1BLxY$N!5FAG7b7ERiu@BzqmV4xMd4k-!j&R_A zV%{mw&^D=dmHssp{rZ2J>+h7k$NRqxhxXS({2S3=^A)5n9%(YbMk11EzZ8VYwo#Y= z%lVIS%lZ>d57$qJBG}bW{0c>BVah=OhKha)De%4_60uGp9f?pGHA&a6zRC`gsz*!^ z0KI!Q)@-H61biA4I|zs_3rw5adyekr4L(nG`v$6o1pmNRJnS&N>>whdB1{TRqN+GC zU!Ksso{acsQukm*-g%h%s0jyX1>8>awd<=F9t;wfvI48*LV}2BJ|ubC^-$vbBf*Ha zDIRNJQF6f^D}3x0wn#$i=3i+U0{`h>%>V#H)c?G{!22tZ|0=5TQrLs1NoH)RS$tHj zyP}?m{{6paQvY~=hwdvb$yg#$4f6*CZ2<$~nn6Q;DAG!8=IXL$ZoNEJ>I!b#wBIf5 zo|nd^A#0VBrR9%C#>EeF+*kSWY*YrZweuG0_I!B$e$Z$j;Ik5Tz&^b>2oN-4myq@+ zohh`Z> z3t};!M&0Q)_o)>+m^#@cs$XPD_I2qZ#@+6ZDI1PisXkD@(Ez?qL$D?c992-rn_l+Z z!Pj|P_Quh7L++d&3c13!elr=VCmb`*pS}VkRg@3+hc==80lcfio^2tvYJ0z}PA~4-WhopmG#4zKD1@Dj^d`Hw4J_YWRAOUc= zUw&UTHFa=sARo*`I^S8JW}RZO9G2I{-TMMu)AxXI+r>?8s0)DTU96$SZ&rBmXpHx+ z3TNbk^6oJD2sh}MmEHRwo#t(9NSG*`K12Xlm|s`aUC|rN?$QRF_9WQy>VCo-fsFU* z!H_!;_A-Ji-h<#CpL~1b4!<&E9ZF{*i9KB;<_04zNm7sosFYh0JE)Uzvd5ONKN=~K z4ow@V9r!@2e1YCJ_8%$+exG&O4( zN5~i#)gc$P%qHy%#Ml!N4FJ``#X~A;RTnJtBv9orYhKQ?N8>h*FuGzBJW*)vC|Czv zVt?dy|D;zWZ)9s$tZ~TeuX8OT`UL~3#vJfXvh6o_X&L#ZmKArr!m%zopK)mKT3=bI z1Q@)7fz+QHa#rfK8)4rYL{b z-*CR%Xf0<&VN8-F_}E5lTIxoKfG1s3{vCZOt)77|%V5xQ*I=k|bY=ssh{xuK*_$uN z8vWMi2B(-2oiNbw##rgtw?w`AQY~?y&a&V~j<)5u!LNv{V2@B%i6t#np5jce65uOs zqO>SIPS-0rlX^iUE!)MK+gwpFG*YLWRoah)w6v!Oc^snTeSi_?;mhx&%A%fc9r_4D z^}{SBH&Io=`M<67(^PS+VOjULyfcEn`PtKh zX3+PfSOa$TD9Ivxblw^Fj{3intq$Q9&6P)L33>xe;^{4)Y4A;G6LAKM7T58P!4QB0 zNH(==(WFrME$)W`I{w~Xw@!4X96Q#LALSEQ#Sqr+;0D1t5+!~ID3&@D1S(*MT&}v6 ze`J!=ym#_Efs`A*wuyrJJfu65Qxzj1!}f-P{nZv?P|$$m)XOGG%^Z8KbNI&41HO;O zME(U}O;x^(A{us(K3Oy-NgucsZMO}vMtjI;nDoBYx*mCU5P1*CA8D5!LkO)B7ey1@&z5u!l%5P^E92e>NC_7B z6RH%QRJ`b}qE6Cn$!M0FHYX(y{2`FZox*TCUW_#&OJnGDFu}<(!|kH z#czzSfg<4IH(YX!iN<{Oa0_A=n#mB=tqi&%@fe^3gkEf&r`m?29&qK` z%I?n6)>Z|p4S)b_Uq7456pm=+GT^1;(c$bo;6!SU7n^v!NW= zpT;#Yk9EAm-@^`}@+Jl|X3Hw~=9;Zb>q1cL%uHx7T-KZ3fPwR-xfTs}SGMVphovhQ zjPr0Vh4|?Ng0d}I5vPz5;Zm1jarMiDjA>JJ_SgZV4EM9kB10UD+9Bdt&5hcfnPMGm zAAuy+)go3fgrd_n;$uF07}8%xB#)-e=_8JpNACNfcoSrturSP_nNu7Dj943k*ArnK zCi)%#n>3CWpGLy~^Q^|(P-N_S^Z^ok$Gv4@23&2bRsI_yOKEgI``q+Y zqL*6)4DbMb3V3W19_GMMx8&2jW&>Fbciu1f=q-HXgbG9=pgwd*a?IjE%-PGTkV7CV zeBF)sdo3bhfBJQoBrSp39(hvA*wYV$FTs)S%<~&YH8}+X^9~zf7sav;DPz6X_ZJzs zEbwMA(57v=>TV(furKtbU&&LX3%a({_!kvxK}9GYmDaAE6T1Hf1Dufw&IUO%jqKO% z*)C%{v~QWT>;f=}0(_frt_CoY6K(B}_otsfCTwjXlf|W6vI(l>pX#J(L1&2m5%Mrr zl`(ztWkBj=x+4nPV4$M4DsowV`PD%6^1K6KN3A4hE3z*U4+WQW@f^hp`zP%QH1CVX zKIee4GtMP2hp$nw5^E_S)$x^0_^%TCUn?W$npkPSP5l>z%=6cD4}M- zlBzq{aX0XBp>L~U1ZGBiB_yiz2{%&m3lu%fWGlWZk8`_%S>|xwx_>chLL+HZ6xC0U z-l#$7;N>fZccwRXhH3pFe`OZ>6V^EIvo~mL`Gl6;sFgz4*xGHQGK*TNIiKR4tyJSk zZgwq@EFr30t^jMSlm~fa#PK(}>i3OZS-!fxR4xIN1~^pxn*8W!)NP=lo`us5({kwg z4N{1YoJa_0GbOSI06qy)K|N~JfnO?FCV;LTNt&!rc0!t1L~v)w|_D~}4f#OUEvMXMnAKRW{gakRhBiuth(M`8Mq z_{lNGOJy|Yp$zJLFWOsOuGVRh%^(zx$teJSTT=qsXpaHW98N}*@6u5bl&!$vssc(m zT3PyAPe4h(Pz0ML)ksY>$v~EIxUg8Qp?rg_d3c4M(pJisMcr5okxOE&_#~-VpDetf z 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1domains/plus-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plus/v1domains/plus-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..b997586d918afc2aff2b8631431fd7adfa7abb15 GIT binary patch literal 12636 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 Hd6xeVD4bUD literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plusdomains/v1/plusdomains-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/plusdomains/v1/plusdomains-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..ed967952be7809f4a0cd09e70b5fb60c8adaf51e GIT binary patch literal 14718 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..47a3f1f688d796e7e012f7e04fd487c17a8b9501 GIT binary patch literal 223 zcmZQzWME`~fcZe`8Cbu!H@bD*xTR2VF(dk4Xg= zl}bCvz7|uhOi*9F_S|HRbLW>`nf)sERrK<-qau4|8E<_p8?MK4ec_5~Aw7;49Dg<9 z1)Q3N4u!_v3HQCW#wT~$AI)#fW-Q9A>*c(6Ce6J0j(?YjU5v$-$tPZXUz=%F&9vx5 G;4}bG(_PsB literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..f6bb399eadc60a9e2ea5c276dd921b9d46156eab GIT binary patch literal 5730 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.2/prediction-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..653024c140b885c0cfe200e4d0fc2203f49228b6 GIT binary patch literal 9980 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 L{4pwIjQxKAd9wtj literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.3/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.3/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..cc74971342ca7998dc0bcbf11ddc2830a707462a GIT binary patch literal 223 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 lpD?*;xJe*1Z%b=9N!<)UvJjh-|RDM*1j_v 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

&DEh;TH=_Hnw=A-}l(ahpJVmhofY(;C{ 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 HUEmA=0d8iy literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..d2d19375c167e178b924220914fe97c8d6f1f45f GIT binary patch literal 7418 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.4/prediction-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..abfa0604d6ed07102bf4a1359b0ec182a8f22e73 GIT binary patch literal 16491 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..c9b4db8dde6a637eed3ecf398b7357f520dfcbcb GIT binary patch literal 7124 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 I{+~?$1M|h-@&Et; literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.5/prediction-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..5e28fda27a1d821c48f7c72d38653791e25caa92 GIT binary patch literal 14421 zcmZ9z19&7))Gs`-ZQHhO+s4M;SR326ZQD*Z+L#+{Y-hup?EAmpeV^|^800aO6{3E1%0Knwrf64%okN*f-iYW<>Tyk8MU)6yV`~3kZoHyh@nSbD(b&hNO zeZB3v@t#IeE;HVnd0*G_T(x}N(T3u%k^oB};nxl8!^;f=0F{s@ z$|XOY`u$)e!Ecz~&&Q~}%Qv_C;GK*BhCOna@oHXB{7Ow9OeCK1;)PgBlUj=#>C6Sb z{>^jC`u^pLfCnu=ZqAwg=+TD@^|$7PBPFka{EIg_sZVsPK$7nqK?DubM0yy<$oIT$ zxjDnw_~;HR|AuJ zY495nY$B1YDHkIDT9EGA=qBDgsEjuX8E)}p1MwVF;)sMezSRiwJAwM&x&ApLe}S9y zto6tWvmrGZ^CH;=eVm-6+(ELg1k)v@0x5eVnryno!!IM5JcxZ#MJ1||k^?$C|AxVf zRO`Xr@5mbmdUyByy!KO5W+4XszGTZTe*o7$5Z!wQnLw4@=vEZgh@&4pKvc_*80Zk8 zE|gdJtu6jG4bEdi3o(ANi&&U!&$4>IR{`k-`9TrqrDesTr_kdM%YvHAvkl&|m$reH z`R0-XmfLFSk~X6;w!3wtm{6FBb-m=FV~~K?QoZvUHnM4Oxoc~)>$F(()w6iVE2_}eqHSXrOCBsFxFVkukT7{hB~4$bx0a`a$%0EEElR z*H;HWb`d$uG)R4MCl#yku%Zu+yx_UE|GE>`&X`UJ1vd<`Ku())V~JiXB0L2{LY%=q z0Ed8KqJ+lb>{2#Vae{FSlFUZ41<+s1)T#Y-OQ`hemd{5hSmh0_J~Wivo)%}OH)&1j z^AJHqybcS5`i-sZ3twju>e~OIg>yF-M+@0Q05>c#oPGes=})x4`5I(!y!D=Oj19lf z>SYDPoSdm3hWi9!rli&hfn9R2f`-s9-@v!Xsx->l_iTItm-dVQe!l+FVaNnZh1dCJ z@9_4XS4%SG`deUz$wX+yYqtNYDrV;NAgkYy^`7>KNJ@dy(oG0t3X>RP2F_4RKnw1S z%B)IsSs8O=jMg0UU^9FVY8Xm9y}&;3Vu{50hIAxWgDeJ16W_KH&efa+MYK7;LLj50 zeML@bx)lbym&7zv+u%lUm{MH=(YJS!*53_jK?N40{P2rw*ZJFsOjq_Sr!KQa!-a}Y zkw>T_6{U|Mqy9HB2kR%IQ1QfBL{vzS%|Fd3DI!!zfU{^emc zf)|c#%Ncw(@JpLYP?=k97`EEioacQmWhG57w93p%!5sq2ohINK6y9+C@sR1!9^8h3 z$E0Sofj7SR6*)ME20~P`1`6m`YFj{7KXFaA>Ce*RPCr~F%>DqRI3bDDpLJ6U@P5=K z%fL<(a`uUiV?eo{nS8E%NO>_=XbB?1x6a>h8MN0_^YB%EL&7izU;aWvnUism_m(y$ z7O(ylBw_7h#ca{Eo`W@IJ4!u}M)$DtV;?s<^vdr(?N73!xEShWY3RVHeINgJBoq}U z%#gDmuzwUlR@8|<2a())%ULTr2$Ni!br7l(egLuBh1x_E4g3|DzCJF0K0(u=IFPzn zRUUG#(-1qzp&udyvWl?!^v~kbN~r-C)8Vy7p1LGM1pJbypgAf7+2o>TB3VmwK5yXc z8IGx1FdgVyF&2CWffHh%7?Y7zf(oWx5ubZ#P>xgLu#||8vDP$!`Xq)luJ2;z&6^(G zqMSupjnFM609-5R8+|iR0dnY-tLg|gr$Y)uxqLJ;=Fh%#WHs`$JhNzxW0j)j3aE+( zP+ziaQ+3cJw6t#mo`UmAl@%*8&qt^+XRL_{dbgx71SOW^?%cy!6s2tA&CimM8 zQ*RW)>mKI5rMURXk>7O0@tfAW2M`m5scXRYiG&MLC_pFhf?$C;CR7AKsTD&hoKO;b zoRJw~;GWtRm*)_t30xSl;8VK1B<*hzuu^jE>Le1Eo5G`G+@_8_`3%c5qJ`TAP$r7& zO5dn;Tf^GXPZSa2YKOG8u_lzS{x&R9M)8Yglu|J^BGpg%h8kN{p0IEfGT)N|G;Gtj-!~_SV`~_z8IgOJfkTcSev5^Zu2iF{J_`wS zYq0K|nlSPFNYTfy(6PJBVWCfMnNj+#KeTmdd%&!*R>yfW|z=fzuZD#1)UHSlb|K}&QM!pd$uYkMe>PR9FKDM+nif;|VcYLwHh5Rvbx8<wmOFH)Icz*+&#-TF3~Hv}Iz~=^`sC*|>-PQB@gO0x38I+*7=jw1Pyec*oWJcLuO_ z>j{$<4$y1c>EIFg{`BjFwE(c$9ECYkSFG;PM4c^mG|HKdl`V(@Pki6ZtX=6Xxw=kb z>F7F$#7v@{!FvDD@`W+=`%lk|B~;@%jgws!*_I_$s7Y<1(namW#=F31%L((#1?9 zvIibmPx2~(`t(~@WISPq3H)YL3-(gFykN?@n0a)nSOWwjTIq&OmLv}MepBVYX@_*$ zXt>s;DyI8yN{2;fVK})5>g7=cAPBvc7uPk16l&?%{swwRznF0Vw=l3b;m-_Tc{#p& zlB_SYl1ET&{N%b17nG}lgW#YF`>GspAdpgws74GBu^hK(T-c#rx!3F<^(%Tk8xXw zbT**Iy$JFQOfRWu&zD<>w2tOrPj2;#zjaRam}tN9*@&ZO(^m}E@;v|zmxPRyIQkUW zl+643czc2ep(40fKySRn$H>|eZJaBQ`LkaEaWDsu?gDs14ZG_3z$G`(&2Mi?9z`*DF-3Ue+b$?+j@FK3x_^Z& zdHL(?mm^_H;>`CmJt^YVs0J7JMm2|eh*}|NzFhd$Y_d>Zw;@nL5{kPlnbGIfe{&=P zp(qYOW#Er7LNGk$;Tw#CGL>FkV!5o0MA3XI_s!?i+C+*9NfI<>DiJr;How6`Myx93 zjC{fLb7zc1I~u^PV6U0`#hKZ$xMfEd54g;$|7(7FM}_{lGgFUA#2i6)4qdHD)8rLD zw{k+g_)DL=9Bpmpo@kC@C|-<8%!-5GOH+FaIYL;0HDylsSTsjOQNE55Nf5V#a9c&^OWL_hBJpp%)CssZu@oJrrumffu<)k-V*Sqii?K1<6&fR~ zwTf_{mbA%?rJLiwDw{gO!_Z|YP2L;HjVgA8OJz7`X|*~`Du98GpqtK>#l|P7_(rK< zS=l4Jd(3+e<}E+=p~Y)D^ia5H($1$G3t9l^J3SwumD{?{e{}h2_C1AC172$!m47IFel&5;&vhokRfh%xLtD-FvEv&n4FacK@TUY<50Dt14WaPq+s z7lkxt+L|K=5PgGfSI-IlV;HPhFInb&n|1CD2K0z%u>4SzF`^VIXtR| zF|L9o82cfMCQ4*_YUQZ@rkQq1xdOC~5C5ycr86<;taX;Ui}g~;ox7ir#tgNcN&qT>Z5;&hrr;FAoD3hkD-#DjyLzOqV(%c$N;c z-yIx_EHFt=Hs3DkWgYH=w(uzK_CAKuEIL}!W!7(;nnt(`YeD%l{0XGuP&<{bcBXby z)yjym>7t1;)O}-VM&We?-LC2gFTB6&;4{%uYmLpC7&Mtavt3B~6dLy)>m4Jg3@upQ z0&t%XF*&s#eN=g)FZlEmu=Nt2li##)XPX-M^4!_c+1&7FN4%m<{OtS2bZ@iB>^=2% z3P8e6K$3RW@UrgCFkodf2JkMK5ICv%#0v%1-U`C2e@l!BA>3iwsn?9ZO<%}eNi6VP ztQEI=MYBWi3;w8i<&~kUL|{Q5y^u@<@$NTFMEP|cVmxUQ)~*t^y2-P`v+e~@I`9RS z9p7X4{=nv{e7H4b#^!vz_C(PA8lnHral5qN%Kmw;|H~R@{~~CY274HTMcormWYZnU zGGAr&UBHgv_W0l)rcx^ZZbYm)$&TOy>rz)!4qEPaRT;_4lhtrH##TnJ{52U48a_cM z?^!B&idUhR2YBP0405dh?YbvcK-Z7eZqn6Y(cb*OR3Eu()&eeL=6Jd=@r*eVh)-7x zR05a^lkd&L>;nAjrV2TIu|IZWd%tH)odJ5b4oVuXQKO1R`#82*-VuCP2HwB2G+(J5 z003kJ05C28Dt!{!7yHWbAS>J0CfAgp*h7wqCr&jUk~@)~ejWS24b?IZW=g-3^D780{@fRa%N#A+N;F8)61r6(Q5c(Tfjjy ztKCuJ6|bVx{FMowi;y;%bzV)c_T>H)o5l6k?I2oDB6|l>A5wQfS`Ay-jw=kfN7;%R zDW<4G8B?eDFKXemiEi4JcL1+XIdnTVMTMw4U^BhBI6QQ4--#>jd9w@EEUwIZjD`oN z|Bb|6v(Bn|k6P>zbqxhG*_g#CST>no3W|4Jx9oF4eI zy#UMzqw|TMXnZ*)z9R{;!%W7Sv)WZSv45L3j_dNy)pa>ZE~n1&Y@7CWYkWOVFZflg z9a!geGsH(rLs1`wu6i>u2kI#t2F&3P6doPRwV|?TYmHo-C#2jw*sFGC^rEyvT_NIj zCc6o&T@;Tz2oBM5kC{UzxW3L(h2Nk6vCU1c~^n<%2R-w&bX_9q4K_Lm9W$Nk} zo5pP~5GD{1{yRDF4@*OXysZOLF?Tu~O`=TMTB!_`5kuKd1Su@>lYTPgDI>WpV=~33 zNPACO&$%FOH@3r-Z5HeC(e4gjNkVk zr&#V^!MNz!xa@rcIgHkZgXd%@}iBSD5LD=hLlS6pZfW zn&$95F8k=YkJ-D>n4~clSq>=% zThks;A#=Fq29XCc6RFc=Uxg*{_-tHWd|L%em^Q_}AIj4_hyNs5+? zY@2CfIdAO`ZIujMGUOtxXK9z90>V;O$!!r)U~WSo3nfk|bV_AX=C!a_V<9q!B8My; zpR1EqWb={(w5$$-=d&u2=e)*x3~vaTyvnrzg&PckR_U^8S$7!CYlkA|HkUKb%V@z+ z0iyLm(*fcOwP*4LuQjfE{r!40gn+3Xv5Wc;P3FQ(BORwHFBA7Sl!a%Qie?cq9H_hk zp<*ljmR`+n+(b3%1F7f?E~Ia2AN!mFydY{HVHFRn=~?rR37`oIAT3-d@d~7IwCX5W zRdWizFo)xGq)2Yu+}|+huS}!6CRU$CPgNzG@Zy6E5kYPHh>PiS0do45%q2bgisJc| z*NRMFe7Y6VLS$l6OUE|2KJvocLi$#b7EV89$Eh%Vv?{BOD&@NO(NmCpAYJkdFTCSB z8oFaK;doBA?(H;!WnJ7cAu~|8{hR+bJO+tph2TFe_jGnB4okwwrzZvFX54FpMNS;< z3u$==Ph7Vf^QKs9Rvm+((b#*!i=w)!3S~675@n&0(sv&3Wl*6wj1OepA&RI2B8Qz9$X#H6$kK;?qLtdlkW9Lzt8 zdtn8S-FvYRMkB-X^PSj$N-)Bz`}4f60J)k*fwe_B4jr8XcDTxgh?5F)F|TqKeU#!sFJlq43xkd+yBX4at|9`erR{Zn z!s%(jqExNyH2I(=U8(ToH|%Q_^b&PS{E?7ScUIK7j#LpU^gM{!kUtmMJZrRPGq-Yy z$T&3ooXWgzhYjC0Nwwl|e%5SJ$DIED8GOt=YG@$GR1A)n!fhrIq07j4XhGjvXChIs zeiG}O`*41hKevEuTkkni`eH=Owqfqp&S_@!T#u1f0f z0aRjvY>*KUY*K_u_}pwCJvm@#zXouVeM}6Pl?U6s zjyh&+xn$Y<7F<+*E2^_3SnnEGT-0l*?sx354WV?{;^$_4Aq{T~(JD8ZThI?f?lnfh zL+40^Z|zQn3Vtc!Hd@U7mL4EN9e&SmB)Of@Z;&6atOQ++Ug%hm2?q?Zjh?;EXoeRh zzDRbgzEo;uHGMgA*nQ(munUAVTIL78ZzYWVnHKN<{T}$1eg6Lbi-@1^?Bes&zxK;$ zp7rF!nF)v7^)p2Z5?VQ-1!%V`}eWVvCW46(Z)t)si-tm%cIBQT&qxgJmO3lP58@H-8F5C9sc zDI6g!>bON#jQGiVXdKhlw17GapAu|Z4j3^e3)NlJ%6l0JQXw~l%T{?LVv-R54p6ir zk(hd&>pegTtA65YMkzVM=GN=#na^+ZC79T&Dv^bzUhp1bwEY~o*f+_O_x{(jFx)ho z{5}_hPk|YYgKc4j2=sv`3F2Ca25dm-cUzwy?_P;_SeoQV$(e4We^(EmT~6aG`kiP2 ztlr8q4Kr-}BdjZ`2#WVH$ILH(^;q=IX9>r+=*h3P&haDVxvXH$!mp)mMP&D3(telD z+zIP@*nkRB4K|A4Gk3{c5gkwsoCXAP(E89P;RIV|5$8(Nx3bF$$FdUN0){JWRjswP z;OsJo&BB@O2{jMmr_ui&6Gy<5{fUPm!Ngt#qEXN+Tw6FGyK)jbLFepkL1Kb*k>tJe zTUybnl1My@5Km-1i`$$NTo-+l-vNgY`XS%uaE&8U2BAax$HAzSwSbY_|5>`46k7K! zS#bWMosS&H1$)dha)BxOqz=saMDZDnq%K;_VWNXJFDx$l+m?u#)FOZPsqcdLbnuy# zfx}0Gt;*!YdV>iKWG47FqbkORwuII8j(^w{Q}SL8v2`9rCY{rA&WA(f!VfhH0%VgF z{UiS-aTL6_1~L6Sp|WPLF*ChQ0ge-d$LBt67-0-6tH}7JR;!HWO41Kwcf{?_nD11Byfir>kKF3b@OPwO-MYVFnXnR+8<#v8Q=X%1$k6=Mk*;+L>6hb+=tFUM zNMHTcH5qz%d&e}Zk7{w7dsuDYl_KY&q6?hAqo4)mme&@!M+gC47wM-ej?()U*!7!zFJGmM&w$SAiv z_=jLq#g2`}xgJf1WeVOc#&e4>OD}TXUH$M=(tI0s4s!sGXsK)%5Jj-0ftH|Ww_sDJ zTix=O7f9War(qc=Y$c;nKcANBNp<5=)x*I}FWrMR+RO84?Gg!jr3~90{IYhbzd>kO z)wKBX*-inr<#OdppM_(4i?+tHRijs6@S3Eg1SAjMkA3s7*2ck9W}X#q50H>hmx~h@ zSV&F(-@C(T*T#Pp4I7W(GN3srap?Rqe3~_a*~NyWzBAEPg1cY!7H=1lIgk0U4@kVH z%%CYse7BgaR20w4Vp=3jLefPGRo>AlhdMP>Cci>6g3{2rUA&+Qt)oExk^jJ2Fi)kr z8|x(z`fNj@;&z^JQoaDda@j^tE1k6scCx2tU+P7y;^RN59%{w|vP7Jadrg7aLG!so zf49SbM^B9q%PTExCqGH|Z0kBYJnfcFuS|JiKq068a7$Zq>5tmmcxm+Yd8xG)j#(`m z$r|-+M0S>Dk>~z%wV^OYdqW$HM^Yr>Ic_*m>@fx{dwpH`W+e4~XhUN(<}eAKhdyqt z242{eyl9bB=)PYM`I{QArHTI25P2JD>E~2B4rnRq-Vbx$xtTcIgWjd|bGo+VKDon3 z9DuF0MxnJ3cV?8mdDndpAmesf`Ap;6M@3&P%k|GRcs%n%pV8~BegnLB1nG>h+ON$B z(b*RVTKZp`80yak;IBzz_h;ZghOk^4Fc^H(xhy*L!@U_FK7~$;_Q(eH2m<^ zs(|026UDLSNgTR%?aZ!y)9FGn)30DZ=-wRKe4|mqoI4?i;`11My*$>4*b?!*vW7Gh z89nVjDV8HVT}QK0WE<-dqmypimx~3rDh@Br18qNNi|OhH4|K%`#}7DpxTk6BVUi|S zI+hNtKto@j{*8xS8LTU@Jap>8H&m$e16|E1aYCC+1e#9!q7Le@2ZA9r14at+WzJ5C z2mRrvMWn`q(ipYB0*>7dOR;>WxX2@eqoU|231CwJk!6({C_l7r7&fWc@+&QrpnPr3NE9ja^URJ;zi5^LSKhdiB>oioa;oX zrLt&$y`Cf8gp`TnTt3g@REfK}18aKVeuN**AzYP&#LpjmRNX>UV8HHvMVDmYi-TGI zuUA+KexdDkKD7mHDtaLTo-@|6DU$h;v|aV z{d`hw_E195n4qRr3Dc{!U+x&B1)|4zk1N@e&R(Tn#wn0M8gYorS=+G4$}t-^FgGA^ zZ4TRjUO${gJ(is775!k4aMjhEnv;s!ipq+gQFyw>XWJZ6c$xxE$H-NVKbM1`RJfXy zE5TLy1tkn2fITVqFv2gwF~v9hcU;-_Lo#>1ZFwTT`8h zt0hBR?XMpO0tTCMO1RnJETl~Ez;}9$NY4$UAf^&9H`=sTesVamI9q9ZH7@(nEhJF2 zXF@6RA|W0xSmT!zP>9f6?)MZVn;}HW6`x>uezO;*0KerJfv02nxSVB(!g~k8Xw53G z2`fxdb;GFxUKfI?3Q_IKhHi??S@maqvUN@g0j5KnWAh^4s?pMOPY-)LqOEqKdFD zZ`basS-x6ixES$Z>US3x;C4emyyVy-kO2KMM*(8DLr#6Ksi4SAFEtB0iUlEjC6z2HR_`woENtNrZT}%7nh$KTf~`T00|}*@ z8Su3gVFX+49jso%iH6q$=A2uSkU0TzJsU(Na;h}#>@2Op9uFI$)bX0{9_X(||HlGrmx-6%=L56KViEbl zMYigfdcm$72*+tk;qc#ZDtH~`l>__(-3hrKTE zWeYPDISAH*R#ur|`rZ<1YDz*zmsV~ao#}d#$Qi0=<-mHb zMlR9(shs=qx*MaMRun~Q3?2( z<4GHNAxq4cr_&(f5;nJhuW-iP!%xDCx>O8ePS8AjY2LyO&s>9vji}y8jp9FDyvH}O z&o21w{O(o&B4;oYP_{RSsw=CE#cNf?36vCOq~ z?FXTzUUJGKpL>b*a(B<2XqyJ*wXLWV*d9_#)TLBECbtW=gz6mgwN0wPrEesE6?dFyvSc|Xwl!lrZ^^}?1} z<=`f(1+!Qii~9*6)$4swr+Yo&{{=0+Nt%Eg`RlHawepQVSV74HR0Xj*l65z~?PK^! zjT-C(spAPY!4c|-p~Vk8`fJLi`kIyjpPQTi_auV$vkv+-QOiZl@RSqcz}vfkx!DtpAh#kGW@=7#g~o1583Z<$ZjD>n0bRf+t?*h=Y@c5=4V1dBGlEU+=P1!49)t z=TL*U6J863?o{dJQx_VHA$cg-n8^4A7)qHrxq1oJ`qhP~3X6*JR-_GjySj84@Tz#~ z2^%#TxCAr=>YGSK1i)%EY9ULs!XsghqOxIOY0(8s83BOdD+c&4WvJ@^sTBLatYH6a z0sFE-6TBQ4E37m*6F@aUjHd1ObRB2+Px?Rh&k9&WL&Hf^LqoO{LZX$E1ef0$V5h;_ZuD3Z1zx9`X`;z?yl;@Bt*PNIoUH7 z85tO(tECcrn3k?`QdX`8_|h7}5C>KtAsJkl(8!phlUWHBD%Hv=HKrxYGEtc?w&Iq9;n^xyc@OUwWT>2CC ze=`5TJxeT#34VYP5wtd1pq~m&67jLzg0g%YDEusvslg}3HsA(;KNc$)1Uzh0--!+2 z1n#pwASKfeyHb~)tWL@hcfzIGA7R9ih&E<0A+}Yk$1O5T{-_P~(3ArBUMn{-`4m)fWXUudPr#dSDW#+`JeE+m^sJhUsTB|{kgNp{C^2LnIT z^nVWnV)9mY-r9WJV^sHTz&|TalQldDVxC|{7)fMA_5s_<6-1}Jo?Sz;sym3mz<^-< zfekk(<5YjWq)L{JVzN#>&{C+^zMWN{85>n;z2*Yh3*+e|gnZ^9{o}F~M5W&*I!_h@ z(h3z-SGT4bM4N`-&?6E(k%}RlkYy7*Gsp z|B|`b-jo-(*So^qBpjG$u|Ucb@QM3!*Oz-}-u^l1v;Uj(|0@9iJf8^p<=GmS%)bg#3JjjPA^)gyiI(72dB3hY_K- z_h*HVkC4Kbg3t^4>r~qRiO}b5pT)+1KPC8yP+wP7+wIQDZ*xE-hF5Nq#IZX#uS&N5 zPv#%EXJyBBLk}>bii60Xqj2hTrUo{2n(^QXS~&-Dv^ zzT%g9>nJ=%PD1hrPZ8R@M2l=Yyc%qp7o>y>(+KA{OY~gOY7CKvj8JXGX^d~}H)LR; zd)qO8voso+mA%qF88(ntnAK(Uy3(49o^mwEq-1K+isI69#*LQ31&jdnApa$ckiG!Q zhhzuzNaVCM!xHG~D*ku+b*Kb*u0fr*PWQAn~R&+Jch_P5QH5%A^?&@Hg6(;!7#Ie>deoF#v##`hU90ej?15J@-*!;@jFTvZZ1z z-5<{N8$eRf|I_RK6Lim-N@S856hs|WXhjzg?C+OIX~9IXLTVyxidf9A)-IDNcOsu* z$4+ET)r^3I=YB%d)rIi|?F|c@?N^e3kf`;c6eBa#!+wGr_e%YE*>sGO#e^7u4hqER@cpBFVrxwOqhP7+6%Q{+`^v|4Rev@`C<)5pdo$r+y-`?#^ z(m#;Lx{;ND|E3g40RMF}HU@JVQbusY@p=0G&t$)xl;dN+2x|wz3~u zA@Tx3LYqsAPdcK+ZXFuJ9rpDPLuR}rV<7eWIWz=mm>Y&%_vc$3KKR}bz}89QzZH@J zNn)W9{03}V0A%-WoyU8jOzA#A{!Do`k2#W2nL*I#^=_t|tvT=R^xAHwxWT0S7Oo4QrPtd@z7q_n`t+8H9gS zfQ7~1NBqv`SN~@m!RVzF z%2Ek`gQ+JR44beUTMSyP*rPnd5V-p+o2ues#XG@rC>GJ}x ze6=bWoo3}!<$YQHd5g*7_Q>L}?d`nUZ4^{*P=g_%qwTW7z`|u;!h(d8gg*O;{k;>PL6iC<3EYQ3d_~r(6@Aw>;~CqX8=yXBf7QLn6H7G(|BxdI z#x`fLwG65~9=fg8*1~1<96^`MoNy1>Ua_>v;;_Q%w%`aet|XB^5?MFchdP1N{Yik* zfm{c>;ITniXqoZaIef~xpy4M@kk;ITJLZ#Wp|1j3cL)wTdzw56i<=|&xp)Psm8oE{e;^&CN;7(2OfT%t|!KI!Ve^E>}v@t{NZiGxWg-BW1nvz#rJ=9G{lfYRY`_tND&0( zVp3y!B!u!%VhcJXB-A7}ti)hjcGKlDIv|36i7TeA7wl)m-+Y{Mw4P|+pH}cz{=OSQ zZ0yrVMEji%7+km45W;HsD1NN45u(Cl5)<=oJ-s3U)k7gE@;x% z$yC>a80ExBzL{Ioexe=`5zt21n8jr8?-B>4OHN6j~vQTCQ;5^=M0)Dw2J6;ZM<@SzJ+k(#0%9%@k) j2dEwWIW$WtIzUfSr6zM=Vhq~^-!%|K!30!TV7&hy^H*Wd literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..f244110745dedec6303b840d251c96ca50096c27 GIT binary patch literal 4014 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 U|B-5T_GowD-`&pt0Mja0)gZ^o;{X5v literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/prediction/v1.6/prediction-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..9f1edddb0ea72b988f31755db292efe37dc400ce GIT binary patch literal 4954 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
=J%18w%8(5fKl5l9DLj^p zXlSLhcscOdq=N3N^6&Xez5LUIrUzY;0=mk+#Y+-X968MKzNS_`e}lNnR$85LsYDGx zp3`|4yEMW&^^0T7ORKjRqApt<{<>G{UiQqowy1?xXN}G}^f~h3MY(DLv8O zKP7<`5+{aJxf}pcEtu~vu=zm}tLpwMv<*v4SkTgW*6S*cz>8mK@s+Mgbh(4KJfpa@ z*Yw$L><9zDZkf2+o;EOdmM1$}yjld=h;@6g+~EzE$=TKtfwE=%06& zxVDZ~jq{Kvgg;b7(A4EjwLVq+MbjY*-yZ@-%J%^_PyIz%!8@cjBkG*sd1xAUD;%mH z)poc8yBhhppRHK%5nbEG16I{i4R1{(hvI-C9|TrL+gFDTdmB#zV0;yYo2`O?0PPeh z1iFfjPM1t%q~2Vozlk$0pZq3{gRVaO%{3ezV}{^2_&;8?^qV*xeh>fsNSHYQ3v&4K zh)Pga&lft2x*mb=xwOyFvFrHH#N#D_l{7pKPqarw6|SMP=&*}c8I8eTM; zf!hytcInqcjfkJ)mcGFMc0YdHJwCSA96w>N_0Zj4QE)-M<<6&tKI3QANHMbFa@Qv6 z#CaRYJ*?JI@KHn>Vf6jc6C~d#)`u_%^YC413K@3%!vJwPSHk@%DZOb z0QO5f@YxUC#q()&dUQEdUNReMZFTo+zaGqvEX}hwi|ATesf)qPjmi8y3xxsU+ITVi`v9I&)>h zYj2+JmRtg}HPUvq*#(B!w40EK(kx-O-xxr*++6Xbn{8_G&Ws?P$MXuhAKdkhXzEfd zri&NX_N;qSPMR)nH&t?jE8!3#A;XNa`-R2&T`h=V{KEeHRh-<)m#AA`SZdvA4=FrZ zBZ6!u7Nk&o%8YMKMCDwj$bjQTVl*3Uo>pROhhe&3JY$&WJ4k3t94QlpnY4a96{P%> z!)w*mxw<>0A{7S1-6-)-aUP8 zf|{EGV14-T=Htiq5bFuKtLYjoiFG!_S10bQ5pOM%)=6DMhwH9D&!z!=%Jlgik;Zm6(rX^SYq_SPM8g~I)$?{je#@@XzdYNk7(;qDvwM&lLKC6TnO5*AM6} z$HUr{nKlh=6U_tLrA)_2A8hk|aDu=Eh^u6OF7Nx<zQ}fZQU_m#w)r zYVP@_rsk1tit$Yd-q6Qn7fvqE#8-z0ulW;}3F5LsP1XGXNBwiS`@_F}ef9hG_4q%w zudny;-<|&gY}w=4e?EA5xcBn)(|3;ZTRsbphsYZ3+`gnoWO~A8Y5t2?oKLAxPC1rp zT5h9m=@>rh>1OjqxZ$PUi$&S6Vc+&>_(M)yO1s_)yfoGUfVX&jy%lPTB8V5BS0$)Q z6;yv_gD!AdQ7`(xT`r=ov1J7#n74MvH$m*bU<+znXu`gl>PW!bv&-GfFIXA)a=d#w z{C?VsfDO{r%iXg>~q#lo985> zU;a19`&L>lvzl(;)5BlCe7V{A#F`yoe`uAZup=IAD(Zg=v9l64Yh(0t56+ZeO@zV&JNa!p0r;7$o+cX>Q8-MHN|#joi#rTziT(7}`|- zB=vo|mDcC}YPaDxupT(Cy>qo>pT~jXtVsx>E~E(G^xWb2L&L3J?q}&s;_BsoR%5`^ z_*tuDr>KL{x~sa|x8d5=p92lj_R`otNK9vc@qE3g4rzI3WKdl(KB(U>?(Vh5BJA>L z)FX4LvTBa_1C-VCC=dLbtPLRiwe%}h!@EGJv+|rBDa4zx$zkPI`cU6~RUg-7VCmO(Si2qrq`vt5#s2`WeMyE~ C&QLP| literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/qpxexpress/v1/qpxexpress-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/qpxexpress/v1/qpxexpress-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..38c2412783ca3d3ce0e8b9350dfbaf1f3de000ac GIT binary patch literal 6796 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..cb79646dbbcc49c739b2b8db97cd364eaa706820 GIT binary patch literal 6425 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/reseller/v1sandbox/reseller-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..fad21891bf9943224c390462a5911ecf31703989 GIT binary patch literal 8550 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 DITmM4 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..947ee8c83c6a25c8a17bfc0e867b5114f80f65ee GIT binary patch literal 13745 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/shopping/v1/shopping-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..374723349492921f198e1d8e4156f19f64bca8e3 GIT binary patch literal 37334 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
r#GLERdW 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

C9KphC%f=W!KJ?$WzR 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%0AI-- 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..6ee6827bef1a9496f1b34c1acac326502ee5baa4 GIT binary patch literal 227 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 Oqh2K0FwExvWcnXOwKB{A literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/siteverification-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/siteverification/v1/siteverification-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..de7db134bfb7e5a11186deb553ec7bcae2dd75ea GIT binary patch literal 12827 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 SXu361jmWb~Ge$D)ut1;* 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/spectrum/v1explorer/spectrum-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/spectrum/v1explorer/spectrum-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..cc69821cfd559f3da3cc8152b90e0a4d1fe8e0c5 GIT binary patch literal 10953 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 OSlA0H=BE1pa{4clo_RO` literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta1/sqladmin-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta1/sqladmin-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..f87f79b9dd94a602f5d748d130467c3dbf6e99e9 GIT binary patch literal 9437 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 b1lA-gkprf)!#=)|Rq%}!jPvGb7?AuQVYbxS literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..9a52c8af7ce3e28e105ea27341c43e4e86bf7e8e GIT binary patch literal 10146 zcmXYWV{j$l()5Y5v2ANNws~S~Y}?Mpwz;uw=ft))wrv~Vz4v>&YNq=~|Cr~gnyRU4 z02lxa@IMe30RR(||6c=izW)y$Z?Gw`P2J=-VzCZNc#4tp(2Udn=lLIbWL@%GJFiP5 zZhz93G^wW)#TGE|PE&R(L=STD$Y6*{jhS)MV#CHtRtfnJ0}3qDzTaJ+`EGm@6F(Fe zmxjrX{>{(Vo}OO4-UMH6a&6gMQ?6%n_dnVHse1+XihE3k5OP({-gb2nHSOiIkEr=w zc7fVG+coY5zpf+Sm&SR$zDF{NYvl(NJNbFrG8laMbb5&XFm8RfAjo6&l%D!a@{8>t*7MzP~Ieg7A*1nST z>3X?LMw~oeKY+Yd%tvoucpH5z#AWp%K!wKom4-M>jkW*@m&gAxS@Y>X^l7GMA@{Q{ zeLrIM&Sp9_)qLtT(aSJ5^k$g|Irg*oa2CaRJGZ0L{(a)568a0%Cn>znN1@lAIESg_ z`RWGdqZ4*uaUv+_(Q`8n$nB8Il+Bfg1XJ0YEAHk&(uTPb^*KQN=6s9?6D*t~c+N3; zZ_YM~{*=J9w~qQN_QvJRgVR$HtZ@3}r~4u5&9_JO6`+~Gb zID*vV2-n~@qrc)On!r~MQ4|Z^7o9{O74k->q|w}QxVEx57=Yd*LROMKGV~N=2-sO* z{c3flo%ZcI+Nd!d&%~swSiXmPO~JWeF@9ypFEc&+wLjFb9Va62bnBYYf2|~3ht%D_ zrvVu5Ytx&xK)qforzE^(=M%`VW9zUUgo3^lBAsq+yy(@bzJ0nvOjVjyZI?Rsd8FEm z1YUgy1`H1YV78nYq~t77U@f8}PR=jofb&p$t-jy}z}v%Wt}h1DBet`dKPgNenoUp- z{hC24=YZdKzxx{*b7U98`jN=P%K9jBH4!_)%Q&*gKXddi4kvH{0NxC>4j6Q*4u(81g>y8P^tJFDaNN1~ zO3fDyuJHFW`2?c6m@~KUh3x;5a+Tdk_ z7b45>F`CUhgN*BE?rd@Mscgn5w6H>B`F24-1s{G?H$N81y=-#^aaQGTEuF!>!nN9g zDIq^RnK1=Up&gGY$(K=J3NbHrC}x~o57!=40&DjnEG8Qbc3vqBI6&stm~QFraH!;m+|}W z5p84ciJgjs)H<7@P`0qgX*}XKQUmcXbB`eQAayp!O^u(90TFS?S)s1 zP^?iU;%76SQ1wreV2;RP8;B@R< z84E@RX`bdF@8treo!sD|UV;EbV81Dr&GwEljYJ@8k4vzVx$H(C54M?}rH^Pb>t?#r~+~Ez@}?bRcoL#3ja6gc$A#xv5gMBwkA^Pv)t znHph@Jfb1QD~|Ae2jRPHs1B3S+?AJ2?IN%OnR8YyZx5miKrd>eS5Ctb5tdh%o& zP`qT;q2g}JtE{SQBsZJ%P*e7P{ zu^bH{RVeEk3#5~J{~2jExzNK_$*qpVIC*^YckfdZB50e4T}vg0iTJ|vzU%y(h{-* zTSJD_jzz*Zfh`FSeFW`Mkl$cD9tpJ8hZ~L5F-K&q2#?1&U4&=CANz2w7U?oOw6uY_ z(94ooA<+1bokGv7La_|p_7iu{tVqM5*JpMIO%-8+KOdcB_2sy*sMWkSq42$^uR^1~7JQR=@g+W^T>8I0-Z@Poy@%Pr4&nw1G#^PZR;(3lS`YGx)41~AgGgp# z+;ohrFMsiI$3BnV<)swsHcHe%j&rt^ZZ;QzZ?*e4N00b{6`uw;PXM zX(AROhqYqWw7n18WAX+i6EjGqAr>8volR<0qa3=^^4|kY4@&a?v-L9Pn`&9`pV_8O z$yxLU$+o!aN=noQMsN#?C;Ez2+Oc6@qfY%tYxR)pA#AbBdf}!_(zV&{7TD=tLFE&I zh-Anwos}M$&VEE1l~AiNP6Yd7F@plFVjkh+_S?|^2;vd@Jc98I{1ACA>SkgoLw=lc zE?rX49r{m(-YP1}{v)aH;1k~%?2Tg?6rVK(TtX$I@go4CTq%LOavu*4 zSuQQ6;_^eX3u23tpDSRNk#p7%k@LEQd$q)1QN+OtRG0=j!NcwXngR)X?EO(;Ft(e~jOE#izKZr!edc@Os9mL)zI@;QCkbxru`yWhg zpww<5No%n??w8S^8_V)vdnK{w(z6bON&hN2fl0eN4S-%+Acckgn*P@6j)@C50ipyD zD#rXvYwLn!K6HZ|^7BwPMlWvq8>b7@#-?0Umq9>wXUB(AymEurJz)K_UECXc`&+V- z{?itpnz=MVQmaoIXWBh2<32 zYfRr$Nrx?#uUcsFoN<%vC+ZUChcNuxte7tQbL2aHp)r_WFbNN z3WJUYsrEf&q$k?C%RrHmRh?AZa3+PT^CT?VKUP2TnL>W)8uX8WhYh%Ur5zXL9;_SA zs=p@j`-x`?x>&lwzWyyf-f<=2)`%itA%Fd$!!deOZ1#f>P#Se;a}M0g4Qi;U+vdj; zWZe~=JFPM#o)D4$Me_@h+zOFq7JSa$b)+vJOKC5Vc$I{TD2)CYdC`bFLx_YvXS8p`p~9PU%wj_?<{~ zGYcw(?zJ5ZQU_GJajH&s2gzW&%#N_24IpCYKHJJz3FodA%NSEbxqhg5!_2PxLW09W z)RbgSzWHPQ69EKNGOFzr)4P-Zq2uS)gUFRQ;wT%9+!4oeHVOx?1Z_}8A^nbUPPB&p z(0h{2c>-Y4ZWftS)q0!@D;6}c)_ER2V1Jh0@Lu^E~(*Qw`| z2bh5>xOdST#v=psq+icg-m-oQp$-k%I!`NOt1krKydR|>*E2zd%j)}_J-NAh+2wA> zN%?QQ*Yzu3dd!pxf+_ezcJwSn;CW>ga!N=Dy;qACV&7Z>#Jfk5rJ~RiC#-nCc3tv2 z=dy+Nxr8`45;~R6Lx}O=HDC3;DU|rU`vxMe!;G2wmwlNsN9ilj_A85SIl{11WN;>t z+-eC_wi8v;*~k!qpy(bNJB=ewNR2w~`O9?XuS!Ll*f9VDNcop_GvZv)P2;_P!txulP#OkW%&WbW2OuD z2{zB8z;L*BkDB5*m&)pspiobew>%L3Y*=TEUlFn%CaLCz8T=Xwm109G8;`hjP6gLk zCvdsV6yKxMDc`lBZxi}n1t?OYAbS(rBPI*y2255VU{y; z+m(M~x51~;0Xfk{1*68%G;b1ZsT$tK-HrBt{I<-)1o_X2ziy1bQLcrNb9}xx-B5FQ zY3AZFwi^;B*b-PFTvDs@(RMspp7ZJW!R1NU1L`*bl~Zgekr0m9-RTH^9X#m>tAhG` zpQrfkdc&E&^WEWEp=3b2-N`7;@*87`jbA?aAn_u(0ToX^wRIhA>L($4IWz2=t&h3f z8Fxh1A z4r0zNlZ7?XCbEJH z{>>snoc@@M!*}`yE)K2zDwNq&2nd5ySbUW{=4slLZECXkM@82b>19GSNgsv0cj!{! zbdn21K+DJq*!$}mK+p^x0H#9+FP*|fGr9}P6#B&p%rEAU?zY6EC`yy3iLxy62T##r zl`;-{S7TYcaPWg$AXxjnj-+&^`e2&M5l^Ax89(7FpvA?}%!0n0S=&FQu&u_;DPE-* zdF3b$*;Ebg$Q4neO)1J$y_Q-$6qYKqeUj9&EQgrd+#)YBGRNO0J}6v{LTJpkw|+zv zXrtxFA#le_IP z9XrxXW*<5@A2_NIF`!37c08V0(9D3f4JrRcUJID)dP;-R(1(geyouJW%p@#$Ys5rQ zq;pIGs4&HaC2^`_i$c2cae4B4q)es5wxRyiruL&4mJSMiQ^e@!Y2q7a9WKYk@GxGBN$}C^_A%)#YQcb^(uknY);g~ zgx}G4*pvKuVfS{yRUk6gprpWEXDFLn5Ne~zLf$NG%6#;cQPek?rv3<)(xC_#b~F2v zjrZyG?8%4-*Y3Znl>B3b0vU+qq5PP9AEm&%8H?<7@uHdg8OYB1L2~$f-A58?OVlg)aIrOszv2$hVWH8%@JV{ z2B8+L&{Zp7E$uQgAtS4em7-)M{d_Qw0F#dOaym1P3}QTTd#q-knea`i;d=ptU&X>v zXE!Y!T?;SCo06$fvL!OP?z<^<6bj2)?py~sQFhFe6CJrmagA1o)g)o+S4^Y{cul>I zy9C-daFsDEViaJ?sy;!%JYEE6juTc)d(&Gkc+L=!ZORoH)EXy_m~b|(@>u850888C zV7hGYeps7Z##VSRQe3h(p z;b&{7B_-OmOpJ%m^@)&90e@^D6m2tXc$5E@C}aqxOsjW+9BQyh{+lqfHcDg3Hz89h z^kFvaGH?SzIIWg}8mrtV>4MKs5|Sldw`#9x)1kAO6K>g1;E`6s@Pt9$6rYpqC|svV z5VH9>MrD^c$Lo>KwOT<~n457uOQQUK)~f8hRy=Q?OZPhPx%;6r`wTI z+MN_dW&6)kLLt#U!7ntBWE6<*ppJ<+(PlZkCZ{~?tV+iE-NnuMd)o^wH9VK9^&%~F z@=6jT6wfdvS&s&CQO1PILMWgSThPLQ19&z9d3VHDel{i3_}OMpoM{oScJ^Zix#H__ z1ftL!S>VLamoMCl*qf%!_swE>zmAx z-hVQx@WJ{JQ}eXuD1WjGOzn~2wu|E#SQ3l)dM)c}(xZ8o!x(~*?x~YS#Is_0OnkV)d zm9_e~jmXFk;IREe9*+5F^!w6z!bW+^F0@tX|B%Vxg|bPWG2MNv>d{Bn-l0bPR21lC z3ez5m3+`A=6Atp2m#q(f;AjFh6ncQEghw*ch$U=!OAcZdtaZA+v~N2h#z~W5%P+`N z7sWBSSCPz7(~%!c#JK*^R4S9*znZ-Ka>djdbvs?l#l^v6wkx4IT8g$N$Gxo8p%)9P zj<=oY{LMVm;x4@zH*=c9ZYcb8oi>$_O9Y?ltf*<)%DeQZ!N?5pyG-Jzt6qt^b2c@- z30*c!DQl0$F|F;&jco?d^f{zat;d?PYS~#K`iR^d80}}@E2c;!XqVFzc^sxAkrcF)WTz{bOOm@ zQ416)zj)uGGNABuvEiDi2!)nmv1+??r`^!*#gA87$jEo~2T=qq8ym7%C(BY_)VJ{I z5(27da3zw6bVhAhMC9}}W9T@Px@>6 zM%nECJTRPYZXB_LF%iy$-OHB@|CWz5m0aR3Y&7>8PM%+L;r!*FwleyA2`~6!t?6lTFb) zf5w25c=X$IU=pv&1+uLedt4R5ehyy5>S6jF!M0ZVPxa6_3L0_T!`j5;O|{t3T1~Wb zVz*$^RP<-;xyMmWrVaXW$5wRF)BiExhL9m&V(_Zi_x-Dk`B;7=wP?YqH&*$3`rXDS zF>Y^11`9?A;$DiBK>siC-4B^i#Szso_V6imqWx}NG@|`27~;vER(NiigU!K^d^yq- z+T$Ds8yp61Og>4Mmwr%3-kTi!i^83TPckp9)~OT14eR2F_UapG?$F&vI9Y;&B3LLb zxik2~a_ZGlS}*4^nulGd~g@vKOpFNZML`qO7>7sK+$NNHn`)9pUTs>jjnB`^H zIAyK+M&)hM#6@zZJm#r+yL0PBBgE$Cj%W$ofm?*7BvN|E`hlu#YvvlGHka>ogsmBB zaj}>-1C^4z3&TW&FI|b6o9oX5S*g{@_xkp6c|8d?7cTc^ECR%NpHXKcVBYr~_(9uW z)P3pl?cu}mQ%fPmrfn%ul1;JxBbvb?B^>?vrRcB&U)TqyOZLG_v#AY{=?uRXY}{NZ zdlJWU%9Bctsv(8!eNiMCX`@_0NE$rZfCsB(G`#o0Og{s(raL9QLY=8Fm>|I zTczhmrOsrbZ*huh8|Nq$9er*H5%l@}`TyKTiTP0-r4ql`oStZ`=B`srg2hyKmw-f{ zRp>%3ci0$M6y3&Zp8bhi;B*q2S9CO{T$=Wcq3Z`b+77B8sm={Z6$d3Y#oKqw)@SsE zYWI6SsLt)7r=Rim@J3Tl^(X{7 z+90t`oAbZgWfNC{k59CpH@bd+zu^8vgOV46Ng_poHI-Z_noG&P8BrZuV?J-OspZzw zpL=zeiSy#AN>6n;KlrwAzP*~Ha%$lVRw45|KZV1MRT@$xEKA$nHnvp;R+cvkDsd_C zOX(;>j1S_}LNC4BJ^+j@^yUAZi{SCU{l_H$aFqOC^&eRNr@;REB)2std0HBhkF7Lb zHJvyU;5CAH#{V4u*F3ViG^gwdq%euyP{RmNsN>_+=+a5hEH|bHr%Qu-Z-GV*HpaXi zCV~qUr#0#2ZKaj-s+YGk=M%p~zypGtV37Q=A|PNLS0Hj>X04#;Ns&Gv9Clz~z5wz5 z+m&ZIr#ZL^7mgwaPQ$v7dR?B^&%W2H3e{>IDwT_9(Ox$4I9oX#Q%8Eayc)b33+Hh) zwaqoJpPR!UT|-BAPmd#A+M6*UDU0}1i<{b)+HuD{cs+^UmX_wUJ~vj@J)5>Y0-WkS zij`eANW(pO_h6aUPCto?P|GiIl1|p);k)!^tmzkHAr*?Az!!CA;|fCtB+#K5ehG!3 zukV(KIu$lHuSMk!t@J}jPgy1qjT_W?*j!S7pALug7~B%#+E+Y9{Y zWuZ8|eQnQX{}h|;v=TrI7$Xi9fhm`bR&o3_F)t9Mk_jaWrPs|RrAqdjJWP8p-mTRY zH{$0OX3+7#Ws{WYh8x~6Ck1JV)}#xhH4>-2FtK%cvSSNcIfIFp{;CPfQs_v)%~4g& zzUOKnVX##?b={T>W%>7t(LjpP51Q#`Oh87Y#I8fdmg)PF`|q(Kzkf8f!JzT)BD4m z-GyWYlyJ`PUK3-EsRdIK$_s8ochuEWVISar``$suzKVEN$@Ami zyHvuena&m{ym}rB$CA*6+TWz>bR^o0WF z_)Tm^jK*G4gy<0`Y zAPh6i#*41+0g%j0CTF?rUz_9k(W7=urpyYJn&G^?c=}a*TU;>}f1pY$Jz~e+AN45q z1URG*qBISX4iVE(_Pq1)m?3GPIIMu=4;F$D$ zB|GrJ1Olu2-HjlL%9fVar865J2*2I7RM$odrE*dts@sut$pmPDk`GykQvs#Vgfcty zju0PfW2Qt#m#qi@$rcBEGo=U#`0Oy7x z@#r8-ftRm_%GewQ#?g|>0NdHz&~Wq6d0qXuFO~!AAtW#2?c6d1DVSu)pTyua5 zvVi7{L%(LFN1JahkOur#C{?5^iYciGT(Qh|bQft9D}R3mtmp#(>qaGOu%LBW9EIa2 zq3}_OerXTCDE}u=B!*2v9A8;4AX9b*zDBN4KDVrs4BntQb%URpI4WAhxjQUl?PjHd zo-^aloW>Z$s6GvTLN%)N^W>&Y4r7JI|G4guR5ppwnX7+@xZ}2dyU*9CIicNvIJ=vG zp|RsBRjC5v)wBI^&+msPs=ssh#Zz`jTo;NU`{H!1{&BNE)+S5_*x{ONFIZhT4 z4k3x;>|iLL$UO*-jSiF_0B7uLDZU)ZJ0~JmpPf#k=#O|>)SN0|LP|uQtfkEx4ouBT zJEweKkxnfM_g!$mH|d%(C)jO%N8WY+&hWd8xzFC$Y?kM+Rj^98XpqJ-s7o{7gO7Y0 zUiw5y|dHwXTC~;%oiZn z@C;l*^vY!ypmE5!5~cx!E7TU0z@~qgxXV{^7bVrUnItK?`RHtVL9A(i8+rUZ@m!Bv zqEn9M=5d@UKng&POm1SW9$C`JJ*N%<$%SJ{^d&=OP=C!|mFQZcj@vy5SS;+Hw)z+s za818F9|-#o*pL0v<9X!f!LejL8kL+LU)E!8H!U-a&Dp+R1Ourv7Xp>8xL7Tg3#JwP zuTM^?jb4JqXZnE(z{ke^lq!NfF$dK&Ra)Df3D)&Sf*^THKwptpI{ClIRjg)ZI8+ND z{RX6*V*o)gGeNh639_mgJilX8^&4f1!LUj%n$AMija$AJvS*E_yf2|cR zQg6or*7^Kv^Sh{&5mA>E&@d;}!KJpJ(|*WvShIP7S6Hc&wS*5J`-5tN6~L|KSw6Zq z(kGyj+SmEFXQlQ-2svX_S7HL~n}&`HeMA<%mZuAvW1M!&zRBwF+2~PS1vM;dyNVsP z&o!%x9Djf;)SrRwOdMG;IvTjBduIV>zQFjt+ZJWEW78rG;3OE+pmFgr?SP}xK5N4+ z8(;1$7N5DIHp6$RnwJ+*mCHTCEI~tJaY3zqpM~%Uw%J@gN$iPkj_PAf&!W}#$KdPa z>yvo2x;ZD%4d%%E7#YVetm1XPvLW!=g{hl8Xvf_+nmB6)Y}*TazjoHqodX6?-hXjA zipgAgx4CWnflt@N)hK<2T2({rL$E(F+bq!WOQ-mH#nXcQt0?Z)`u+1;7SFXgvw_F& zNhx~h9%`>^#<&xaaJ_Mr-GcbmlJSJ_F{8Tv03#wlapB>xV;OPAGT?yJ;1zu z0RNl@f=o^kF}m@owWs&x+FAL#uawy>-}lw~thxcY)`-tjV*KkxH2OLJ;!Zh5>0Vmo L8$t|sX8HdCR?C!% literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/sqladmin/v1beta3/sqladmin-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..4f64a1bb47504b97ad562b67ea0765278e5396ee GIT binary patch literal 13482 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 gt2AU$ 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 P7@upj-v!`doCN+Kb`woW literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..b8bbaf0ca4d0fb75859eb075f97df77a8837ede3 GIT binary patch literal 8182 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 MOyp#>US{I|02xnO_W%F@ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta1/storage-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..dc47960012d51838ffd03fa8c7384ba74e423b80 GIT binary patch literal 11776 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..209cb997bce35b2886877b18c9a24551c3eaaaae GIT binary patch literal 10676 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 U622rKg1i&s|9S?YQsglFUpk`-$p8QV literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/storage/v1beta2/storage-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..65db8aff3cf4a09d1ea212a586974d1cda6d4cba GIT binary patch literal 18969 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 gIDJz~5>paO5^MsxPY0O>0EUh)VQaRpx&QzG literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..cf26fdaaf6861bbd2a66835f031032a58ae114d0 GIT binary patch literal 225 zcmZQzWME`~fQ3NnJCx1%9|}w)y4cGvl%Cpj>DkOz7SisAOZ&5+YQR**oZkM8d`$)t zE#K{0nVETV4>Ol2L|t?V*0h)$^=}GWPT-33`bRQieCFuw+^xTJv)}iHjiDmXowx#3 zOZH?}g~$rLHnH;5t30@9hedZ+{;TrL7d){7fofkD&5U_3l(om)Ho-I^$L88zR`ZF| zSJpDS{MODr8{VrCl4_J*-!xfjcXR{8mx*x+L7JzImeoH{{jGANVYX*V{r_3p7pwDS H1_c5Ds#{v) literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..75e940ae3216cee1ec640f807eb0c05c68c300ac GIT binary patch literal 5647 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/taskqueue/v1beta1/taskqueue-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..f504ab09a2d0707f7d2d5c8ad2e6f7b3e1b1266f GIT binary patch literal 15069 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/tasks/v1/tasks-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/tasks/v1/tasks-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..27abf464e0344a3b0325c5e264e9cae169144be0 GIT binary patch literal 6233 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ⅆjq$hrr^8#FHDcc3q>dzPkiX$tIl$E~U_$frZIh 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..c095226c9d9622045c7aaa30f9f12f4cbf2f2672 GIT binary patch literal 220 zcmZQzWME`~fH^?w6O_&P9}1@5R!Mu>1?TYDy=%4>@7Z6z;Z%{{5`k3< zE@!;({O%BA@Iq&1O6km}UtKk}<=$VqaC=FhOYj!&u%gZSD|#dzcFjR$sbMvTe&xS4Z)m|Kus@Qp76yzx8g>}*J^luVB;9oG^ zn%EXc$UwE+iADB~^ykjw>n~lpG;KMXEBx4sgbz=86ZuZC*Yd)m61o1bk56Ws9@jbV zw*C}F4pT4D+EY9r8T}PMQ}gUZYnb{MSMg<)mb3k4g<#Odq9>7>(u7lc>U(;8mXh@# z9=9_;=P9=crCF`#+jkTu59&TkutO7EvkvRL>E1JzCiQWo;pxE#BDrJtZU~&Lk$cF+ z5_f@4H^q9h@HdkfbUNh=U%lvjRzikct|o)`Rk^9$}LpQI)5+HLQFv@jjH? zGY5Q3N)|qw)Ym9_);+|it9V4+t^Qtyv6J}O>hOfP4#~mD?92K`1u7#zjTb1!x4?|E zb#WA&^HE>*?Z(2cD+~>Ou0^qGh1zg>Y>X7 zg1HcRf2-MhCyxmuVH9~C!PshSvuzCNKX&V8?Mn{slL z*{yq(nUt?;w`vcla&Je==U$aod_zjoGqX4)){7_Bj#u$|l>LRM-1yXk4;iZk+WVF`|83u0eD2>+{;HvOuObM^dv_rp?;H^6PV_C$ZWVtCDT z0+WvX@Hzv91QxCZw$~9QGK_EGeS{Ik1CQp(X&L)w!-ZRhn z2Mxus{!i?V*EN|u#(d@vj)N6k}J$>@+{xTeFxs$6RO<3r`qWz+GBdxRmARd z2(-*Dk9NAENWty)F&~E)|9#H z(Q&KeGigJHU6z?GNqZSdM*OYE8cQUOo60EiVz9%vytbgeLKrlu+dwO?tM=Wgoubt- z6A33IfEaUg6Kge!$(r}E=-wn5aP-XVzz(Y+@!T~5Dvd$CpU*tGglljtO&@RG(Pq*O zMQ92SIS!vf*ER~EqV2&8&sK&5b5Pr(VBel?IhlIb^E-A7o!M%$&n$M<+N)&mnfxr& zVcVkfsYsJ#!a@4uTu_O~)l2PR58a}}B#-Nfj9Y4q{qTk+)DerCG{lDn?SR^HPfAkS zhDApB@)jJ^qr*R#EeUuu7|`V!);s4H+omGxv&w`4D7WxP)y~+Z(k1n$CabpP_j%`< zFGCbQv?lW%qe%IaauTJRnuc^qT3N5YF#XyNDy>fo&&}~#Q=wJ=sZyMCmnyg+==a={ zxNnx(?mf7Yd1C0tGV_&J>PZ>E1hr;s!fqNvRHjI~T-o<=<4|GS-*Y<5@~dYfuPAdX zPHURy+qU=Yunq58VkSM~8d!#A*7lPYB|fjyu8l4)ojx)5gECeB2FWeAc&o%wxUNU% zPS&dn*A_!_1LJVG8^_^JiOlq#0G*Cg(P6ZJWqjk}ZV+AJ=ryadDMKcGRR2G#2?O&l zJMiMFdUZf$gE4ujAB?!>kj4EKhsE--1(l)8CxKu5!?ztX@cgn`^nGzA*6xPx(~J=+ zb!>{dx|_ac2xH89!Cza)Keaa&Bx2UiNxqk$#aS+oK`EwMGSUO9mz56G)W5G^=Q84I zoMV?2b}eGH#{j_IXB-Ux*u|FYqEy%>&SeP;!Txx2*YNLyj4Zd*$;AyDj-WAAPSv8@ z)%a5$-V4`Vz1Dw6WUGjjkB`p;7o&rkY5xGGTUCi}mO7R4+_&rXK>zY{kL7RA=jO+E zOkG1M#Yhs@)1GsoXI!7AzpSn}I(=LQ-e`-dviLj_?FQ@<#lyuQz6`V4%Qol4!HqIE zsaSp2G=3!wrL1Dpi$0A`yac*w6s7sxK)R6od^SL|_Rx5G5QNLJq=Ga3J}^ zeC*}6lQ@eaSS0Ek4FFJJ$t~=|>D1J?dt~Q3*{!P`D-#m*b!bp`z=jP+&=|hn-hOmnDvCt$|AHOdMmB0)f4CdE4q! zWV2_3f{A@JdC;8PVLE$vp z6R$MKpFIomCjg8!vW*StXi!t?hH$1fTu^ZNI-9d%X@AgwWBscGvQ+kikd?<#umtv* zxyzGW!>r+W6)cjDiVU?dRWYU-8^JBDa9TD*keZ4M)D(?`X#^5T^Z-+u4aCMa7>Pg- z?NILW8wbc6%5kunNtZRk&1PzbS@pexRefz~4Iec~xV&Gea7z})`d7#1VXyE%n6Mh= z#u3gD_7n#fCz!D#7-JEDbAVa}SZPuJjEQrkfXz%tSUz~zOk^!S&-pc6xfFu|a3OX~(!$yjP5t-mb_8*}qyhlak{kZ4Sdy2`BrqES+B+imF(^fN zHZjNUolQ#3{mo1p$>;421o#MYUmVVEr?7KQLNV!sX%oaCDXpQV@^Gj3Xqx(qFN4ix zpE7c?k21%UUi3bCR8uzQry%Gxe>y1c3@?WCFr&5lb(e%9D_MDX;99(RHH=LUXaK1a z-aUZo?cFL_R9sS0e5N{|QL@v1NA41`7scIuGwE&o1Yqp?p?)^hjwKG7_ol=^v4`0k z;Tb1A(Q+>8_Qn=JxHB$aTwVEtGlw(dpYFE@{(lQD7o7EtJo?iIp94qR9B3QX2p^m8 zmX!E|@0SD`Xm*bKcOHk|Z@6Z4 zaWVeI*XV^ucjZPjnb$ei8y$@y)7vL--%!+WJoTcMP$Aw?oKl_Ep!=dy$WAQPRGxWL zQUr=Adj2`Xvn^dhoUr^>$e8EY=^jxRQMI>_>r-b_jvn$_41`3_m^Gg9Ol;Zj1$M{p z6z5t_>(&3ZFzhvVr<+dJLp7xW_s>{OUnhE!9(NAc`|r9kXx#m3G@?U<@UDNo^0C$p zp1H%WmCZMk+C?+Rc%xRQm3=O5?cnn-wHF(H_Rexa_=Eck$&spIT-rU?e5flTw#w*& zOB~lFpl&mJCp$|y`(Y*Wzaem9jqtNWfZZ(|HQV2P)nj^JKm4H(+-0y`pJV;2`|Vw$ zQV4-C*AQQX2~Gv$Z;8^j!%-1FU{ivV1qgv7K>U2v?P0c1n1vlg18L>x0!3p2g2G7u zCi2c-_y5a=D;JjB#b&C0)&*<1l$Cn;oqPJXFg1_c7PpbVa5&m;nM}g%TXjOD!@q^0hqdz0A_d_8 z=l-)len0u#S?>kde1|f0;$vcE;qj_+c?A+c;|^1Ac04z?-|~f_{AnaRxD(P92|;Qg z{ah_0!h*?Qk_O)QPxt`*RU8+anXs%8K{gXfb$`_7icCYL6nS_B!Fj5{Kk@u#AeR1H zCOb_81ncY^><7lUVx2tQ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/translate-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/translate/v2/translate-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..401dcde048a8730ab3a1a88a578ad80e24fa6dc7 GIT binary patch literal 8105 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 OJR8Y11NhCY^#2FfWQwW) literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/urlshortener/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/urlshortener/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..d6a9c8a19917795555a4e4f605226f85cd8d43f8 GIT binary patch literal 223 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 N0b>9#3UJG+{{yd?40Qki literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/_makefile.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/_makefile.i new file mode 100644 index 0000000000000000000000000000000000000000..2a01bf9b68d0f0237a30c3f8940ea8d32c803719 GIT binary patch literal 220 zcmZQzWME`~fH^?w1C-749|}GhJ@@o8Q0@LQy>07AU-=75JKHt2PWWAC&-}=L zt%v<$pW`{XS-)QX{Q1&y<*rWFnY&*8+;!4&=E_RdDuIJf{!9tk`{Yl|-<}ec)T+)H z#XiS(+g!4A{C&MnpV!vBrf>YD=zIC+FNM6@T037ZTmFo3YeDLxZvq!C#xU%6^Irl0 D&1YuP literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..cf34f4d29c82b0886d738b147edc013253f5a83e GIT binary patch literal 5457 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/webfonts/v1/webfonts-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..0adc2855eb950d38f25bd7b9e0ef0d4d2294efa0 GIT binary patch literal 4970 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..bc2c5d9c58b13549a25ce72f11a1f3577c80dbc7 GIT binary patch literal 78423 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«n4aSzg8p7-5 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%0DvhZfGW7Kg^^m>xk*jo;1@ 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


d1JH{Yc`#TXGht#VE?I%fq~0L}@Qzq%M@Bs@oYA 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 RxQ=``L4W!I)Wyrw|9|SL8nFNX literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3/youtube-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..677d9985a8028397d6b467dc96ee7ee34579b46a GIT binary patch literal 96773 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..43d02f18a29862d05c7f997aaedf713bae1c1cd0 GIT binary patch literal 7765 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 DoUN9$ literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-gen.go.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtube/v3alpha/youtube-gen.go.i new file mode 100644 index 0000000000000000000000000000000000000000..452b01a97c680a4dc1716d217015a7129ed43b74 GIT binary patch literal 11423 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 YRV>u3pFEI#)wnpm_64!LXQlZ60OoiM7ytkO literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1/youtubeanalytics-api.json.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/youtubeanalytics/v1/youtubeanalytics-api.json.i new file mode 100644 index 0000000000000000000000000000000000000000..c25b1501becf525bd4d9c301ffff03b1bfa9daf3 GIT binary patch literal 7390 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 P2(>b}p8-7MSAPEk_~Y=T literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/~2ehgignore.i b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/data/~2ehgignore.i new file mode 100644 index 0000000000000000000000000000000000000000..c42b0669f3b0d069125485ff99034c83d3cc7435 GIT binary patch literal 338 zcmZQzWME`~fJh*f24yq+hk`D)vyzI@w^hQg>{q)~cjJcQ(b;!kYCv?w9McX*t_B01 z1Mg~2C0KX;n0YaGsZW~rx~90A-HR$X6gy|7b-3LXTO$;)zu}Hn=T#xDe-}0LQ{E?p z<~=D~JMXG7r-S{`4>NXTGKsgf3*PzaQQj<_x>qR)YzfFo3=FzJTnA<`Fff5=klW;( z#W;mZkJrBKoN&F^_p0NOcot`<8ZcEcCpjU(0Ej;@B(44O=g*fpA$N~7`P}_dbN9=Y zJy#YTne<1gmZwmUp@dz48?2)ZO!5H93NVX-!5>I7f-Fm}(@I_L!0@0i_@% literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/fncache b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/fncache new file mode 100644 index 0000000000000..ad2947590cc2b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/fncache @@ -0,0 +1,276 @@ +data/taskqueue/v1beta2/taskqueue-gen.go.i +data/dfareporting/v1/dfareporting-gen.go.i +data/adexchangeseller/v1.1/adexchangeseller-api.json.i +data/dfareporting/v1/dfareporting-api.json.i +data/webfonts/v1/webfonts-api.json.i +data/prediction/v1.2/prediction-gen.go.i +data/analytics/v2.4/Makefile.i +data/spectrum/v1explorer/spectrum-api.json.i +data/youtubeanalytics/v1beta1/youtubeanalytics-gen.go.i +data/storage/v1beta2/storage-api.json.i +data/build-examples.sh.i +data/compute/v1beta15/compute-gen.go.i +data/datastore/v1beta1/datastore-gen.go.i +data/adexchangebuyer/v1.2/adexchangebuyer-api.json.i +data/examples/gopher.png.i +data/translate/v2/Makefile.i +data/CONTRIBUTORS.i +data/calendar/v3/calendar-gen.go.i +data/google-api-go-generator/testdata/arrayofarray-1.json.i +data/prediction/v1.4/prediction-gen.go.i +data/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go.i +data/bigquery/v2/bigquery-gen.go.i +data/compute/v1beta15/compute-api.json.i +data/plus/v1domains/plus-gen.go.i +data/sqladmin/v1beta1/sqladmin-api.json.i +data/plus/v1moments/plus-gen.go.i +data/siteverification/v1/siteverification-api.json.i +data/dfareporting/v1.2/dfareporting-api.json.i +data/datastore/v1beta2/datastore-gen.go.i +data/latitude/v1/latitude-gen.go.i +data/analytics/v2.4/analytics-gen.go.i +data/adsense/v1/adsense-api.json.i +data/youtubeanalytics/v1/youtubeanalytics-api.json.i +data/lib/codereview/codereview.cfg.i +data/moderator/v1/moderator-api.json.i +data/oauth2/v2/oauth2-api.json.i +data/google-api-go-generator/testdata/getwithoutbody.want.i +data/latitude/v1/Makefile.i +data/analytics/v3/analytics-gen.go.i +data/adsense/v1.4/adsense-api.json.i +data/discovery/v1/Makefile.i +data/compute/v1beta13/compute-api.json.i +data/games/v1/games-api.json.i +data/examples/orkut.go.i +data/google-api-go-generator/testdata/mapofstrings-1.json.i +data/googleapi/transport/apikey.go.i +data/buzz/v1/buzz-gen.go.i +data/adsense/v1.1/adsense-gen.go.i +data/.hgignore.i +data/mapsengine/v1/mapsengine-gen.go.i +data/compute/v1beta16/compute-gen.go.i +data/prediction/v1.5/prediction-gen.go.i +data/prediction/v1.2/prediction-api.json.i +data/moderator/v1/moderator-gen.go.i +data/mirror/v1/mirror-api.json.i +data/dfareporting/v1.2/dfareporting-gen.go.i +data/appstate/v1/appstate-api.json.i +data/audit/v1/audit-api.json.i +data/google-api-go-generator/testdata/arrayofarray-1.want.i +data/shopping/v1/shopping-api.json.i +data/freebase/v1sandbox/freebase-api.json.i +data/blogger/v3/blogger-gen.go.i +data/google-api-go-generator/gen.go.i +data/pagespeedonline/v1/Makefile.i +data/last-change.i +data/.hgtags.i +data/urlshortener/v1/urlshortener-gen.go.i +data/adsense/v1.2/adsense-api.json.i +data/google-api-go-generator/testdata/mapofstrings-1.want.i +data/androidpublisher/v1/androidpublisher-api.json.i +data/adsense/v1/adsense-gen.go.i +data/customsearch/v1/Makefile.i +data/drive/v2/drive-gen.go.i +data/orkut/v2/Makefile.i +data/diacritize/v1/Makefile.i +data/civicinfo/us_v1/civicinfo-gen.go.i +data/prediction/v1.3/prediction-api.json.i +data/prediction/v1.5/prediction-api.json.i +data/youtube/v3alpha/youtube-api.json.i +data/webfonts/v1/Makefile.i +data/examples/urlshortener.go.i +data/google-api/googleapi.go.i +data/NOTES.i +data/games/v1/games-gen.go.i +data/Makefile.i +data/spectrum/v1explorer/spectrum-gen.go.i +data/plus/v1domains/plus-api.json.i +data/orkut/v2/orkut-api.json.i +data/googleapi/types.go.i +data/dfareporting/v1.1/dfareporting-api.json.i +data/admin/reports_v1/admin-gen.go.i +data/diacritize/v1/diacritize-gen.go.i +data/analytics/v3/Makefile.i +data/google-api-go-generator/testdata/arrayofmapofstrings.json.i +data/adsense/v1/.#adsense-api.json.i +data/adexchangebuyer/v1.1/adexchangebuyer-gen.go.i +data/identitytoolkit/v3/identitytoolkit-gen.go.i +data/datastore/v1beta2/datastore-api.json.i +data/adsense/v1/#adsense-api.json#.i +data/calendar/v3/calendar-api.json.i +data/oauth2/v1/oauth2-api.json.i +data/coordinate/v1/coordinate-gen.go.i +data/civicinfo/us_v1/civicinfo-api.json.i +data/compute/v1beta16/compute-api.json.i +data/examples/prediction.go.i +data/compute/v1beta14/compute-gen.go.i +data/prediction/v1.3/Makefile.i +data/discovery/v1/discovery-api.json.i +data/drive/v1/drive-api.json.i +data/adexchangeseller/v1/adexchangeseller-api.json.i +data/siteverification/v1/Makefile.i +data/prediction/v1.4/prediction-api.json.i +data/buzz/v1/Makefile.i +data/freebase/v1-sandbox/freebase-api.json.i +data/sqladmin/v1beta1/sqladmin-gen.go.i +data/doubleclickbidmanager/v1/doubleclickbidmanager-api.json.i +data/examples/compute.go.i +data/oauth2/v1/oauth2-gen.go.i +data/customsearch/v1/customsearch-gen.go.i +data/taskqueue/v1beta1/taskqueue-gen.go.i +data/google-api/Makefile.i +data/google-api-go-generator/testdata/getwithoutbody.json.i +data/dfareporting/v1.3/dfareporting-api.json.i +data/shopping/v1/Makefile.i +data/datastore/v1beta1/datastore-api.json.i +data/groupssettings/v1/groupssettings-gen.go.i +data/gan/v1beta1/gan-api.json.i +data/adsense/v1/Makefile.i +data/groupssettings/v1/groupssettings-api.json.i +data/google-api-go-generator/gen_test.go.i +data/doubleclicksearch/v2/doubleclicksearch-gen.go.i +data/README.i +data/compute/v1beta13/compute-gen.go.i +data/buzz/v1/buzz-api.json.i +data/coordinate/v1/coordinate-api.json.i +data/googleapi/go11.go.i +data/adexchangebuyer/v1.3/adexchangebuyer-gen.go.i +data/examples/bigquery.go.i +data/licensing/v1/licensing-api.json.i +data/examples/debug.go.i +data/googleapi/googleapi_test.go.i +data/AUTHORS.i +data/adexchangebuyer/v1/adexchangebuyer-api.json.i +data/identitytoolkit/v3/identitytoolkit-api.json.i +data/androidpublisher/v1/androidpublisher-gen.go.i +data/adsense/v1.3/adsense-gen.go.i +data/storage/v1beta1/storage-api.json.i +data/tasks/v1/tasks-gen.go.i +data/androidpublisher/v1.1/androidpublisher-gen.go.i +data/dns/v1beta1/dns-api.json.i +data/youtube/v3/youtube-api.json.i +data/sqladmin/v1beta3/sqladmin-api.json.i +data/plusdomains/v1/plusdomains-gen.go.i +data/plus/v1/plus-api.json.i +data/examples/buzz.go.i +data/androidpublisher/v1.1/androidpublisher-api.json.i +data/adexchangebuyer/v1.3/adexchangebuyer-api.json.i +data/plusdomains/v1/plusdomains-api.json.i +data/dfareporting/v1.3/dfareporting-gen.go.i +data/admin/reports_v1/admin-api.json.i +data/adsense/v1.2/adsense-gen.go.i +data/compute/v1/compute-gen.go.i +data/bigquery/v2/bigquery-api.json.i +data/appstate/v1/appstate-gen.go.i +data/admin/directory_v1/admin-gen.go.i +data/examples/tasks.go.i +data/examples/Makefile.i +data/tasks/v1/Makefile.i +data/audit/v1/audit-gen.go.i +data/mirror/v1/mirror-gen.go.i +data/plus/v1moments/plus-api.json.i +data/google-api-go-generator/testdata/blogger-3.json.i +data/books/v1/books-api.json.i +data/adexchangeseller/v1.1/adexchangeseller-gen.go.i +data/google-api-go-generator/testdata/blogger-3.want.i +data/googleapi/googleapi.go.i +data/google-api-go-generator/testdata/quotednum.want.i +data/reseller/v1sandbox/reseller-api.json.i +data/google-api-go-generator/testdata/quotednum.json.i +data/analytics/v3/analytics-api.json.i +data/prediction/v1.3/prediction-gen.go.i +data/bigquery/v2beta1/bigquery-gen.go.i +data/admin/email_migration_v2/admin-gen.go.i +data/taskqueue/v1beta2/taskqueue-api.json.i +data/youtube/v3/youtube-gen.go.i +data/drive/v2/drive-api.json.i +data/books/v1/books-gen.go.i +data/googleapi/types_test.go.i +data/adexchangebuyer/v1/Makefile.i +data/blogger/v2/blogger-gen.go.i +data/dns/v1beta1/dns-gen.go.i +data/reseller/v1/reseller-api.json.i +data/prediction/v1.2/Makefile.i +data/google-api-go-generator/testdata/resource-named-service.want.i +data/latitude/v1/latitude-api.json.i +data/translate/v2/translate-api.json.i +data/mapsengine/v1/mapsengine-api.json.i +data/taskqueue/v1beta1/Makefile.i +data/audit/v1/Makefile.i +data/doubleclicksearch/v2/doubleclicksearch-api.json.i +data/adsense/v1.1/adsense-api.json.i +data/google-api-go-generator/testdata/resource-named-service.json.i +data/admin/directory_v1/admin-api.json.i +data/adsensehost/v4.1/adsensehost-api.json.i +data/storage/v1beta2/storage-gen.go.i +data/customsearch/v1/customsearch-api.json.i +data/adexchangebuyer/v1.1/adexchangebuyer-api.json.i +data/qpxexpress/v1/qpxexpress-api.json.i +data/TODO.i +data/admin/email_migration_v2/admin-api.json.i +data/discovery/v1/discovery-gen.go.i +data/sqladmin/v1beta3/sqladmin-gen.go.i +data/pagespeedonline/v1/pagespeedonline-gen.go.i +data/gan/v1beta1/gan-gen.go.i +data/shopping/v1/shopping-gen.go.i +data/gamesmanagement/v1management/gamesmanagement-gen.go.i +data/adsensehost/v4.1/adsensehost-gen.go.i +data/adsense/v1.3/adsense-api.json.i +data/plus/v1/plus-gen.go.i +data/examples/storage.go.i +data/tasks/v1/tasks-api.json.i +data/drive/v1/drive-gen.go.i +data/bigquery/v2beta1/bigquery-api.json.i +data/google-api-go-generator/Makefile.i +data/groupssettings/v1/Makefile.i +data/freebase/v1/freebase-api.json.i +data/calendar/v3/Makefile.i +data/compute/v1/compute-api.json.i +data/adexchangebuyer/v1.2/adexchangebuyer-gen.go.i +data/prediction/v1.4/Makefile.i +data/dfareporting/v1.1/dfareporting-gen.go.i +data/moderator/v1/Makefile.i +data/orkut/v2/orkut-gen.go.i +data/webfonts/v1/webfonts-gen.go.i +data/compute/v1beta12/compute-api.json.i +data/blogger/v3/blogger-api.json.i +data/siteverification/v1/siteverification-gen.go.i +data/compute/v1beta12/compute-gen.go.i +data/blogger/v2/Makefile.i +data/LICENSE.i +data/urlshortener/v1/Makefile.i +data/youtubeanalytics/v1beta1/youtubeanalytics-api.json.i +data/freebase/v1/freebase-gen.go.i +data/pagespeedonline/v1/pagespeedonline-api.json.i +data/compute/v1beta14/compute-api.json.i +data/plus/v1/Makefile.i +data/freebase/v1/Makefile.i +data/oauth2/v2/oauth2-gen.go.i +data/freebase/v1-sandbox/freebase-gen.go.i +data/groupsmigration/v1/groupsmigration-api.json.i +data/groupsmigration/v1/groupsmigration-gen.go.i +data/taskqueue/v1beta1/taskqueue-api.json.i +data/freebase/v1-sandbox/Makefile.i +data/prediction/v1.6/prediction-gen.go.i +data/reseller/v1sandbox/reseller-gen.go.i +data/adexchangeseller/v1/adexchangeseller-gen.go.i +data/adexchangebuyer/v1/adexchangebuyer-gen.go.i +data/analytics/v2.4/analytics-api.json.i +data/gamesmanagement/v1management/gamesmanagement-api.json.i +data/storage/v1beta1/storage-gen.go.i +data/adsense/v1.4/adsense-gen.go.i +data/examples/drive.go.i +data/blogger/v2/blogger-api.json.i +data/prediction/v1.6/prediction-api.json.i +data/books/v1/Makefile.i +data/diacritize/v1/diacritize-api.json.i +data/licensing/v1/licensing-gen.go.i +data/freebase/v1sandbox/freebase-gen.go.i +data/examples/main.go.i +data/qpxexpress/v1/qpxexpress-gen.go.i +data/google-api-go-generator/testdata/arrayofmapofstrings.want.i +data/translate/v2/translate-gen.go.i +data/youtube/v3alpha/youtube-gen.go.i +data/reseller/v1/reseller-gen.go.i +data/urlshortener/v1/urlshortener-api.json.i +data/youtubeanalytics/v1/youtubeanalytics-gen.go.i diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/phaseroots b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/phaseroots new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo new file mode 100644 index 0000000000000000000000000000000000000000..bb38121c092f96054e6cd85700e84a96cc71df01 GIT binary patch literal 11229 zcmb6f*^=8ftk3<8KHJ*0)4un}OgqzNXVUF+hL&iVT}f1QY}Wbu0+e_Gkexo6q#zLY zB|kir7uD6evGv}3_wfD0L#sM-*5l;1m6}vhoz>csQP}K)TH74!moF#H~W7_+a+MtsJqcY?SD|qMgS{q+s_W!Nl)tWU9lc8T2xmJ z)>Qp`YRq`i1CkE}kW>CzrQa3~PV?2hRjB+(AZjJ|V#ld?eTUa9^y7gDPVWH0(p#u( zPp1An>)~3w9tyt}a9`~_%_k7!u~?UkMLWFAK?S=Y5w{Z^~9g79IaB^ zRL_T}=l6d{eEUm1sd|hDR?XApfLAOlMqF)e-DqTNS6h6l2Q}HDn7}TbNq(N~q^oXj ziT(70u1q-@+aZnb1QyPN)+gmmY&U`-oa|fS&jd-Vp%^lkQ=MwAlPQ6~18^O-0o8AF2e^Ap01JCTl_P`;P=651x)&fZp5W668%_l1$i+rv8uV!Aq13xhwYu7kdH|v|@r)pV z#qu$?LRK^{`kF~(>oTg@#J)$ZhVp`OogFfHwyKA0TbmA9FXD~?`uK=oel5s`20l_J zaO(|TfQZ9Jz?_HmLlO4^aMht1FTn!VjGHZ~hU7xbICtYxHM*-5*y*wGYl#RmmiEc^t;8v!tyLTw)(Gxg6yGhVUugr?r zH}QHuK=E+JFz1s!lDkB_*%|Op;eHM}er{CN8mx2>_E`7>Ce^%TL5lMe_5zq)-><34 zuNe>|Z!^u63m#kocfG95ONZRc^6>pw`0!25AXKq#A(*FrQ*Gbqv8V>~sx$YZT>#33 zo(UKe#k2a6l1C#Vgo31(5|9)1|9C_Fiwav)LutI!yQ@~ik$^vl18cHO8h7;-OYU4% zc>wtFRsaZzbv0QKhfluDx_p!9w6Zpj49ExIEErQIe0=}&Z-2dy-N#){Ng0=Ss3&V* zT$#j8-g^p??AL-0eD`zk-4A!|7Q?gac*N+!DkYBL`RTW($Z};=Ihe_Ob-HD^->m*B*Yy)LI=ZhRb~JU+Tn^lz#=ft zB2fm^YKt8SSp6IYQuLx@f4~IMH#53^WkGRJWa5^=1YyOvm`RM39w>f3_Tl`b$=0vg z-92Ed+Y9%p5k% zBIBKKYsb=`RQXavJP}ZQV_?; zQ8udSFUrRPfrmIV2g7w%$z&1qRq4}QXUgKXA%w8-ertZ{3`md6u`@Tjmp{Wzn(nzA!{tw_xh6 zl^O_<0aYeZLXNqVWLn(ldrVOt)oba@UY10BcMIgTxsf!%rgx)k`8R zY-E<8$))9MA>QV3SRtSA(IBNGsjYp>|+ZBB{<`>ngU|-^KCQORI(LB6TSxH&^&Aez!=j*H<$(WwL{{93Tc}A-ramBH8uH& z@aKP?f6uDP>_a%GCXoiZP_kvdKwO36qA@hxGi={5LZ*u30?W-MOMUd^ys?Z^ea^;K zc}+0}>p)ZCw3XHlmFd?19mO4!M9zeSDv2`i2aC-p6U|2;hvaZ6t#eTX&yS4~l|nG* zbbgi)V$_*;}Dk7+OHchqjMC`{)WDkP@+?aI@9Ki}Dm|Uz1BySC zyfg&Mzaia!P?q^K1@m193d^r0BUzN|6C-L-fQnhpkB7j{{Sa^&4$=F`_z99?dcste zRd8X$!F;~}Y%NoP*g-tGRihnnX3XDd*0$e5cDQ``yErzzb5Cv8&>{vSB^Uw!}p literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo.phaseroots b/third_party/src/code.google.com/p/google-api-go-client/.hg/store/undo.phaseroots new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.bookmarks b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.bookmarks new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.branch b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.branch new file mode 100644 index 0000000000000..331d858ce9b12 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.branch @@ -0,0 +1 @@ +default \ No newline at end of file diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.desc b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.desc new file mode 100644 index 0000000000000..522d089385656 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.desc @@ -0,0 +1,3 @@ +0 +pull +https://code.google.com/p/google-api-go-client diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.dirstate b/third_party/src/code.google.com/p/google-api-go-client/.hg/undo.dirstate new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hgignore b/third_party/src/code.google.com/p/google-api-go-client/.hgignore new file mode 100644 index 0000000000000..d31fc45fdb06b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/.hgignore @@ -0,0 +1,11 @@ +_obj +_testmain.go +clientid.dat +clientsecret.dat +google-api-go-generator/google-api-go-gen + +syntax:glob +*.6 +*.8 +*~ +*.out diff --git a/third_party/src/code.google.com/p/google-api-go-client/.hgtags b/third_party/src/code.google.com/p/google-api-go-client/.hgtags new file mode 100644 index 0000000000000..f1a735783b2f5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/.hgtags @@ -0,0 +1 @@ +b571b553f8c057cb6952ce817dfb09b6e34a8c0b release diff --git a/third_party/src/code.google.com/p/google-api-go-client/AUTHORS b/third_party/src/code.google.com/p/google-api-go-client/AUTHORS new file mode 100644 index 0000000000000..f73b7257457eb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/AUTHORS @@ -0,0 +1,10 @@ +# This is the official list of authors for copyright purposes. +# This file is distinct from the CONTRIBUTORS files. +# See the latter for an explanation. + +# Names should be added to this file as +# Name or Organization +# The email address is not required for organizations. + +# Please keep the list sorted. +Google Inc. diff --git a/third_party/src/code.google.com/p/google-api-go-client/CONTRIBUTORS b/third_party/src/code.google.com/p/google-api-go-client/CONTRIBUTORS new file mode 100644 index 0000000000000..afe67f8525f82 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/CONTRIBUTORS @@ -0,0 +1,44 @@ +# This is the official list of people who can contribute +# (and typically have contributed) code to the repository. +# The AUTHORS file lists the copyright holders; this file +# lists people. For example, Google employees are listed here +# but not in AUTHORS, because Google holds the copyright. +# +# The submission process automatically checks to make sure +# that people submitting code are listed in this file (by email address). +# +# Names should be added to this file only after verifying that +# the individual or the individual's organization has agreed to +# the appropriate Contributor License Agreement, found here: +# +# http://code.google.com/legal/individual-cla-v1.0.html +# http://code.google.com/legal/corporate-cla-v1.0.html +# +# The agreement for individuals can be filled out on the web. +# +# When adding J Random Contributor's name to this file, +# either J's name or J's organization's name should be +# added to the AUTHORS file, depending on whether the +# individual or corporate CLA was used. + +# Names should be added to this file like so: +# Name +# +# An entry with two email addresses specifies that the +# first address should be used in the submit logs and +# that the second address should be recognized as the +# same person when interacting with Rietveld. + +# Please keep the list sorted. + +Alain Vongsouvanhalainv +Andrew Gerrand +Brad Fitzpatrick +Francesc Campoy +Garrick Evans +Glenn Lewis +Jason Hall +Johan Euphrosine +Kostik Shtoyk +Nick Craig-Wood +Scott Van Woudenberg diff --git a/third_party/src/code.google.com/p/google-api-go-client/LICENSE b/third_party/src/code.google.com/p/google-api-go-client/LICENSE new file mode 100644 index 0000000000000..263aa7a0c1232 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) 2011 Google Inc. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above +copyright notice, this list of conditions and the following disclaimer +in the documentation and/or other materials provided with the +distribution. + * Neither the name of Google Inc. nor the names of its +contributors may be used to endorse or promote products derived from +this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/third_party/src/code.google.com/p/google-api-go-client/Makefile b/third_party/src/code.google.com/p/google-api-go-client/Makefile new file mode 100644 index 0000000000000..20ce8a5f7020e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/Makefile @@ -0,0 +1,9 @@ +all: + go install code.google.com/p/google-api-go-client/googleapi + go install code.google.com/p/google-api-go-client/google-api-go-generator + $(GOPATH)/bin/google-api-go-generator -cache=false -install -api=* + +cached: + go install code.google.com/p/google-api-go-client/googleapi + go install code.google.com/p/google-api-go-client/google-api-go-generator + $(GOPATH)/bin/google-api-go-generator -cache=true -install -api=* diff --git a/third_party/src/code.google.com/p/google-api-go-client/NOTES b/third_party/src/code.google.com/p/google-api-go-client/NOTES new file mode 100644 index 0000000000000..3b10889900acc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/NOTES @@ -0,0 +1,13 @@ +Discovery Service: +http://code.google.com/apis/discovery/ +http://code.google.com/apis/discovery/v1/reference.html + +The "type" key: +http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1 + +The "format" key: +http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23 +http://code.google.com/apis/discovery/v1/reference.html#parameter-format-summary + +Google JSON format docs: +http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml diff --git a/third_party/src/code.google.com/p/google-api-go-client/README b/third_party/src/code.google.com/p/google-api-go-client/README new file mode 100644 index 0000000000000..9aca57bf6f3cf --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/README @@ -0,0 +1,10 @@ +Most of this project is auto-generated. + +The notable directories which are not auto-generated: + + google-api-go-generator/ -- the generator itself + google-api/ -- shared common code, used by auto-generated code + examples/ -- sample code + +When changing the generator, re-compile all APIs and submit the +modified APIs in the same CL as the generator changes itself. diff --git a/third_party/src/code.google.com/p/google-api-go-client/TODO b/third_party/src/code.google.com/p/google-api-go-client/TODO new file mode 100644 index 0000000000000..af55f146c773b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/TODO @@ -0,0 +1,2 @@ +Moved to: +http://code.google.com/p/google-api-go-client/issues/ diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-api.json new file mode 100644 index 0000000000000..ae76fbc6ad220 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-api.json @@ -0,0 +1,613 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/sSrTRK5rT30gpj08DDODwXhxRak\"", + "discoveryVersion": "v1", + "id": "adexchangebuyer:v1.1", + "name": "adexchangebuyer", + "canonicalName": "Ad Exchange Buyer", + "version": "v1.1", + "title": "Ad Exchange Buyer API", + "description": "Lets you manage your Ad Exchange Buyer account.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangebuyer/v1.1/", + "basePath": "/adexchangebuyer/v1.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangebuyer/v1.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.buyer": { + "description": "Manage your Ad Exchange buyer account configuration" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "Configuration data for an Ad Exchange buyer account.", + "properties": { + "bidderLocation": { + "type": "array", + "description": "Your bidder locations that have distinct URLs.", + "items": { + "type": "object", + "properties": { + "maximumQps": { + "type": "integer", + "description": "The maximum queries per second the Ad Exchange will send.", + "format": "int32" + }, + "region": { + "type": "string", + "description": "The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values: \n- ASIA \n- EUROPE \n- US_EAST \n- US_WEST" + }, + "url": { + "type": "string", + "description": "The URL to which the Ad Exchange will send bid requests." + } + } + } + }, + "cookieMatchingNid": { + "type": "string", + "description": "The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this." + }, + "cookieMatchingUrl": { + "type": "string", + "description": "The base URL used in cookie match requests." + }, + "id": { + "type": "integer", + "description": "Account id.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#account" + }, + "maximumTotalQps": { + "type": "integer", + "description": "The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.", + "format": "int32" + } + } + }, + "AccountsList": { + "id": "AccountsList", + "type": "object", + "description": "An account feed lists Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single buyer account.", + "properties": { + "items": { + "type": "array", + "description": "A list of accounts.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#accountsList" + } + } + }, + "Creative": { + "id": "Creative", + "type": "object", + "description": "A creative and its classification data.", + "properties": { + "HTMLSnippet": { + "type": "string", + "description": "The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set." + }, + "accountId": { + "type": "integer", + "description": "Account id.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "advertiserId": { + "type": "array", + "description": "Detected advertiser id, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "string", + "format": "int64" + } + }, + "advertiserName": { + "type": "string", + "description": "The name of the company being advertised in the creative.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "attribute": { + "type": "array", + "description": "All attributes for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "buyerCreativeId": { + "type": "string", + "description": "A buyer-specific id identifying the creative in this ad.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "clickThroughUrl": { + "type": "array", + "description": "The set of destination urls for the snippet.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "disapprovalReasons": { + "type": "array", + "description": "The reason for disapproval, if any. Note that not all disapproval reasons may be categorized, so it is possible for the creative to have a status of DISAPPROVED with an empty list for disapproval_reasons. In this case, please reach out to your TAM to help debug the issue. Read-only. This field should not be set in requests.", + "items": { + "type": "string" + } + }, + "height": { + "type": "integer", + "description": "Ad height.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creative" + }, + "productCategories": { + "type": "array", + "description": "Detected product categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "restrictedCategories": { + "type": "array", + "description": "All restricted categories for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "sensitiveCategories": { + "type": "array", + "description": "Detected sensitive categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "status": { + "type": "string", + "description": "Creative serving status. Read-only. This field should not be set in requests." + }, + "vendorType": { + "type": "array", + "description": "All vendor types for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "videoURL": { + "type": "string", + "description": "The url to fetch a video ad. If set, HTMLSnippet should not be set." + }, + "width": { + "type": "integer", + "description": "Ad width.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + } + } + }, + "CreativesList": { + "id": "CreativesList", + "type": "object", + "description": "The creatives feed lists the active creatives for the Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single creative.", + "properties": { + "items": { + "type": "array", + "description": "A list of creatives.", + "items": { + "$ref": "Creative" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creativesList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through creatives. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "DirectDeal": { + "id": "DirectDeal", + "type": "object", + "description": "The configuration data for an Ad Exchange direct deal.", + "properties": { + "accountId": { + "type": "integer", + "description": "The account id of the buyer this deal is for.", + "format": "int32" + }, + "advertiser": { + "type": "string", + "description": "The name of the advertiser this deal is for." + }, + "currencyCode": { + "type": "string", + "description": "The currency code that applies to the fixed_cpm value. If not set then assumed to be USD." + }, + "endTime": { + "type": "string", + "description": "End time for when this deal stops being active. If not set then this deal is valid until manually disabled by the publisher. In seconds since the epoch.", + "format": "int64" + }, + "fixedCpm": { + "type": "string", + "description": "The fixed price for this direct deal. In cpm micros of currency according to currency_code.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Deal id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDeal" + }, + "name": { + "type": "string", + "description": "Deal name." + }, + "sellerNetwork": { + "type": "string", + "description": "The name of the publisher offering this direct deal." + }, + "startTime": { + "type": "string", + "description": "Start time for when this deal becomes active. If not set then this deal is active immediately upon creation. In seconds since the epoch.", + "format": "int64" + } + } + }, + "DirectDealsList": { + "id": "DirectDealsList", + "type": "object", + "description": "A direct deals feed lists Direct Deals the Ad Exchange buyer account has access to. This includes direct deals set up for the buyer account as well as its merged stream seats.", + "properties": { + "directDeals": { + "type": "array", + "description": "A list of direct deals relevant for your account.", + "items": { + "$ref": "DirectDeal" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDealsList" + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adexchangebuyer.accounts.get", + "path": "accounts/{id}", + "httpMethod": "GET", + "description": "Gets one account by ID.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of accounts.", + "response": { + "$ref": "AccountsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "patch": { + "id": "adexchangebuyer.accounts.patch", + "path": "accounts/{id}", + "httpMethod": "PATCH", + "description": "Updates an existing account. This method supports patch semantics.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "update": { + "id": "adexchangebuyer.accounts.update", + "path": "accounts/{id}", + "httpMethod": "PUT", + "description": "Updates an existing account.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "creatives": { + "methods": { + "get": { + "id": "adexchangebuyer.creatives.get", + "path": "creatives/{accountId}/{buyerCreativeId}", + "httpMethod": "GET", + "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + "parameters": { + "accountId": { + "type": "integer", + "description": "The id for the account that will serve this creative.", + "required": true, + "format": "int32", + "location": "path" + }, + "buyerCreativeId": { + "type": "string", + "description": "The buyer-specific id for this creative.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "buyerCreativeId" + ], + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "insert": { + "id": "adexchangebuyer.creatives.insert", + "path": "creatives", + "httpMethod": "POST", + "description": "Submit a new creative.", + "request": { + "$ref": "Creative" + }, + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.creatives.list", + "path": "creatives", + "httpMethod": "GET", + "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + }, + "statusFilter": { + "type": "string", + "description": "When specified, only creatives having the given status are returned.", + "enum": [ + "approved", + "disapproved", + "not_checked" + ], + "enumDescriptions": [ + "Creatives which have been approved.", + "Creatives which have been disapproved.", + "Creatives whose status is not yet checked." + ], + "location": "query" + } + }, + "response": { + "$ref": "CreativesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "directDeals": { + "methods": { + "get": { + "id": "adexchangebuyer.directDeals.get", + "path": "directdeals/{id}", + "httpMethod": "GET", + "description": "Gets one direct deal by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The direct deal id", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "DirectDeal" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.directDeals.list", + "path": "directdeals", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of direct deals.", + "response": { + "$ref": "DirectDealsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-gen.go new file mode 100644 index 0000000000000..3610e36f1ebee --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.1/adexchangebuyer-gen.go @@ -0,0 +1,907 @@ +// Package adexchangebuyer provides access to the Ad Exchange Buyer API. +// +// See https://developers.google.com/ad-exchange/buyer-rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangebuyer/v1.1" +// ... +// adexchangebuyerService, err := adexchangebuyer.New(oauthHttpClient) +package adexchangebuyer + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangebuyer:v1.1" +const apiName = "adexchangebuyer" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/adexchangebuyer/v1.1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Ad Exchange buyer account configuration + AdexchangeBuyerScope = "https://www.googleapis.com/auth/adexchange.buyer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Creatives = NewCreativesService(s) + s.DirectDeals = NewDirectDealsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Creatives *CreativesService + + DirectDeals *DirectDealsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewCreativesService(s *Service) *CreativesService { + rs := &CreativesService{s: s} + return rs +} + +type CreativesService struct { + s *Service +} + +func NewDirectDealsService(s *Service) *DirectDealsService { + rs := &DirectDealsService{s: s} + return rs +} + +type DirectDealsService struct { + s *Service +} + +type Account struct { + // BidderLocation: Your bidder locations that have distinct URLs. + BidderLocation []*AccountBidderLocation `json:"bidderLocation,omitempty"` + + // CookieMatchingNid: The nid parameter value used in cookie match + // requests. Please contact your technical account manager if you need + // to change this. + CookieMatchingNid string `json:"cookieMatchingNid,omitempty"` + + // CookieMatchingUrl: The base URL used in cookie match requests. + CookieMatchingUrl string `json:"cookieMatchingUrl,omitempty"` + + // Id: Account id. + Id int64 `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaximumTotalQps: The sum of all bidderLocation.maximumQps values + // cannot exceed this. Please contact your technical account manager if + // you need to change this. + MaximumTotalQps int64 `json:"maximumTotalQps,omitempty"` +} + +type AccountBidderLocation struct { + // MaximumQps: The maximum queries per second the Ad Exchange will send. + MaximumQps int64 `json:"maximumQps,omitempty"` + + // Region: The geographical region the Ad Exchange should send requests + // from. Only used by some quota systems, but always setting the value + // is recommended. Allowed values: + // - ASIA + // - EUROPE + // - US_EAST + // - + // US_WEST + Region string `json:"region,omitempty"` + + // Url: The URL to which the Ad Exchange will send bid requests. + Url string `json:"url,omitempty"` +} + +type AccountsList struct { + // Items: A list of accounts. + Items []*Account `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Creative struct { + // HTMLSnippet: The HTML snippet that displays the ad when inserted in + // the web page. If set, videoURL should not be set. + HTMLSnippet string `json:"HTMLSnippet,omitempty"` + + // AccountId: Account id. + AccountId int64 `json:"accountId,omitempty"` + + // AdvertiserId: Detected advertiser id, if any. Read-only. This field + // should not be set in requests. + AdvertiserId googleapi.Int64s `json:"advertiserId,omitempty"` + + // AdvertiserName: The name of the company being advertised in the + // creative. + AdvertiserName string `json:"advertiserName,omitempty"` + + // Attribute: All attributes for the ads that may be shown from this + // snippet. + Attribute []int64 `json:"attribute,omitempty"` + + // BuyerCreativeId: A buyer-specific id identifying the creative in this + // ad. + BuyerCreativeId string `json:"buyerCreativeId,omitempty"` + + // ClickThroughUrl: The set of destination urls for the snippet. + ClickThroughUrl []string `json:"clickThroughUrl,omitempty"` + + // DisapprovalReasons: The reason for disapproval, if any. Note that not + // all disapproval reasons may be categorized, so it is possible for the + // creative to have a status of DISAPPROVED with an empty list for + // disapproval_reasons. In this case, please reach out to your TAM to + // help debug the issue. Read-only. This field should not be set in + // requests. + DisapprovalReasons []string `json:"disapprovalReasons,omitempty"` + + // Height: Ad height. + Height int64 `json:"height,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // ProductCategories: Detected product categories, if any. Read-only. + // This field should not be set in requests. + ProductCategories []int64 `json:"productCategories,omitempty"` + + // RestrictedCategories: All restricted categories for the ads that may + // be shown from this snippet. + RestrictedCategories []int64 `json:"restrictedCategories,omitempty"` + + // SensitiveCategories: Detected sensitive categories, if any. + // Read-only. This field should not be set in requests. + SensitiveCategories []int64 `json:"sensitiveCategories,omitempty"` + + // Status: Creative serving status. Read-only. This field should not be + // set in requests. + Status string `json:"status,omitempty"` + + // VendorType: All vendor types for the ads that may be shown from this + // snippet. + VendorType []int64 `json:"vendorType,omitempty"` + + // VideoURL: The url to fetch a video ad. If set, HTMLSnippet should not + // be set. + VideoURL string `json:"videoURL,omitempty"` + + // Width: Ad width. + Width int64 `json:"width,omitempty"` +} + +type CreativesList struct { + // Items: A list of creatives. + Items []*Creative `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through creatives. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DirectDeal struct { + // AccountId: The account id of the buyer this deal is for. + AccountId int64 `json:"accountId,omitempty"` + + // Advertiser: The name of the advertiser this deal is for. + Advertiser string `json:"advertiser,omitempty"` + + // CurrencyCode: The currency code that applies to the fixed_cpm value. + // If not set then assumed to be USD. + CurrencyCode string `json:"currencyCode,omitempty"` + + // EndTime: End time for when this deal stops being active. If not set + // then this deal is valid until manually disabled by the publisher. In + // seconds since the epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // FixedCpm: The fixed price for this direct deal. In cpm micros of + // currency according to currency_code. + FixedCpm int64 `json:"fixedCpm,omitempty,string"` + + // Id: Deal id. + Id int64 `json:"id,omitempty,string"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Name: Deal name. + Name string `json:"name,omitempty"` + + // SellerNetwork: The name of the publisher offering this direct deal. + SellerNetwork string `json:"sellerNetwork,omitempty"` + + // StartTime: Start time for when this deal becomes active. If not set + // then this deal is active immediately upon creation. In seconds since + // the epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type DirectDealsList struct { + // DirectDeals: A list of direct deals relevant for your account. + DirectDeals []*DirectDeal `json:"directDeals,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +// method id "adexchangebuyer.accounts.get": + +type AccountsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one account by ID. +func (r *AccountsService) Get(id int64) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one account by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of accounts. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AccountsListCall) Do() (*AccountsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AccountsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of accounts.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.list", + // "path": "accounts", + // "response": { + // "$ref": "AccountsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.patch": + +type AccountsPatchCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Patch: Updates an existing account. This method supports patch +// semantics. +func (r *AccountsService) Patch(id int64, account *Account) *AccountsPatchCall { + c := &AccountsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsPatchCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adexchangebuyer.accounts.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.update": + +type AccountsUpdateCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Update: Updates an existing account. +func (r *AccountsService) Update(id int64, account *Account) *AccountsUpdateCall { + c := &AccountsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsUpdateCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account.", + // "httpMethod": "PUT", + // "id": "adexchangebuyer.accounts.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.get": + +type CreativesGetCall struct { + s *Service + accountId int64 + buyerCreativeId string + opt_ map[string]interface{} +} + +// Get: Gets the status for a single creative. A creative will be +// available 30-40 minutes after submission. +func (r *CreativesService) Get(accountId int64, buyerCreativeId string) *CreativesGetCall { + c := &CreativesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.buyerCreativeId = buyerCreativeId + return c +} + +func (c *CreativesGetCall) Do() (*Creative, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", strconv.FormatInt(c.accountId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{buyerCreativeId}", url.QueryEscape(c.buyerCreativeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.get", + // "parameterOrder": [ + // "accountId", + // "buyerCreativeId" + // ], + // "parameters": { + // "accountId": { + // "description": "The id for the account that will serve this creative.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "buyerCreativeId": { + // "description": "The buyer-specific id for this creative.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "creatives/{accountId}/{buyerCreativeId}", + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.insert": + +type CreativesInsertCall struct { + s *Service + creative *Creative + opt_ map[string]interface{} +} + +// Insert: Submit a new creative. +func (r *CreativesService) Insert(creative *Creative) *CreativesInsertCall { + c := &CreativesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.creative = creative + return c +} + +func (c *CreativesInsertCall) Do() (*Creative, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit a new creative.", + // "httpMethod": "POST", + // "id": "adexchangebuyer.creatives.insert", + // "path": "creatives", + // "request": { + // "$ref": "Creative" + // }, + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.list": + +type CreativesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of the authenticated user's active creatives. +// A creative will be available 30-40 minutes after submission. +func (r *CreativesService) List() *CreativesListCall { + c := &CreativesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *CreativesListCall) MaxResults(maxResults int64) *CreativesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CreativesListCall) PageToken(pageToken string) *CreativesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StatusFilter sets the optional parameter "statusFilter": When +// specified, only creatives having the given status are returned. +func (c *CreativesListCall) StatusFilter(statusFilter string) *CreativesListCall { + c.opt_["statusFilter"] = statusFilter + return c +} + +func (c *CreativesListCall) Do() (*CreativesList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statusFilter"]; ok { + params.Set("statusFilter", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CreativesList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "statusFilter": { + // "description": "When specified, only creatives having the given status are returned.", + // "enum": [ + // "approved", + // "disapproved", + // "not_checked" + // ], + // "enumDescriptions": [ + // "Creatives which have been approved.", + // "Creatives which have been disapproved.", + // "Creatives whose status is not yet checked." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "creatives", + // "response": { + // "$ref": "CreativesList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.get": + +type DirectDealsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one direct deal by ID. +func (r *DirectDealsService) Get(id int64) *DirectDealsGetCall { + c := &DirectDealsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *DirectDealsGetCall) Do() (*DirectDeal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDeal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one direct deal by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The direct deal id", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "directdeals/{id}", + // "response": { + // "$ref": "DirectDeal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.list": + +type DirectDealsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of direct deals. +func (r *DirectDealsService) List() *DirectDealsListCall { + c := &DirectDealsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *DirectDealsListCall) Do() (*DirectDealsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDealsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of direct deals.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.list", + // "path": "directdeals", + // "response": { + // "$ref": "DirectDealsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-api.json new file mode 100644 index 0000000000000..ecaa240247a83 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-api.json @@ -0,0 +1,824 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/mlESaLdrZYKCTBOwQidwTWARgSg\"", + "discoveryVersion": "v1", + "id": "adexchangebuyer:v1.2", + "name": "adexchangebuyer", + "canonicalName": "Ad Exchange Buyer", + "version": "v1.2", + "title": "Ad Exchange Buyer API", + "description": "Lets you manage your Ad Exchange Buyer account.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangebuyer/v1.2/", + "basePath": "/adexchangebuyer/v1.2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangebuyer/v1.2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.buyer": { + "description": "Manage your Ad Exchange buyer account configuration" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "Configuration data for an Ad Exchange buyer account.", + "properties": { + "bidderLocation": { + "type": "array", + "description": "Your bidder locations that have distinct URLs.", + "items": { + "type": "object", + "properties": { + "maximumQps": { + "type": "integer", + "description": "The maximum queries per second the Ad Exchange will send.", + "format": "int32" + }, + "region": { + "type": "string", + "description": "The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values: \n- ASIA \n- EUROPE \n- US_EAST \n- US_WEST" + }, + "url": { + "type": "string", + "description": "The URL to which the Ad Exchange will send bid requests." + } + } + } + }, + "cookieMatchingNid": { + "type": "string", + "description": "The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this." + }, + "cookieMatchingUrl": { + "type": "string", + "description": "The base URL used in cookie match requests." + }, + "id": { + "type": "integer", + "description": "Account id.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#account" + }, + "maximumTotalQps": { + "type": "integer", + "description": "The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.", + "format": "int32" + } + } + }, + "AccountsList": { + "id": "AccountsList", + "type": "object", + "description": "An account feed lists Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single buyer account.", + "properties": { + "items": { + "type": "array", + "description": "A list of accounts.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#accountsList" + } + } + }, + "Creative": { + "id": "Creative", + "type": "object", + "description": "A creative and its classification data.", + "properties": { + "HTMLSnippet": { + "type": "string", + "description": "The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set." + }, + "accountId": { + "type": "integer", + "description": "Account id.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "advertiserId": { + "type": "array", + "description": "Detected advertiser id, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "string", + "format": "int64" + } + }, + "advertiserName": { + "type": "string", + "description": "The name of the company being advertised in the creative.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "agencyId": { + "type": "string", + "description": "The agency id for this creative.", + "format": "int64" + }, + "attribute": { + "type": "array", + "description": "All attributes for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "buyerCreativeId": { + "type": "string", + "description": "A buyer-specific id identifying the creative in this ad.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "clickThroughUrl": { + "type": "array", + "description": "The set of destination urls for the snippet.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "corrections": { + "type": "array", + "description": "Shows any corrections that were applied to this creative. Read-only. This field should not be set in requests.", + "items": { + "type": "object", + "properties": { + "details": { + "type": "array", + "description": "Additional details about the correction.", + "items": { + "type": "string" + } + }, + "reason": { + "type": "string", + "description": "The type of correction that was applied to the creative." + } + } + } + }, + "disapprovalReasons": { + "type": "array", + "description": "The reasons for disapproval, if any. Note that not all disapproval reasons may be categorized, so it is possible for the creative to have a status of DISAPPROVED with an empty list for disapproval_reasons. In this case, please reach out to your TAM to help debug the issue. Read-only. This field should not be set in requests.", + "items": { + "type": "object", + "properties": { + "details": { + "type": "array", + "description": "Additional details about the reason for disapproval.", + "items": { + "type": "string" + } + }, + "reason": { + "type": "string", + "description": "The categorized reason for disapproval." + } + } + } + }, + "height": { + "type": "integer", + "description": "Ad height.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creative" + }, + "productCategories": { + "type": "array", + "description": "Detected product categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "restrictedCategories": { + "type": "array", + "description": "All restricted categories for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "sensitiveCategories": { + "type": "array", + "description": "Detected sensitive categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "status": { + "type": "string", + "description": "Creative serving status. Read-only. This field should not be set in requests." + }, + "vendorType": { + "type": "array", + "description": "All vendor types for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "videoURL": { + "type": "string", + "description": "The url to fetch a video ad. If set, HTMLSnippet should not be set." + }, + "width": { + "type": "integer", + "description": "Ad width.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + } + } + }, + "CreativesList": { + "id": "CreativesList", + "type": "object", + "description": "The creatives feed lists the active creatives for the Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single creative.", + "properties": { + "items": { + "type": "array", + "description": "A list of creatives.", + "items": { + "$ref": "Creative" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creativesList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through creatives. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "DirectDeal": { + "id": "DirectDeal", + "type": "object", + "description": "The configuration data for an Ad Exchange direct deal.", + "properties": { + "accountId": { + "type": "integer", + "description": "The account id of the buyer this deal is for.", + "format": "int32" + }, + "advertiser": { + "type": "string", + "description": "The name of the advertiser this deal is for." + }, + "currencyCode": { + "type": "string", + "description": "The currency code that applies to the fixed_cpm value. If not set then assumed to be USD." + }, + "endTime": { + "type": "string", + "description": "End time for when this deal stops being active. If not set then this deal is valid until manually disabled by the publisher. In seconds since the epoch.", + "format": "int64" + }, + "fixedCpm": { + "type": "string", + "description": "The fixed price for this direct deal. In cpm micros of currency according to currency_code. If set, then this deal is eligible for the fixed price tier of buying (highest priority, pay exactly the configured fixed price).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Deal id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDeal" + }, + "name": { + "type": "string", + "description": "Deal name." + }, + "privateExchangeMinCpm": { + "type": "string", + "description": "The minimum price for this direct deal. In cpm micros of currency according to currency_code. If set, then this deal is eligible for the private exchange tier of buying (below fixed price priority, run as a second price auction).", + "format": "int64" + }, + "sellerNetwork": { + "type": "string", + "description": "The name of the publisher offering this direct deal." + }, + "startTime": { + "type": "string", + "description": "Start time for when this deal becomes active. If not set then this deal is active immediately upon creation. In seconds since the epoch.", + "format": "int64" + } + } + }, + "DirectDealsList": { + "id": "DirectDealsList", + "type": "object", + "description": "A direct deals feed lists Direct Deals the Ad Exchange buyer account has access to. This includes direct deals set up for the buyer account as well as its merged stream seats.", + "properties": { + "directDeals": { + "type": "array", + "description": "A list of direct deals relevant for your account.", + "items": { + "$ref": "DirectDeal" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDealsList" + } + } + }, + "PerformanceReport": { + "id": "PerformanceReport", + "type": "object", + "description": "The configuration data for an Ad Exchange performance report list. TODO(nathanbullock): need to add some release tests before releasing this. https://sites.google.com/a/google.com/adx-integration/Home/engineering/binary-releases/rtb-api-release https://cs.corp.google.com/#piper///depot/google3/contentads/adx/tools/rtb_api/adxrtb.py", + "properties": { + "calloutStatusRate": { + "type": "array", + "description": "Rate of various prefiltering statuses per match. Please refer to the callout-status-codes.txt file for different statuses.", + "items": { + "type": "any" + } + }, + "cookieMatcherStatusRate": { + "type": "array", + "description": "Average QPS for cookie matcher operations.", + "items": { + "type": "any" + } + }, + "creativeStatusRate": { + "type": "array", + "description": "Rate of ads with a given status. Please refer to the creative-status-codes.txt file for different statuses.", + "items": { + "type": "any" + } + }, + "hostedMatchStatusRate": { + "type": "array", + "description": "Average QPS for hosted match operations.", + "items": { + "type": "any" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#performanceReport" + }, + "latency50thPercentile": { + "type": "number", + "description": "The 50th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "latency85thPercentile": { + "type": "number", + "description": "The 85th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "latency95thPercentile": { + "type": "number", + "description": "The 95th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "noQuotaInRegion": { + "type": "number", + "description": "Rate of various quota account statuses per quota check.", + "format": "double" + }, + "outOfQuota": { + "type": "number", + "description": "Rate of various quota account statuses per quota check.", + "format": "double" + }, + "pixelMatchRequests": { + "type": "number", + "description": "Average QPS for pixel match requests from clients.", + "format": "double" + }, + "pixelMatchResponses": { + "type": "number", + "description": "Average QPS for pixel match responses from clients.", + "format": "double" + }, + "quotaConfiguredLimit": { + "type": "number", + "description": "The configured quota limits for this account.", + "format": "double" + }, + "quotaThrottledLimit": { + "type": "number", + "description": "The throttled quota limits for this account.", + "format": "double" + }, + "region": { + "type": "string", + "description": "The trading location of this data." + }, + "timestamp": { + "type": "string", + "description": "The unix timestamp of the starting time of this performance data.", + "format": "int64" + } + } + }, + "PerformanceReportList": { + "id": "PerformanceReportList", + "type": "object", + "description": "The configuration data for an Ad Exchange performance report list. https://sites.google.com/a/google.com/adx-integration/Home/engineering/binary-releases/rtb-api-release https://cs.corp.google.com/#piper///depot/google3/contentads/adx/tools/rtb_api/adxrtb.py", + "properties": { + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#performanceReportList" + }, + "performance_report": { + "type": "array", + "description": "A list of performance reports relevant for the account.", + "items": { + "$ref": "PerformanceReport" + } + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adexchangebuyer.accounts.get", + "path": "accounts/{id}", + "httpMethod": "GET", + "description": "Gets one account by ID.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of accounts.", + "response": { + "$ref": "AccountsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "patch": { + "id": "adexchangebuyer.accounts.patch", + "path": "accounts/{id}", + "httpMethod": "PATCH", + "description": "Updates an existing account. This method supports patch semantics.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "update": { + "id": "adexchangebuyer.accounts.update", + "path": "accounts/{id}", + "httpMethod": "PUT", + "description": "Updates an existing account.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "creatives": { + "methods": { + "get": { + "id": "adexchangebuyer.creatives.get", + "path": "creatives/{accountId}/{buyerCreativeId}", + "httpMethod": "GET", + "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + "parameters": { + "accountId": { + "type": "integer", + "description": "The id for the account that will serve this creative.", + "required": true, + "format": "int32", + "location": "path" + }, + "buyerCreativeId": { + "type": "string", + "description": "The buyer-specific id for this creative.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "buyerCreativeId" + ], + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "insert": { + "id": "adexchangebuyer.creatives.insert", + "path": "creatives", + "httpMethod": "POST", + "description": "Submit a new creative.", + "request": { + "$ref": "Creative" + }, + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.creatives.list", + "path": "creatives", + "httpMethod": "GET", + "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + }, + "statusFilter": { + "type": "string", + "description": "When specified, only creatives having the given status are returned.", + "enum": [ + "approved", + "disapproved", + "not_checked" + ], + "enumDescriptions": [ + "Creatives which have been approved.", + "Creatives which have been disapproved.", + "Creatives whose status is not yet checked." + ], + "location": "query" + } + }, + "response": { + "$ref": "CreativesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "directDeals": { + "methods": { + "get": { + "id": "adexchangebuyer.directDeals.get", + "path": "directdeals/{id}", + "httpMethod": "GET", + "description": "Gets one direct deal by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The direct deal id", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "DirectDeal" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.directDeals.list", + "path": "directdeals", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of direct deals.", + "response": { + "$ref": "DirectDealsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "performanceReport": { + "methods": { + "list": { + "id": "adexchangebuyer.performanceReport.list", + "path": "performancereport", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of performance metrics.", + "parameters": { + "accountId": { + "type": "string", + "description": "The account id to get the reports.", + "required": true, + "format": "int64", + "location": "query" + }, + "endDateTime": { + "type": "string", + "description": "The end time of the report in ISO 8601 timestamp format using UTC.", + "required": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through performance reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + }, + "startDateTime": { + "type": "string", + "description": "The start time of the report in ISO 8601 timestamp format using UTC.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "endDateTime", + "startDateTime" + ], + "response": { + "$ref": "PerformanceReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-gen.go new file mode 100644 index 0000000000000..37566eea20bf0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.2/adexchangebuyer-gen.go @@ -0,0 +1,1143 @@ +// Package adexchangebuyer provides access to the Ad Exchange Buyer API. +// +// See https://developers.google.com/ad-exchange/buyer-rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangebuyer/v1.2" +// ... +// adexchangebuyerService, err := adexchangebuyer.New(oauthHttpClient) +package adexchangebuyer + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangebuyer:v1.2" +const apiName = "adexchangebuyer" +const apiVersion = "v1.2" +const basePath = "https://www.googleapis.com/adexchangebuyer/v1.2/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Ad Exchange buyer account configuration + AdexchangeBuyerScope = "https://www.googleapis.com/auth/adexchange.buyer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Creatives = NewCreativesService(s) + s.DirectDeals = NewDirectDealsService(s) + s.PerformanceReport = NewPerformanceReportService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Creatives *CreativesService + + DirectDeals *DirectDealsService + + PerformanceReport *PerformanceReportService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewCreativesService(s *Service) *CreativesService { + rs := &CreativesService{s: s} + return rs +} + +type CreativesService struct { + s *Service +} + +func NewDirectDealsService(s *Service) *DirectDealsService { + rs := &DirectDealsService{s: s} + return rs +} + +type DirectDealsService struct { + s *Service +} + +func NewPerformanceReportService(s *Service) *PerformanceReportService { + rs := &PerformanceReportService{s: s} + return rs +} + +type PerformanceReportService struct { + s *Service +} + +type Account struct { + // BidderLocation: Your bidder locations that have distinct URLs. + BidderLocation []*AccountBidderLocation `json:"bidderLocation,omitempty"` + + // CookieMatchingNid: The nid parameter value used in cookie match + // requests. Please contact your technical account manager if you need + // to change this. + CookieMatchingNid string `json:"cookieMatchingNid,omitempty"` + + // CookieMatchingUrl: The base URL used in cookie match requests. + CookieMatchingUrl string `json:"cookieMatchingUrl,omitempty"` + + // Id: Account id. + Id int64 `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaximumTotalQps: The sum of all bidderLocation.maximumQps values + // cannot exceed this. Please contact your technical account manager if + // you need to change this. + MaximumTotalQps int64 `json:"maximumTotalQps,omitempty"` +} + +type AccountBidderLocation struct { + // MaximumQps: The maximum queries per second the Ad Exchange will send. + MaximumQps int64 `json:"maximumQps,omitempty"` + + // Region: The geographical region the Ad Exchange should send requests + // from. Only used by some quota systems, but always setting the value + // is recommended. Allowed values: + // - ASIA + // - EUROPE + // - US_EAST + // - + // US_WEST + Region string `json:"region,omitempty"` + + // Url: The URL to which the Ad Exchange will send bid requests. + Url string `json:"url,omitempty"` +} + +type AccountsList struct { + // Items: A list of accounts. + Items []*Account `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Creative struct { + // HTMLSnippet: The HTML snippet that displays the ad when inserted in + // the web page. If set, videoURL should not be set. + HTMLSnippet string `json:"HTMLSnippet,omitempty"` + + // AccountId: Account id. + AccountId int64 `json:"accountId,omitempty"` + + // AdvertiserId: Detected advertiser id, if any. Read-only. This field + // should not be set in requests. + AdvertiserId googleapi.Int64s `json:"advertiserId,omitempty"` + + // AdvertiserName: The name of the company being advertised in the + // creative. + AdvertiserName string `json:"advertiserName,omitempty"` + + // AgencyId: The agency id for this creative. + AgencyId int64 `json:"agencyId,omitempty,string"` + + // Attribute: All attributes for the ads that may be shown from this + // snippet. + Attribute []int64 `json:"attribute,omitempty"` + + // BuyerCreativeId: A buyer-specific id identifying the creative in this + // ad. + BuyerCreativeId string `json:"buyerCreativeId,omitempty"` + + // ClickThroughUrl: The set of destination urls for the snippet. + ClickThroughUrl []string `json:"clickThroughUrl,omitempty"` + + // Corrections: Shows any corrections that were applied to this + // creative. Read-only. This field should not be set in requests. + Corrections []*CreativeCorrections `json:"corrections,omitempty"` + + // DisapprovalReasons: The reasons for disapproval, if any. Note that + // not all disapproval reasons may be categorized, so it is possible for + // the creative to have a status of DISAPPROVED with an empty list for + // disapproval_reasons. In this case, please reach out to your TAM to + // help debug the issue. Read-only. This field should not be set in + // requests. + DisapprovalReasons []*CreativeDisapprovalReasons `json:"disapprovalReasons,omitempty"` + + // Height: Ad height. + Height int64 `json:"height,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // ProductCategories: Detected product categories, if any. Read-only. + // This field should not be set in requests. + ProductCategories []int64 `json:"productCategories,omitempty"` + + // RestrictedCategories: All restricted categories for the ads that may + // be shown from this snippet. + RestrictedCategories []int64 `json:"restrictedCategories,omitempty"` + + // SensitiveCategories: Detected sensitive categories, if any. + // Read-only. This field should not be set in requests. + SensitiveCategories []int64 `json:"sensitiveCategories,omitempty"` + + // Status: Creative serving status. Read-only. This field should not be + // set in requests. + Status string `json:"status,omitempty"` + + // VendorType: All vendor types for the ads that may be shown from this + // snippet. + VendorType []int64 `json:"vendorType,omitempty"` + + // VideoURL: The url to fetch a video ad. If set, HTMLSnippet should not + // be set. + VideoURL string `json:"videoURL,omitempty"` + + // Width: Ad width. + Width int64 `json:"width,omitempty"` +} + +type CreativeCorrections struct { + // Details: Additional details about the correction. + Details []string `json:"details,omitempty"` + + // Reason: The type of correction that was applied to the creative. + Reason string `json:"reason,omitempty"` +} + +type CreativeDisapprovalReasons struct { + // Details: Additional details about the reason for disapproval. + Details []string `json:"details,omitempty"` + + // Reason: The categorized reason for disapproval. + Reason string `json:"reason,omitempty"` +} + +type CreativesList struct { + // Items: A list of creatives. + Items []*Creative `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through creatives. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DirectDeal struct { + // AccountId: The account id of the buyer this deal is for. + AccountId int64 `json:"accountId,omitempty"` + + // Advertiser: The name of the advertiser this deal is for. + Advertiser string `json:"advertiser,omitempty"` + + // CurrencyCode: The currency code that applies to the fixed_cpm value. + // If not set then assumed to be USD. + CurrencyCode string `json:"currencyCode,omitempty"` + + // EndTime: End time for when this deal stops being active. If not set + // then this deal is valid until manually disabled by the publisher. In + // seconds since the epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // FixedCpm: The fixed price for this direct deal. In cpm micros of + // currency according to currency_code. If set, then this deal is + // eligible for the fixed price tier of buying (highest priority, pay + // exactly the configured fixed price). + FixedCpm int64 `json:"fixedCpm,omitempty,string"` + + // Id: Deal id. + Id int64 `json:"id,omitempty,string"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Name: Deal name. + Name string `json:"name,omitempty"` + + // PrivateExchangeMinCpm: The minimum price for this direct deal. In cpm + // micros of currency according to currency_code. If set, then this deal + // is eligible for the private exchange tier of buying (below fixed + // price priority, run as a second price auction). + PrivateExchangeMinCpm int64 `json:"privateExchangeMinCpm,omitempty,string"` + + // SellerNetwork: The name of the publisher offering this direct deal. + SellerNetwork string `json:"sellerNetwork,omitempty"` + + // StartTime: Start time for when this deal becomes active. If not set + // then this deal is active immediately upon creation. In seconds since + // the epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type DirectDealsList struct { + // DirectDeals: A list of direct deals relevant for your account. + DirectDeals []*DirectDeal `json:"directDeals,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type PerformanceReport struct { + // CalloutStatusRate: Rate of various prefiltering statuses per match. + // Please refer to the callout-status-codes.txt file for different + // statuses. + CalloutStatusRate []interface{} `json:"calloutStatusRate,omitempty"` + + // CookieMatcherStatusRate: Average QPS for cookie matcher operations. + CookieMatcherStatusRate []interface{} `json:"cookieMatcherStatusRate,omitempty"` + + // CreativeStatusRate: Rate of ads with a given status. Please refer to + // the creative-status-codes.txt file for different statuses. + CreativeStatusRate []interface{} `json:"creativeStatusRate,omitempty"` + + // HostedMatchStatusRate: Average QPS for hosted match operations. + HostedMatchStatusRate []interface{} `json:"hostedMatchStatusRate,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Latency50thPercentile: The 50th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency50thPercentile float64 `json:"latency50thPercentile,omitempty"` + + // Latency85thPercentile: The 85th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency85thPercentile float64 `json:"latency85thPercentile,omitempty"` + + // Latency95thPercentile: The 95th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency95thPercentile float64 `json:"latency95thPercentile,omitempty"` + + // NoQuotaInRegion: Rate of various quota account statuses per quota + // check. + NoQuotaInRegion float64 `json:"noQuotaInRegion,omitempty"` + + // OutOfQuota: Rate of various quota account statuses per quota check. + OutOfQuota float64 `json:"outOfQuota,omitempty"` + + // PixelMatchRequests: Average QPS for pixel match requests from + // clients. + PixelMatchRequests float64 `json:"pixelMatchRequests,omitempty"` + + // PixelMatchResponses: Average QPS for pixel match responses from + // clients. + PixelMatchResponses float64 `json:"pixelMatchResponses,omitempty"` + + // QuotaConfiguredLimit: The configured quota limits for this account. + QuotaConfiguredLimit float64 `json:"quotaConfiguredLimit,omitempty"` + + // QuotaThrottledLimit: The throttled quota limits for this account. + QuotaThrottledLimit float64 `json:"quotaThrottledLimit,omitempty"` + + // Region: The trading location of this data. + Region string `json:"region,omitempty"` + + // Timestamp: The unix timestamp of the starting time of this + // performance data. + Timestamp int64 `json:"timestamp,omitempty,string"` +} + +type PerformanceReportList struct { + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Performance_report: A list of performance reports relevant for the + // account. + Performance_report []*PerformanceReport `json:"performance_report,omitempty"` +} + +// method id "adexchangebuyer.accounts.get": + +type AccountsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one account by ID. +func (r *AccountsService) Get(id int64) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one account by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of accounts. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AccountsListCall) Do() (*AccountsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AccountsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of accounts.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.list", + // "path": "accounts", + // "response": { + // "$ref": "AccountsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.patch": + +type AccountsPatchCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Patch: Updates an existing account. This method supports patch +// semantics. +func (r *AccountsService) Patch(id int64, account *Account) *AccountsPatchCall { + c := &AccountsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsPatchCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adexchangebuyer.accounts.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.update": + +type AccountsUpdateCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Update: Updates an existing account. +func (r *AccountsService) Update(id int64, account *Account) *AccountsUpdateCall { + c := &AccountsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsUpdateCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account.", + // "httpMethod": "PUT", + // "id": "adexchangebuyer.accounts.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.get": + +type CreativesGetCall struct { + s *Service + accountId int64 + buyerCreativeId string + opt_ map[string]interface{} +} + +// Get: Gets the status for a single creative. A creative will be +// available 30-40 minutes after submission. +func (r *CreativesService) Get(accountId int64, buyerCreativeId string) *CreativesGetCall { + c := &CreativesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.buyerCreativeId = buyerCreativeId + return c +} + +func (c *CreativesGetCall) Do() (*Creative, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", strconv.FormatInt(c.accountId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{buyerCreativeId}", url.QueryEscape(c.buyerCreativeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.get", + // "parameterOrder": [ + // "accountId", + // "buyerCreativeId" + // ], + // "parameters": { + // "accountId": { + // "description": "The id for the account that will serve this creative.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "buyerCreativeId": { + // "description": "The buyer-specific id for this creative.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "creatives/{accountId}/{buyerCreativeId}", + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.insert": + +type CreativesInsertCall struct { + s *Service + creative *Creative + opt_ map[string]interface{} +} + +// Insert: Submit a new creative. +func (r *CreativesService) Insert(creative *Creative) *CreativesInsertCall { + c := &CreativesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.creative = creative + return c +} + +func (c *CreativesInsertCall) Do() (*Creative, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit a new creative.", + // "httpMethod": "POST", + // "id": "adexchangebuyer.creatives.insert", + // "path": "creatives", + // "request": { + // "$ref": "Creative" + // }, + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.list": + +type CreativesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of the authenticated user's active creatives. +// A creative will be available 30-40 minutes after submission. +func (r *CreativesService) List() *CreativesListCall { + c := &CreativesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *CreativesListCall) MaxResults(maxResults int64) *CreativesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CreativesListCall) PageToken(pageToken string) *CreativesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StatusFilter sets the optional parameter "statusFilter": When +// specified, only creatives having the given status are returned. +func (c *CreativesListCall) StatusFilter(statusFilter string) *CreativesListCall { + c.opt_["statusFilter"] = statusFilter + return c +} + +func (c *CreativesListCall) Do() (*CreativesList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statusFilter"]; ok { + params.Set("statusFilter", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CreativesList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "statusFilter": { + // "description": "When specified, only creatives having the given status are returned.", + // "enum": [ + // "approved", + // "disapproved", + // "not_checked" + // ], + // "enumDescriptions": [ + // "Creatives which have been approved.", + // "Creatives which have been disapproved.", + // "Creatives whose status is not yet checked." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "creatives", + // "response": { + // "$ref": "CreativesList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.get": + +type DirectDealsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one direct deal by ID. +func (r *DirectDealsService) Get(id int64) *DirectDealsGetCall { + c := &DirectDealsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *DirectDealsGetCall) Do() (*DirectDeal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDeal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one direct deal by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The direct deal id", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "directdeals/{id}", + // "response": { + // "$ref": "DirectDeal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.list": + +type DirectDealsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of direct deals. +func (r *DirectDealsService) List() *DirectDealsListCall { + c := &DirectDealsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *DirectDealsListCall) Do() (*DirectDealsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDealsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of direct deals.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.list", + // "path": "directdeals", + // "response": { + // "$ref": "DirectDealsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.performanceReport.list": + +type PerformanceReportListCall struct { + s *Service + accountId int64 + endDateTime string + startDateTime string + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of performance metrics. +func (r *PerformanceReportService) List(accountId int64, endDateTime string, startDateTime string) *PerformanceReportListCall { + c := &PerformanceReportListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.endDateTime = endDateTime + c.startDateTime = startDateTime + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *PerformanceReportListCall) MaxResults(maxResults int64) *PerformanceReportListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through performance reports. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *PerformanceReportListCall) PageToken(pageToken string) *PerformanceReportListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PerformanceReportListCall) Do() (*PerformanceReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("accountId", fmt.Sprintf("%v", c.accountId)) + params.Set("endDateTime", fmt.Sprintf("%v", c.endDateTime)) + params.Set("startDateTime", fmt.Sprintf("%v", c.startDateTime)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "performancereport") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PerformanceReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of performance metrics.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.performanceReport.list", + // "parameterOrder": [ + // "accountId", + // "endDateTime", + // "startDateTime" + // ], + // "parameters": { + // "accountId": { + // "description": "The account id to get the reports.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "endDateTime": { + // "description": "The end time of the report in ISO 8601 timestamp format using UTC.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through performance reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "startDateTime": { + // "description": "The start time of the report in ISO 8601 timestamp format using UTC.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "performancereport", + // "response": { + // "$ref": "PerformanceReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-api.json new file mode 100644 index 0000000000000..d723d847ff2e2 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-api.json @@ -0,0 +1,853 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/qdni1GzBHdR8i9VRTRxjSqpGD58\"", + "discoveryVersion": "v1", + "id": "adexchangebuyer:v1.3", + "name": "adexchangebuyer", + "canonicalName": "Ad Exchange Buyer", + "version": "v1.3", + "title": "Ad Exchange Buyer API", + "description": "Lets you manage your Ad Exchange Buyer account.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangebuyer/v1.3/", + "basePath": "/adexchangebuyer/v1.3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangebuyer/v1.3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.buyer": { + "description": "Manage your Ad Exchange buyer account configuration" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "Configuration data for an Ad Exchange buyer account.", + "properties": { + "bidderLocation": { + "type": "array", + "description": "Your bidder locations that have distinct URLs.", + "items": { + "type": "object", + "properties": { + "maximumQps": { + "type": "integer", + "description": "The maximum queries per second the Ad Exchange will send.", + "format": "int32" + }, + "region": { + "type": "string", + "description": "The geographical region the Ad Exchange should send requests from. Only used by some quota systems, but always setting the value is recommended. Allowed values: \n- ASIA \n- EUROPE \n- US_EAST \n- US_WEST" + }, + "url": { + "type": "string", + "description": "The URL to which the Ad Exchange will send bid requests." + } + } + } + }, + "cookieMatchingNid": { + "type": "string", + "description": "The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this." + }, + "cookieMatchingUrl": { + "type": "string", + "description": "The base URL used in cookie match requests." + }, + "id": { + "type": "integer", + "description": "Account id.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#account" + }, + "maximumTotalQps": { + "type": "integer", + "description": "The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.", + "format": "int32" + } + } + }, + "AccountsList": { + "id": "AccountsList", + "type": "object", + "description": "An account feed lists Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single buyer account.", + "properties": { + "items": { + "type": "array", + "description": "A list of accounts.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#accountsList" + } + } + }, + "Creative": { + "id": "Creative", + "type": "object", + "description": "A creative and its classification data.", + "properties": { + "HTMLSnippet": { + "type": "string", + "description": "The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set." + }, + "accountId": { + "type": "integer", + "description": "Account id.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "advertiserId": { + "type": "array", + "description": "Detected advertiser id, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "string", + "format": "int64" + } + }, + "advertiserName": { + "type": "string", + "description": "The name of the company being advertised in the creative.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "agencyId": { + "type": "string", + "description": "The agency id for this creative.", + "format": "int64" + }, + "attribute": { + "type": "array", + "description": "All attributes for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "buyerCreativeId": { + "type": "string", + "description": "A buyer-specific id identifying the creative in this ad.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "clickThroughUrl": { + "type": "array", + "description": "The set of destination urls for the snippet.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "corrections": { + "type": "array", + "description": "Shows any corrections that were applied to this creative. Read-only. This field should not be set in requests.", + "items": { + "type": "object", + "properties": { + "details": { + "type": "array", + "description": "Additional details about the correction.", + "items": { + "type": "string" + } + }, + "reason": { + "type": "string", + "description": "The type of correction that was applied to the creative." + } + } + } + }, + "disapprovalReasons": { + "type": "array", + "description": "The reasons for disapproval, if any. Note that not all disapproval reasons may be categorized, so it is possible for the creative to have a status of DISAPPROVED with an empty list for disapproval_reasons. In this case, please reach out to your TAM to help debug the issue. Read-only. This field should not be set in requests.", + "items": { + "type": "object", + "properties": { + "details": { + "type": "array", + "description": "Additional details about the reason for disapproval.", + "items": { + "type": "string" + } + }, + "reason": { + "type": "string", + "description": "The categorized reason for disapproval." + } + } + } + }, + "filteringReasons": { + "type": "object", + "description": "The filtering reasons for the creative. Read-only. This field should not be set in requests.", + "properties": { + "date": { + "type": "string", + "description": "The date in ISO 8601 format for the data. The data is collected from 00:00:00 to 23:59:59 in PST." + }, + "reasons": { + "type": "array", + "description": "The filtering reasons.", + "items": { + "type": "object", + "properties": { + "filteringCount": { + "type": "string", + "description": "The number of times the creative was filtered for the status. The count is aggregated across all publishers on the exchange.", + "format": "int64" + }, + "filteringStatus": { + "type": "integer", + "description": "The filtering status code. Please refer to \"creative-status-codes.txt\" in the Downloads section for the status codes.", + "format": "int32" + } + } + } + } + } + }, + "height": { + "type": "integer", + "description": "Ad height.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creative" + }, + "productCategories": { + "type": "array", + "description": "Detected product categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "restrictedCategories": { + "type": "array", + "description": "All restricted categories for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "sensitiveCategories": { + "type": "array", + "description": "Detected sensitive categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "status": { + "type": "string", + "description": "Creative serving status. Read-only. This field should not be set in requests." + }, + "vendorType": { + "type": "array", + "description": "All vendor types for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "videoURL": { + "type": "string", + "description": "The url to fetch a video ad. If set, HTMLSnippet should not be set." + }, + "width": { + "type": "integer", + "description": "Ad width.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + } + } + }, + "CreativesList": { + "id": "CreativesList", + "type": "object", + "description": "The creatives feed lists the active creatives for the Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single creative.", + "properties": { + "items": { + "type": "array", + "description": "A list of creatives.", + "items": { + "$ref": "Creative" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creativesList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through creatives. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "DirectDeal": { + "id": "DirectDeal", + "type": "object", + "description": "The configuration data for an Ad Exchange direct deal.", + "properties": { + "accountId": { + "type": "integer", + "description": "The account id of the buyer this deal is for.", + "format": "int32" + }, + "advertiser": { + "type": "string", + "description": "The name of the advertiser this deal is for." + }, + "currencyCode": { + "type": "string", + "description": "The currency code that applies to the fixed_cpm value. If not set then assumed to be USD." + }, + "endTime": { + "type": "string", + "description": "End time for when this deal stops being active. If not set then this deal is valid until manually disabled by the publisher. In seconds since the epoch.", + "format": "int64" + }, + "fixedCpm": { + "type": "string", + "description": "The fixed price for this direct deal. In cpm micros of currency according to currency_code. If set, then this deal is eligible for the fixed price tier of buying (highest priority, pay exactly the configured fixed price).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Deal id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDeal" + }, + "name": { + "type": "string", + "description": "Deal name." + }, + "privateExchangeMinCpm": { + "type": "string", + "description": "The minimum price for this direct deal. In cpm micros of currency according to currency_code. If set, then this deal is eligible for the private exchange tier of buying (below fixed price priority, run as a second price auction).", + "format": "int64" + }, + "sellerNetwork": { + "type": "string", + "description": "The name of the publisher offering this direct deal." + }, + "startTime": { + "type": "string", + "description": "Start time for when this deal becomes active. If not set then this deal is active immediately upon creation. In seconds since the epoch.", + "format": "int64" + } + } + }, + "DirectDealsList": { + "id": "DirectDealsList", + "type": "object", + "description": "A direct deals feed lists Direct Deals the Ad Exchange buyer account has access to. This includes direct deals set up for the buyer account as well as its merged stream seats.", + "properties": { + "directDeals": { + "type": "array", + "description": "A list of direct deals relevant for your account.", + "items": { + "$ref": "DirectDeal" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDealsList" + } + } + }, + "PerformanceReport": { + "id": "PerformanceReport", + "type": "object", + "description": "The configuration data for an Ad Exchange performance report list. TODO(nathanbullock): need to add some release tests before releasing this. https://sites.google.com/a/google.com/adx-integration/Home/engineering/binary-releases/rtb-api-release https://cs.corp.google.com/#piper///depot/google3/contentads/adx/tools/rtb_api/adxrtb.py", + "properties": { + "calloutStatusRate": { + "type": "array", + "description": "Rate of various prefiltering statuses per match. Please refer to the callout-status-codes.txt file for different statuses.", + "items": { + "type": "any" + } + }, + "cookieMatcherStatusRate": { + "type": "array", + "description": "Average QPS for cookie matcher operations.", + "items": { + "type": "any" + } + }, + "creativeStatusRate": { + "type": "array", + "description": "Rate of ads with a given status. Please refer to the creative-status-codes.txt file for different statuses.", + "items": { + "type": "any" + } + }, + "hostedMatchStatusRate": { + "type": "array", + "description": "Average QPS for hosted match operations.", + "items": { + "type": "any" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#performanceReport" + }, + "latency50thPercentile": { + "type": "number", + "description": "The 50th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "latency85thPercentile": { + "type": "number", + "description": "The 85th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "latency95thPercentile": { + "type": "number", + "description": "The 95th percentile round trip latency(ms) as perceived from Google servers for the duration period covered by the report.", + "format": "double" + }, + "noQuotaInRegion": { + "type": "number", + "description": "Rate of various quota account statuses per quota check.", + "format": "double" + }, + "outOfQuota": { + "type": "number", + "description": "Rate of various quota account statuses per quota check.", + "format": "double" + }, + "pixelMatchRequests": { + "type": "number", + "description": "Average QPS for pixel match requests from clients.", + "format": "double" + }, + "pixelMatchResponses": { + "type": "number", + "description": "Average QPS for pixel match responses from clients.", + "format": "double" + }, + "quotaConfiguredLimit": { + "type": "number", + "description": "The configured quota limits for this account.", + "format": "double" + }, + "quotaThrottledLimit": { + "type": "number", + "description": "The throttled quota limits for this account.", + "format": "double" + }, + "region": { + "type": "string", + "description": "The trading location of this data." + }, + "timestamp": { + "type": "string", + "description": "The unix timestamp of the starting time of this performance data.", + "format": "int64" + } + } + }, + "PerformanceReportList": { + "id": "PerformanceReportList", + "type": "object", + "description": "The configuration data for an Ad Exchange performance report list. https://sites.google.com/a/google.com/adx-integration/Home/engineering/binary-releases/rtb-api-release https://cs.corp.google.com/#piper///depot/google3/contentads/adx/tools/rtb_api/adxrtb.py", + "properties": { + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#performanceReportList" + }, + "performanceReport": { + "type": "array", + "description": "A list of performance reports relevant for the account.", + "items": { + "$ref": "PerformanceReport" + } + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adexchangebuyer.accounts.get", + "path": "accounts/{id}", + "httpMethod": "GET", + "description": "Gets one account by ID.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of accounts.", + "response": { + "$ref": "AccountsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "patch": { + "id": "adexchangebuyer.accounts.patch", + "path": "accounts/{id}", + "httpMethod": "PATCH", + "description": "Updates an existing account. This method supports patch semantics.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "update": { + "id": "adexchangebuyer.accounts.update", + "path": "accounts/{id}", + "httpMethod": "PUT", + "description": "Updates an existing account.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "creatives": { + "methods": { + "get": { + "id": "adexchangebuyer.creatives.get", + "path": "creatives/{accountId}/{buyerCreativeId}", + "httpMethod": "GET", + "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + "parameters": { + "accountId": { + "type": "integer", + "description": "The id for the account that will serve this creative.", + "required": true, + "format": "int32", + "location": "path" + }, + "buyerCreativeId": { + "type": "string", + "description": "The buyer-specific id for this creative.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "buyerCreativeId" + ], + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "insert": { + "id": "adexchangebuyer.creatives.insert", + "path": "creatives", + "httpMethod": "POST", + "description": "Submit a new creative.", + "request": { + "$ref": "Creative" + }, + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.creatives.list", + "path": "creatives", + "httpMethod": "GET", + "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + }, + "statusFilter": { + "type": "string", + "description": "When specified, only creatives having the given status are returned.", + "enum": [ + "approved", + "disapproved", + "not_checked" + ], + "enumDescriptions": [ + "Creatives which have been approved.", + "Creatives which have been disapproved.", + "Creatives whose status is not yet checked." + ], + "location": "query" + } + }, + "response": { + "$ref": "CreativesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "directDeals": { + "methods": { + "get": { + "id": "adexchangebuyer.directDeals.get", + "path": "directdeals/{id}", + "httpMethod": "GET", + "description": "Gets one direct deal by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The direct deal id", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "DirectDeal" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.directDeals.list", + "path": "directdeals", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of direct deals.", + "response": { + "$ref": "DirectDealsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "performanceReport": { + "methods": { + "list": { + "id": "adexchangebuyer.performanceReport.list", + "path": "performancereport", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of performance metrics.", + "parameters": { + "accountId": { + "type": "string", + "description": "The account id to get the reports.", + "required": true, + "format": "int64", + "location": "query" + }, + "endDateTime": { + "type": "string", + "description": "The end time of the report in ISO 8601 timestamp format using UTC.", + "required": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through performance reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + }, + "startDateTime": { + "type": "string", + "description": "The start time of the report in ISO 8601 timestamp format using UTC.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "endDateTime", + "startDateTime" + ], + "response": { + "$ref": "PerformanceReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-gen.go new file mode 100644 index 0000000000000..81a761d2fb343 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1.3/adexchangebuyer-gen.go @@ -0,0 +1,1168 @@ +// Package adexchangebuyer provides access to the Ad Exchange Buyer API. +// +// See https://developers.google.com/ad-exchange/buyer-rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangebuyer/v1.3" +// ... +// adexchangebuyerService, err := adexchangebuyer.New(oauthHttpClient) +package adexchangebuyer + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangebuyer:v1.3" +const apiName = "adexchangebuyer" +const apiVersion = "v1.3" +const basePath = "https://www.googleapis.com/adexchangebuyer/v1.3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Ad Exchange buyer account configuration + AdexchangeBuyerScope = "https://www.googleapis.com/auth/adexchange.buyer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Creatives = NewCreativesService(s) + s.DirectDeals = NewDirectDealsService(s) + s.PerformanceReport = NewPerformanceReportService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Creatives *CreativesService + + DirectDeals *DirectDealsService + + PerformanceReport *PerformanceReportService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewCreativesService(s *Service) *CreativesService { + rs := &CreativesService{s: s} + return rs +} + +type CreativesService struct { + s *Service +} + +func NewDirectDealsService(s *Service) *DirectDealsService { + rs := &DirectDealsService{s: s} + return rs +} + +type DirectDealsService struct { + s *Service +} + +func NewPerformanceReportService(s *Service) *PerformanceReportService { + rs := &PerformanceReportService{s: s} + return rs +} + +type PerformanceReportService struct { + s *Service +} + +type Account struct { + // BidderLocation: Your bidder locations that have distinct URLs. + BidderLocation []*AccountBidderLocation `json:"bidderLocation,omitempty"` + + // CookieMatchingNid: The nid parameter value used in cookie match + // requests. Please contact your technical account manager if you need + // to change this. + CookieMatchingNid string `json:"cookieMatchingNid,omitempty"` + + // CookieMatchingUrl: The base URL used in cookie match requests. + CookieMatchingUrl string `json:"cookieMatchingUrl,omitempty"` + + // Id: Account id. + Id int64 `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaximumTotalQps: The sum of all bidderLocation.maximumQps values + // cannot exceed this. Please contact your technical account manager if + // you need to change this. + MaximumTotalQps int64 `json:"maximumTotalQps,omitempty"` +} + +type AccountBidderLocation struct { + // MaximumQps: The maximum queries per second the Ad Exchange will send. + MaximumQps int64 `json:"maximumQps,omitempty"` + + // Region: The geographical region the Ad Exchange should send requests + // from. Only used by some quota systems, but always setting the value + // is recommended. Allowed values: + // - ASIA + // - EUROPE + // - US_EAST + // - + // US_WEST + Region string `json:"region,omitempty"` + + // Url: The URL to which the Ad Exchange will send bid requests. + Url string `json:"url,omitempty"` +} + +type AccountsList struct { + // Items: A list of accounts. + Items []*Account `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Creative struct { + // HTMLSnippet: The HTML snippet that displays the ad when inserted in + // the web page. If set, videoURL should not be set. + HTMLSnippet string `json:"HTMLSnippet,omitempty"` + + // AccountId: Account id. + AccountId int64 `json:"accountId,omitempty"` + + // AdvertiserId: Detected advertiser id, if any. Read-only. This field + // should not be set in requests. + AdvertiserId googleapi.Int64s `json:"advertiserId,omitempty"` + + // AdvertiserName: The name of the company being advertised in the + // creative. + AdvertiserName string `json:"advertiserName,omitempty"` + + // AgencyId: The agency id for this creative. + AgencyId int64 `json:"agencyId,omitempty,string"` + + // Attribute: All attributes for the ads that may be shown from this + // snippet. + Attribute []int64 `json:"attribute,omitempty"` + + // BuyerCreativeId: A buyer-specific id identifying the creative in this + // ad. + BuyerCreativeId string `json:"buyerCreativeId,omitempty"` + + // ClickThroughUrl: The set of destination urls for the snippet. + ClickThroughUrl []string `json:"clickThroughUrl,omitempty"` + + // Corrections: Shows any corrections that were applied to this + // creative. Read-only. This field should not be set in requests. + Corrections []*CreativeCorrections `json:"corrections,omitempty"` + + // DisapprovalReasons: The reasons for disapproval, if any. Note that + // not all disapproval reasons may be categorized, so it is possible for + // the creative to have a status of DISAPPROVED with an empty list for + // disapproval_reasons. In this case, please reach out to your TAM to + // help debug the issue. Read-only. This field should not be set in + // requests. + DisapprovalReasons []*CreativeDisapprovalReasons `json:"disapprovalReasons,omitempty"` + + // FilteringReasons: The filtering reasons for the creative. Read-only. + // This field should not be set in requests. + FilteringReasons *CreativeFilteringReasons `json:"filteringReasons,omitempty"` + + // Height: Ad height. + Height int64 `json:"height,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // ProductCategories: Detected product categories, if any. Read-only. + // This field should not be set in requests. + ProductCategories []int64 `json:"productCategories,omitempty"` + + // RestrictedCategories: All restricted categories for the ads that may + // be shown from this snippet. + RestrictedCategories []int64 `json:"restrictedCategories,omitempty"` + + // SensitiveCategories: Detected sensitive categories, if any. + // Read-only. This field should not be set in requests. + SensitiveCategories []int64 `json:"sensitiveCategories,omitempty"` + + // Status: Creative serving status. Read-only. This field should not be + // set in requests. + Status string `json:"status,omitempty"` + + // VendorType: All vendor types for the ads that may be shown from this + // snippet. + VendorType []int64 `json:"vendorType,omitempty"` + + // VideoURL: The url to fetch a video ad. If set, HTMLSnippet should not + // be set. + VideoURL string `json:"videoURL,omitempty"` + + // Width: Ad width. + Width int64 `json:"width,omitempty"` +} + +type CreativeCorrections struct { + // Details: Additional details about the correction. + Details []string `json:"details,omitempty"` + + // Reason: The type of correction that was applied to the creative. + Reason string `json:"reason,omitempty"` +} + +type CreativeDisapprovalReasons struct { + // Details: Additional details about the reason for disapproval. + Details []string `json:"details,omitempty"` + + // Reason: The categorized reason for disapproval. + Reason string `json:"reason,omitempty"` +} + +type CreativeFilteringReasons struct { + // Date: The date in ISO 8601 format for the data. The data is collected + // from 00:00:00 to 23:59:59 in PST. + Date string `json:"date,omitempty"` + + // Reasons: The filtering reasons. + Reasons []*CreativeFilteringReasonsReasons `json:"reasons,omitempty"` +} + +type CreativeFilteringReasonsReasons struct { + // FilteringCount: The number of times the creative was filtered for the + // status. The count is aggregated across all publishers on the + // exchange. + FilteringCount int64 `json:"filteringCount,omitempty,string"` + + // FilteringStatus: The filtering status code. Please refer to + // "creative-status-codes.txt" in the Downloads section for the status + // codes. + FilteringStatus int64 `json:"filteringStatus,omitempty"` +} + +type CreativesList struct { + // Items: A list of creatives. + Items []*Creative `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through creatives. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DirectDeal struct { + // AccountId: The account id of the buyer this deal is for. + AccountId int64 `json:"accountId,omitempty"` + + // Advertiser: The name of the advertiser this deal is for. + Advertiser string `json:"advertiser,omitempty"` + + // CurrencyCode: The currency code that applies to the fixed_cpm value. + // If not set then assumed to be USD. + CurrencyCode string `json:"currencyCode,omitempty"` + + // EndTime: End time for when this deal stops being active. If not set + // then this deal is valid until manually disabled by the publisher. In + // seconds since the epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // FixedCpm: The fixed price for this direct deal. In cpm micros of + // currency according to currency_code. If set, then this deal is + // eligible for the fixed price tier of buying (highest priority, pay + // exactly the configured fixed price). + FixedCpm int64 `json:"fixedCpm,omitempty,string"` + + // Id: Deal id. + Id int64 `json:"id,omitempty,string"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Name: Deal name. + Name string `json:"name,omitempty"` + + // PrivateExchangeMinCpm: The minimum price for this direct deal. In cpm + // micros of currency according to currency_code. If set, then this deal + // is eligible for the private exchange tier of buying (below fixed + // price priority, run as a second price auction). + PrivateExchangeMinCpm int64 `json:"privateExchangeMinCpm,omitempty,string"` + + // SellerNetwork: The name of the publisher offering this direct deal. + SellerNetwork string `json:"sellerNetwork,omitempty"` + + // StartTime: Start time for when this deal becomes active. If not set + // then this deal is active immediately upon creation. In seconds since + // the epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type DirectDealsList struct { + // DirectDeals: A list of direct deals relevant for your account. + DirectDeals []*DirectDeal `json:"directDeals,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type PerformanceReport struct { + // CalloutStatusRate: Rate of various prefiltering statuses per match. + // Please refer to the callout-status-codes.txt file for different + // statuses. + CalloutStatusRate []interface{} `json:"calloutStatusRate,omitempty"` + + // CookieMatcherStatusRate: Average QPS for cookie matcher operations. + CookieMatcherStatusRate []interface{} `json:"cookieMatcherStatusRate,omitempty"` + + // CreativeStatusRate: Rate of ads with a given status. Please refer to + // the creative-status-codes.txt file for different statuses. + CreativeStatusRate []interface{} `json:"creativeStatusRate,omitempty"` + + // HostedMatchStatusRate: Average QPS for hosted match operations. + HostedMatchStatusRate []interface{} `json:"hostedMatchStatusRate,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Latency50thPercentile: The 50th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency50thPercentile float64 `json:"latency50thPercentile,omitempty"` + + // Latency85thPercentile: The 85th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency85thPercentile float64 `json:"latency85thPercentile,omitempty"` + + // Latency95thPercentile: The 95th percentile round trip latency(ms) as + // perceived from Google servers for the duration period covered by the + // report. + Latency95thPercentile float64 `json:"latency95thPercentile,omitempty"` + + // NoQuotaInRegion: Rate of various quota account statuses per quota + // check. + NoQuotaInRegion float64 `json:"noQuotaInRegion,omitempty"` + + // OutOfQuota: Rate of various quota account statuses per quota check. + OutOfQuota float64 `json:"outOfQuota,omitempty"` + + // PixelMatchRequests: Average QPS for pixel match requests from + // clients. + PixelMatchRequests float64 `json:"pixelMatchRequests,omitempty"` + + // PixelMatchResponses: Average QPS for pixel match responses from + // clients. + PixelMatchResponses float64 `json:"pixelMatchResponses,omitempty"` + + // QuotaConfiguredLimit: The configured quota limits for this account. + QuotaConfiguredLimit float64 `json:"quotaConfiguredLimit,omitempty"` + + // QuotaThrottledLimit: The throttled quota limits for this account. + QuotaThrottledLimit float64 `json:"quotaThrottledLimit,omitempty"` + + // Region: The trading location of this data. + Region string `json:"region,omitempty"` + + // Timestamp: The unix timestamp of the starting time of this + // performance data. + Timestamp int64 `json:"timestamp,omitempty,string"` +} + +type PerformanceReportList struct { + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // PerformanceReport: A list of performance reports relevant for the + // account. + PerformanceReport []*PerformanceReport `json:"performanceReport,omitempty"` +} + +// method id "adexchangebuyer.accounts.get": + +type AccountsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one account by ID. +func (r *AccountsService) Get(id int64) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one account by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of accounts. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AccountsListCall) Do() (*AccountsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AccountsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of accounts.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.list", + // "path": "accounts", + // "response": { + // "$ref": "AccountsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.patch": + +type AccountsPatchCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Patch: Updates an existing account. This method supports patch +// semantics. +func (r *AccountsService) Patch(id int64, account *Account) *AccountsPatchCall { + c := &AccountsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsPatchCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adexchangebuyer.accounts.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.update": + +type AccountsUpdateCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Update: Updates an existing account. +func (r *AccountsService) Update(id int64, account *Account) *AccountsUpdateCall { + c := &AccountsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsUpdateCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account.", + // "httpMethod": "PUT", + // "id": "adexchangebuyer.accounts.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.get": + +type CreativesGetCall struct { + s *Service + accountId int64 + buyerCreativeId string + opt_ map[string]interface{} +} + +// Get: Gets the status for a single creative. A creative will be +// available 30-40 minutes after submission. +func (r *CreativesService) Get(accountId int64, buyerCreativeId string) *CreativesGetCall { + c := &CreativesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.buyerCreativeId = buyerCreativeId + return c +} + +func (c *CreativesGetCall) Do() (*Creative, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", strconv.FormatInt(c.accountId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{buyerCreativeId}", url.QueryEscape(c.buyerCreativeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the status for a single creative. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.get", + // "parameterOrder": [ + // "accountId", + // "buyerCreativeId" + // ], + // "parameters": { + // "accountId": { + // "description": "The id for the account that will serve this creative.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "buyerCreativeId": { + // "description": "The buyer-specific id for this creative.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "creatives/{accountId}/{buyerCreativeId}", + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.insert": + +type CreativesInsertCall struct { + s *Service + creative *Creative + opt_ map[string]interface{} +} + +// Insert: Submit a new creative. +func (r *CreativesService) Insert(creative *Creative) *CreativesInsertCall { + c := &CreativesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.creative = creative + return c +} + +func (c *CreativesInsertCall) Do() (*Creative, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit a new creative.", + // "httpMethod": "POST", + // "id": "adexchangebuyer.creatives.insert", + // "path": "creatives", + // "request": { + // "$ref": "Creative" + // }, + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.list": + +type CreativesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of the authenticated user's active creatives. +// A creative will be available 30-40 minutes after submission. +func (r *CreativesService) List() *CreativesListCall { + c := &CreativesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *CreativesListCall) MaxResults(maxResults int64) *CreativesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CreativesListCall) PageToken(pageToken string) *CreativesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StatusFilter sets the optional parameter "statusFilter": When +// specified, only creatives having the given status are returned. +func (c *CreativesListCall) StatusFilter(statusFilter string) *CreativesListCall { + c.opt_["statusFilter"] = statusFilter + return c +} + +func (c *CreativesListCall) Do() (*CreativesList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statusFilter"]; ok { + params.Set("statusFilter", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CreativesList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of the authenticated user's active creatives. A creative will be available 30-40 minutes after submission.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "statusFilter": { + // "description": "When specified, only creatives having the given status are returned.", + // "enum": [ + // "approved", + // "disapproved", + // "not_checked" + // ], + // "enumDescriptions": [ + // "Creatives which have been approved.", + // "Creatives which have been disapproved.", + // "Creatives whose status is not yet checked." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "creatives", + // "response": { + // "$ref": "CreativesList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.get": + +type DirectDealsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one direct deal by ID. +func (r *DirectDealsService) Get(id int64) *DirectDealsGetCall { + c := &DirectDealsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *DirectDealsGetCall) Do() (*DirectDeal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDeal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one direct deal by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The direct deal id", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "directdeals/{id}", + // "response": { + // "$ref": "DirectDeal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.list": + +type DirectDealsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of direct deals. +func (r *DirectDealsService) List() *DirectDealsListCall { + c := &DirectDealsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *DirectDealsListCall) Do() (*DirectDealsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDealsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of direct deals.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.list", + // "path": "directdeals", + // "response": { + // "$ref": "DirectDealsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.performanceReport.list": + +type PerformanceReportListCall struct { + s *Service + accountId int64 + endDateTime string + startDateTime string + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of performance metrics. +func (r *PerformanceReportService) List(accountId int64, endDateTime string, startDateTime string) *PerformanceReportListCall { + c := &PerformanceReportListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.endDateTime = endDateTime + c.startDateTime = startDateTime + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *PerformanceReportListCall) MaxResults(maxResults int64) *PerformanceReportListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through performance reports. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *PerformanceReportListCall) PageToken(pageToken string) *PerformanceReportListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PerformanceReportListCall) Do() (*PerformanceReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("accountId", fmt.Sprintf("%v", c.accountId)) + params.Set("endDateTime", fmt.Sprintf("%v", c.endDateTime)) + params.Set("startDateTime", fmt.Sprintf("%v", c.startDateTime)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "performancereport") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PerformanceReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of performance metrics.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.performanceReport.list", + // "parameterOrder": [ + // "accountId", + // "endDateTime", + // "startDateTime" + // ], + // "parameters": { + // "accountId": { + // "description": "The account id to get the reports.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "endDateTime": { + // "description": "The end time of the report in ISO 8601 timestamp format using UTC.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through performance reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "startDateTime": { + // "description": "The start time of the report in ISO 8601 timestamp format using UTC.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "performancereport", + // "response": { + // "$ref": "PerformanceReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-api.json new file mode 100644 index 0000000000000..8b02542c6f7dd --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-api.json @@ -0,0 +1,612 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/uBdBsKoCx2blJHBc5UBukt70JEU\"", + "discoveryVersion": "v1", + "id": "adexchangebuyer:v1", + "name": "adexchangebuyer", + "canonicalName": "Ad Exchange Buyer", + "version": "v1", + "title": "Ad Exchange Buyer API", + "description": "Lets you manage your Ad Exchange Buyer account.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangebuyer/v1/", + "basePath": "/adexchangebuyer/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangebuyer/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.buyer": { + "description": "Manage your Ad Exchange buyer account configuration" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "Configuration data for an Ad Exchange buyer account.", + "properties": { + "bidderLocation": { + "type": "array", + "description": "Your bidder locations that have distinct URLs.", + "items": { + "type": "object", + "properties": { + "maximumQps": { + "type": "integer", + "description": "The maximum queries per second the Ad Exchange will send.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "The URL to which the Ad Exchange will send bid requests." + } + } + } + }, + "cookieMatchingNid": { + "type": "string", + "description": "The nid parameter value used in cookie match requests. Please contact your technical account manager if you need to change this." + }, + "cookieMatchingUrl": { + "type": "string", + "description": "The base URL used in cookie match requests." + }, + "id": { + "type": "integer", + "description": "Account id.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#account" + }, + "maximumTotalQps": { + "type": "integer", + "description": "The sum of all bidderLocation.maximumQps values cannot exceed this. Please contact your technical account manager if you need to change this.", + "format": "int32" + } + } + }, + "AccountsList": { + "id": "AccountsList", + "type": "object", + "description": "An account feed lists Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single buyer account.", + "properties": { + "items": { + "type": "array", + "description": "A list of accounts.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#accountsList" + } + } + }, + "Creative": { + "id": "Creative", + "type": "object", + "description": "A creative and its classification data.", + "properties": { + "HTMLSnippet": { + "type": "string", + "description": "The HTML snippet that displays the ad when inserted in the web page. If set, videoURL should not be set." + }, + "accountId": { + "type": "integer", + "description": "Account id.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "adgroupId": { + "type": "string", + "description": "The pretargeting adgroup id that this creative will be associated with.", + "format": "int64", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "advertiserId": { + "type": "array", + "description": "Detected advertiser id, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "string", + "format": "int64" + } + }, + "advertiserName": { + "type": "string", + "description": "The name of the company being advertised in the creative.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "attribute": { + "type": "array", + "description": "All attributes for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "buyerCreativeId": { + "type": "string", + "description": "A buyer-specific id identifying the creative in this ad.", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "clickThroughUrl": { + "type": "array", + "description": "The set of destination urls for the snippet.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "disapprovalReasons": { + "type": "array", + "description": "The reason for disapproval, if any. Note that not all disapproval reasons may be categorized, so it is possible for the creative to have a status of DISAPPROVED with an empty list for disapproval_reasons. In this case, please reach out to your TAM to help debug the issue. Read-only. This field should not be set in requests.", + "items": { + "type": "string" + } + }, + "height": { + "type": "integer", + "description": "Ad height.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creative" + }, + "productCategories": { + "type": "array", + "description": "Detected product categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "restrictedCategories": { + "type": "array", + "description": "All restricted categories for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "sensitiveCategories": { + "type": "array", + "description": "Detected sensitive categories, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "status": { + "type": "string", + "description": "Creative serving status. Read-only. This field should not be set in requests." + }, + "vendorType": { + "type": "array", + "description": "All vendor types for the ads that may be shown from this snippet.", + "items": { + "type": "integer", + "format": "int32" + } + }, + "videoURL": { + "type": "string", + "description": "The url to fetch a video ad. If set, HTMLSnippet should not be set." + }, + "width": { + "type": "integer", + "description": "Ad width.", + "format": "int32", + "annotations": { + "required": [ + "adexchangebuyer.creatives.insert" + ] + } + } + } + }, + "CreativesList": { + "id": "CreativesList", + "type": "object", + "description": "The creatives feed lists the active creatives for the Ad Exchange buyer accounts that the user has access to. Each entry in the feed corresponds to a single creative.", + "properties": { + "items": { + "type": "array", + "description": "A list of creatives.", + "items": { + "$ref": "Creative" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#creativesList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through creatives. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "DirectDeal": { + "id": "DirectDeal", + "type": "object", + "description": "The configuration data for an Ad Exchange direct deal.", + "properties": { + "accountId": { + "type": "integer", + "description": "The account id of the buyer this deal is for.", + "format": "int32" + }, + "advertiser": { + "type": "string", + "description": "The name of the advertiser this deal is for." + }, + "currencyCode": { + "type": "string", + "description": "The currency code that applies to the fixed_cpm value. If not set then assumed to be USD." + }, + "endTime": { + "type": "string", + "description": "End time for when this deal stops being active. If not set then this deal is valid until manually disabled by the publisher. In seconds since the epoch.", + "format": "int64" + }, + "fixedCpm": { + "type": "string", + "description": "The fixed price for this direct deal. In cpm micros of currency according to currency_code.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Deal id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDeal" + }, + "name": { + "type": "string", + "description": "Deal name." + }, + "sellerNetwork": { + "type": "string", + "description": "The name of the publisher offering this direct deal." + }, + "startTime": { + "type": "string", + "description": "Start time for when this deal becomes active. If not set then this deal is active immediately upon creation. In seconds since the epoch.", + "format": "int64" + } + } + }, + "DirectDealsList": { + "id": "DirectDealsList", + "type": "object", + "description": "A direct deals feed lists Direct Deals the Ad Exchange buyer account has access to. This includes direct deals set up for the buyer account as well as its merged stream seats.", + "properties": { + "directDeals": { + "type": "array", + "description": "A list of direct deals relevant for your account.", + "items": { + "$ref": "DirectDeal" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "adexchangebuyer#directDealsList" + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adexchangebuyer.accounts.get", + "path": "accounts/{id}", + "httpMethod": "GET", + "description": "Gets one account by ID.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of accounts.", + "response": { + "$ref": "AccountsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "patch": { + "id": "adexchangebuyer.accounts.patch", + "path": "accounts/{id}", + "httpMethod": "PATCH", + "description": "Updates an existing account. This method supports patch semantics.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "update": { + "id": "adexchangebuyer.accounts.update", + "path": "accounts/{id}", + "httpMethod": "PUT", + "description": "Updates an existing account.", + "parameters": { + "id": { + "type": "integer", + "description": "The account id", + "required": true, + "format": "int32", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "creatives": { + "methods": { + "get": { + "id": "adexchangebuyer.creatives.get", + "path": "creatives/{accountId}/{buyerCreativeId}", + "httpMethod": "GET", + "description": "Gets the status for a single creative.", + "parameters": { + "accountId": { + "type": "integer", + "description": "The id for the account that will serve this creative.", + "required": true, + "format": "int32", + "location": "path" + }, + "adgroupId": { + "type": "string", + "description": "The adgroup this creative belongs to.", + "required": true, + "format": "int64", + "location": "query" + }, + "buyerCreativeId": { + "type": "string", + "description": "The buyer-specific id for this creative.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "buyerCreativeId", + "adgroupId" + ], + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "insert": { + "id": "adexchangebuyer.creatives.insert", + "path": "creatives", + "httpMethod": "POST", + "description": "Submit a new creative.", + "request": { + "$ref": "Creative" + }, + "response": { + "$ref": "Creative" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.creatives.list", + "path": "creatives", + "httpMethod": "GET", + "description": "Retrieves a list of the authenticated user's active creatives.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + "location": "query" + } + }, + "response": { + "$ref": "CreativesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + }, + "directDeals": { + "methods": { + "get": { + "id": "adexchangebuyer.directDeals.get", + "path": "directdeals/{id}", + "httpMethod": "GET", + "description": "Gets one direct deal by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The direct deal id", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "DirectDeal" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + }, + "list": { + "id": "adexchangebuyer.directDeals.list", + "path": "directdeals", + "httpMethod": "GET", + "description": "Retrieves the authenticated user's list of direct deals.", + "response": { + "$ref": "DirectDealsList" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.buyer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-gen.go new file mode 100644 index 0000000000000..f3fc294f8d4c4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangebuyer/v1/adexchangebuyer-gen.go @@ -0,0 +1,885 @@ +// Package adexchangebuyer provides access to the Ad Exchange Buyer API. +// +// See https://developers.google.com/ad-exchange/buyer-rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangebuyer/v1" +// ... +// adexchangebuyerService, err := adexchangebuyer.New(oauthHttpClient) +package adexchangebuyer + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangebuyer:v1" +const apiName = "adexchangebuyer" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/adexchangebuyer/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Ad Exchange buyer account configuration + AdexchangeBuyerScope = "https://www.googleapis.com/auth/adexchange.buyer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Creatives = NewCreativesService(s) + s.DirectDeals = NewDirectDealsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Creatives *CreativesService + + DirectDeals *DirectDealsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewCreativesService(s *Service) *CreativesService { + rs := &CreativesService{s: s} + return rs +} + +type CreativesService struct { + s *Service +} + +func NewDirectDealsService(s *Service) *DirectDealsService { + rs := &DirectDealsService{s: s} + return rs +} + +type DirectDealsService struct { + s *Service +} + +type Account struct { + // BidderLocation: Your bidder locations that have distinct URLs. + BidderLocation []*AccountBidderLocation `json:"bidderLocation,omitempty"` + + // CookieMatchingNid: The nid parameter value used in cookie match + // requests. Please contact your technical account manager if you need + // to change this. + CookieMatchingNid string `json:"cookieMatchingNid,omitempty"` + + // CookieMatchingUrl: The base URL used in cookie match requests. + CookieMatchingUrl string `json:"cookieMatchingUrl,omitempty"` + + // Id: Account id. + Id int64 `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaximumTotalQps: The sum of all bidderLocation.maximumQps values + // cannot exceed this. Please contact your technical account manager if + // you need to change this. + MaximumTotalQps int64 `json:"maximumTotalQps,omitempty"` +} + +type AccountBidderLocation struct { + // MaximumQps: The maximum queries per second the Ad Exchange will send. + MaximumQps int64 `json:"maximumQps,omitempty"` + + // Url: The URL to which the Ad Exchange will send bid requests. + Url string `json:"url,omitempty"` +} + +type AccountsList struct { + // Items: A list of accounts. + Items []*Account `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Creative struct { + // HTMLSnippet: The HTML snippet that displays the ad when inserted in + // the web page. If set, videoURL should not be set. + HTMLSnippet string `json:"HTMLSnippet,omitempty"` + + // AccountId: Account id. + AccountId int64 `json:"accountId,omitempty"` + + // AdgroupId: The pretargeting adgroup id that this creative will be + // associated with. + AdgroupId int64 `json:"adgroupId,omitempty,string"` + + // AdvertiserId: Detected advertiser id, if any. Read-only. This field + // should not be set in requests. + AdvertiserId googleapi.Int64s `json:"advertiserId,omitempty"` + + // AdvertiserName: The name of the company being advertised in the + // creative. + AdvertiserName string `json:"advertiserName,omitempty"` + + // Attribute: All attributes for the ads that may be shown from this + // snippet. + Attribute []int64 `json:"attribute,omitempty"` + + // BuyerCreativeId: A buyer-specific id identifying the creative in this + // ad. + BuyerCreativeId string `json:"buyerCreativeId,omitempty"` + + // ClickThroughUrl: The set of destination urls for the snippet. + ClickThroughUrl []string `json:"clickThroughUrl,omitempty"` + + // DisapprovalReasons: The reason for disapproval, if any. Note that not + // all disapproval reasons may be categorized, so it is possible for the + // creative to have a status of DISAPPROVED with an empty list for + // disapproval_reasons. In this case, please reach out to your TAM to + // help debug the issue. Read-only. This field should not be set in + // requests. + DisapprovalReasons []string `json:"disapprovalReasons,omitempty"` + + // Height: Ad height. + Height int64 `json:"height,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // ProductCategories: Detected product categories, if any. Read-only. + // This field should not be set in requests. + ProductCategories []int64 `json:"productCategories,omitempty"` + + // RestrictedCategories: All restricted categories for the ads that may + // be shown from this snippet. + RestrictedCategories []int64 `json:"restrictedCategories,omitempty"` + + // SensitiveCategories: Detected sensitive categories, if any. + // Read-only. This field should not be set in requests. + SensitiveCategories []int64 `json:"sensitiveCategories,omitempty"` + + // Status: Creative serving status. Read-only. This field should not be + // set in requests. + Status string `json:"status,omitempty"` + + // VendorType: All vendor types for the ads that may be shown from this + // snippet. + VendorType []int64 `json:"vendorType,omitempty"` + + // VideoURL: The url to fetch a video ad. If set, HTMLSnippet should not + // be set. + VideoURL string `json:"videoURL,omitempty"` + + // Width: Ad width. + Width int64 `json:"width,omitempty"` +} + +type CreativesList struct { + // Items: A list of creatives. + Items []*Creative `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through creatives. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DirectDeal struct { + // AccountId: The account id of the buyer this deal is for. + AccountId int64 `json:"accountId,omitempty"` + + // Advertiser: The name of the advertiser this deal is for. + Advertiser string `json:"advertiser,omitempty"` + + // CurrencyCode: The currency code that applies to the fixed_cpm value. + // If not set then assumed to be USD. + CurrencyCode string `json:"currencyCode,omitempty"` + + // EndTime: End time for when this deal stops being active. If not set + // then this deal is valid until manually disabled by the publisher. In + // seconds since the epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // FixedCpm: The fixed price for this direct deal. In cpm micros of + // currency according to currency_code. + FixedCpm int64 `json:"fixedCpm,omitempty,string"` + + // Id: Deal id. + Id int64 `json:"id,omitempty,string"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // Name: Deal name. + Name string `json:"name,omitempty"` + + // SellerNetwork: The name of the publisher offering this direct deal. + SellerNetwork string `json:"sellerNetwork,omitempty"` + + // StartTime: Start time for when this deal becomes active. If not set + // then this deal is active immediately upon creation. In seconds since + // the epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type DirectDealsList struct { + // DirectDeals: A list of direct deals relevant for your account. + DirectDeals []*DirectDeal `json:"directDeals,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +// method id "adexchangebuyer.accounts.get": + +type AccountsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one account by ID. +func (r *AccountsService) Get(id int64) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one account by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of accounts. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AccountsListCall) Do() (*AccountsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AccountsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of accounts.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.accounts.list", + // "path": "accounts", + // "response": { + // "$ref": "AccountsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.patch": + +type AccountsPatchCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Patch: Updates an existing account. This method supports patch +// semantics. +func (r *AccountsService) Patch(id int64, account *Account) *AccountsPatchCall { + c := &AccountsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsPatchCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adexchangebuyer.accounts.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.accounts.update": + +type AccountsUpdateCall struct { + s *Service + id int64 + account *Account + opt_ map[string]interface{} +} + +// Update: Updates an existing account. +func (r *AccountsService) Update(id int64, account *Account) *AccountsUpdateCall { + c := &AccountsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.account = account + return c +} + +func (c *AccountsUpdateCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing account.", + // "httpMethod": "PUT", + // "id": "adexchangebuyer.accounts.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The account id", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "accounts/{id}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.get": + +type CreativesGetCall struct { + s *Service + accountId int64 + buyerCreativeId string + adgroupId int64 + opt_ map[string]interface{} +} + +// Get: Gets the status for a single creative. +func (r *CreativesService) Get(accountId int64, buyerCreativeId string, adgroupId int64) *CreativesGetCall { + c := &CreativesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.buyerCreativeId = buyerCreativeId + c.adgroupId = adgroupId + return c +} + +func (c *CreativesGetCall) Do() (*Creative, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("adgroupId", fmt.Sprintf("%v", c.adgroupId)) + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives/{accountId}/{buyerCreativeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", strconv.FormatInt(c.accountId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{buyerCreativeId}", url.QueryEscape(c.buyerCreativeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the status for a single creative.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.get", + // "parameterOrder": [ + // "accountId", + // "buyerCreativeId", + // "adgroupId" + // ], + // "parameters": { + // "accountId": { + // "description": "The id for the account that will serve this creative.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "adgroupId": { + // "description": "The adgroup this creative belongs to.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "buyerCreativeId": { + // "description": "The buyer-specific id for this creative.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "creatives/{accountId}/{buyerCreativeId}", + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.insert": + +type CreativesInsertCall struct { + s *Service + creative *Creative + opt_ map[string]interface{} +} + +// Insert: Submit a new creative. +func (r *CreativesService) Insert(creative *Creative) *CreativesInsertCall { + c := &CreativesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.creative = creative + return c +} + +func (c *CreativesInsertCall) Do() (*Creative, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.creative) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Creative) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit a new creative.", + // "httpMethod": "POST", + // "id": "adexchangebuyer.creatives.insert", + // "path": "creatives", + // "request": { + // "$ref": "Creative" + // }, + // "response": { + // "$ref": "Creative" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.creatives.list": + +type CreativesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of the authenticated user's active creatives. +func (r *CreativesService) List() *CreativesListCall { + c := &CreativesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. If not set, the default is +// 100. +func (c *CreativesListCall) MaxResults(maxResults int64) *CreativesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CreativesListCall) PageToken(pageToken string) *CreativesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CreativesListCall) Do() (*CreativesList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "creatives") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CreativesList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of the authenticated user's active creatives.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.creatives.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. If not set, the default is 100. Optional.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response. Optional.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "creatives", + // "response": { + // "$ref": "CreativesList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.get": + +type DirectDealsGetCall struct { + s *Service + id int64 + opt_ map[string]interface{} +} + +// Get: Gets one direct deal by ID. +func (r *DirectDealsService) Get(id int64) *DirectDealsGetCall { + c := &DirectDealsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *DirectDealsGetCall) Do() (*DirectDeal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", strconv.FormatInt(c.id, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDeal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one direct deal by ID.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The direct deal id", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "directdeals/{id}", + // "response": { + // "$ref": "DirectDeal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} + +// method id "adexchangebuyer.directDeals.list": + +type DirectDealsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the authenticated user's list of direct deals. +func (r *DirectDealsService) List() *DirectDealsListCall { + c := &DirectDealsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *DirectDealsListCall) Do() (*DirectDealsList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "directdeals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectDealsList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the authenticated user's list of direct deals.", + // "httpMethod": "GET", + // "id": "adexchangebuyer.directDeals.list", + // "path": "directdeals", + // "response": { + // "$ref": "DirectDealsList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.buyer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-api.json new file mode 100644 index 0000000000000..b2b9297c90c87 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-api.json @@ -0,0 +1,1240 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/o4lGc4skdE8M5fsjyXciyvLhoWk\"", + "discoveryVersion": "v1", + "id": "adexchangeseller:v1.1", + "name": "adexchangeseller", + "canonicalName": "Ad Exchange Seller", + "version": "v1.1", + "title": "Ad Exchange Seller API", + "description": "Gives Ad Exchange seller users access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/seller-rest/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangeseller/v1.1/", + "basePath": "/adexchangeseller/v1.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangeseller/v1.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.seller": { + "description": "View and manage your Ad Exchange data" + }, + "https://www.googleapis.com/auth/adexchange.seller.readonly": { + "description": "View your Ad Exchange data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#account.", + "default": "adexchangeseller#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#adClient.", + "default": "adexchangeseller#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#adClients.", + "default": "adexchangeseller#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#adUnit.", + "default": "adexchangeseller#adUnit" + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#adUnits.", + "default": "adexchangeseller#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Alert": { + "id": "Alert", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this alert. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#alert.", + "default": "adexchangeseller#alert" + }, + "message": { + "type": "string", + "description": "The localized alert message." + }, + "severity": { + "type": "string", + "description": "Severity of this alert. Possible values: INFO, WARNING, SEVERE." + }, + "type": { + "type": "string", + "description": "Type of this alert. Possible values: SELF_HOLD, MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, API_HOLD." + } + } + }, + "Alerts": { + "id": "Alerts", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The alerts returned in this list response.", + "items": { + "$ref": "Alert" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#alerts.", + "default": "adexchangeseller#alerts" + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#customChannel.", + "default": "adexchangeseller#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#customChannels.", + "default": "adexchangeseller#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "ReportingMetadataEntry" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#metadata.", + "default": "adexchangeseller#metadata" + } + } + }, + "PreferredDeal": { + "id": "PreferredDeal", + "type": "object", + "properties": { + "advertiserName": { + "type": "string", + "description": "The name of the advertiser this deal is for." + }, + "buyerNetworkName": { + "type": "string", + "description": "The name of the buyer network this deal is for." + }, + "currencyCode": { + "type": "string", + "description": "The currency code that applies to the fixed_cpm value. If not set then assumed to be USD." + }, + "endTime": { + "type": "string", + "description": "Time when this deal stops being active in seconds since the epoch (GMT). If not set then this deal is valid until manually disabled by the publisher.", + "format": "uint64" + }, + "fixedCpm": { + "type": "string", + "description": "The fixed price for this preferred deal. In cpm micros of currency according to currencyCode. If set, then this preferred deal is eligible for the fixed price tier of buying (highest priority, pay exactly the configured fixed price).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier of this preferred deal.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#preferredDeal.", + "default": "adexchangeseller#preferredDeal" + }, + "startTime": { + "type": "string", + "description": "Time when this deal becomes active in seconds since the epoch (GMT). If not set then this deal is active immediately upon creation.", + "format": "uint64" + } + } + }, + "PreferredDeals": { + "id": "PreferredDeals", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The preferred deals returned in this list response.", + "items": { + "$ref": "PreferredDeal" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#preferredDeals.", + "default": "adexchangeseller#preferredDeals" + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adexchangeseller#report.", + "default": "adexchangeseller#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "ReportingMetadataEntry": { + "id": "ReportingMetadataEntry", + "type": "object", + "properties": { + "compatibleDimensions": { + "type": "array", + "description": "For metrics this is a list of dimension IDs which the metric is compatible with, for dimensions it is a list of compatibility groups the dimension belongs to.", + "items": { + "type": "string" + } + }, + "compatibleMetrics": { + "type": "array", + "description": "The names of the metrics the dimension or metric this reporting metadata entry describes is compatible with.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this reporting metadata entry, corresponding to the name of the appropriate dimension or metric." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#reportingMetadataEntry.", + "default": "adexchangeseller#reportingMetadataEntry" + }, + "requiredDimensions": { + "type": "array", + "description": "The names of the dimensions which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "requiredMetrics": { + "type": "array", + "description": "The names of the metrics which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "supportedProducts": { + "type": "array", + "description": "The codes of the projects supported by the dimension or metric this reporting metadata entry describes.", + "items": { + "type": "string" + } + } + } + }, + "SavedReport": { + "id": "SavedReport", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this saved report." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#savedReport.", + "default": "adexchangeseller#savedReport" + }, + "name": { + "type": "string", + "description": "This saved report's name." + } + } + }, + "SavedReports": { + "id": "SavedReports", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved reports returned in this list response.", + "items": { + "$ref": "SavedReport" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#savedReports.", + "default": "adexchangeseller#savedReports" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#urlChannel.", + "default": "adexchangeseller#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#urlChannels.", + "default": "adexchangeseller#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adexchangeseller.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected Ad Exchange account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about. Tip: 'myaccount' is a valid ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "adclients": { + "methods": { + "list": { + "id": "adexchangeseller.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this Ad Exchange account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adexchangeseller.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adexchangeseller.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "alerts": { + "methods": { + "list": { + "id": "adexchangeseller.alerts.list", + "path": "alerts", + "httpMethod": "GET", + "description": "List the alerts for this Ad Exchange account.", + "parameters": { + "locale": { + "type": "string", + "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + "location": "query" + } + }, + "response": { + "$ref": "Alerts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adexchangeseller.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adexchangeseller.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "metadata": { + "resources": { + "dimensions": { + "methods": { + "list": { + "id": "adexchangeseller.metadata.dimensions.list", + "path": "metadata/dimensions", + "httpMethod": "GET", + "description": "List the metadata for the dimensions available to this AdExchange account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "metrics": { + "methods": { + "list": { + "id": "adexchangeseller.metadata.metrics.list", + "path": "metadata/metrics", + "httpMethod": "GET", + "description": "List the metadata for the metrics available to this AdExchange account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "preferreddeals": { + "methods": { + "get": { + "id": "adexchangeseller.preferreddeals.get", + "path": "preferreddeals/{dealId}", + "httpMethod": "GET", + "description": "Get information about the selected Ad Exchange Preferred Deal.", + "parameters": { + "dealId": { + "type": "string", + "description": "Preferred deal to get information about.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "dealId" + ], + "response": { + "$ref": "PreferredDeal" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.preferreddeals.list", + "path": "preferreddeals", + "httpMethod": "GET", + "description": "List the preferred deals for this Ad Exchange account.", + "response": { + "$ref": "PreferredDeals" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adexchangeseller.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an Ad Exchange report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adexchangeseller.reports.saved.generate", + "path": "reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an Ad Exchange report based on the saved report ID sent in the query parameters.", + "parameters": { + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "savedReportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.reports.saved.list", + "path": "reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in this Ad Exchange account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adexchangeseller.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-gen.go new file mode 100644 index 0000000000000..d258cd472dc6c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1.1/adexchangeseller-gen.go @@ -0,0 +1,2167 @@ +// Package adexchangeseller provides access to the Ad Exchange Seller API. +// +// See https://developers.google.com/ad-exchange/seller-rest/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangeseller/v1.1" +// ... +// adexchangesellerService, err := adexchangeseller.New(oauthHttpClient) +package adexchangeseller + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangeseller:v1.1" +const apiName = "adexchangeseller" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/adexchangeseller/v1.1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Ad Exchange data + AdexchangeSellerScope = "https://www.googleapis.com/auth/adexchange.seller" + + // View your Ad Exchange data + AdexchangeSellerReadonlyScope = "https://www.googleapis.com/auth/adexchange.seller.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Alerts = NewAlertsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Metadata = NewMetadataService(s) + s.Preferreddeals = NewPreferreddealsService(s) + s.Reports = NewReportsService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Adclients *AdclientsService + + Adunits *AdunitsService + + Alerts *AlertsService + + Customchannels *CustomchannelsService + + Metadata *MetadataService + + Preferreddeals *PreferreddealsService + + Reports *ReportsService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewAlertsService(s *Service) *AlertsService { + rs := &AlertsService{s: s} + return rs +} + +type AlertsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewMetadataService(s *Service) *MetadataService { + rs := &MetadataService{s: s} + rs.Dimensions = NewMetadataDimensionsService(s) + rs.Metrics = NewMetadataMetricsService(s) + return rs +} + +type MetadataService struct { + s *Service + + Dimensions *MetadataDimensionsService + + Metrics *MetadataMetricsService +} + +func NewMetadataDimensionsService(s *Service) *MetadataDimensionsService { + rs := &MetadataDimensionsService{s: s} + return rs +} + +type MetadataDimensionsService struct { + s *Service +} + +func NewMetadataMetricsService(s *Service) *MetadataMetricsService { + rs := &MetadataMetricsService{s: s} + return rs +} + +type MetadataMetricsService struct { + s *Service +} + +func NewPreferreddealsService(s *Service) *PreferreddealsService { + rs := &PreferreddealsService{s: s} + return rs +} + +type PreferreddealsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Saved = NewReportsSavedService(s) + return rs +} + +type ReportsService struct { + s *Service + + Saved *ReportsSavedService +} + +func NewReportsSavedService(s *Service) *ReportsSavedService { + rs := &ReportsSavedService{s: s} + return rs +} + +type ReportsSavedService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adexchangeseller#adUnit. + Kind string `json:"kind,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Alert struct { + // Id: Unique identifier of this alert. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adexchangeseller#alert. + Kind string `json:"kind,omitempty"` + + // Message: The localized alert message. + Message string `json:"message,omitempty"` + + // Severity: Severity of this alert. Possible values: INFO, WARNING, + // SEVERE. + Severity string `json:"severity,omitempty"` + + // Type: Type of this alert. Possible values: SELF_HOLD, + // MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, + // PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, + // API_HOLD. + Type string `json:"type,omitempty"` +} + +type Alerts struct { + // Items: The alerts returned in this list response. + Items []*Alert `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#alerts. + Kind string `json:"kind,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Metadata struct { + Items []*ReportingMetadataEntry `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#metadata. + Kind string `json:"kind,omitempty"` +} + +type PreferredDeal struct { + // AdvertiserName: The name of the advertiser this deal is for. + AdvertiserName string `json:"advertiserName,omitempty"` + + // BuyerNetworkName: The name of the buyer network this deal is for. + BuyerNetworkName string `json:"buyerNetworkName,omitempty"` + + // CurrencyCode: The currency code that applies to the fixed_cpm value. + // If not set then assumed to be USD. + CurrencyCode string `json:"currencyCode,omitempty"` + + // EndTime: Time when this deal stops being active in seconds since the + // epoch (GMT). If not set then this deal is valid until manually + // disabled by the publisher. + EndTime uint64 `json:"endTime,omitempty,string"` + + // FixedCpm: The fixed price for this preferred deal. In cpm micros of + // currency according to currencyCode. If set, then this preferred deal + // is eligible for the fixed price tier of buying (highest priority, pay + // exactly the configured fixed price). + FixedCpm int64 `json:"fixedCpm,omitempty,string"` + + // Id: Unique identifier of this preferred deal. + Id int64 `json:"id,omitempty,string"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#preferredDeal. + Kind string `json:"kind,omitempty"` + + // StartTime: Time when this deal becomes active in seconds since the + // epoch (GMT). If not set then this deal is active immediately upon + // creation. + StartTime uint64 `json:"startTime,omitempty,string"` +} + +type PreferredDeals struct { + // Items: The preferred deals returned in this list response. + Items []*PreferredDeal `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#preferredDeals. + Kind string `json:"kind,omitempty"` +} + +type Report struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*ReportHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adexchangeseller#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type ReportHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type ReportingMetadataEntry struct { + // CompatibleDimensions: For metrics this is a list of dimension IDs + // which the metric is compatible with, for dimensions it is a list of + // compatibility groups the dimension belongs to. + CompatibleDimensions []string `json:"compatibleDimensions,omitempty"` + + // CompatibleMetrics: The names of the metrics the dimension or metric + // this reporting metadata entry describes is compatible with. + CompatibleMetrics []string `json:"compatibleMetrics,omitempty"` + + // Id: Unique identifier of this reporting metadata entry, corresponding + // to the name of the appropriate dimension or metric. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#reportingMetadataEntry. + Kind string `json:"kind,omitempty"` + + // RequiredDimensions: The names of the dimensions which the dimension + // or metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredDimensions []string `json:"requiredDimensions,omitempty"` + + // RequiredMetrics: The names of the metrics which the dimension or + // metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredMetrics []string `json:"requiredMetrics,omitempty"` + + // SupportedProducts: The codes of the projects supported by the + // dimension or metric this reporting metadata entry describes. + SupportedProducts []string `json:"supportedProducts,omitempty"` +} + +type SavedReport struct { + // Id: Unique identifier of this saved report. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#savedReport. + Kind string `json:"kind,omitempty"` + + // Name: This saved report's name. + Name string `json:"name,omitempty"` +} + +type SavedReports struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved reports returned in this list response. + Items []*SavedReport `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#savedReports. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through saved reports. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adexchangeseller.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected Ad Exchange account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about. Tip: 'myaccount' is a valid ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this Ad Exchange account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this Ad +// Exchange account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.alerts.list": + +type AlertsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the alerts for this Ad Exchange account. +func (r *AlertsService) List() *AlertsListCall { + c := &AlertsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Locale sets the optional parameter "locale": The locale to use for +// translating alert messages. The account locale will be used if this +// is not supplied. The AdSense default (English) will be used if the +// supplied locale is invalid or unsupported. +func (c *AlertsListCall) Locale(locale string) *AlertsListCall { + c.opt_["locale"] = locale + return c +} + +func (c *AlertsListCall) Do() (*Alerts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "alerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alerts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the alerts for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.alerts.list", + // "parameters": { + // "locale": { + // "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "alerts", + // "response": { + // "$ref": "Alerts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this Ad +// Exchange account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.metadata.dimensions.list": + +type MetadataDimensionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the dimensions available to this +// AdExchange account. +func (r *MetadataDimensionsService) List() *MetadataDimensionsListCall { + c := &MetadataDimensionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataDimensionsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/dimensions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the dimensions available to this AdExchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.metadata.dimensions.list", + // "path": "metadata/dimensions", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.metadata.metrics.list": + +type MetadataMetricsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the metrics available to this AdExchange +// account. +func (r *MetadataMetricsService) List() *MetadataMetricsListCall { + c := &MetadataMetricsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataMetricsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/metrics") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the metrics available to this AdExchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.metadata.metrics.list", + // "path": "metadata/metrics", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.preferreddeals.get": + +type PreferreddealsGetCall struct { + s *Service + dealId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected Ad Exchange Preferred Deal. +func (r *PreferreddealsService) Get(dealId string) *PreferreddealsGetCall { + c := &PreferreddealsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.dealId = dealId + return c +} + +func (c *PreferreddealsGetCall) Do() (*PreferredDeal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "preferreddeals/{dealId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{dealId}", url.QueryEscape(c.dealId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PreferredDeal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected Ad Exchange Preferred Deal.", + // "httpMethod": "GET", + // "id": "adexchangeseller.preferreddeals.get", + // "parameterOrder": [ + // "dealId" + // ], + // "parameters": { + // "dealId": { + // "description": "Preferred deal to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "preferreddeals/{dealId}", + // "response": { + // "$ref": "PreferredDeal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.preferreddeals.list": + +type PreferreddealsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the preferred deals for this Ad Exchange account. +func (r *PreferreddealsService) List() *PreferreddealsListCall { + c := &PreferreddealsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *PreferreddealsListCall) Do() (*PreferredDeals, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "preferreddeals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PreferredDeals) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the preferred deals for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.preferreddeals.list", + // "path": "preferreddeals", + // "response": { + // "$ref": "PreferredDeals" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an Ad Exchange report based on the report request +// sent in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an Ad Exchange report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adexchangeseller.reports.saved.generate": + +type ReportsSavedGenerateCall struct { + s *Service + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an Ad Exchange report based on the saved report ID +// sent in the query parameters. +func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall { + c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsSavedGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an Ad Exchange report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.saved.generate", + // "parameterOrder": [ + // "savedReportId" + // ], + // "parameters": { + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports/{savedReportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.reports.saved.list": + +type ReportsSavedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved reports in this Ad Exchange account. +func (r *ReportsSavedService) List() *ReportsSavedListCall { + c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.saved.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this Ad +// Exchange account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-api.json b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-api.json new file mode 100644 index 0000000000000..cae061ea7745b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-api.json @@ -0,0 +1,917 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/k4EGd11ZUVmhrZoqHDxlI_JyIAo\"", + "discoveryVersion": "v1", + "id": "adexchangeseller:v1", + "name": "adexchangeseller", + "canonicalName": "Ad Exchange Seller", + "version": "v1", + "title": "Ad Exchange Seller API", + "description": "Gives Ad Exchange seller users access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/seller-rest/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangeseller/v1/", + "basePath": "/adexchangeseller/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangeseller/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.seller": { + "description": "View and manage your Ad Exchange data" + }, + "https://www.googleapis.com/auth/adexchange.seller.readonly": { + "description": "View your Ad Exchange data" + } + } + } + }, + "schemas": { + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#adClient.", + "default": "adexchangeseller#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#adClients.", + "default": "adexchangeseller#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#adUnit.", + "default": "adexchangeseller#adUnit" + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#adUnits.", + "default": "adexchangeseller#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#customChannel.", + "default": "adexchangeseller#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#customChannels.", + "default": "adexchangeseller#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adexchangeseller#report.", + "default": "adexchangeseller#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "SavedReport": { + "id": "SavedReport", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this saved report." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#savedReport.", + "default": "adexchangeseller#savedReport" + }, + "name": { + "type": "string", + "description": "This saved report's name." + } + } + }, + "SavedReports": { + "id": "SavedReports", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved reports returned in this list response.", + "items": { + "$ref": "SavedReport" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#savedReports.", + "default": "adexchangeseller#savedReports" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adexchangeseller#urlChannel.", + "default": "adexchangeseller#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adexchangeseller#urlChannels.", + "default": "adexchangeseller#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adexchangeseller.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this Ad Exchange account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adexchangeseller.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adexchangeseller.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adexchangeseller.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adexchangeseller.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adexchangeseller.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an Ad Exchange report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adexchangeseller.reports.saved.generate", + "path": "reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an Ad Exchange report based on the saved report ID sent in the query parameters.", + "parameters": { + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "savedReportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + }, + "list": { + "id": "adexchangeseller.reports.saved.list", + "path": "reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in this Ad Exchange account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adexchangeseller.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this Ad Exchange account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adexchange.seller", + "https://www.googleapis.com/auth/adexchange.seller.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-gen.go new file mode 100644 index 0000000000000..8cd8694912bb0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adexchangeseller/v1/adexchangeseller-gen.go @@ -0,0 +1,1609 @@ +// Package adexchangeseller provides access to the Ad Exchange Seller API. +// +// See https://developers.google.com/ad-exchange/seller-rest/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangeseller/v1" +// ... +// adexchangesellerService, err := adexchangeseller.New(oauthHttpClient) +package adexchangeseller + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangeseller:v1" +const apiName = "adexchangeseller" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/adexchangeseller/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Ad Exchange data + AdexchangeSellerScope = "https://www.googleapis.com/auth/adexchange.seller" + + // View your Ad Exchange data + AdexchangeSellerReadonlyScope = "https://www.googleapis.com/auth/adexchange.seller.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Reports = NewReportsService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Adclients *AdclientsService + + Adunits *AdunitsService + + Customchannels *CustomchannelsService + + Reports *ReportsService + + Urlchannels *UrlchannelsService +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Saved = NewReportsSavedService(s) + return rs +} + +type ReportsService struct { + s *Service + + Saved *ReportsSavedService +} + +func NewReportsSavedService(s *Service) *ReportsSavedService { + rs := &ReportsSavedService{s: s} + return rs +} + +type ReportsSavedService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adexchangeseller#adUnit. + Kind string `json:"kind,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adexchangeseller#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Report struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*ReportHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adexchangeseller#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type ReportHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type SavedReport struct { + // Id: Unique identifier of this saved report. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#savedReport. + Kind string `json:"kind,omitempty"` + + // Name: This saved report's name. + Name string `json:"name,omitempty"` +} + +type SavedReports struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved reports returned in this list response. + Items []*SavedReport `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#savedReports. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through saved reports. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adexchangeseller#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // adexchangeseller#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adexchangeseller.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this Ad Exchange account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this Ad +// Exchange account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adexchangeseller.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this Ad +// Exchange account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adexchangeseller.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an Ad Exchange report based on the report request +// sent in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an Ad Exchange report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adexchangeseller.reports.saved.generate": + +type ReportsSavedGenerateCall struct { + s *Service + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an Ad Exchange report based on the saved report ID +// sent in the query parameters. +func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall { + c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsSavedGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an Ad Exchange report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.saved.generate", + // "parameterOrder": [ + // "savedReportId" + // ], + // "parameters": { + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports/{savedReportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.reports.saved.list": + +type ReportsSavedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved reports in this Ad Exchange account. +func (r *ReportsSavedService) List() *ReportsSavedListCall { + c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.reports.saved.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} + +// method id "adexchangeseller.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this Ad +// Exchange account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this Ad Exchange account.", + // "httpMethod": "GET", + // "id": "adexchangeseller.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adexchange.seller", + // "https://www.googleapis.com/auth/adexchange.seller.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-api.json b/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-api.json new file mode 100644 index 0000000000000..27b65110a99e0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-api.json @@ -0,0 +1,3602 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/xqSX7-n8LugACXqRoz62D83GEuE\"", + "discoveryVersion": "v1", + "id": "admin:directory_v1", + "name": "admin", + "canonicalName": "directory", + "version": "directory_v1", + "title": "Admin Directory API", + "description": "The Admin SDK Directory API lets you view and manage enterprise resources such as users and groups, administrative notifications, security features, and more.", + "ownerDomain": "google.com", + "ownerName": "Google", + "packagePath": "admin", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/admin-sdk/directory/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/admin/directory/v1/", + "basePath": "/admin/directory/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "admin/directory/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/admin.directory.device.chromeos": { + "description": "View and manage your Chrome OS devices' metadata" + }, + "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly": { + "description": "View your Chrome OS devices' metadata" + }, + "https://www.googleapis.com/auth/admin.directory.device.mobile": { + "description": "View and manage your mobile devices' metadata" + }, + "https://www.googleapis.com/auth/admin.directory.device.mobile.action": { + "description": "Manage your mobile devices by performing administrative tasks" + }, + "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly": { + "description": "View your mobile devices' metadata" + }, + "https://www.googleapis.com/auth/admin.directory.group": { + "description": "View and manage the provisioning of groups on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.group.member": { + "description": "View and manage group subscriptions on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.group.member.readonly": { + "description": "View group subscriptions on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.group.readonly": { + "description": "View groups on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.notifications": { + "description": "View and manage notifications received on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.orgunit": { + "description": "View and manage organization units on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.orgunit.readonly": { + "description": "View organization units on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.user": { + "description": "View and manage the provisioning of users on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.user.alias": { + "description": "View and manage user aliases on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.user.alias.readonly": { + "description": "View user aliases on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.user.readonly": { + "description": "View users on your domain" + }, + "https://www.googleapis.com/auth/admin.directory.user.security": { + "description": "Manage data access permissions for users on your domain" + } + } + } + }, + "schemas": { + "Alias": { + "id": "Alias", + "type": "object", + "description": "JSON template for Alias object in Apps Directory API.", + "properties": { + "alias": { + "type": "string", + "description": "A alias email" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Unique id of the group (Read-only) Unique id of the user (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#alias" + }, + "primaryEmail": { + "type": "string", + "description": "Group's primary email (Read-only) User's primary email (Read-only)" + } + } + }, + "Aliases": { + "id": "Aliases", + "type": "object", + "description": "JSON response template to list aliases in Apps Directory API.", + "properties": { + "aliases": { + "type": "array", + "description": "List of alias objects.", + "items": { + "$ref": "Alias" + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#aliases" + } + } + }, + "Asp": { + "id": "Asp", + "type": "object", + "description": "The template that returns individual ASP (Access Code) data.", + "properties": { + "codeId": { + "type": "integer", + "description": "The unique ID of the ASP.", + "format": "int32" + }, + "creationTime": { + "type": "string", + "description": "The time when the ASP was created. Expressed in Unix time format.", + "format": "int64" + }, + "etag": { + "type": "string", + "description": "ETag of the ASP." + }, + "kind": { + "type": "string", + "description": "The type of the API resource. This is always admin#directory#asp.", + "default": "admin#directory#asp" + }, + "lastTimeUsed": { + "type": "string", + "description": "The time when the ASP was last used. Expressed in Unix time format.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "The name of the application that the user, represented by their userId, entered when the ASP was created." + }, + "userKey": { + "type": "string", + "description": "The unique ID of the user who issued the ASP." + } + } + }, + "Asps": { + "id": "Asps", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "A list of ASP resources.", + "items": { + "$ref": "Asp" + } + }, + "kind": { + "type": "string", + "description": "The type of the API resource. This is always admin#directory#aspList.", + "default": "admin#directory#aspList" + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "An notification channel used to watch for resource changes.", + "properties": { + "address": { + "type": "string", + "description": "The address where notifications are delivered for this channel." + }, + "expiration": { + "type": "string", + "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "A UUID or similar unique string that identifies this channel." + }, + "kind": { + "type": "string", + "description": "Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed string \"api#channel\".", + "default": "api#channel" + }, + "params": { + "type": "object", + "description": "Additional parameters controlling delivery channel behavior. Optional.", + "additionalProperties": { + "type": "string", + "description": "Declares a new parameter by name." + } + }, + "payload": { + "type": "boolean", + "description": "A Boolean value to indicate whether payload is wanted. Optional." + }, + "resourceId": { + "type": "string", + "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions." + }, + "resourceUri": { + "type": "string", + "description": "A version-specific identifier for the watched resource." + }, + "token": { + "type": "string", + "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional." + }, + "type": { + "type": "string", + "description": "The type of delivery mechanism used for this channel." + } + } + }, + "ChromeOsDevice": { + "id": "ChromeOsDevice", + "type": "object", + "description": "JSON template for Chrome Os Device resource in Apps Directory API.", + "properties": { + "annotatedLocation": { + "type": "string", + "description": "Address or location of the device as noted by the administrator" + }, + "annotatedUser": { + "type": "string", + "description": "User of the device" + }, + "bootMode": { + "type": "string", + "description": "Chromebook boot mode (Read-only)" + }, + "deviceId": { + "type": "string", + "description": "Unique identifier of Chrome OS Device (Read-only)" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "firmwareVersion": { + "type": "string", + "description": "Chromebook firmware version (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#chromeosdevice" + }, + "lastEnrollmentTime": { + "type": "string", + "description": "Date and time the device was last enrolled (Read-only)", + "format": "date-time" + }, + "lastSync": { + "type": "string", + "description": "Date and time the device was last synchronized with the policy settings in the Google Apps administrator control panel (Read-only)", + "format": "date-time" + }, + "macAddress": { + "type": "string", + "description": "Chromebook Mac Address (Read-only)" + }, + "meid": { + "type": "string", + "description": "Mobile Equipment identifier for the 3G mobile card in the Chromebook (Read-only)" + }, + "model": { + "type": "string", + "description": "Chromebook Model (Read-only)" + }, + "notes": { + "type": "string", + "description": "Notes added by the administrator" + }, + "orderNumber": { + "type": "string", + "description": "Chromebook order number (Read-only)" + }, + "orgUnitPath": { + "type": "string", + "description": "OrgUnit of the device" + }, + "osVersion": { + "type": "string", + "description": "Chromebook Os Version (Read-only)" + }, + "platformVersion": { + "type": "string", + "description": "Chromebook platform version (Read-only)" + }, + "serialNumber": { + "type": "string", + "description": "Chromebook serial number (Read-only)" + }, + "status": { + "type": "string", + "description": "status of the device (Read-only)" + }, + "supportEndDate": { + "type": "string", + "description": "Final date the device will be supported (Read-only)", + "format": "date-time" + }, + "willAutoRenew": { + "type": "boolean", + "description": "Will Chromebook auto reniew after support end date (Read-only)" + } + } + }, + "ChromeOsDevices": { + "id": "ChromeOsDevices", + "type": "object", + "description": "JSON response template for List Chrome OS Devices operation in Apps Directory API.", + "properties": { + "chromeosdevices": { + "type": "array", + "description": "List of Chrome OS Device objects.", + "items": { + "$ref": "ChromeOsDevice" + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#chromeosdevices" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access next page of this result." + } + } + }, + "Group": { + "id": "Group", + "type": "object", + "description": "JSON template for Group resource in Apps Directory API.", + "properties": { + "adminCreated": { + "type": "boolean", + "description": "Is the group created by admin (Read-only) *" + }, + "aliases": { + "type": "array", + "description": "List of aliases (Read-only)", + "items": { + "type": "string" + } + }, + "description": { + "type": "string", + "description": "Description of the group" + }, + "directMembersCount": { + "type": "string", + "description": "Group direct members count", + "format": "int64" + }, + "email": { + "type": "string", + "description": "Email of Group", + "annotations": { + "required": [ + "directory.groups.insert" + ] + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier of Group (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#group" + }, + "name": { + "type": "string", + "description": "Group name" + }, + "nonEditableAliases": { + "type": "array", + "description": "List of non editable aliases (Read-only)", + "items": { + "type": "string" + } + } + } + }, + "Groups": { + "id": "Groups", + "type": "object", + "description": "JSON response template for List Groups operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "groups": { + "type": "array", + "description": "List of group objects.", + "items": { + "$ref": "Group" + } + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#groups" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access next page of this result." + } + } + }, + "Member": { + "id": "Member", + "type": "object", + "description": "JSON template for Member resource in Apps Directory API.", + "properties": { + "email": { + "type": "string", + "description": "Email of member (Read-only)" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier of customer member (Read-only) Unique identifier of group (Read-only) Unique identifier of member (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#member" + }, + "role": { + "type": "string", + "description": "Role of member" + }, + "type": { + "type": "string", + "description": "Type of member (Immutable)" + } + } + }, + "Members": { + "id": "Members", + "type": "object", + "description": "JSON response template for List Members operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#members" + }, + "members": { + "type": "array", + "description": "List of member objects.", + "items": { + "$ref": "Member" + } + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access next page of this result." + } + } + }, + "MobileDevice": { + "id": "MobileDevice", + "type": "object", + "description": "JSON template for Mobile Device resource in Apps Directory API.", + "properties": { + "applications": { + "type": "array", + "description": "List of applications installed on Mobile Device", + "items": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "Display name of application" + }, + "packageName": { + "type": "string", + "description": "Package name of application" + }, + "permission": { + "type": "array", + "description": "List of Permissions for application", + "items": { + "type": "string" + } + }, + "versionCode": { + "type": "integer", + "description": "Version code of application", + "format": "int32" + }, + "versionName": { + "type": "string", + "description": "Version name of application" + } + } + } + }, + "deviceId": { + "type": "string", + "description": "Mobile Device serial number (Read-only)" + }, + "email": { + "type": "array", + "description": "List of owner user's email addresses (Read-only)", + "items": { + "type": "string" + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "firstSync": { + "type": "string", + "description": "Date and time the device was first synchronized with the policy settings in the Google Apps administrator control panel (Read-only)", + "format": "date-time" + }, + "hardwareId": { + "type": "string", + "description": "Mobile Device Hardware Id (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#mobiledevice" + }, + "lastSync": { + "type": "string", + "description": "Date and time the device was last synchronized with the policy settings in the Google Apps administrator control panel (Read-only)", + "format": "date-time" + }, + "model": { + "type": "string", + "description": "Name of the model of the device" + }, + "name": { + "type": "array", + "description": "List of owner user's names (Read-only)", + "items": { + "type": "string" + } + }, + "os": { + "type": "string", + "description": "Name of the mobile operating system" + }, + "resourceId": { + "type": "string", + "description": "Unique identifier of Mobile Device (Read-only)" + }, + "status": { + "type": "string", + "description": "Status of the device (Read-only)" + }, + "type": { + "type": "string", + "description": "The type of device (Read-only)" + }, + "userAgent": { + "type": "string", + "description": "Mobile Device user agent" + } + } + }, + "MobileDeviceAction": { + "id": "MobileDeviceAction", + "type": "object", + "description": "JSON request template for firing commands on Mobile Device in Apps Directory Devices API.", + "properties": { + "action": { + "type": "string", + "description": "Action to be taken on the Mobile Device", + "annotations": { + "required": [ + "directory.mobiledevices.action" + ] + } + } + } + }, + "MobileDevices": { + "id": "MobileDevices", + "type": "object", + "description": "JSON response template for List Mobile Devices operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#mobiledevices" + }, + "mobiledevices": { + "type": "array", + "description": "List of Mobile Device objects.", + "items": { + "$ref": "MobileDevice" + } + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access next page of this result." + } + } + }, + "Notification": { + "id": "Notification", + "type": "object", + "description": "Template for a notification resource.", + "properties": { + "body": { + "type": "string", + "description": "Body of the notification (Read-only)" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "fromAddress": { + "type": "string", + "description": "Address from which the notification is received (Read-only)" + }, + "isUnread": { + "type": "boolean", + "description": "Boolean indicating whether the notification is unread or not." + }, + "kind": { + "type": "string", + "description": "The type of the resource.", + "default": "admin#directory#notification" + }, + "notificationId": { + "type": "string" + }, + "sendTime": { + "type": "string", + "description": "Time at which notification was sent (Read-only)", + "format": "date-time" + }, + "subject": { + "type": "string", + "description": "Subject of the notification (Read-only)" + } + } + }, + "Notifications": { + "id": "Notifications", + "type": "object", + "description": "Template for notifications list response.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "List of notifications in this page.", + "items": { + "$ref": "Notification" + } + }, + "kind": { + "type": "string", + "description": "The type of the resource.", + "default": "admin#directory#notifications" + }, + "nextPageToken": { + "type": "string", + "description": "Token for fetching the next page of notifications." + }, + "unreadNotificationsCount": { + "type": "integer", + "description": "Number of unread notification for the domain.", + "format": "int32" + } + } + }, + "OrgUnit": { + "id": "OrgUnit", + "type": "object", + "description": "JSON template for Org Unit resource in Apps Directory API.", + "properties": { + "blockInheritance": { + "type": "boolean", + "description": "Should block inheritance" + }, + "description": { + "type": "string", + "description": "Description of OrgUnit" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#orgUnit" + }, + "name": { + "type": "string", + "description": "Name of OrgUnit", + "annotations": { + "required": [ + "directory.orgunits.insert" + ] + } + }, + "orgUnitPath": { + "type": "string", + "description": "Path of OrgUnit" + }, + "parentOrgUnitPath": { + "type": "string", + "description": "Path of parent OrgUnit", + "annotations": { + "required": [ + "directory.orgunits.insert" + ] + } + } + } + }, + "OrgUnits": { + "id": "OrgUnits", + "type": "object", + "description": "JSON response template for List Organization Units operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#orgUnits" + }, + "organizationUnits": { + "type": "array", + "description": "List of user objects.", + "items": { + "$ref": "OrgUnit" + } + } + } + }, + "Token": { + "id": "Token", + "type": "object", + "description": "JSON template for token resource in Apps Directory API.", + "properties": { + "anonymous": { + "type": "boolean", + "description": "Whether the application is registered with Google. The value is true if the application has an anonymous Client ID." + }, + "clientId": { + "type": "string", + "description": "The Client ID of the application the token is issued to." + }, + "displayText": { + "type": "string", + "description": "The displayable name of the application the token is issued to." + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "The type of the API resource. This is always admin#directory#token.", + "default": "admin#directory#token" + }, + "nativeApp": { + "type": "boolean", + "description": "Whether the token is issued to an installed application. The value is true if the application is installed to a desktop or mobile device." + }, + "scopes": { + "type": "array", + "description": "A list of authorization scopes the application is granted.", + "items": { + "type": "string" + } + }, + "userKey": { + "type": "string", + "description": "The unique ID of the user that issued the token." + } + } + }, + "Tokens": { + "id": "Tokens", + "type": "object", + "description": "JSON response template for List tokens operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "A list of Token resources.", + "items": { + "$ref": "Token" + } + }, + "kind": { + "type": "string", + "description": "The type of the API resource. This is always admin#directory#tokenList.", + "default": "admin#directory#tokenList" + } + } + }, + "User": { + "id": "User", + "type": "object", + "description": "JSON template for User object in Apps Directory API.", + "properties": { + "addresses": { + "type": "array", + "description": "Addresses of User", + "items": { + "$ref": "UserAddress" + } + }, + "agreedToTerms": { + "type": "boolean", + "description": "Indicates if user has agreed to terms (Read-only)" + }, + "aliases": { + "type": "array", + "description": "List of aliases (Read-only)", + "items": { + "type": "string" + } + }, + "changePasswordAtNextLogin": { + "type": "boolean", + "description": "Boolean indicating if the user should change password in next login" + }, + "creationTime": { + "type": "string", + "description": "User's Google account creation time. (Read-only)", + "format": "date-time" + }, + "customerId": { + "type": "string", + "description": "CustomerId of User (Read-only)" + }, + "deletionTime": { + "type": "string", + "format": "date-time" + }, + "emails": { + "type": "array", + "description": "Emails of User", + "items": { + "$ref": "UserEmail" + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "externalIds": { + "type": "array", + "description": "The external Ids of User *", + "items": { + "$ref": "UserExternalId" + } + }, + "hashFunction": { + "type": "string", + "description": "Hash function name for password. Supported are MD5, SHA-1 and crypt" + }, + "id": { + "type": "string", + "description": "Unique identifier of User (Read-only)" + }, + "ims": { + "type": "array", + "description": "User's Instant Messenger", + "items": { + "$ref": "UserIm" + } + }, + "includeInGlobalAddressList": { + "type": "boolean", + "description": "Boolean indicating if user is included in Global Address List" + }, + "ipWhitelisted": { + "type": "boolean", + "description": "Boolean indicating if ip is whitelisted" + }, + "isAdmin": { + "type": "boolean", + "description": "Boolean indicating if the user is admin (Read-only)" + }, + "isDelegatedAdmin": { + "type": "boolean", + "description": "Boolean indicating if the user is delegated admin (Read-only)" + }, + "isMailboxSetup": { + "type": "boolean", + "description": "Is mailbox setup (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#user" + }, + "lastLoginTime": { + "type": "string", + "description": "User's last login time. (Read-only)", + "format": "date-time" + }, + "name": { + "$ref": "UserName", + "description": "User's name", + "annotations": { + "required": [ + "directory.users.insert" + ] + } + }, + "nonEditableAliases": { + "type": "array", + "description": "List of non editable aliases (Read-only)", + "items": { + "type": "string" + } + }, + "orgUnitPath": { + "type": "string", + "description": "OrgUnit of User" + }, + "organizations": { + "type": "array", + "description": "Organizations of User", + "items": { + "$ref": "UserOrganization" + } + }, + "password": { + "type": "string", + "description": "User's password", + "annotations": { + "required": [ + "directory.users.insert" + ] + } + }, + "phones": { + "type": "array", + "description": "Phone numbers of User", + "items": { + "$ref": "UserPhone" + } + }, + "primaryEmail": { + "type": "string", + "description": "username of User", + "annotations": { + "required": [ + "directory.users.insert" + ] + } + }, + "relations": { + "type": "array", + "description": "The Relations of User *", + "items": { + "$ref": "UserRelation" + } + }, + "suspended": { + "type": "boolean", + "description": "Indicates if user is suspended" + }, + "suspensionReason": { + "type": "string", + "description": "Suspension reason if user is suspended (Read-only)" + }, + "thumbnailPhotoUrl": { + "type": "string", + "description": "Photo Url of the user (Read-only)" + } + } + }, + "UserAddress": { + "id": "UserAddress", + "type": "object", + "description": "JSON template for address.", + "properties": { + "country": { + "type": "string", + "description": "Country." + }, + "countryCode": { + "type": "string", + "description": "Country code." + }, + "customType": { + "type": "string", + "description": "Custom type." + }, + "extendedAddress": { + "type": "string", + "description": "Extended Address." + }, + "formatted": { + "type": "string", + "description": "Formatted address (read-only field)" + }, + "locality": { + "type": "string", + "description": "Locality." + }, + "poBox": { + "type": "string", + "description": "Other parts of address." + }, + "postalCode": { + "type": "string", + "description": "Postal code." + }, + "primary": { + "type": "boolean", + "description": "If this is user's primary address. Only one entry could be marked as primary." + }, + "region": { + "type": "string", + "description": "Region." + }, + "sourceIsStructured": { + "type": "boolean", + "description": "User supplied address was structured. Structured addresses are NOT supported at this time. You might be able to write structured addresses, but any values will eventually be clobbered." + }, + "streetAddress": { + "type": "string", + "description": "Street." + }, + "type": { + "type": "string", + "description": "Each entry can have a type which indicates standard values of that entry. For example address could be of home, work etc. In addition to the standard type, an entry can have a custom type and can take any value. Such type should have the CUSTOM value as type and also have a customType value." + } + } + }, + "UserEmail": { + "id": "UserEmail", + "type": "object", + "description": "JSON template for an email.", + "properties": { + "address": { + "type": "string", + "description": "Email id of the user." + }, + "customType": { + "type": "string", + "description": "Custom Type." + }, + "primary": { + "type": "boolean", + "description": "If this is user's primary email. Only one entry could be marked as primary." + }, + "type": { + "type": "string", + "description": "Each entry can have a type which indicates standard types of that entry. For example email could be of home, work etc. In addition to the standard type, an entry can have a custom type and can take any value Such typess should have the CUSTOM value as type and also have a customType value." + } + } + }, + "UserExternalId": { + "id": "UserExternalId", + "type": "object", + "description": "JSON template for an externalId entry.", + "properties": { + "customType": { + "type": "string", + "description": "Custom type." + }, + "type": { + "type": "string", + "description": "The type of the Id." + }, + "value": { + "type": "string", + "description": "The value of the id." + } + } + }, + "UserIm": { + "id": "UserIm", + "type": "object", + "description": "JSON template for instant messenger of an user.", + "properties": { + "customProtocol": { + "type": "string", + "description": "Custom protocol." + }, + "customType": { + "type": "string", + "description": "Custom type." + }, + "im": { + "type": "string", + "description": "Instant messenger id." + }, + "primary": { + "type": "boolean", + "description": "If this is user's priamry im. Only one entry could be marked as primary." + }, + "protocol": { + "type": "string", + "description": "Protocol used in the instant messenger. It should be one of the values from ImProtocolTypes map. Simalar to type, it can take a CUSTOM value and specify the custom name in customProtocol field." + }, + "type": { + "type": "string", + "description": "Each entry can have a type which indicates standard types of that entry. For example instant messengers could be of home, work etc. In addition to the standard type, an entry can have a custom type and can take any value. Such types should have the CUSTOM value as type and also have a customType value." + } + } + }, + "UserMakeAdmin": { + "id": "UserMakeAdmin", + "type": "object", + "description": "JSON request template for setting/revoking admin status of a user in Apps Directory API.", + "properties": { + "status": { + "type": "boolean", + "description": "Boolean indicating new admin status of the user", + "annotations": { + "required": [ + "directory.users.makeAdmin" + ] + } + } + } + }, + "UserName": { + "id": "UserName", + "type": "object", + "description": "JSON template for name of a user in Apps Directory API.", + "properties": { + "familyName": { + "type": "string", + "description": "Last Name", + "annotations": { + "required": [ + "directory.users.insert" + ] + } + }, + "fullName": { + "type": "string", + "description": "Full Name" + }, + "givenName": { + "type": "string", + "description": "First Name", + "annotations": { + "required": [ + "directory.users.insert" + ] + } + } + } + }, + "UserOrganization": { + "id": "UserOrganization", + "type": "object", + "description": "JSON template for an organization entry.", + "properties": { + "costCenter": { + "type": "string", + "description": "The cost center of the users department." + }, + "customType": { + "type": "string", + "description": "Custom type." + }, + "department": { + "type": "string", + "description": "Department within the organization." + }, + "description": { + "type": "string", + "description": "Description of the organization." + }, + "domain": { + "type": "string", + "description": "The domain to which the organization belongs to." + }, + "location": { + "type": "string", + "description": "Location of the organization. This need not be fully qualified address." + }, + "name": { + "type": "string", + "description": "Name of the organization" + }, + "primary": { + "type": "boolean", + "description": "If it user's primary organization." + }, + "symbol": { + "type": "string", + "description": "Symobol of the organization." + }, + "title": { + "type": "string", + "description": "Title (designation) of the user in the organization." + }, + "type": { + "type": "string", + "description": "Each entry can have a type which indicates standard types of that entry. For example organization could be of school, work etc. In addition to the standard type, an entry can have a custom type and can give it any name. Such types should have the CUSTOM value as type and also have a CustomType value." + } + } + }, + "UserPhone": { + "id": "UserPhone", + "type": "object", + "description": "JSON template for a phone entry.", + "properties": { + "customType": { + "type": "string", + "description": "Custom Type." + }, + "primary": { + "type": "boolean", + "description": "If this is user's primary phone or not." + }, + "type": { + "type": "string", + "description": "Each entry can have a type which indicates standard types of that entry. For example phone could be of home_fax, work, mobile etc. In addition to the standard type, an entry can have a custom type and can give it any name. Such types should have the CUSTOM value as type and also have a customType value." + }, + "value": { + "type": "string", + "description": "Phone number." + } + } + }, + "UserPhoto": { + "id": "UserPhoto", + "type": "object", + "description": "JSON template for Photo object in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "height": { + "type": "integer", + "description": "Height in pixels of the photo", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier of User (Read-only)" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#user#photo" + }, + "mimeType": { + "type": "string", + "description": "Mime Type of the photo" + }, + "photoData": { + "type": "string", + "description": "Base64 encoded photo data", + "format": "byte", + "annotations": { + "required": [ + "directory.users.photos.update" + ] + } + }, + "primaryEmail": { + "type": "string", + "description": "Primary email of User (Read-only)" + }, + "width": { + "type": "integer", + "description": "Width in pixels of the photo", + "format": "int32" + } + } + }, + "UserRelation": { + "id": "UserRelation", + "type": "object", + "description": "JSON template for a relation entry.", + "properties": { + "customType": { + "type": "string", + "description": "Custom Type." + }, + "type": { + "type": "string", + "description": "The relation of the user. Some of the possible values are mother, father, sister, brother, manager, assistant, partner." + }, + "value": { + "type": "string", + "description": "The name of the relation." + } + } + }, + "UserUndelete": { + "id": "UserUndelete", + "type": "object", + "description": "JSON request template to undelete a user in Apps Directory API.", + "properties": { + "orgUnitPath": { + "type": "string", + "description": "OrgUnit of User" + } + } + }, + "Users": { + "id": "Users", + "type": "object", + "description": "JSON response template for List Users operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#directory#users" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access next page of this result." + }, + "trigger_event": { + "type": "string", + "description": "Event that triggered this response (only used in case of Push Response)" + }, + "users": { + "type": "array", + "description": "List of user objects.", + "items": { + "$ref": "User" + } + } + } + }, + "VerificationCode": { + "id": "VerificationCode", + "type": "object", + "description": "JSON template for verification codes in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "The type of the resource. This is always admin#directory#verificationCode.", + "default": "admin#directory#verificationCode" + }, + "userId": { + "type": "string", + "description": "The obfuscated unique ID of the user." + }, + "verificationCode": { + "type": "string", + "description": "A current verification code for the user. Invalidated or used verification codes are not returned as part of the result." + } + } + }, + "VerificationCodes": { + "id": "VerificationCodes", + "type": "object", + "description": "JSON response template for List verification codes operation in Apps Directory API.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "A list of verification code resources.", + "items": { + "$ref": "VerificationCode" + } + }, + "kind": { + "type": "string", + "description": "The type of the resource. This is always admin#directory#verificationCodesList.", + "default": "admin#directory#verificationCodesList" + } + } + } + }, + "resources": { + "asps": { + "methods": { + "delete": { + "id": "directory.asps.delete", + "path": "users/{userKey}/asps/{codeId}", + "httpMethod": "DELETE", + "description": "Delete an ASP issued by a user.", + "parameters": { + "codeId": { + "type": "integer", + "description": "The unique ID of the ASP to be deleted.", + "required": true, + "format": "int32", + "location": "path" + }, + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "codeId" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "get": { + "id": "directory.asps.get", + "path": "users/{userKey}/asps/{codeId}", + "httpMethod": "GET", + "description": "Get information about an ASP issued by a user.", + "parameters": { + "codeId": { + "type": "integer", + "description": "The unique ID of the ASP.", + "required": true, + "format": "int32", + "location": "path" + }, + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "codeId" + ], + "response": { + "$ref": "Asp" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "list": { + "id": "directory.asps.list", + "path": "users/{userKey}/asps", + "httpMethod": "GET", + "description": "List the ASPs issued by a user.", + "parameters": { + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "Asps" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + } + } + }, + "channels": { + "methods": { + "stop": { + "id": "admin.channels.stop", + "path": "/admin/directory_v1/channels/stop", + "httpMethod": "POST", + "description": "Stop watching resources through this channel", + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.alias", + "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ] + } + } + }, + "chromeosdevices": { + "methods": { + "get": { + "id": "directory.chromeosdevices.get", + "path": "customer/{customerId}/devices/chromeos/{deviceId}", + "httpMethod": "GET", + "description": "Retrieve Chrome OS Device", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "deviceId": { + "type": "string", + "description": "Immutable id of Chrome OS Device", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + "Includes all metadata fields" + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId", + "deviceId" + ], + "response": { + "$ref": "ChromeOsDevice" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.chromeos", + "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly" + ] + }, + "list": { + "id": "directory.chromeosdevices.list", + "path": "customer/{customerId}/devices/chromeos", + "httpMethod": "GET", + "description": "Retrieve all Chrome OS Devices of a customer (paginated)", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 100", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Column to use for sorting results", + "enum": [ + "annotatedLocation", + "annotatedUser", + "lastSync", + "notes", + "serialNumber", + "status", + "supportEndDate" + ], + "enumDescriptions": [ + "Chromebook location as annotated by the administrator.", + "Chromebook user as annotated by administrator.", + "Chromebook last sync.", + "Chromebook notes as annotated by the administrator.", + "Chromebook Serial Number.", + "Chromebook status.", + "Chromebook support end date." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + "Includes all metadata fields" + ], + "location": "query" + }, + "query": { + "type": "string", + "description": "Search string in the format given at http://support.google.com/chromeos/a/bin/answer.py?hl=en&answer=1698333", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Whether to return results in ascending or descending order. Only of use when orderBy is also used", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId" + ], + "response": { + "$ref": "ChromeOsDevices" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.chromeos", + "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly" + ] + }, + "patch": { + "id": "directory.chromeosdevices.patch", + "path": "customer/{customerId}/devices/chromeos/{deviceId}", + "httpMethod": "PATCH", + "description": "Update Chrome OS Device. This method supports patch semantics.", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "deviceId": { + "type": "string", + "description": "Immutable id of Chrome OS Device", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + "Includes all metadata fields" + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId", + "deviceId" + ], + "request": { + "$ref": "ChromeOsDevice" + }, + "response": { + "$ref": "ChromeOsDevice" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.chromeos" + ] + }, + "update": { + "id": "directory.chromeosdevices.update", + "path": "customer/{customerId}/devices/chromeos/{deviceId}", + "httpMethod": "PUT", + "description": "Update Chrome OS Device", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "deviceId": { + "type": "string", + "description": "Immutable id of Chrome OS Device", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + "Includes all metadata fields" + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId", + "deviceId" + ], + "request": { + "$ref": "ChromeOsDevice" + }, + "response": { + "$ref": "ChromeOsDevice" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.chromeos" + ] + } + } + }, + "groups": { + "methods": { + "delete": { + "id": "directory.groups.delete", + "path": "groups/{groupKey}", + "httpMethod": "DELETE", + "description": "Delete Group", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + }, + "get": { + "id": "directory.groups.get", + "path": "groups/{groupKey}", + "httpMethod": "GET", + "description": "Retrieve Group", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "response": { + "$ref": "Group" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.readonly" + ] + }, + "insert": { + "id": "directory.groups.insert", + "path": "groups", + "httpMethod": "POST", + "description": "Create Group", + "request": { + "$ref": "Group" + }, + "response": { + "$ref": "Group" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + }, + "list": { + "id": "directory.groups.list", + "path": "groups", + "httpMethod": "GET", + "description": "Retrieve all groups in a domain (paginated)", + "parameters": { + "customer": { + "type": "string", + "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all groups for a customer, fill this field instead of domain.", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Name of the domain. Fill this field to get groups from only this domain. To return all groups in a multi-domain fill customer field instead.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 200", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user if only those groups are to be listed, the given user is a member of. If Id, it should match with id of user object", + "location": "query" + } + }, + "response": { + "$ref": "Groups" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.readonly" + ] + }, + "patch": { + "id": "directory.groups.patch", + "path": "groups/{groupKey}", + "httpMethod": "PATCH", + "description": "Update Group. This method supports patch semantics.", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "request": { + "$ref": "Group" + }, + "response": { + "$ref": "Group" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + }, + "update": { + "id": "directory.groups.update", + "path": "groups/{groupKey}", + "httpMethod": "PUT", + "description": "Update Group", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "request": { + "$ref": "Group" + }, + "response": { + "$ref": "Group" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + } + }, + "resources": { + "aliases": { + "methods": { + "delete": { + "id": "directory.groups.aliases.delete", + "path": "groups/{groupKey}/aliases/{alias}", + "httpMethod": "DELETE", + "description": "Remove a alias for the group", + "parameters": { + "alias": { + "type": "string", + "description": "The alias to be removed", + "required": true, + "location": "path" + }, + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey", + "alias" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + }, + "insert": { + "id": "directory.groups.aliases.insert", + "path": "groups/{groupKey}/aliases", + "httpMethod": "POST", + "description": "Add a alias for the group", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "request": { + "$ref": "Alias" + }, + "response": { + "$ref": "Alias" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group" + ] + }, + "list": { + "id": "directory.groups.aliases.list", + "path": "groups/{groupKey}/aliases", + "httpMethod": "GET", + "description": "List all aliases for a group", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "response": { + "$ref": "Aliases" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.readonly" + ], + "supportsSubscription": true + } + } + } + } + }, + "members": { + "methods": { + "delete": { + "id": "directory.members.delete", + "path": "groups/{groupKey}/members/{memberKey}", + "httpMethod": "DELETE", + "description": "Remove membership.", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + }, + "memberKey": { + "type": "string", + "description": "Email or immutable Id of the member", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey", + "memberKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member" + ] + }, + "get": { + "id": "directory.members.get", + "path": "groups/{groupKey}/members/{memberKey}", + "httpMethod": "GET", + "description": "Retrieve Group Member", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + }, + "memberKey": { + "type": "string", + "description": "Email or immutable Id of the member", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey", + "memberKey" + ], + "response": { + "$ref": "Member" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member", + "https://www.googleapis.com/auth/admin.directory.group.member.readonly", + "https://www.googleapis.com/auth/admin.directory.group.readonly" + ] + }, + "insert": { + "id": "directory.members.insert", + "path": "groups/{groupKey}/members", + "httpMethod": "POST", + "description": "Add user to the specified group.", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey" + ], + "request": { + "$ref": "Member" + }, + "response": { + "$ref": "Member" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member" + ] + }, + "list": { + "id": "directory.members.list", + "path": "groups/{groupKey}/members", + "httpMethod": "GET", + "description": "Retrieve all members in a group (paginated)", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 200", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "roles": { + "type": "string", + "description": "Comma separated role values to filter list results on.", + "location": "query" + } + }, + "parameterOrder": [ + "groupKey" + ], + "response": { + "$ref": "Members" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member", + "https://www.googleapis.com/auth/admin.directory.group.member.readonly", + "https://www.googleapis.com/auth/admin.directory.group.readonly" + ] + }, + "patch": { + "id": "directory.members.patch", + "path": "groups/{groupKey}/members/{memberKey}", + "httpMethod": "PATCH", + "description": "Update membership of a user in the specified group. This method supports patch semantics.", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + "required": true, + "location": "path" + }, + "memberKey": { + "type": "string", + "description": "Email or immutable Id of the user. If Id, it should match with id of member object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey", + "memberKey" + ], + "request": { + "$ref": "Member" + }, + "response": { + "$ref": "Member" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member" + ] + }, + "update": { + "id": "directory.members.update", + "path": "groups/{groupKey}/members/{memberKey}", + "httpMethod": "PUT", + "description": "Update membership of a user in the specified group.", + "parameters": { + "groupKey": { + "type": "string", + "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + "required": true, + "location": "path" + }, + "memberKey": { + "type": "string", + "description": "Email or immutable Id of the user. If Id, it should match with id of member object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupKey", + "memberKey" + ], + "request": { + "$ref": "Member" + }, + "response": { + "$ref": "Member" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.group", + "https://www.googleapis.com/auth/admin.directory.group.member" + ] + } + } + }, + "mobiledevices": { + "methods": { + "action": { + "id": "directory.mobiledevices.action", + "path": "customer/{customerId}/devices/mobile/{resourceId}/action", + "httpMethod": "POST", + "description": "Take action on Mobile Device", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "resourceId": { + "type": "string", + "description": "Immutable id of Mobile Device", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "resourceId" + ], + "request": { + "$ref": "MobileDeviceAction" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.mobile", + "https://www.googleapis.com/auth/admin.directory.device.mobile.action" + ] + }, + "delete": { + "id": "directory.mobiledevices.delete", + "path": "customer/{customerId}/devices/mobile/{resourceId}", + "httpMethod": "DELETE", + "description": "Delete Mobile Device", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "resourceId": { + "type": "string", + "description": "Immutable id of Mobile Device", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "resourceId" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.mobile" + ] + }, + "get": { + "id": "directory.mobiledevices.get", + "path": "customer/{customerId}/devices/mobile/{resourceId}", + "httpMethod": "GET", + "description": "Retrieve Mobile Device", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, model, status, type, and status)", + "Includes all metadata fields" + ], + "location": "query" + }, + "resourceId": { + "type": "string", + "description": "Immutable id of Mobile Device", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "resourceId" + ], + "response": { + "$ref": "MobileDevice" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.mobile", + "https://www.googleapis.com/auth/admin.directory.device.mobile.action", + "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly" + ] + }, + "list": { + "id": "directory.mobiledevices.list", + "path": "customer/{customerId}/devices/mobile", + "httpMethod": "GET", + "description": "Retrieve all Mobile Devices of a customer (paginated)", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 100", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Column to use for sorting results", + "enum": [ + "deviceId", + "email", + "lastSync", + "model", + "name", + "os", + "status", + "type" + ], + "enumDescriptions": [ + "Mobile Device serial number.", + "Owner user email.", + "Last policy settings sync date time of the device.", + "Mobile Device model.", + "Owner user name.", + "Mobile operating system.", + "Status of the device.", + "Type of the device." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Includes only the basic metadata fields (e.g., deviceId, model, status, type, and status)", + "Includes all metadata fields" + ], + "location": "query" + }, + "query": { + "type": "string", + "description": "Search string in the format given at http://support.google.com/a/bin/answer.py?hl=en&answer=1408863#search", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Whether to return results in ascending or descending order. Only of use when orderBy is also used", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId" + ], + "response": { + "$ref": "MobileDevices" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.device.mobile", + "https://www.googleapis.com/auth/admin.directory.device.mobile.action", + "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly" + ] + } + } + }, + "notifications": { + "methods": { + "delete": { + "id": "directory.notifications.delete", + "path": "customer/{customer}/notifications/{notificationId}", + "httpMethod": "DELETE", + "description": "Deletes a notification", + "parameters": { + "customer": { + "type": "string", + "description": "The unique ID for the customer's Google account. The customerId is also returned as part of the Users resource.", + "required": true, + "location": "path" + }, + "notificationId": { + "type": "string", + "description": "The unique ID of the notification.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customer", + "notificationId" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.notifications" + ] + }, + "get": { + "id": "directory.notifications.get", + "path": "customer/{customer}/notifications/{notificationId}", + "httpMethod": "GET", + "description": "Retrieves a notification.", + "parameters": { + "customer": { + "type": "string", + "description": "The unique ID for the customer's Google account. The customerId is also returned as part of the Users resource.", + "required": true, + "location": "path" + }, + "notificationId": { + "type": "string", + "description": "The unique ID of the notification.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customer", + "notificationId" + ], + "response": { + "$ref": "Notification" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.notifications" + ] + }, + "list": { + "id": "directory.notifications.list", + "path": "customer/{customer}/notifications", + "httpMethod": "GET", + "description": "Retrieves a list of notifications.", + "parameters": { + "customer": { + "type": "string", + "description": "The unique ID for the customer's Google account.", + "required": true, + "location": "path" + }, + "language": { + "type": "string", + "description": "The ISO 639-1 code of the language notifications are returned in. The default is English (en).", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of notifications to return per page. The default is 100.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token to specify the page of results to retrieve.", + "location": "query" + } + }, + "parameterOrder": [ + "customer" + ], + "response": { + "$ref": "Notifications" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.notifications" + ] + }, + "patch": { + "id": "directory.notifications.patch", + "path": "customer/{customer}/notifications/{notificationId}", + "httpMethod": "PATCH", + "description": "Updates a notification. This method supports patch semantics.", + "parameters": { + "customer": { + "type": "string", + "description": "The unique ID for the customer's Google account.", + "required": true, + "location": "path" + }, + "notificationId": { + "type": "string", + "description": "The unique ID of the notification.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customer", + "notificationId" + ], + "request": { + "$ref": "Notification" + }, + "response": { + "$ref": "Notification" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.notifications" + ] + }, + "update": { + "id": "directory.notifications.update", + "path": "customer/{customer}/notifications/{notificationId}", + "httpMethod": "PUT", + "description": "Updates a notification.", + "parameters": { + "customer": { + "type": "string", + "description": "The unique ID for the customer's Google account.", + "required": true, + "location": "path" + }, + "notificationId": { + "type": "string", + "description": "The unique ID of the notification.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customer", + "notificationId" + ], + "request": { + "$ref": "Notification" + }, + "response": { + "$ref": "Notification" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.notifications" + ] + } + } + }, + "orgunits": { + "methods": { + "delete": { + "id": "directory.orgunits.delete", + "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + "httpMethod": "DELETE", + "description": "Remove Organization Unit", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "orgUnitPath": { + "type": "string", + "description": "Full path of the organization unit", + "required": true, + "repeated": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "orgUnitPath" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit" + ] + }, + "get": { + "id": "directory.orgunits.get", + "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + "httpMethod": "GET", + "description": "Retrieve Organization Unit", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "orgUnitPath": { + "type": "string", + "description": "Full path of the organization unit", + "required": true, + "repeated": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "orgUnitPath" + ], + "response": { + "$ref": "OrgUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit", + "https://www.googleapis.com/auth/admin.directory.orgunit.readonly" + ] + }, + "insert": { + "id": "directory.orgunits.insert", + "path": "customer/{customerId}/orgunits", + "httpMethod": "POST", + "description": "Add Organization Unit", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "OrgUnit" + }, + "response": { + "$ref": "OrgUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit" + ] + }, + "list": { + "id": "directory.orgunits.list", + "path": "customer/{customerId}/orgunits", + "httpMethod": "GET", + "description": "Retrieve all Organization Units", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "orgUnitPath": { + "type": "string", + "description": "the URL-encoded organization unit", + "default": "", + "location": "query" + }, + "type": { + "type": "string", + "description": "Whether to return all sub-organizations or just immediate children", + "enum": [ + "all", + "children" + ], + "enumDescriptions": [ + "All sub-organization units.", + "Immediate children only (default)." + ], + "location": "query" + } + }, + "parameterOrder": [ + "customerId" + ], + "response": { + "$ref": "OrgUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit", + "https://www.googleapis.com/auth/admin.directory.orgunit.readonly" + ] + }, + "patch": { + "id": "directory.orgunits.patch", + "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + "httpMethod": "PATCH", + "description": "Update Organization Unit. This method supports patch semantics.", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "orgUnitPath": { + "type": "string", + "description": "Full path of the organization unit", + "required": true, + "repeated": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "orgUnitPath" + ], + "request": { + "$ref": "OrgUnit" + }, + "response": { + "$ref": "OrgUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit" + ] + }, + "update": { + "id": "directory.orgunits.update", + "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + "httpMethod": "PUT", + "description": "Update Organization Unit", + "parameters": { + "customerId": { + "type": "string", + "description": "Immutable id of the Google Apps account", + "required": true, + "location": "path" + }, + "orgUnitPath": { + "type": "string", + "description": "Full path of the organization unit", + "required": true, + "repeated": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "orgUnitPath" + ], + "request": { + "$ref": "OrgUnit" + }, + "response": { + "$ref": "OrgUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.orgunit" + ] + } + } + }, + "tokens": { + "methods": { + "delete": { + "id": "directory.tokens.delete", + "path": "users/{userKey}/tokens/{clientId}", + "httpMethod": "DELETE", + "description": "Delete all access tokens issued by a user for an application.", + "parameters": { + "clientId": { + "type": "string", + "description": "The Client ID of the application the token is issued to.", + "required": true, + "location": "path" + }, + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "clientId" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "get": { + "id": "directory.tokens.get", + "path": "users/{userKey}/tokens/{clientId}", + "httpMethod": "GET", + "description": "Get information about an access token issued by a user.", + "parameters": { + "clientId": { + "type": "string", + "description": "The Client ID of the application the token is issued to.", + "required": true, + "location": "path" + }, + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "clientId" + ], + "response": { + "$ref": "Token" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "list": { + "id": "directory.tokens.list", + "path": "users/{userKey}/tokens", + "httpMethod": "GET", + "description": "Returns the set of current, valid verification codes for the specified user.", + "parameters": { + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "Tokens" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + } + } + }, + "users": { + "methods": { + "delete": { + "id": "directory.users.delete", + "path": "users/{userKey}", + "httpMethod": "DELETE", + "description": "Delete user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "get": { + "id": "directory.users.get", + "path": "users/{userKey}", + "httpMethod": "GET", + "description": "retrieve user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ] + }, + "insert": { + "id": "directory.users.insert", + "path": "users", + "httpMethod": "POST", + "description": "create user.", + "request": { + "$ref": "User" + }, + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "list": { + "id": "directory.users.list", + "path": "users", + "httpMethod": "GET", + "description": "Retrieve either deleted users or all users in a domain (paginated)", + "parameters": { + "customer": { + "type": "string", + "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all users for a customer, fill this field instead of domain.", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Name of the domain. Fill this field to get users from only this domain. To return all users in a multi-domain fill customer field instead.", + "location": "query" + }, + "event": { + "type": "string", + "description": "Event on which subscription is intended (if subscribing)", + "enum": [ + "add", + "delete", + "makeAdmin", + "undelete", + "update" + ], + "enumDescriptions": [ + "User Created Event", + "User Deleted Event", + "User Admin Status Change Event", + "User Undeleted Event", + "User Updated Event" + ], + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 100. Max allowed is 500", + "format": "int32", + "minimum": "1", + "maximum": "500", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Column to use for sorting results", + "enum": [ + "email", + "familyName", + "givenName" + ], + "enumDescriptions": [ + "Primary email of the user.", + "User's family name.", + "User's given name." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "query": { + "type": "string", + "description": "Query string search. Should be of the form \"\" where field can be any of supported fields, operators can be one of '=' for exact match or ':' for prefix match. For prefix match, the value should always be followed by a *.", + "location": "query" + }, + "showDeleted": { + "type": "string", + "description": "If set to true retrieves the list of deleted users. Default is false", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Whether to return results in ascending or descending order.", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "response": { + "$ref": "Users" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ], + "supportsSubscription": true + }, + "makeAdmin": { + "id": "directory.users.makeAdmin", + "path": "users/{userKey}/makeAdmin", + "httpMethod": "POST", + "description": "change admin status of a user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user as admin", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "UserMakeAdmin" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "patch": { + "id": "directory.users.patch", + "path": "users/{userKey}", + "httpMethod": "PATCH", + "description": "update user. This method supports patch semantics.", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user. If Id, it should match with id of user object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "User" + }, + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "undelete": { + "id": "directory.users.undelete", + "path": "users/{userKey}/undelete", + "httpMethod": "POST", + "description": "Undelete a deleted user", + "parameters": { + "userKey": { + "type": "string", + "description": "The immutable id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "UserUndelete" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "update": { + "id": "directory.users.update", + "path": "users/{userKey}", + "httpMethod": "PUT", + "description": "update user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user. If Id, it should match with id of user object", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "User" + }, + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "watch": { + "id": "directory.users.watch", + "path": "users/watch", + "httpMethod": "POST", + "description": "Watch for changes in users list", + "parameters": { + "customer": { + "type": "string", + "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all users for a customer, fill this field instead of domain.", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Name of the domain. Fill this field to get users from only this domain. To return all users in a multi-domain fill customer field instead.", + "location": "query" + }, + "event": { + "type": "string", + "description": "Event on which subscription is intended (if subscribing)", + "enum": [ + "add", + "delete", + "makeAdmin", + "undelete", + "update" + ], + "enumDescriptions": [ + "User Created Event", + "User Deleted Event", + "User Admin Status Change Event", + "User Undeleted Event", + "User Updated Event" + ], + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Default is 100. Max allowed is 500", + "format": "int32", + "minimum": "1", + "maximum": "500", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Column to use for sorting results", + "enum": [ + "email", + "familyName", + "givenName" + ], + "enumDescriptions": [ + "Primary email of the user.", + "User's family name.", + "User's given name." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + }, + "query": { + "type": "string", + "description": "Query string search. Should be of the form \"\" where field can be any of supported fields, operators can be one of '=' for exact match or ':' for prefix match. For prefix match, the value should always be followed by a *.", + "location": "query" + }, + "showDeleted": { + "type": "string", + "description": "If set to true retrieves the list of deleted users. Default is false", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Whether to return results in ascending or descending order.", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ], + "supportsSubscription": true + } + }, + "resources": { + "aliases": { + "methods": { + "delete": { + "id": "directory.users.aliases.delete", + "path": "users/{userKey}/aliases/{alias}", + "httpMethod": "DELETE", + "description": "Remove a alias for the user", + "parameters": { + "alias": { + "type": "string", + "description": "The alias to be removed", + "required": true, + "location": "path" + }, + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "alias" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.alias" + ] + }, + "insert": { + "id": "directory.users.aliases.insert", + "path": "users/{userKey}/aliases", + "httpMethod": "POST", + "description": "Add a alias for the user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "Alias" + }, + "response": { + "$ref": "Alias" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.alias" + ] + }, + "list": { + "id": "directory.users.aliases.list", + "path": "users/{userKey}/aliases", + "httpMethod": "GET", + "description": "List all aliases for a user", + "parameters": { + "event": { + "type": "string", + "description": "Event on which subscription is intended (if subscribing)", + "enum": [ + "add", + "delete" + ], + "enumDescriptions": [ + "Alias Created Event", + "Alias Deleted Event" + ], + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "Aliases" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.alias", + "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ], + "supportsSubscription": true + }, + "watch": { + "id": "directory.users.aliases.watch", + "path": "users/{userKey}/aliases/watch", + "httpMethod": "POST", + "description": "Watch for changes in user aliases list", + "parameters": { + "event": { + "type": "string", + "description": "Event on which subscription is intended (if subscribing)", + "enum": [ + "add", + "delete" + ], + "enumDescriptions": [ + "Alias Created Event", + "Alias Deleted Event" + ], + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.alias", + "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ], + "supportsSubscription": true + } + } + }, + "photos": { + "methods": { + "delete": { + "id": "directory.users.photos.delete", + "path": "users/{userKey}/photos/thumbnail", + "httpMethod": "DELETE", + "description": "Remove photos for the user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "get": { + "id": "directory.users.photos.get", + "path": "users/{userKey}/photos/thumbnail", + "httpMethod": "GET", + "description": "Retrieve photo of a user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "UserPhoto" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user", + "https://www.googleapis.com/auth/admin.directory.user.readonly" + ] + }, + "patch": { + "id": "directory.users.photos.patch", + "path": "users/{userKey}/photos/thumbnail", + "httpMethod": "PATCH", + "description": "Add a photo for the user. This method supports patch semantics.", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "UserPhoto" + }, + "response": { + "$ref": "UserPhoto" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + }, + "update": { + "id": "directory.users.photos.update", + "path": "users/{userKey}/photos/thumbnail", + "httpMethod": "PUT", + "description": "Add a photo for the user", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "UserPhoto" + }, + "response": { + "$ref": "UserPhoto" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user" + ] + } + } + } + } + }, + "verificationCodes": { + "methods": { + "generate": { + "id": "directory.verificationCodes.generate", + "path": "users/{userKey}/verificationCodes/generate", + "httpMethod": "POST", + "description": "Generate new backup verification codes for the user.", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "invalidate": { + "id": "directory.verificationCodes.invalidate", + "path": "users/{userKey}/verificationCodes/invalidate", + "httpMethod": "POST", + "description": "Invalidate the current backup verification codes for the user.", + "parameters": { + "userKey": { + "type": "string", + "description": "Email or immutable Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + }, + "list": { + "id": "directory.verificationCodes.list", + "path": "users/{userKey}/verificationCodes", + "httpMethod": "GET", + "description": "Returns the current set of valid backup verification codes for the specified user.", + "parameters": { + "userKey": { + "type": "string", + "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "response": { + "$ref": "VerificationCodes" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.directory.user.security" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-gen.go b/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-gen.go new file mode 100644 index 0000000000000..1318c7f6ed51c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/directory_v1/admin-gen.go @@ -0,0 +1,6375 @@ +// Package admin provides access to the Admin Directory API. +// +// See https://developers.google.com/admin-sdk/directory/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/admin/directory_v1" +// ... +// adminService, err := admin.New(oauthHttpClient) +package admin + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "admin:directory_v1" +const apiName = "admin" +const apiVersion = "directory_v1" +const basePath = "https://www.googleapis.com/admin/directory/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Chrome OS devices' metadata + AdminDirectoryDeviceChromeosScope = "https://www.googleapis.com/auth/admin.directory.device.chromeos" + + // View your Chrome OS devices' metadata + AdminDirectoryDeviceChromeosReadonlyScope = "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly" + + // View and manage your mobile devices' metadata + AdminDirectoryDeviceMobileScope = "https://www.googleapis.com/auth/admin.directory.device.mobile" + + // Manage your mobile devices by performing administrative tasks + AdminDirectoryDeviceMobileActionScope = "https://www.googleapis.com/auth/admin.directory.device.mobile.action" + + // View your mobile devices' metadata + AdminDirectoryDeviceMobileReadonlyScope = "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly" + + // View and manage the provisioning of groups on your domain + AdminDirectoryGroupScope = "https://www.googleapis.com/auth/admin.directory.group" + + // View and manage group subscriptions on your domain + AdminDirectoryGroupMemberScope = "https://www.googleapis.com/auth/admin.directory.group.member" + + // View group subscriptions on your domain + AdminDirectoryGroupMemberReadonlyScope = "https://www.googleapis.com/auth/admin.directory.group.member.readonly" + + // View groups on your domain + AdminDirectoryGroupReadonlyScope = "https://www.googleapis.com/auth/admin.directory.group.readonly" + + // View and manage notifications received on your domain + AdminDirectoryNotificationsScope = "https://www.googleapis.com/auth/admin.directory.notifications" + + // View and manage organization units on your domain + AdminDirectoryOrgunitScope = "https://www.googleapis.com/auth/admin.directory.orgunit" + + // View organization units on your domain + AdminDirectoryOrgunitReadonlyScope = "https://www.googleapis.com/auth/admin.directory.orgunit.readonly" + + // View and manage the provisioning of users on your domain + AdminDirectoryUserScope = "https://www.googleapis.com/auth/admin.directory.user" + + // View and manage user aliases on your domain + AdminDirectoryUserAliasScope = "https://www.googleapis.com/auth/admin.directory.user.alias" + + // View user aliases on your domain + AdminDirectoryUserAliasReadonlyScope = "https://www.googleapis.com/auth/admin.directory.user.alias.readonly" + + // View users on your domain + AdminDirectoryUserReadonlyScope = "https://www.googleapis.com/auth/admin.directory.user.readonly" + + // Manage data access permissions for users on your domain + AdminDirectoryUserSecurityScope = "https://www.googleapis.com/auth/admin.directory.user.security" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Asps = NewAspsService(s) + s.Channels = NewChannelsService(s) + s.Chromeosdevices = NewChromeosdevicesService(s) + s.Groups = NewGroupsService(s) + s.Members = NewMembersService(s) + s.Mobiledevices = NewMobiledevicesService(s) + s.Notifications = NewNotificationsService(s) + s.Orgunits = NewOrgunitsService(s) + s.Tokens = NewTokensService(s) + s.Users = NewUsersService(s) + s.VerificationCodes = NewVerificationCodesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Asps *AspsService + + Channels *ChannelsService + + Chromeosdevices *ChromeosdevicesService + + Groups *GroupsService + + Members *MembersService + + Mobiledevices *MobiledevicesService + + Notifications *NotificationsService + + Orgunits *OrgunitsService + + Tokens *TokensService + + Users *UsersService + + VerificationCodes *VerificationCodesService +} + +func NewAspsService(s *Service) *AspsService { + rs := &AspsService{s: s} + return rs +} + +type AspsService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewChromeosdevicesService(s *Service) *ChromeosdevicesService { + rs := &ChromeosdevicesService{s: s} + return rs +} + +type ChromeosdevicesService struct { + s *Service +} + +func NewGroupsService(s *Service) *GroupsService { + rs := &GroupsService{s: s} + rs.Aliases = NewGroupsAliasesService(s) + return rs +} + +type GroupsService struct { + s *Service + + Aliases *GroupsAliasesService +} + +func NewGroupsAliasesService(s *Service) *GroupsAliasesService { + rs := &GroupsAliasesService{s: s} + return rs +} + +type GroupsAliasesService struct { + s *Service +} + +func NewMembersService(s *Service) *MembersService { + rs := &MembersService{s: s} + return rs +} + +type MembersService struct { + s *Service +} + +func NewMobiledevicesService(s *Service) *MobiledevicesService { + rs := &MobiledevicesService{s: s} + return rs +} + +type MobiledevicesService struct { + s *Service +} + +func NewNotificationsService(s *Service) *NotificationsService { + rs := &NotificationsService{s: s} + return rs +} + +type NotificationsService struct { + s *Service +} + +func NewOrgunitsService(s *Service) *OrgunitsService { + rs := &OrgunitsService{s: s} + return rs +} + +type OrgunitsService struct { + s *Service +} + +func NewTokensService(s *Service) *TokensService { + rs := &TokensService{s: s} + return rs +} + +type TokensService struct { + s *Service +} + +func NewUsersService(s *Service) *UsersService { + rs := &UsersService{s: s} + rs.Aliases = NewUsersAliasesService(s) + rs.Photos = NewUsersPhotosService(s) + return rs +} + +type UsersService struct { + s *Service + + Aliases *UsersAliasesService + + Photos *UsersPhotosService +} + +func NewUsersAliasesService(s *Service) *UsersAliasesService { + rs := &UsersAliasesService{s: s} + return rs +} + +type UsersAliasesService struct { + s *Service +} + +func NewUsersPhotosService(s *Service) *UsersPhotosService { + rs := &UsersPhotosService{s: s} + return rs +} + +type UsersPhotosService struct { + s *Service +} + +func NewVerificationCodesService(s *Service) *VerificationCodesService { + rs := &VerificationCodesService{s: s} + return rs +} + +type VerificationCodesService struct { + s *Service +} + +type Alias struct { + // Alias: A alias email + Alias string `json:"alias,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Unique id of the group (Read-only) Unique id of the user + // (Read-only) + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // PrimaryEmail: Group's primary email (Read-only) User's primary email + // (Read-only) + PrimaryEmail string `json:"primaryEmail,omitempty"` +} + +type Aliases struct { + // Aliases: List of alias objects. + Aliases []*Alias `json:"aliases,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` +} + +type Asp struct { + // CodeId: The unique ID of the ASP. + CodeId int64 `json:"codeId,omitempty"` + + // CreationTime: The time when the ASP was created. Expressed in Unix + // time format. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // Etag: ETag of the ASP. + Etag string `json:"etag,omitempty"` + + // Kind: The type of the API resource. This is always + // admin#directory#asp. + Kind string `json:"kind,omitempty"` + + // LastTimeUsed: The time when the ASP was last used. Expressed in Unix + // time format. + LastTimeUsed int64 `json:"lastTimeUsed,omitempty,string"` + + // Name: The name of the application that the user, represented by their + // userId, entered when the ASP was created. + Name string `json:"name,omitempty"` + + // UserKey: The unique ID of the user who issued the ASP. + UserKey string `json:"userKey,omitempty"` +} + +type Asps struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: A list of ASP resources. + Items []*Asp `json:"items,omitempty"` + + // Kind: The type of the API resource. This is always + // admin#directory#aspList. + Kind string `json:"kind,omitempty"` +} + +type Channel struct { + // Address: The address where notifications are delivered for this + // channel. + Address string `json:"address,omitempty"` + + // Expiration: Date and time of notification channel expiration, + // expressed as a Unix timestamp, in milliseconds. Optional. + Expiration int64 `json:"expiration,omitempty,string"` + + // Id: A UUID or similar unique string that identifies this channel. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a notification channel used to watch for + // changes to a resource. Value: the fixed string "api#channel". + Kind string `json:"kind,omitempty"` + + // Params: Additional parameters controlling delivery channel behavior. + // Optional. + Params map[string]string `json:"params,omitempty"` + + // Payload: A Boolean value to indicate whether payload is wanted. + // Optional. + Payload bool `json:"payload,omitempty"` + + // ResourceId: An opaque ID that identifies the resource being watched + // on this channel. Stable across different API versions. + ResourceId string `json:"resourceId,omitempty"` + + // ResourceUri: A version-specific identifier for the watched resource. + ResourceUri string `json:"resourceUri,omitempty"` + + // Token: An arbitrary string delivered to the target address with each + // notification delivered over this channel. Optional. + Token string `json:"token,omitempty"` + + // Type: The type of delivery mechanism used for this channel. + Type string `json:"type,omitempty"` +} + +type ChromeOsDevice struct { + // AnnotatedLocation: Address or location of the device as noted by the + // administrator + AnnotatedLocation string `json:"annotatedLocation,omitempty"` + + // AnnotatedUser: User of the device + AnnotatedUser string `json:"annotatedUser,omitempty"` + + // BootMode: Chromebook boot mode (Read-only) + BootMode string `json:"bootMode,omitempty"` + + // DeviceId: Unique identifier of Chrome OS Device (Read-only) + DeviceId string `json:"deviceId,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // FirmwareVersion: Chromebook firmware version (Read-only) + FirmwareVersion string `json:"firmwareVersion,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // LastEnrollmentTime: Date and time the device was last enrolled + // (Read-only) + LastEnrollmentTime string `json:"lastEnrollmentTime,omitempty"` + + // LastSync: Date and time the device was last synchronized with the + // policy settings in the Google Apps administrator control panel + // (Read-only) + LastSync string `json:"lastSync,omitempty"` + + // MacAddress: Chromebook Mac Address (Read-only) + MacAddress string `json:"macAddress,omitempty"` + + // Meid: Mobile Equipment identifier for the 3G mobile card in the + // Chromebook (Read-only) + Meid string `json:"meid,omitempty"` + + // Model: Chromebook Model (Read-only) + Model string `json:"model,omitempty"` + + // Notes: Notes added by the administrator + Notes string `json:"notes,omitempty"` + + // OrderNumber: Chromebook order number (Read-only) + OrderNumber string `json:"orderNumber,omitempty"` + + // OrgUnitPath: OrgUnit of the device + OrgUnitPath string `json:"orgUnitPath,omitempty"` + + // OsVersion: Chromebook Os Version (Read-only) + OsVersion string `json:"osVersion,omitempty"` + + // PlatformVersion: Chromebook platform version (Read-only) + PlatformVersion string `json:"platformVersion,omitempty"` + + // SerialNumber: Chromebook serial number (Read-only) + SerialNumber string `json:"serialNumber,omitempty"` + + // Status: status of the device (Read-only) + Status string `json:"status,omitempty"` + + // SupportEndDate: Final date the device will be supported (Read-only) + SupportEndDate string `json:"supportEndDate,omitempty"` + + // WillAutoRenew: Will Chromebook auto reniew after support end date + // (Read-only) + WillAutoRenew bool `json:"willAutoRenew,omitempty"` +} + +type ChromeOsDevices struct { + // Chromeosdevices: List of Chrome OS Device objects. + Chromeosdevices []*ChromeOsDevice `json:"chromeosdevices,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Group struct { + // AdminCreated: Is the group created by admin (Read-only) * + AdminCreated bool `json:"adminCreated,omitempty"` + + // Aliases: List of aliases (Read-only) + Aliases []string `json:"aliases,omitempty"` + + // Description: Description of the group + Description string `json:"description,omitempty"` + + // DirectMembersCount: Group direct members count + DirectMembersCount int64 `json:"directMembersCount,omitempty,string"` + + // Email: Email of Group + Email string `json:"email,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Unique identifier of Group (Read-only) + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Name: Group name + Name string `json:"name,omitempty"` + + // NonEditableAliases: List of non editable aliases (Read-only) + NonEditableAliases []string `json:"nonEditableAliases,omitempty"` +} + +type Groups struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Groups: List of group objects. + Groups []*Group `json:"groups,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Member struct { + // Email: Email of member (Read-only) + Email string `json:"email,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Unique identifier of customer member (Read-only) Unique + // identifier of group (Read-only) Unique identifier of member + // (Read-only) + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Role: Role of member + Role string `json:"role,omitempty"` + + // Type: Type of member (Immutable) + Type string `json:"type,omitempty"` +} + +type Members struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Members: List of member objects. + Members []*Member `json:"members,omitempty"` + + // NextPageToken: Token used to access next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type MobileDevice struct { + // Applications: List of applications installed on Mobile Device + Applications []*MobileDeviceApplications `json:"applications,omitempty"` + + // DeviceId: Mobile Device serial number (Read-only) + DeviceId string `json:"deviceId,omitempty"` + + // Email: List of owner user's email addresses (Read-only) + Email []string `json:"email,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // FirstSync: Date and time the device was first synchronized with the + // policy settings in the Google Apps administrator control panel + // (Read-only) + FirstSync string `json:"firstSync,omitempty"` + + // HardwareId: Mobile Device Hardware Id (Read-only) + HardwareId string `json:"hardwareId,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // LastSync: Date and time the device was last synchronized with the + // policy settings in the Google Apps administrator control panel + // (Read-only) + LastSync string `json:"lastSync,omitempty"` + + // Model: Name of the model of the device + Model string `json:"model,omitempty"` + + // Name: List of owner user's names (Read-only) + Name []string `json:"name,omitempty"` + + // Os: Name of the mobile operating system + Os string `json:"os,omitempty"` + + // ResourceId: Unique identifier of Mobile Device (Read-only) + ResourceId string `json:"resourceId,omitempty"` + + // Status: Status of the device (Read-only) + Status string `json:"status,omitempty"` + + // Type: The type of device (Read-only) + Type string `json:"type,omitempty"` + + // UserAgent: Mobile Device user agent + UserAgent string `json:"userAgent,omitempty"` +} + +type MobileDeviceApplications struct { + // DisplayName: Display name of application + DisplayName string `json:"displayName,omitempty"` + + // PackageName: Package name of application + PackageName string `json:"packageName,omitempty"` + + // Permission: List of Permissions for application + Permission []string `json:"permission,omitempty"` + + // VersionCode: Version code of application + VersionCode int64 `json:"versionCode,omitempty"` + + // VersionName: Version name of application + VersionName string `json:"versionName,omitempty"` +} + +type MobileDeviceAction struct { + // Action: Action to be taken on the Mobile Device + Action string `json:"action,omitempty"` +} + +type MobileDevices struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Mobiledevices: List of Mobile Device objects. + Mobiledevices []*MobileDevice `json:"mobiledevices,omitempty"` + + // NextPageToken: Token used to access next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Notification struct { + // Body: Body of the notification (Read-only) + Body string `json:"body,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // FromAddress: Address from which the notification is received + // (Read-only) + FromAddress string `json:"fromAddress,omitempty"` + + // IsUnread: Boolean indicating whether the notification is unread or + // not. + IsUnread bool `json:"isUnread,omitempty"` + + // Kind: The type of the resource. + Kind string `json:"kind,omitempty"` + + NotificationId string `json:"notificationId,omitempty"` + + // SendTime: Time at which notification was sent (Read-only) + SendTime string `json:"sendTime,omitempty"` + + // Subject: Subject of the notification (Read-only) + Subject string `json:"subject,omitempty"` +} + +type Notifications struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: List of notifications in this page. + Items []*Notification `json:"items,omitempty"` + + // Kind: The type of the resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token for fetching the next page of notifications. + NextPageToken string `json:"nextPageToken,omitempty"` + + // UnreadNotificationsCount: Number of unread notification for the + // domain. + UnreadNotificationsCount int64 `json:"unreadNotificationsCount,omitempty"` +} + +type OrgUnit struct { + // BlockInheritance: Should block inheritance + BlockInheritance bool `json:"blockInheritance,omitempty"` + + // Description: Description of OrgUnit + Description string `json:"description,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Name: Name of OrgUnit + Name string `json:"name,omitempty"` + + // OrgUnitPath: Path of OrgUnit + OrgUnitPath string `json:"orgUnitPath,omitempty"` + + // ParentOrgUnitPath: Path of parent OrgUnit + ParentOrgUnitPath string `json:"parentOrgUnitPath,omitempty"` +} + +type OrgUnits struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OrganizationUnits: List of user objects. + OrganizationUnits []*OrgUnit `json:"organizationUnits,omitempty"` +} + +type Token struct { + // Anonymous: Whether the application is registered with Google. The + // value is true if the application has an anonymous Client ID. + Anonymous bool `json:"anonymous,omitempty"` + + // ClientId: The Client ID of the application the token is issued to. + ClientId string `json:"clientId,omitempty"` + + // DisplayText: The displayable name of the application the token is + // issued to. + DisplayText string `json:"displayText,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: The type of the API resource. This is always + // admin#directory#token. + Kind string `json:"kind,omitempty"` + + // NativeApp: Whether the token is issued to an installed application. + // The value is true if the application is installed to a desktop or + // mobile device. + NativeApp bool `json:"nativeApp,omitempty"` + + // Scopes: A list of authorization scopes the application is granted. + Scopes []string `json:"scopes,omitempty"` + + // UserKey: The unique ID of the user that issued the token. + UserKey string `json:"userKey,omitempty"` +} + +type Tokens struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: A list of Token resources. + Items []*Token `json:"items,omitempty"` + + // Kind: The type of the API resource. This is always + // admin#directory#tokenList. + Kind string `json:"kind,omitempty"` +} + +type User struct { + // Addresses: Addresses of User + Addresses []*UserAddress `json:"addresses,omitempty"` + + // AgreedToTerms: Indicates if user has agreed to terms (Read-only) + AgreedToTerms bool `json:"agreedToTerms,omitempty"` + + // Aliases: List of aliases (Read-only) + Aliases []string `json:"aliases,omitempty"` + + // ChangePasswordAtNextLogin: Boolean indicating if the user should + // change password in next login + ChangePasswordAtNextLogin bool `json:"changePasswordAtNextLogin,omitempty"` + + // CreationTime: User's Google account creation time. (Read-only) + CreationTime string `json:"creationTime,omitempty"` + + // CustomerId: CustomerId of User (Read-only) + CustomerId string `json:"customerId,omitempty"` + + DeletionTime string `json:"deletionTime,omitempty"` + + // Emails: Emails of User + Emails []*UserEmail `json:"emails,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // ExternalIds: The external Ids of User * + ExternalIds []*UserExternalId `json:"externalIds,omitempty"` + + // HashFunction: Hash function name for password. Supported are MD5, + // SHA-1 and crypt + HashFunction string `json:"hashFunction,omitempty"` + + // Id: Unique identifier of User (Read-only) + Id string `json:"id,omitempty"` + + // Ims: User's Instant Messenger + Ims []*UserIm `json:"ims,omitempty"` + + // IncludeInGlobalAddressList: Boolean indicating if user is included in + // Global Address List + IncludeInGlobalAddressList bool `json:"includeInGlobalAddressList,omitempty"` + + // IpWhitelisted: Boolean indicating if ip is whitelisted + IpWhitelisted bool `json:"ipWhitelisted,omitempty"` + + // IsAdmin: Boolean indicating if the user is admin (Read-only) + IsAdmin bool `json:"isAdmin,omitempty"` + + // IsDelegatedAdmin: Boolean indicating if the user is delegated admin + // (Read-only) + IsDelegatedAdmin bool `json:"isDelegatedAdmin,omitempty"` + + // IsMailboxSetup: Is mailbox setup (Read-only) + IsMailboxSetup bool `json:"isMailboxSetup,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // LastLoginTime: User's last login time. (Read-only) + LastLoginTime string `json:"lastLoginTime,omitempty"` + + // Name: User's name + Name *UserName `json:"name,omitempty"` + + // NonEditableAliases: List of non editable aliases (Read-only) + NonEditableAliases []string `json:"nonEditableAliases,omitempty"` + + // OrgUnitPath: OrgUnit of User + OrgUnitPath string `json:"orgUnitPath,omitempty"` + + // Organizations: Organizations of User + Organizations []*UserOrganization `json:"organizations,omitempty"` + + // Password: User's password + Password string `json:"password,omitempty"` + + // Phones: Phone numbers of User + Phones []*UserPhone `json:"phones,omitempty"` + + // PrimaryEmail: username of User + PrimaryEmail string `json:"primaryEmail,omitempty"` + + // Relations: The Relations of User * + Relations []*UserRelation `json:"relations,omitempty"` + + // Suspended: Indicates if user is suspended + Suspended bool `json:"suspended,omitempty"` + + // SuspensionReason: Suspension reason if user is suspended (Read-only) + SuspensionReason string `json:"suspensionReason,omitempty"` + + // ThumbnailPhotoUrl: Photo Url of the user (Read-only) + ThumbnailPhotoUrl string `json:"thumbnailPhotoUrl,omitempty"` +} + +type UserAddress struct { + // Country: Country. + Country string `json:"country,omitempty"` + + // CountryCode: Country code. + CountryCode string `json:"countryCode,omitempty"` + + // CustomType: Custom type. + CustomType string `json:"customType,omitempty"` + + // ExtendedAddress: Extended Address. + ExtendedAddress string `json:"extendedAddress,omitempty"` + + // Formatted: Formatted address (read-only field) + Formatted string `json:"formatted,omitempty"` + + // Locality: Locality. + Locality string `json:"locality,omitempty"` + + // PoBox: Other parts of address. + PoBox string `json:"poBox,omitempty"` + + // PostalCode: Postal code. + PostalCode string `json:"postalCode,omitempty"` + + // Primary: If this is user's primary address. Only one entry could be + // marked as primary. + Primary bool `json:"primary,omitempty"` + + // Region: Region. + Region string `json:"region,omitempty"` + + // SourceIsStructured: User supplied address was structured. Structured + // addresses are NOT supported at this time. You might be able to write + // structured addresses, but any values will eventually be clobbered. + SourceIsStructured bool `json:"sourceIsStructured,omitempty"` + + // StreetAddress: Street. + StreetAddress string `json:"streetAddress,omitempty"` + + // Type: Each entry can have a type which indicates standard values of + // that entry. For example address could be of home, work etc. In + // addition to the standard type, an entry can have a custom type and + // can take any value. Such type should have the CUSTOM value as type + // and also have a customType value. + Type string `json:"type,omitempty"` +} + +type UserEmail struct { + // Address: Email id of the user. + Address string `json:"address,omitempty"` + + // CustomType: Custom Type. + CustomType string `json:"customType,omitempty"` + + // Primary: If this is user's primary email. Only one entry could be + // marked as primary. + Primary bool `json:"primary,omitempty"` + + // Type: Each entry can have a type which indicates standard types of + // that entry. For example email could be of home, work etc. In addition + // to the standard type, an entry can have a custom type and can take + // any value Such typess should have the CUSTOM value as type and also + // have a customType value. + Type string `json:"type,omitempty"` +} + +type UserExternalId struct { + // CustomType: Custom type. + CustomType string `json:"customType,omitempty"` + + // Type: The type of the Id. + Type string `json:"type,omitempty"` + + // Value: The value of the id. + Value string `json:"value,omitempty"` +} + +type UserIm struct { + // CustomProtocol: Custom protocol. + CustomProtocol string `json:"customProtocol,omitempty"` + + // CustomType: Custom type. + CustomType string `json:"customType,omitempty"` + + // Im: Instant messenger id. + Im string `json:"im,omitempty"` + + // Primary: If this is user's priamry im. Only one entry could be marked + // as primary. + Primary bool `json:"primary,omitempty"` + + // Protocol: Protocol used in the instant messenger. It should be one of + // the values from ImProtocolTypes map. Simalar to type, it can take a + // CUSTOM value and specify the custom name in customProtocol field. + Protocol string `json:"protocol,omitempty"` + + // Type: Each entry can have a type which indicates standard types of + // that entry. For example instant messengers could be of home, work + // etc. In addition to the standard type, an entry can have a custom + // type and can take any value. Such types should have the CUSTOM value + // as type and also have a customType value. + Type string `json:"type,omitempty"` +} + +type UserMakeAdmin struct { + // Status: Boolean indicating new admin status of the user + Status bool `json:"status,omitempty"` +} + +type UserName struct { + // FamilyName: Last Name + FamilyName string `json:"familyName,omitempty"` + + // FullName: Full Name + FullName string `json:"fullName,omitempty"` + + // GivenName: First Name + GivenName string `json:"givenName,omitempty"` +} + +type UserOrganization struct { + // CostCenter: The cost center of the users department. + CostCenter string `json:"costCenter,omitempty"` + + // CustomType: Custom type. + CustomType string `json:"customType,omitempty"` + + // Department: Department within the organization. + Department string `json:"department,omitempty"` + + // Description: Description of the organization. + Description string `json:"description,omitempty"` + + // Domain: The domain to which the organization belongs to. + Domain string `json:"domain,omitempty"` + + // Location: Location of the organization. This need not be fully + // qualified address. + Location string `json:"location,omitempty"` + + // Name: Name of the organization + Name string `json:"name,omitempty"` + + // Primary: If it user's primary organization. + Primary bool `json:"primary,omitempty"` + + // Symbol: Symobol of the organization. + Symbol string `json:"symbol,omitempty"` + + // Title: Title (designation) of the user in the organization. + Title string `json:"title,omitempty"` + + // Type: Each entry can have a type which indicates standard types of + // that entry. For example organization could be of school, work etc. In + // addition to the standard type, an entry can have a custom type and + // can give it any name. Such types should have the CUSTOM value as type + // and also have a CustomType value. + Type string `json:"type,omitempty"` +} + +type UserPhone struct { + // CustomType: Custom Type. + CustomType string `json:"customType,omitempty"` + + // Primary: If this is user's primary phone or not. + Primary bool `json:"primary,omitempty"` + + // Type: Each entry can have a type which indicates standard types of + // that entry. For example phone could be of home_fax, work, mobile etc. + // In addition to the standard type, an entry can have a custom type and + // can give it any name. Such types should have the CUSTOM value as type + // and also have a customType value. + Type string `json:"type,omitempty"` + + // Value: Phone number. + Value string `json:"value,omitempty"` +} + +type UserPhoto struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Height: Height in pixels of the photo + Height int64 `json:"height,omitempty"` + + // Id: Unique identifier of User (Read-only) + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // MimeType: Mime Type of the photo + MimeType string `json:"mimeType,omitempty"` + + // PhotoData: Base64 encoded photo data + PhotoData string `json:"photoData,omitempty"` + + // PrimaryEmail: Primary email of User (Read-only) + PrimaryEmail string `json:"primaryEmail,omitempty"` + + // Width: Width in pixels of the photo + Width int64 `json:"width,omitempty"` +} + +type UserRelation struct { + // CustomType: Custom Type. + CustomType string `json:"customType,omitempty"` + + // Type: The relation of the user. Some of the possible values are + // mother, father, sister, brother, manager, assistant, partner. + Type string `json:"type,omitempty"` + + // Value: The name of the relation. + Value string `json:"value,omitempty"` +} + +type UserUndelete struct { + // OrgUnitPath: OrgUnit of User + OrgUnitPath string `json:"orgUnitPath,omitempty"` +} + +type Users struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Trigger_event: Event that triggered this response (only used in case + // of Push Response) + Trigger_event string `json:"trigger_event,omitempty"` + + // Users: List of user objects. + Users []*User `json:"users,omitempty"` +} + +type VerificationCode struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: The type of the resource. This is always + // admin#directory#verificationCode. + Kind string `json:"kind,omitempty"` + + // UserId: The obfuscated unique ID of the user. + UserId string `json:"userId,omitempty"` + + // VerificationCode: A current verification code for the user. + // Invalidated or used verification codes are not returned as part of + // the result. + VerificationCode string `json:"verificationCode,omitempty"` +} + +type VerificationCodes struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: A list of verification code resources. + Items []*VerificationCode `json:"items,omitempty"` + + // Kind: The type of the resource. This is always + // admin#directory#verificationCodesList. + Kind string `json:"kind,omitempty"` +} + +// method id "directory.asps.delete": + +type AspsDeleteCall struct { + s *Service + userKey string + codeId int64 + opt_ map[string]interface{} +} + +// Delete: Delete an ASP issued by a user. +func (r *AspsService) Delete(userKey string, codeId int64) *AspsDeleteCall { + c := &AspsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.codeId = codeId + return c +} + +func (c *AspsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/asps/{codeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{codeId}", strconv.FormatInt(c.codeId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete an ASP issued by a user.", + // "httpMethod": "DELETE", + // "id": "directory.asps.delete", + // "parameterOrder": [ + // "userKey", + // "codeId" + // ], + // "parameters": { + // "codeId": { + // "description": "The unique ID of the ASP to be deleted.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/asps/{codeId}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.asps.get": + +type AspsGetCall struct { + s *Service + userKey string + codeId int64 + opt_ map[string]interface{} +} + +// Get: Get information about an ASP issued by a user. +func (r *AspsService) Get(userKey string, codeId int64) *AspsGetCall { + c := &AspsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.codeId = codeId + return c +} + +func (c *AspsGetCall) Do() (*Asp, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/asps/{codeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{codeId}", strconv.FormatInt(c.codeId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Asp) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about an ASP issued by a user.", + // "httpMethod": "GET", + // "id": "directory.asps.get", + // "parameterOrder": [ + // "userKey", + // "codeId" + // ], + // "parameters": { + // "codeId": { + // "description": "The unique ID of the ASP.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/asps/{codeId}", + // "response": { + // "$ref": "Asp" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.asps.list": + +type AspsListCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// List: List the ASPs issued by a user. +func (r *AspsService) List(userKey string) *AspsListCall { + c := &AspsListCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *AspsListCall) Do() (*Asps, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/asps") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Asps) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the ASPs issued by a user.", + // "httpMethod": "GET", + // "id": "directory.asps.list", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/asps", + // "response": { + // "$ref": "Asps" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "admin.channels.stop": + +type ChannelsStopCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Stop: Stop watching resources through this channel +func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { + c := &ChannelsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +func (c *ChannelsStopCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "/admin/directory_v1/channels/stop") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Stop watching resources through this channel", + // "httpMethod": "POST", + // "id": "admin.channels.stop", + // "path": "/admin/directory_v1/channels/stop", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.alias", + // "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ] + // } + +} + +// method id "directory.chromeosdevices.get": + +type ChromeosdevicesGetCall struct { + s *Service + customerId string + deviceId string + opt_ map[string]interface{} +} + +// Get: Retrieve Chrome OS Device +func (r *ChromeosdevicesService) Get(customerId string, deviceId string) *ChromeosdevicesGetCall { + c := &ChromeosdevicesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.deviceId = deviceId + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *ChromeosdevicesGetCall) Projection(projection string) *ChromeosdevicesGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *ChromeosdevicesGetCall) Do() (*ChromeOsDevice, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/chromeos/{deviceId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{deviceId}", url.QueryEscape(c.deviceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChromeOsDevice) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve Chrome OS Device", + // "httpMethod": "GET", + // "id": "directory.chromeosdevices.get", + // "parameterOrder": [ + // "customerId", + // "deviceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deviceId": { + // "description": "Immutable id of Chrome OS Device", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/chromeos/{deviceId}", + // "response": { + // "$ref": "ChromeOsDevice" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.chromeos", + // "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly" + // ] + // } + +} + +// method id "directory.chromeosdevices.list": + +type ChromeosdevicesListCall struct { + s *Service + customerId string + opt_ map[string]interface{} +} + +// List: Retrieve all Chrome OS Devices of a customer (paginated) +func (r *ChromeosdevicesService) List(customerId string) *ChromeosdevicesListCall { + c := &ChromeosdevicesListCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 100 +func (c *ChromeosdevicesListCall) MaxResults(maxResults int64) *ChromeosdevicesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Column to use for +// sorting results +func (c *ChromeosdevicesListCall) OrderBy(orderBy string) *ChromeosdevicesListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *ChromeosdevicesListCall) PageToken(pageToken string) *ChromeosdevicesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *ChromeosdevicesListCall) Projection(projection string) *ChromeosdevicesListCall { + c.opt_["projection"] = projection + return c +} + +// Query sets the optional parameter "query": Search string in the +// format given at +// http://support.google.com/chromeos/a/bin/answer.py?hl=en&answer=169833 +// 3 +func (c *ChromeosdevicesListCall) Query(query string) *ChromeosdevicesListCall { + c.opt_["query"] = query + return c +} + +// SortOrder sets the optional parameter "sortOrder": Whether to return +// results in ascending or descending order. Only of use when orderBy is +// also used +func (c *ChromeosdevicesListCall) SortOrder(sortOrder string) *ChromeosdevicesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ChromeosdevicesListCall) Do() (*ChromeOsDevices, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/chromeos") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChromeOsDevices) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve all Chrome OS Devices of a customer (paginated)", + // "httpMethod": "GET", + // "id": "directory.chromeosdevices.list", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 100", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Column to use for sorting results", + // "enum": [ + // "annotatedLocation", + // "annotatedUser", + // "lastSync", + // "notes", + // "serialNumber", + // "status", + // "supportEndDate" + // ], + // "enumDescriptions": [ + // "Chromebook location as annotated by the administrator.", + // "Chromebook user as annotated by administrator.", + // "Chromebook last sync.", + // "Chromebook notes as annotated by the administrator.", + // "Chromebook Serial Number.", + // "Chromebook status.", + // "Chromebook support end date." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Search string in the format given at http://support.google.com/chromeos/a/bin/answer.py?hl=en\u0026answer=1698333", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "description": "Whether to return results in ascending or descending order. Only of use when orderBy is also used", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/chromeos", + // "response": { + // "$ref": "ChromeOsDevices" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.chromeos", + // "https://www.googleapis.com/auth/admin.directory.device.chromeos.readonly" + // ] + // } + +} + +// method id "directory.chromeosdevices.patch": + +type ChromeosdevicesPatchCall struct { + s *Service + customerId string + deviceId string + chromeosdevice *ChromeOsDevice + opt_ map[string]interface{} +} + +// Patch: Update Chrome OS Device. This method supports patch semantics. +func (r *ChromeosdevicesService) Patch(customerId string, deviceId string, chromeosdevice *ChromeOsDevice) *ChromeosdevicesPatchCall { + c := &ChromeosdevicesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.deviceId = deviceId + c.chromeosdevice = chromeosdevice + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *ChromeosdevicesPatchCall) Projection(projection string) *ChromeosdevicesPatchCall { + c.opt_["projection"] = projection + return c +} + +func (c *ChromeosdevicesPatchCall) Do() (*ChromeOsDevice, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.chromeosdevice) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/chromeos/{deviceId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{deviceId}", url.QueryEscape(c.deviceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChromeOsDevice) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Chrome OS Device. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.chromeosdevices.patch", + // "parameterOrder": [ + // "customerId", + // "deviceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deviceId": { + // "description": "Immutable id of Chrome OS Device", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/chromeos/{deviceId}", + // "request": { + // "$ref": "ChromeOsDevice" + // }, + // "response": { + // "$ref": "ChromeOsDevice" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.chromeos" + // ] + // } + +} + +// method id "directory.chromeosdevices.update": + +type ChromeosdevicesUpdateCall struct { + s *Service + customerId string + deviceId string + chromeosdevice *ChromeOsDevice + opt_ map[string]interface{} +} + +// Update: Update Chrome OS Device +func (r *ChromeosdevicesService) Update(customerId string, deviceId string, chromeosdevice *ChromeOsDevice) *ChromeosdevicesUpdateCall { + c := &ChromeosdevicesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.deviceId = deviceId + c.chromeosdevice = chromeosdevice + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *ChromeosdevicesUpdateCall) Projection(projection string) *ChromeosdevicesUpdateCall { + c.opt_["projection"] = projection + return c +} + +func (c *ChromeosdevicesUpdateCall) Do() (*ChromeOsDevice, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.chromeosdevice) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/chromeos/{deviceId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{deviceId}", url.QueryEscape(c.deviceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChromeOsDevice) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Chrome OS Device", + // "httpMethod": "PUT", + // "id": "directory.chromeosdevices.update", + // "parameterOrder": [ + // "customerId", + // "deviceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deviceId": { + // "description": "Immutable id of Chrome OS Device", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, serialNumber, status, and user)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/chromeos/{deviceId}", + // "request": { + // "$ref": "ChromeOsDevice" + // }, + // "response": { + // "$ref": "ChromeOsDevice" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.chromeos" + // ] + // } + +} + +// method id "directory.groups.delete": + +type GroupsDeleteCall struct { + s *Service + groupKey string + opt_ map[string]interface{} +} + +// Delete: Delete Group +func (r *GroupsService) Delete(groupKey string) *GroupsDeleteCall { + c := &GroupsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + return c +} + +func (c *GroupsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete Group", + // "httpMethod": "DELETE", + // "id": "directory.groups.delete", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.get": + +type GroupsGetCall struct { + s *Service + groupKey string + opt_ map[string]interface{} +} + +// Get: Retrieve Group +func (r *GroupsService) Get(groupKey string) *GroupsGetCall { + c := &GroupsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + return c +} + +func (c *GroupsGetCall) Do() (*Group, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Group) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve Group", + // "httpMethod": "GET", + // "id": "directory.groups.get", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}", + // "response": { + // "$ref": "Group" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.readonly" + // ] + // } + +} + +// method id "directory.groups.insert": + +type GroupsInsertCall struct { + s *Service + group *Group + opt_ map[string]interface{} +} + +// Insert: Create Group +func (r *GroupsService) Insert(group *Group) *GroupsInsertCall { + c := &GroupsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.group = group + return c +} + +func (c *GroupsInsertCall) Do() (*Group, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.group) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Group) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create Group", + // "httpMethod": "POST", + // "id": "directory.groups.insert", + // "path": "groups", + // "request": { + // "$ref": "Group" + // }, + // "response": { + // "$ref": "Group" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.list": + +type GroupsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieve all groups in a domain (paginated) +func (r *GroupsService) List() *GroupsListCall { + c := &GroupsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Customer sets the optional parameter "customer": Immutable id of the +// Google Apps account. In case of multi-domain, to fetch all groups for +// a customer, fill this field instead of domain. +func (c *GroupsListCall) Customer(customer string) *GroupsListCall { + c.opt_["customer"] = customer + return c +} + +// Domain sets the optional parameter "domain": Name of the domain. Fill +// this field to get groups from only this domain. To return all groups +// in a multi-domain fill customer field instead. +func (c *GroupsListCall) Domain(domain string) *GroupsListCall { + c.opt_["domain"] = domain + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 200 +func (c *GroupsListCall) MaxResults(maxResults int64) *GroupsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *GroupsListCall) PageToken(pageToken string) *GroupsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// UserKey sets the optional parameter "userKey": Email or immutable Id +// of the user if only those groups are to be listed, the given user is +// a member of. If Id, it should match with id of user object +func (c *GroupsListCall) UserKey(userKey string) *GroupsListCall { + c.opt_["userKey"] = userKey + return c +} + +func (c *GroupsListCall) Do() (*Groups, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customer"]; ok { + params.Set("customer", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userKey"]; ok { + params.Set("userKey", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "groups") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Groups) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve all groups in a domain (paginated)", + // "httpMethod": "GET", + // "id": "directory.groups.list", + // "parameters": { + // "customer": { + // "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all groups for a customer, fill this field instead of domain.", + // "location": "query", + // "type": "string" + // }, + // "domain": { + // "description": "Name of the domain. Fill this field to get groups from only this domain. To return all groups in a multi-domain fill customer field instead.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 200", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "userKey": { + // "description": "Email or immutable Id of the user if only those groups are to be listed, the given user is a member of. If Id, it should match with id of user object", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "groups", + // "response": { + // "$ref": "Groups" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.readonly" + // ] + // } + +} + +// method id "directory.groups.patch": + +type GroupsPatchCall struct { + s *Service + groupKey string + group *Group + opt_ map[string]interface{} +} + +// Patch: Update Group. This method supports patch semantics. +func (r *GroupsService) Patch(groupKey string, group *Group) *GroupsPatchCall { + c := &GroupsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.group = group + return c +} + +func (c *GroupsPatchCall) Do() (*Group, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.group) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Group) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Group. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.groups.patch", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}", + // "request": { + // "$ref": "Group" + // }, + // "response": { + // "$ref": "Group" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.update": + +type GroupsUpdateCall struct { + s *Service + groupKey string + group *Group + opt_ map[string]interface{} +} + +// Update: Update Group +func (r *GroupsService) Update(groupKey string, group *Group) *GroupsUpdateCall { + c := &GroupsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.group = group + return c +} + +func (c *GroupsUpdateCall) Do() (*Group, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.group) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Group) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Group", + // "httpMethod": "PUT", + // "id": "directory.groups.update", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}", + // "request": { + // "$ref": "Group" + // }, + // "response": { + // "$ref": "Group" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.aliases.delete": + +type GroupsAliasesDeleteCall struct { + s *Service + groupKey string + alias string + opt_ map[string]interface{} +} + +// Delete: Remove a alias for the group +func (r *GroupsAliasesService) Delete(groupKey string, alias string) *GroupsAliasesDeleteCall { + c := &GroupsAliasesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.alias = alias + return c +} + +func (c *GroupsAliasesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/aliases/{alias}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{alias}", url.QueryEscape(c.alias), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove a alias for the group", + // "httpMethod": "DELETE", + // "id": "directory.groups.aliases.delete", + // "parameterOrder": [ + // "groupKey", + // "alias" + // ], + // "parameters": { + // "alias": { + // "description": "The alias to be removed", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/aliases/{alias}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.aliases.insert": + +type GroupsAliasesInsertCall struct { + s *Service + groupKey string + alias *Alias + opt_ map[string]interface{} +} + +// Insert: Add a alias for the group +func (r *GroupsAliasesService) Insert(groupKey string, alias *Alias) *GroupsAliasesInsertCall { + c := &GroupsAliasesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.alias = alias + return c +} + +func (c *GroupsAliasesInsertCall) Do() (*Alias, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.alias) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/aliases") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alias) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a alias for the group", + // "httpMethod": "POST", + // "id": "directory.groups.aliases.insert", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/aliases", + // "request": { + // "$ref": "Alias" + // }, + // "response": { + // "$ref": "Alias" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group" + // ] + // } + +} + +// method id "directory.groups.aliases.list": + +type GroupsAliasesListCall struct { + s *Service + groupKey string + opt_ map[string]interface{} +} + +// List: List all aliases for a group +func (r *GroupsAliasesService) List(groupKey string) *GroupsAliasesListCall { + c := &GroupsAliasesListCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + return c +} + +func (c *GroupsAliasesListCall) Do() (*Aliases, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/aliases") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Aliases) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all aliases for a group", + // "httpMethod": "GET", + // "id": "directory.groups.aliases.list", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/aliases", + // "response": { + // "$ref": "Aliases" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "directory.members.delete": + +type MembersDeleteCall struct { + s *Service + groupKey string + memberKey string + opt_ map[string]interface{} +} + +// Delete: Remove membership. +func (r *MembersService) Delete(groupKey string, memberKey string) *MembersDeleteCall { + c := &MembersDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.memberKey = memberKey + return c +} + +func (c *MembersDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members/{memberKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{memberKey}", url.QueryEscape(c.memberKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove membership.", + // "httpMethod": "DELETE", + // "id": "directory.members.delete", + // "parameterOrder": [ + // "groupKey", + // "memberKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "memberKey": { + // "description": "Email or immutable Id of the member", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members/{memberKey}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member" + // ] + // } + +} + +// method id "directory.members.get": + +type MembersGetCall struct { + s *Service + groupKey string + memberKey string + opt_ map[string]interface{} +} + +// Get: Retrieve Group Member +func (r *MembersService) Get(groupKey string, memberKey string) *MembersGetCall { + c := &MembersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.memberKey = memberKey + return c +} + +func (c *MembersGetCall) Do() (*Member, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members/{memberKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{memberKey}", url.QueryEscape(c.memberKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Member) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve Group Member", + // "httpMethod": "GET", + // "id": "directory.members.get", + // "parameterOrder": [ + // "groupKey", + // "memberKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "memberKey": { + // "description": "Email or immutable Id of the member", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members/{memberKey}", + // "response": { + // "$ref": "Member" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member", + // "https://www.googleapis.com/auth/admin.directory.group.member.readonly", + // "https://www.googleapis.com/auth/admin.directory.group.readonly" + // ] + // } + +} + +// method id "directory.members.insert": + +type MembersInsertCall struct { + s *Service + groupKey string + member *Member + opt_ map[string]interface{} +} + +// Insert: Add user to the specified group. +func (r *MembersService) Insert(groupKey string, member *Member) *MembersInsertCall { + c := &MembersInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.member = member + return c +} + +func (c *MembersInsertCall) Do() (*Member, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.member) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Member) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add user to the specified group.", + // "httpMethod": "POST", + // "id": "directory.members.insert", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members", + // "request": { + // "$ref": "Member" + // }, + // "response": { + // "$ref": "Member" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member" + // ] + // } + +} + +// method id "directory.members.list": + +type MembersListCall struct { + s *Service + groupKey string + opt_ map[string]interface{} +} + +// List: Retrieve all members in a group (paginated) +func (r *MembersService) List(groupKey string) *MembersListCall { + c := &MembersListCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 200 +func (c *MembersListCall) MaxResults(maxResults int64) *MembersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *MembersListCall) PageToken(pageToken string) *MembersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Roles sets the optional parameter "roles": Comma separated role +// values to filter list results on. +func (c *MembersListCall) Roles(roles string) *MembersListCall { + c.opt_["roles"] = roles + return c +} + +func (c *MembersListCall) Do() (*Members, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["roles"]; ok { + params.Set("roles", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Members) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve all members in a group (paginated)", + // "httpMethod": "GET", + // "id": "directory.members.list", + // "parameterOrder": [ + // "groupKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 200", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "roles": { + // "description": "Comma separated role values to filter list results on.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members", + // "response": { + // "$ref": "Members" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member", + // "https://www.googleapis.com/auth/admin.directory.group.member.readonly", + // "https://www.googleapis.com/auth/admin.directory.group.readonly" + // ] + // } + +} + +// method id "directory.members.patch": + +type MembersPatchCall struct { + s *Service + groupKey string + memberKey string + member *Member + opt_ map[string]interface{} +} + +// Patch: Update membership of a user in the specified group. This +// method supports patch semantics. +func (r *MembersService) Patch(groupKey string, memberKey string, member *Member) *MembersPatchCall { + c := &MembersPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.memberKey = memberKey + c.member = member + return c +} + +func (c *MembersPatchCall) Do() (*Member, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.member) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members/{memberKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{memberKey}", url.QueryEscape(c.memberKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Member) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update membership of a user in the specified group. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.members.patch", + // "parameterOrder": [ + // "groupKey", + // "memberKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "memberKey": { + // "description": "Email or immutable Id of the user. If Id, it should match with id of member object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members/{memberKey}", + // "request": { + // "$ref": "Member" + // }, + // "response": { + // "$ref": "Member" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member" + // ] + // } + +} + +// method id "directory.members.update": + +type MembersUpdateCall struct { + s *Service + groupKey string + memberKey string + member *Member + opt_ map[string]interface{} +} + +// Update: Update membership of a user in the specified group. +func (r *MembersService) Update(groupKey string, memberKey string, member *Member) *MembersUpdateCall { + c := &MembersUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.groupKey = groupKey + c.memberKey = memberKey + c.member = member + return c +} + +func (c *MembersUpdateCall) Do() (*Member, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.member) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "groups/{groupKey}/members/{memberKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupKey}", url.QueryEscape(c.groupKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{memberKey}", url.QueryEscape(c.memberKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Member) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update membership of a user in the specified group.", + // "httpMethod": "PUT", + // "id": "directory.members.update", + // "parameterOrder": [ + // "groupKey", + // "memberKey" + // ], + // "parameters": { + // "groupKey": { + // "description": "Email or immutable Id of the group. If Id, it should match with id of group object", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "memberKey": { + // "description": "Email or immutable Id of the user. If Id, it should match with id of member object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "groups/{groupKey}/members/{memberKey}", + // "request": { + // "$ref": "Member" + // }, + // "response": { + // "$ref": "Member" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.group", + // "https://www.googleapis.com/auth/admin.directory.group.member" + // ] + // } + +} + +// method id "directory.mobiledevices.action": + +type MobiledevicesActionCall struct { + s *Service + customerId string + resourceId string + mobiledeviceaction *MobileDeviceAction + opt_ map[string]interface{} +} + +// Action: Take action on Mobile Device +func (r *MobiledevicesService) Action(customerId string, resourceId string, mobiledeviceaction *MobileDeviceAction) *MobiledevicesActionCall { + c := &MobiledevicesActionCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.resourceId = resourceId + c.mobiledeviceaction = mobiledeviceaction + return c +} + +func (c *MobiledevicesActionCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.mobiledeviceaction) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/mobile/{resourceId}/action") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{resourceId}", url.QueryEscape(c.resourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Take action on Mobile Device", + // "httpMethod": "POST", + // "id": "directory.mobiledevices.action", + // "parameterOrder": [ + // "customerId", + // "resourceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "resourceId": { + // "description": "Immutable id of Mobile Device", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/mobile/{resourceId}/action", + // "request": { + // "$ref": "MobileDeviceAction" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.mobile", + // "https://www.googleapis.com/auth/admin.directory.device.mobile.action" + // ] + // } + +} + +// method id "directory.mobiledevices.delete": + +type MobiledevicesDeleteCall struct { + s *Service + customerId string + resourceId string + opt_ map[string]interface{} +} + +// Delete: Delete Mobile Device +func (r *MobiledevicesService) Delete(customerId string, resourceId string) *MobiledevicesDeleteCall { + c := &MobiledevicesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.resourceId = resourceId + return c +} + +func (c *MobiledevicesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/mobile/{resourceId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{resourceId}", url.QueryEscape(c.resourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete Mobile Device", + // "httpMethod": "DELETE", + // "id": "directory.mobiledevices.delete", + // "parameterOrder": [ + // "customerId", + // "resourceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "resourceId": { + // "description": "Immutable id of Mobile Device", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/mobile/{resourceId}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.mobile" + // ] + // } + +} + +// method id "directory.mobiledevices.get": + +type MobiledevicesGetCall struct { + s *Service + customerId string + resourceId string + opt_ map[string]interface{} +} + +// Get: Retrieve Mobile Device +func (r *MobiledevicesService) Get(customerId string, resourceId string) *MobiledevicesGetCall { + c := &MobiledevicesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.resourceId = resourceId + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *MobiledevicesGetCall) Projection(projection string) *MobiledevicesGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *MobiledevicesGetCall) Do() (*MobileDevice, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/mobile/{resourceId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{resourceId}", url.QueryEscape(c.resourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MobileDevice) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve Mobile Device", + // "httpMethod": "GET", + // "id": "directory.mobiledevices.get", + // "parameterOrder": [ + // "customerId", + // "resourceId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, model, status, type, and status)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // }, + // "resourceId": { + // "description": "Immutable id of Mobile Device", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/mobile/{resourceId}", + // "response": { + // "$ref": "MobileDevice" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.mobile", + // "https://www.googleapis.com/auth/admin.directory.device.mobile.action", + // "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly" + // ] + // } + +} + +// method id "directory.mobiledevices.list": + +type MobiledevicesListCall struct { + s *Service + customerId string + opt_ map[string]interface{} +} + +// List: Retrieve all Mobile Devices of a customer (paginated) +func (r *MobiledevicesService) List(customerId string) *MobiledevicesListCall { + c := &MobiledevicesListCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 100 +func (c *MobiledevicesListCall) MaxResults(maxResults int64) *MobiledevicesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Column to use for +// sorting results +func (c *MobiledevicesListCall) OrderBy(orderBy string) *MobiledevicesListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *MobiledevicesListCall) PageToken(pageToken string) *MobiledevicesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *MobiledevicesListCall) Projection(projection string) *MobiledevicesListCall { + c.opt_["projection"] = projection + return c +} + +// Query sets the optional parameter "query": Search string in the +// format given at +// http://support.google.com/a/bin/answer.py?hl=en&answer=1408863#search +func (c *MobiledevicesListCall) Query(query string) *MobiledevicesListCall { + c.opt_["query"] = query + return c +} + +// SortOrder sets the optional parameter "sortOrder": Whether to return +// results in ascending or descending order. Only of use when orderBy is +// also used +func (c *MobiledevicesListCall) SortOrder(sortOrder string) *MobiledevicesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *MobiledevicesListCall) Do() (*MobileDevices, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/devices/mobile") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MobileDevices) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve all Mobile Devices of a customer (paginated)", + // "httpMethod": "GET", + // "id": "directory.mobiledevices.list", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 100", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Column to use for sorting results", + // "enum": [ + // "deviceId", + // "email", + // "lastSync", + // "model", + // "name", + // "os", + // "status", + // "type" + // ], + // "enumDescriptions": [ + // "Mobile Device serial number.", + // "Owner user email.", + // "Last policy settings sync date time of the device.", + // "Mobile Device model.", + // "Owner user name.", + // "Mobile operating system.", + // "Status of the device.", + // "Type of the device." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Includes only the basic metadata fields (e.g., deviceId, model, status, type, and status)", + // "Includes all metadata fields" + // ], + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Search string in the format given at http://support.google.com/a/bin/answer.py?hl=en\u0026answer=1408863#search", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "description": "Whether to return results in ascending or descending order. Only of use when orderBy is also used", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/devices/mobile", + // "response": { + // "$ref": "MobileDevices" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.device.mobile", + // "https://www.googleapis.com/auth/admin.directory.device.mobile.action", + // "https://www.googleapis.com/auth/admin.directory.device.mobile.readonly" + // ] + // } + +} + +// method id "directory.notifications.delete": + +type NotificationsDeleteCall struct { + s *Service + customer string + notificationId string + opt_ map[string]interface{} +} + +// Delete: Deletes a notification +func (r *NotificationsService) Delete(customer string, notificationId string) *NotificationsDeleteCall { + c := &NotificationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + c.notificationId = notificationId + return c +} + +func (c *NotificationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications/{notificationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a notification", + // "httpMethod": "DELETE", + // "id": "directory.notifications.delete", + // "parameterOrder": [ + // "customer", + // "notificationId" + // ], + // "parameters": { + // "customer": { + // "description": "The unique ID for the customer's Google account. The customerId is also returned as part of the Users resource.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "notificationId": { + // "description": "The unique ID of the notification.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customer}/notifications/{notificationId}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.notifications" + // ] + // } + +} + +// method id "directory.notifications.get": + +type NotificationsGetCall struct { + s *Service + customer string + notificationId string + opt_ map[string]interface{} +} + +// Get: Retrieves a notification. +func (r *NotificationsService) Get(customer string, notificationId string) *NotificationsGetCall { + c := &NotificationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + c.notificationId = notificationId + return c +} + +func (c *NotificationsGetCall) Do() (*Notification, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications/{notificationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Notification) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a notification.", + // "httpMethod": "GET", + // "id": "directory.notifications.get", + // "parameterOrder": [ + // "customer", + // "notificationId" + // ], + // "parameters": { + // "customer": { + // "description": "The unique ID for the customer's Google account. The customerId is also returned as part of the Users resource.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "notificationId": { + // "description": "The unique ID of the notification.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customer}/notifications/{notificationId}", + // "response": { + // "$ref": "Notification" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.notifications" + // ] + // } + +} + +// method id "directory.notifications.list": + +type NotificationsListCall struct { + s *Service + customer string + opt_ map[string]interface{} +} + +// List: Retrieves a list of notifications. +func (r *NotificationsService) List(customer string) *NotificationsListCall { + c := &NotificationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + return c +} + +// Language sets the optional parameter "language": The ISO 639-1 code +// of the language notifications are returned in. The default is English +// (en). +func (c *NotificationsListCall) Language(language string) *NotificationsListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of notifications to return per page. The default is 100. +func (c *NotificationsListCall) MaxResults(maxResults int64) *NotificationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token to +// specify the page of results to retrieve. +func (c *NotificationsListCall) PageToken(pageToken string) *NotificationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NotificationsListCall) Do() (*Notifications, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Notifications) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of notifications.", + // "httpMethod": "GET", + // "id": "directory.notifications.list", + // "parameterOrder": [ + // "customer" + // ], + // "parameters": { + // "customer": { + // "description": "The unique ID for the customer's Google account.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "language": { + // "description": "The ISO 639-1 code of the language notifications are returned in. The default is English (en).", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of notifications to return per page. The default is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token to specify the page of results to retrieve.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customer}/notifications", + // "response": { + // "$ref": "Notifications" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.notifications" + // ] + // } + +} + +// method id "directory.notifications.patch": + +type NotificationsPatchCall struct { + s *Service + customer string + notificationId string + notification *Notification + opt_ map[string]interface{} +} + +// Patch: Updates a notification. This method supports patch semantics. +func (r *NotificationsService) Patch(customer string, notificationId string, notification *Notification) *NotificationsPatchCall { + c := &NotificationsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + c.notificationId = notificationId + c.notification = notification + return c +} + +func (c *NotificationsPatchCall) Do() (*Notification, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications/{notificationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Notification) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a notification. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.notifications.patch", + // "parameterOrder": [ + // "customer", + // "notificationId" + // ], + // "parameters": { + // "customer": { + // "description": "The unique ID for the customer's Google account.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "notificationId": { + // "description": "The unique ID of the notification.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customer}/notifications/{notificationId}", + // "request": { + // "$ref": "Notification" + // }, + // "response": { + // "$ref": "Notification" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.notifications" + // ] + // } + +} + +// method id "directory.notifications.update": + +type NotificationsUpdateCall struct { + s *Service + customer string + notificationId string + notification *Notification + opt_ map[string]interface{} +} + +// Update: Updates a notification. +func (r *NotificationsService) Update(customer string, notificationId string, notification *Notification) *NotificationsUpdateCall { + c := &NotificationsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + c.notificationId = notificationId + c.notification = notification + return c +} + +func (c *NotificationsUpdateCall) Do() (*Notification, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.notification) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customer}/notifications/{notificationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customer}", url.QueryEscape(c.customer), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{notificationId}", url.QueryEscape(c.notificationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Notification) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a notification.", + // "httpMethod": "PUT", + // "id": "directory.notifications.update", + // "parameterOrder": [ + // "customer", + // "notificationId" + // ], + // "parameters": { + // "customer": { + // "description": "The unique ID for the customer's Google account.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "notificationId": { + // "description": "The unique ID of the notification.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customer}/notifications/{notificationId}", + // "request": { + // "$ref": "Notification" + // }, + // "response": { + // "$ref": "Notification" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.notifications" + // ] + // } + +} + +// method id "directory.orgunits.delete": + +type OrgunitsDeleteCall struct { + s *Service + customerId string + orgUnitPath []string + opt_ map[string]interface{} +} + +// Delete: Remove Organization Unit +func (r *OrgunitsService) Delete(customerId string, orgUnitPath []string) *OrgunitsDeleteCall { + c := &OrgunitsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.orgUnitPath = orgUnitPath + return c +} + +func (c *OrgunitsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits{/orgUnitPath*}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{orgUnitPath}", url.QueryEscape(c.orgUnitPath[0]), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove Organization Unit", + // "httpMethod": "DELETE", + // "id": "directory.orgunits.delete", + // "parameterOrder": [ + // "customerId", + // "orgUnitPath" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "orgUnitPath": { + // "description": "Full path of the organization unit", + // "location": "path", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit" + // ] + // } + +} + +// method id "directory.orgunits.get": + +type OrgunitsGetCall struct { + s *Service + customerId string + orgUnitPath []string + opt_ map[string]interface{} +} + +// Get: Retrieve Organization Unit +func (r *OrgunitsService) Get(customerId string, orgUnitPath []string) *OrgunitsGetCall { + c := &OrgunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.orgUnitPath = orgUnitPath + return c +} + +func (c *OrgunitsGetCall) Do() (*OrgUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits{/orgUnitPath*}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{orgUnitPath}", url.QueryEscape(c.orgUnitPath[0]), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OrgUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve Organization Unit", + // "httpMethod": "GET", + // "id": "directory.orgunits.get", + // "parameterOrder": [ + // "customerId", + // "orgUnitPath" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "orgUnitPath": { + // "description": "Full path of the organization unit", + // "location": "path", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + // "response": { + // "$ref": "OrgUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit", + // "https://www.googleapis.com/auth/admin.directory.orgunit.readonly" + // ] + // } + +} + +// method id "directory.orgunits.insert": + +type OrgunitsInsertCall struct { + s *Service + customerId string + orgunit *OrgUnit + opt_ map[string]interface{} +} + +// Insert: Add Organization Unit +func (r *OrgunitsService) Insert(customerId string, orgunit *OrgUnit) *OrgunitsInsertCall { + c := &OrgunitsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.orgunit = orgunit + return c +} + +func (c *OrgunitsInsertCall) Do() (*OrgUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OrgUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add Organization Unit", + // "httpMethod": "POST", + // "id": "directory.orgunits.insert", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits", + // "request": { + // "$ref": "OrgUnit" + // }, + // "response": { + // "$ref": "OrgUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit" + // ] + // } + +} + +// method id "directory.orgunits.list": + +type OrgunitsListCall struct { + s *Service + customerId string + opt_ map[string]interface{} +} + +// List: Retrieve all Organization Units +func (r *OrgunitsService) List(customerId string) *OrgunitsListCall { + c := &OrgunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + return c +} + +// OrgUnitPath sets the optional parameter "orgUnitPath": the +// URL-encoded organization unit +func (c *OrgunitsListCall) OrgUnitPath(orgUnitPath string) *OrgunitsListCall { + c.opt_["orgUnitPath"] = orgUnitPath + return c +} + +// Type sets the optional parameter "type": Whether to return all +// sub-organizations or just immediate children +func (c *OrgunitsListCall) Type(type_ string) *OrgunitsListCall { + c.opt_["type"] = type_ + return c +} + +func (c *OrgunitsListCall) Do() (*OrgUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["orgUnitPath"]; ok { + params.Set("orgUnitPath", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OrgUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve all Organization Units", + // "httpMethod": "GET", + // "id": "directory.orgunits.list", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "orgUnitPath": { + // "default": "", + // "description": "the URL-encoded organization unit", + // "location": "query", + // "type": "string" + // }, + // "type": { + // "description": "Whether to return all sub-organizations or just immediate children", + // "enum": [ + // "all", + // "children" + // ], + // "enumDescriptions": [ + // "All sub-organization units.", + // "Immediate children only (default)." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits", + // "response": { + // "$ref": "OrgUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit", + // "https://www.googleapis.com/auth/admin.directory.orgunit.readonly" + // ] + // } + +} + +// method id "directory.orgunits.patch": + +type OrgunitsPatchCall struct { + s *Service + customerId string + orgUnitPath []string + orgunit *OrgUnit + opt_ map[string]interface{} +} + +// Patch: Update Organization Unit. This method supports patch +// semantics. +func (r *OrgunitsService) Patch(customerId string, orgUnitPath []string, orgunit *OrgUnit) *OrgunitsPatchCall { + c := &OrgunitsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.orgUnitPath = orgUnitPath + c.orgunit = orgunit + return c +} + +func (c *OrgunitsPatchCall) Do() (*OrgUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits{/orgUnitPath*}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{orgUnitPath}", url.QueryEscape(c.orgUnitPath[0]), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OrgUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Organization Unit. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.orgunits.patch", + // "parameterOrder": [ + // "customerId", + // "orgUnitPath" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "orgUnitPath": { + // "description": "Full path of the organization unit", + // "location": "path", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + // "request": { + // "$ref": "OrgUnit" + // }, + // "response": { + // "$ref": "OrgUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit" + // ] + // } + +} + +// method id "directory.orgunits.update": + +type OrgunitsUpdateCall struct { + s *Service + customerId string + orgUnitPath []string + orgunit *OrgUnit + opt_ map[string]interface{} +} + +// Update: Update Organization Unit +func (r *OrgunitsService) Update(customerId string, orgUnitPath []string, orgunit *OrgUnit) *OrgunitsUpdateCall { + c := &OrgunitsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.orgUnitPath = orgUnitPath + c.orgunit = orgunit + return c +} + +func (c *OrgunitsUpdateCall) Do() (*OrgUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.orgunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customer/{customerId}/orgunits{/orgUnitPath*}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{orgUnitPath}", url.QueryEscape(c.orgUnitPath[0]), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OrgUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update Organization Unit", + // "httpMethod": "PUT", + // "id": "directory.orgunits.update", + // "parameterOrder": [ + // "customerId", + // "orgUnitPath" + // ], + // "parameters": { + // "customerId": { + // "description": "Immutable id of the Google Apps account", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "orgUnitPath": { + // "description": "Full path of the organization unit", + // "location": "path", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "customer/{customerId}/orgunits{/orgUnitPath*}", + // "request": { + // "$ref": "OrgUnit" + // }, + // "response": { + // "$ref": "OrgUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.orgunit" + // ] + // } + +} + +// method id "directory.tokens.delete": + +type TokensDeleteCall struct { + s *Service + userKey string + clientId string + opt_ map[string]interface{} +} + +// Delete: Delete all access tokens issued by a user for an application. +func (r *TokensService) Delete(userKey string, clientId string) *TokensDeleteCall { + c := &TokensDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.clientId = clientId + return c +} + +func (c *TokensDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/tokens/{clientId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{clientId}", url.QueryEscape(c.clientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete all access tokens issued by a user for an application.", + // "httpMethod": "DELETE", + // "id": "directory.tokens.delete", + // "parameterOrder": [ + // "userKey", + // "clientId" + // ], + // "parameters": { + // "clientId": { + // "description": "The Client ID of the application the token is issued to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/tokens/{clientId}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.tokens.get": + +type TokensGetCall struct { + s *Service + userKey string + clientId string + opt_ map[string]interface{} +} + +// Get: Get information about an access token issued by a user. +func (r *TokensService) Get(userKey string, clientId string) *TokensGetCall { + c := &TokensGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.clientId = clientId + return c +} + +func (c *TokensGetCall) Do() (*Token, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/tokens/{clientId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{clientId}", url.QueryEscape(c.clientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Token) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about an access token issued by a user.", + // "httpMethod": "GET", + // "id": "directory.tokens.get", + // "parameterOrder": [ + // "userKey", + // "clientId" + // ], + // "parameters": { + // "clientId": { + // "description": "The Client ID of the application the token is issued to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/tokens/{clientId}", + // "response": { + // "$ref": "Token" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.tokens.list": + +type TokensListCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// List: Returns the set of current, valid verification codes for the +// specified user. +func (r *TokensService) List(userKey string) *TokensListCall { + c := &TokensListCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *TokensListCall) Do() (*Tokens, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/tokens") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tokens) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the set of current, valid verification codes for the specified user.", + // "httpMethod": "GET", + // "id": "directory.tokens.list", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/tokens", + // "response": { + // "$ref": "Tokens" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.users.delete": + +type UsersDeleteCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Delete: Delete user +func (r *UsersService) Delete(userKey string) *UsersDeleteCall { + c := &UsersDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *UsersDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete user", + // "httpMethod": "DELETE", + // "id": "directory.users.delete", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.get": + +type UsersGetCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Get: retrieve user +func (r *UsersService) Get(userKey string) *UsersGetCall { + c := &UsersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *UsersGetCall) Do() (*User, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "retrieve user", + // "httpMethod": "GET", + // "id": "directory.users.get", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}", + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ] + // } + +} + +// method id "directory.users.insert": + +type UsersInsertCall struct { + s *Service + user *User + opt_ map[string]interface{} +} + +// Insert: create user. +func (r *UsersService) Insert(user *User) *UsersInsertCall { + c := &UsersInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.user = user + return c +} + +func (c *UsersInsertCall) Do() (*User, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.user) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "create user.", + // "httpMethod": "POST", + // "id": "directory.users.insert", + // "path": "users", + // "request": { + // "$ref": "User" + // }, + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.list": + +type UsersListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieve either deleted users or all users in a domain +// (paginated) +func (r *UsersService) List() *UsersListCall { + c := &UsersListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Customer sets the optional parameter "customer": Immutable id of the +// Google Apps account. In case of multi-domain, to fetch all users for +// a customer, fill this field instead of domain. +func (c *UsersListCall) Customer(customer string) *UsersListCall { + c.opt_["customer"] = customer + return c +} + +// Domain sets the optional parameter "domain": Name of the domain. Fill +// this field to get users from only this domain. To return all users in +// a multi-domain fill customer field instead. +func (c *UsersListCall) Domain(domain string) *UsersListCall { + c.opt_["domain"] = domain + return c +} + +// Event sets the optional parameter "event": Event on which +// subscription is intended (if subscribing) +func (c *UsersListCall) Event(event string) *UsersListCall { + c.opt_["event"] = event + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 100. Max allowed is 500 +func (c *UsersListCall) MaxResults(maxResults int64) *UsersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Column to use for +// sorting results +func (c *UsersListCall) OrderBy(orderBy string) *UsersListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *UsersListCall) PageToken(pageToken string) *UsersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Query sets the optional parameter "query": Query string search. +// Should be of the form "" where field can be any of supported fields, +// operators can be one of '=' for exact match or ':' for prefix match. +// For prefix match, the value should always be followed by a *. +func (c *UsersListCall) Query(query string) *UsersListCall { + c.opt_["query"] = query + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": If set to true +// retrieves the list of deleted users. Default is false +func (c *UsersListCall) ShowDeleted(showDeleted string) *UsersListCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// SortOrder sets the optional parameter "sortOrder": Whether to return +// results in ascending or descending order. +func (c *UsersListCall) SortOrder(sortOrder string) *UsersListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *UsersListCall) Do() (*Users, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customer"]; ok { + params.Set("customer", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["event"]; ok { + params.Set("event", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Users) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve either deleted users or all users in a domain (paginated)", + // "httpMethod": "GET", + // "id": "directory.users.list", + // "parameters": { + // "customer": { + // "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all users for a customer, fill this field instead of domain.", + // "location": "query", + // "type": "string" + // }, + // "domain": { + // "description": "Name of the domain. Fill this field to get users from only this domain. To return all users in a multi-domain fill customer field instead.", + // "location": "query", + // "type": "string" + // }, + // "event": { + // "description": "Event on which subscription is intended (if subscribing)", + // "enum": [ + // "add", + // "delete", + // "makeAdmin", + // "undelete", + // "update" + // ], + // "enumDescriptions": [ + // "User Created Event", + // "User Deleted Event", + // "User Admin Status Change Event", + // "User Undeleted Event", + // "User Updated Event" + // ], + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 100. Max allowed is 500", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Column to use for sorting results", + // "enum": [ + // "email", + // "familyName", + // "givenName" + // ], + // "enumDescriptions": [ + // "Primary email of the user.", + // "User's family name.", + // "User's given name." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Query string search. Should be of the form \"\" where field can be any of supported fields, operators can be one of '=' for exact match or ':' for prefix match. For prefix match, the value should always be followed by a *.", + // "location": "query", + // "type": "string" + // }, + // "showDeleted": { + // "description": "If set to true retrieves the list of deleted users. Default is false", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "description": "Whether to return results in ascending or descending order.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users", + // "response": { + // "$ref": "Users" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "directory.users.makeAdmin": + +type UsersMakeAdminCall struct { + s *Service + userKey string + usermakeadmin *UserMakeAdmin + opt_ map[string]interface{} +} + +// MakeAdmin: change admin status of a user +func (r *UsersService) MakeAdmin(userKey string, usermakeadmin *UserMakeAdmin) *UsersMakeAdminCall { + c := &UsersMakeAdminCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.usermakeadmin = usermakeadmin + return c +} + +func (c *UsersMakeAdminCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.usermakeadmin) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/makeAdmin") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "change admin status of a user", + // "httpMethod": "POST", + // "id": "directory.users.makeAdmin", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user as admin", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/makeAdmin", + // "request": { + // "$ref": "UserMakeAdmin" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.patch": + +type UsersPatchCall struct { + s *Service + userKey string + user *User + opt_ map[string]interface{} +} + +// Patch: update user. This method supports patch semantics. +func (r *UsersService) Patch(userKey string, user *User) *UsersPatchCall { + c := &UsersPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.user = user + return c +} + +func (c *UsersPatchCall) Do() (*User, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.user) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "update user. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.users.patch", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user. If Id, it should match with id of user object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}", + // "request": { + // "$ref": "User" + // }, + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.undelete": + +type UsersUndeleteCall struct { + s *Service + userKey string + userundelete *UserUndelete + opt_ map[string]interface{} +} + +// Undelete: Undelete a deleted user +func (r *UsersService) Undelete(userKey string, userundelete *UserUndelete) *UsersUndeleteCall { + c := &UsersUndeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.userundelete = userundelete + return c +} + +func (c *UsersUndeleteCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.userundelete) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/undelete") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Undelete a deleted user", + // "httpMethod": "POST", + // "id": "directory.users.undelete", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "The immutable id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/undelete", + // "request": { + // "$ref": "UserUndelete" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.update": + +type UsersUpdateCall struct { + s *Service + userKey string + user *User + opt_ map[string]interface{} +} + +// Update: update user +func (r *UsersService) Update(userKey string, user *User) *UsersUpdateCall { + c := &UsersUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.user = user + return c +} + +func (c *UsersUpdateCall) Do() (*User, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.user) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "update user", + // "httpMethod": "PUT", + // "id": "directory.users.update", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user. If Id, it should match with id of user object", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}", + // "request": { + // "$ref": "User" + // }, + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.watch": + +type UsersWatchCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Watch for changes in users list +func (r *UsersService) Watch(channel *Channel) *UsersWatchCall { + c := &UsersWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +// Customer sets the optional parameter "customer": Immutable id of the +// Google Apps account. In case of multi-domain, to fetch all users for +// a customer, fill this field instead of domain. +func (c *UsersWatchCall) Customer(customer string) *UsersWatchCall { + c.opt_["customer"] = customer + return c +} + +// Domain sets the optional parameter "domain": Name of the domain. Fill +// this field to get users from only this domain. To return all users in +// a multi-domain fill customer field instead. +func (c *UsersWatchCall) Domain(domain string) *UsersWatchCall { + c.opt_["domain"] = domain + return c +} + +// Event sets the optional parameter "event": Event on which +// subscription is intended (if subscribing) +func (c *UsersWatchCall) Event(event string) *UsersWatchCall { + c.opt_["event"] = event + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Default is 100. Max allowed is 500 +func (c *UsersWatchCall) MaxResults(maxResults int64) *UsersWatchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Column to use for +// sorting results +func (c *UsersWatchCall) OrderBy(orderBy string) *UsersWatchCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *UsersWatchCall) PageToken(pageToken string) *UsersWatchCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Query sets the optional parameter "query": Query string search. +// Should be of the form "" where field can be any of supported fields, +// operators can be one of '=' for exact match or ':' for prefix match. +// For prefix match, the value should always be followed by a *. +func (c *UsersWatchCall) Query(query string) *UsersWatchCall { + c.opt_["query"] = query + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": If set to true +// retrieves the list of deleted users. Default is false +func (c *UsersWatchCall) ShowDeleted(showDeleted string) *UsersWatchCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// SortOrder sets the optional parameter "sortOrder": Whether to return +// results in ascending or descending order. +func (c *UsersWatchCall) SortOrder(sortOrder string) *UsersWatchCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *UsersWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customer"]; ok { + params.Set("customer", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["event"]; ok { + params.Set("event", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Watch for changes in users list", + // "httpMethod": "POST", + // "id": "directory.users.watch", + // "parameters": { + // "customer": { + // "description": "Immutable id of the Google Apps account. In case of multi-domain, to fetch all users for a customer, fill this field instead of domain.", + // "location": "query", + // "type": "string" + // }, + // "domain": { + // "description": "Name of the domain. Fill this field to get users from only this domain. To return all users in a multi-domain fill customer field instead.", + // "location": "query", + // "type": "string" + // }, + // "event": { + // "description": "Event on which subscription is intended (if subscribing)", + // "enum": [ + // "add", + // "delete", + // "makeAdmin", + // "undelete", + // "update" + // ], + // "enumDescriptions": [ + // "User Created Event", + // "User Deleted Event", + // "User Admin Status Change Event", + // "User Undeleted Event", + // "User Updated Event" + // ], + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Default is 100. Max allowed is 500", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Column to use for sorting results", + // "enum": [ + // "email", + // "familyName", + // "givenName" + // ], + // "enumDescriptions": [ + // "Primary email of the user.", + // "User's family name.", + // "User's given name." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Query string search. Should be of the form \"\" where field can be any of supported fields, operators can be one of '=' for exact match or ':' for prefix match. For prefix match, the value should always be followed by a *.", + // "location": "query", + // "type": "string" + // }, + // "showDeleted": { + // "description": "If set to true retrieves the list of deleted users. Default is false", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "description": "Whether to return results in ascending or descending order.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "directory.users.aliases.delete": + +type UsersAliasesDeleteCall struct { + s *Service + userKey string + alias string + opt_ map[string]interface{} +} + +// Delete: Remove a alias for the user +func (r *UsersAliasesService) Delete(userKey string, alias string) *UsersAliasesDeleteCall { + c := &UsersAliasesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.alias = alias + return c +} + +func (c *UsersAliasesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/aliases/{alias}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{alias}", url.QueryEscape(c.alias), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove a alias for the user", + // "httpMethod": "DELETE", + // "id": "directory.users.aliases.delete", + // "parameterOrder": [ + // "userKey", + // "alias" + // ], + // "parameters": { + // "alias": { + // "description": "The alias to be removed", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/aliases/{alias}", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.alias" + // ] + // } + +} + +// method id "directory.users.aliases.insert": + +type UsersAliasesInsertCall struct { + s *Service + userKey string + alias *Alias + opt_ map[string]interface{} +} + +// Insert: Add a alias for the user +func (r *UsersAliasesService) Insert(userKey string, alias *Alias) *UsersAliasesInsertCall { + c := &UsersAliasesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.alias = alias + return c +} + +func (c *UsersAliasesInsertCall) Do() (*Alias, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.alias) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/aliases") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alias) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a alias for the user", + // "httpMethod": "POST", + // "id": "directory.users.aliases.insert", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/aliases", + // "request": { + // "$ref": "Alias" + // }, + // "response": { + // "$ref": "Alias" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.alias" + // ] + // } + +} + +// method id "directory.users.aliases.list": + +type UsersAliasesListCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// List: List all aliases for a user +func (r *UsersAliasesService) List(userKey string) *UsersAliasesListCall { + c := &UsersAliasesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +// Event sets the optional parameter "event": Event on which +// subscription is intended (if subscribing) +func (c *UsersAliasesListCall) Event(event string) *UsersAliasesListCall { + c.opt_["event"] = event + return c +} + +func (c *UsersAliasesListCall) Do() (*Aliases, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["event"]; ok { + params.Set("event", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/aliases") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Aliases) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all aliases for a user", + // "httpMethod": "GET", + // "id": "directory.users.aliases.list", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "event": { + // "description": "Event on which subscription is intended (if subscribing)", + // "enum": [ + // "add", + // "delete" + // ], + // "enumDescriptions": [ + // "Alias Created Event", + // "Alias Deleted Event" + // ], + // "location": "query", + // "type": "string" + // }, + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/aliases", + // "response": { + // "$ref": "Aliases" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.alias", + // "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "directory.users.aliases.watch": + +type UsersAliasesWatchCall struct { + s *Service + userKey string + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Watch for changes in user aliases list +func (r *UsersAliasesService) Watch(userKey string, channel *Channel) *UsersAliasesWatchCall { + c := &UsersAliasesWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.channel = channel + return c +} + +// Event sets the optional parameter "event": Event on which +// subscription is intended (if subscribing) +func (c *UsersAliasesWatchCall) Event(event string) *UsersAliasesWatchCall { + c.opt_["event"] = event + return c +} + +func (c *UsersAliasesWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["event"]; ok { + params.Set("event", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/aliases/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Watch for changes in user aliases list", + // "httpMethod": "POST", + // "id": "directory.users.aliases.watch", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "event": { + // "description": "Event on which subscription is intended (if subscribing)", + // "enum": [ + // "add", + // "delete" + // ], + // "enumDescriptions": [ + // "Alias Created Event", + // "Alias Deleted Event" + // ], + // "location": "query", + // "type": "string" + // }, + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/aliases/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.alias", + // "https://www.googleapis.com/auth/admin.directory.user.alias.readonly", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "directory.users.photos.delete": + +type UsersPhotosDeleteCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Delete: Remove photos for the user +func (r *UsersPhotosService) Delete(userKey string) *UsersPhotosDeleteCall { + c := &UsersPhotosDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *UsersPhotosDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/photos/thumbnail") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove photos for the user", + // "httpMethod": "DELETE", + // "id": "directory.users.photos.delete", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/photos/thumbnail", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.photos.get": + +type UsersPhotosGetCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Get: Retrieve photo of a user +func (r *UsersPhotosService) Get(userKey string) *UsersPhotosGetCall { + c := &UsersPhotosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *UsersPhotosGetCall) Do() (*UserPhoto, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/photos/thumbnail") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserPhoto) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve photo of a user", + // "httpMethod": "GET", + // "id": "directory.users.photos.get", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/photos/thumbnail", + // "response": { + // "$ref": "UserPhoto" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user", + // "https://www.googleapis.com/auth/admin.directory.user.readonly" + // ] + // } + +} + +// method id "directory.users.photos.patch": + +type UsersPhotosPatchCall struct { + s *Service + userKey string + userphoto *UserPhoto + opt_ map[string]interface{} +} + +// Patch: Add a photo for the user. This method supports patch +// semantics. +func (r *UsersPhotosService) Patch(userKey string, userphoto *UserPhoto) *UsersPhotosPatchCall { + c := &UsersPhotosPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.userphoto = userphoto + return c +} + +func (c *UsersPhotosPatchCall) Do() (*UserPhoto, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.userphoto) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/photos/thumbnail") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserPhoto) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a photo for the user. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "directory.users.photos.patch", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/photos/thumbnail", + // "request": { + // "$ref": "UserPhoto" + // }, + // "response": { + // "$ref": "UserPhoto" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.users.photos.update": + +type UsersPhotosUpdateCall struct { + s *Service + userKey string + userphoto *UserPhoto + opt_ map[string]interface{} +} + +// Update: Add a photo for the user +func (r *UsersPhotosService) Update(userKey string, userphoto *UserPhoto) *UsersPhotosUpdateCall { + c := &UsersPhotosUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.userphoto = userphoto + return c +} + +func (c *UsersPhotosUpdateCall) Do() (*UserPhoto, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.userphoto) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/photos/thumbnail") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserPhoto) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a photo for the user", + // "httpMethod": "PUT", + // "id": "directory.users.photos.update", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/photos/thumbnail", + // "request": { + // "$ref": "UserPhoto" + // }, + // "response": { + // "$ref": "UserPhoto" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user" + // ] + // } + +} + +// method id "directory.verificationCodes.generate": + +type VerificationCodesGenerateCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Generate: Generate new backup verification codes for the user. +func (r *VerificationCodesService) Generate(userKey string) *VerificationCodesGenerateCall { + c := &VerificationCodesGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *VerificationCodesGenerateCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/verificationCodes/generate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Generate new backup verification codes for the user.", + // "httpMethod": "POST", + // "id": "directory.verificationCodes.generate", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/verificationCodes/generate", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.verificationCodes.invalidate": + +type VerificationCodesInvalidateCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// Invalidate: Invalidate the current backup verification codes for the +// user. +func (r *VerificationCodesService) Invalidate(userKey string) *VerificationCodesInvalidateCall { + c := &VerificationCodesInvalidateCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *VerificationCodesInvalidateCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/verificationCodes/invalidate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Invalidate the current backup verification codes for the user.", + // "httpMethod": "POST", + // "id": "directory.verificationCodes.invalidate", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Email or immutable Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/verificationCodes/invalidate", + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} + +// method id "directory.verificationCodes.list": + +type VerificationCodesListCall struct { + s *Service + userKey string + opt_ map[string]interface{} +} + +// List: Returns the current set of valid backup verification codes for +// the specified user. +func (r *VerificationCodesService) List(userKey string) *VerificationCodesListCall { + c := &VerificationCodesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + return c +} + +func (c *VerificationCodesListCall) Do() (*VerificationCodes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userKey}/verificationCodes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(VerificationCodes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the current set of valid backup verification codes for the specified user.", + // "httpMethod": "GET", + // "id": "directory.verificationCodes.list", + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "Identifies the user in the API request. The value can be the user's primary email address, alias email address, or unique user ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userKey}/verificationCodes", + // "response": { + // "$ref": "VerificationCodes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.directory.user.security" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-api.json b/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-api.json new file mode 100644 index 0000000000000..b612dbf588e68 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-api.json @@ -0,0 +1,172 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5IR4qYAEytuHObETjxcLeQt8rDQ\"", + "discoveryVersion": "v1", + "id": "admin:email_migration_v2", + "name": "admin", + "version": "email_migration_v2", + "title": "Email Migration API v2", + "description": "Email Migration API lets you migrate emails of users to Google backends.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/admin-sdk/email-migration/v2/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/email/v2/users/", + "basePath": "/email/v2/users/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "email/v2/users/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/email.migration": { + "description": "Manage email messages of users on your domain" + } + } + } + }, + "schemas": { + "MailItem": { + "id": "MailItem", + "type": "object", + "description": "JSON template for MailItem object in Email Migration API.", + "properties": { + "isDeleted": { + "type": "boolean", + "description": "Boolean indicating if the mail is deleted (used in Vault)" + }, + "isDraft": { + "type": "boolean", + "description": "Boolean indicating if the mail is draft" + }, + "isInbox": { + "type": "boolean", + "description": "Boolean indicating if the mail is in inbox" + }, + "isSent": { + "type": "boolean", + "description": "Boolean indicating if the mail is in 'sent mails'" + }, + "isStarred": { + "type": "boolean", + "description": "Boolean indicating if the mail is starred" + }, + "isTrash": { + "type": "boolean", + "description": "Boolean indicating if the mail is in trash" + }, + "isUnread": { + "type": "boolean", + "description": "Boolean indicating if the mail is unread" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "mailItem" + }, + "labels": { + "type": "array", + "description": "List of labels (strings)", + "items": { + "type": "string" + } + } + } + } + }, + "resources": { + "mail": { + "methods": { + "insert": { + "id": "emailMigration.mail.insert", + "path": "{userKey}/mail", + "httpMethod": "POST", + "description": "Insert Mail into Google's Gmail backends", + "parameters": { + "userKey": { + "type": "string", + "description": "The email or immutable id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey" + ], + "request": { + "$ref": "MailItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/email.migration" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "message/rfc822" + ], + "maxSize": "35MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/email/v2/users/{userKey}/mail" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/email/v2/users/{userKey}/mail" + } + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-gen.go b/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-gen.go new file mode 100644 index 0000000000000..35852dddc2bc8 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/email_migration_v2/admin-gen.go @@ -0,0 +1,198 @@ +// Package admin provides access to the Email Migration API v2. +// +// See https://developers.google.com/admin-sdk/email-migration/v2/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/admin/email_migration_v2" +// ... +// adminService, err := admin.New(oauthHttpClient) +package admin + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "admin:email_migration_v2" +const apiName = "admin" +const apiVersion = "email_migration_v2" +const basePath = "https://www.googleapis.com/email/v2/users/" + +// OAuth2 scopes used by this API. +const ( + // Manage email messages of users on your domain + EmailMigrationScope = "https://www.googleapis.com/auth/email.migration" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Mail = NewMailService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Mail *MailService +} + +func NewMailService(s *Service) *MailService { + rs := &MailService{s: s} + return rs +} + +type MailService struct { + s *Service +} + +type MailItem struct { + // IsDeleted: Boolean indicating if the mail is deleted (used in Vault) + IsDeleted bool `json:"isDeleted,omitempty"` + + // IsDraft: Boolean indicating if the mail is draft + IsDraft bool `json:"isDraft,omitempty"` + + // IsInbox: Boolean indicating if the mail is in inbox + IsInbox bool `json:"isInbox,omitempty"` + + // IsSent: Boolean indicating if the mail is in 'sent mails' + IsSent bool `json:"isSent,omitempty"` + + // IsStarred: Boolean indicating if the mail is starred + IsStarred bool `json:"isStarred,omitempty"` + + // IsTrash: Boolean indicating if the mail is in trash + IsTrash bool `json:"isTrash,omitempty"` + + // IsUnread: Boolean indicating if the mail is unread + IsUnread bool `json:"isUnread,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // Labels: List of labels (strings) + Labels []string `json:"labels,omitempty"` +} + +// method id "emailMigration.mail.insert": + +type MailInsertCall struct { + s *Service + userKey string + mailitem *MailItem + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Insert Mail into Google's Gmail backends +func (r *MailService) Insert(userKey string, mailitem *MailItem) *MailInsertCall { + c := &MailInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.mailitem = mailitem + return c +} +func (c *MailInsertCall) Media(r io.Reader) *MailInsertCall { + c.media_ = r + return c +} + +func (c *MailInsertCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.mailitem) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{userKey}/mail") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Insert Mail into Google's Gmail backends", + // "httpMethod": "POST", + // "id": "emailMigration.mail.insert", + // "mediaUpload": { + // "accept": [ + // "message/rfc822" + // ], + // "maxSize": "35MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/email/v2/users/{userKey}/mail" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/email/v2/users/{userKey}/mail" + // } + // } + // }, + // "parameterOrder": [ + // "userKey" + // ], + // "parameters": { + // "userKey": { + // "description": "The email or immutable id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{userKey}/mail", + // "request": { + // "$ref": "MailItem" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/email.migration" + // ], + // "supportsMediaUpload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-api.json b/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-api.json new file mode 100644 index 0000000000000..5ad0599f8fc18 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-api.json @@ -0,0 +1,728 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/WhvzCm5J5nAWPdnVXhGkrRz8-Wc\"", + "discoveryVersion": "v1", + "id": "admin:reports_v1", + "name": "admin", + "canonicalName": "reports", + "version": "reports_v1", + "title": "Admin Reports API", + "description": "Allows the administrators of Google Apps customers to fetch reports about the usage, collaboration, security and risk for their users.", + "ownerDomain": "google.com", + "ownerName": "Google", + "packagePath": "admin", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/admin-sdk/reports/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/admin/reports/v1/", + "basePath": "/admin/reports/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "admin/reports/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/admin.reports.audit.readonly": { + "description": "View audit reports of Google Apps for your domain" + }, + "https://www.googleapis.com/auth/admin.reports.usage.readonly": { + "description": "View usage reports of Google Apps for your domain" + } + } + } + }, + "schemas": { + "Activities": { + "id": "Activities", + "type": "object", + "description": "JSON template for a collection of activites.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "Each record in read response.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Kind of list response this is.", + "default": "admin#reports#activities" + }, + "nextPageToken": { + "type": "string", + "description": "Token for retrieving the next page" + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "description": "JSON template for the activity resource.", + "properties": { + "actor": { + "type": "object", + "description": "User doing the action.", + "properties": { + "callerType": { + "type": "string", + "description": "User or OAuth 2LO request." + }, + "email": { + "type": "string", + "description": "Email address of the user." + }, + "key": { + "type": "string", + "description": "For OAuth 2LO API requests, consumer_key of the requestor." + }, + "profileId": { + "type": "string", + "description": "Obfuscated user id of the user." + } + } + }, + "etag": { + "type": "string", + "description": "ETag of the entry." + }, + "events": { + "type": "array", + "description": "Activity events.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of event." + }, + "parameters": { + "type": "array", + "description": "Parameter value pairs for various applications.", + "items": { + "type": "object", + "properties": { + "boolValue": { + "type": "boolean", + "description": "Boolean value of the parameter." + }, + "intValue": { + "type": "string", + "description": "Integral value of the parameter.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "The name of the parameter." + }, + "value": { + "type": "string", + "description": "String value of the parameter." + } + } + } + }, + "type": { + "type": "string", + "description": "Type of event." + } + } + } + }, + "id": { + "type": "object", + "description": "Unique identifier for each activity record.", + "properties": { + "applicationName": { + "type": "string", + "description": "Application name to which the event belongs." + }, + "customerId": { + "type": "string", + "description": "Obfuscated customer ID of the source customer." + }, + "time": { + "type": "string", + "description": "Time of occurrence of the activity.", + "format": "date-time" + }, + "uniqueQualifier": { + "type": "string", + "description": "Unique qualifier if multiple events have the same time.", + "format": "int64" + } + } + }, + "ipAddress": { + "type": "string", + "description": "IP Address of the user doing the action." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "admin#reports#activity" + }, + "ownerDomain": { + "type": "string", + "description": "Domain of source customer." + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "An notification channel used to watch for resource changes.", + "properties": { + "address": { + "type": "string", + "description": "The address where notifications are delivered for this channel." + }, + "expiration": { + "type": "string", + "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "A UUID or similar unique string that identifies this channel." + }, + "kind": { + "type": "string", + "description": "Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed string \"api#channel\".", + "default": "api#channel" + }, + "params": { + "type": "object", + "description": "Additional parameters controlling delivery channel behavior. Optional.", + "additionalProperties": { + "type": "string", + "description": "Declares a new parameter by name." + } + }, + "payload": { + "type": "boolean", + "description": "A Boolean value to indicate whether payload is wanted. Optional." + }, + "resourceId": { + "type": "string", + "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions." + }, + "resourceUri": { + "type": "string", + "description": "A version-specific identifier for the watched resource." + }, + "token": { + "type": "string", + "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional." + }, + "type": { + "type": "string", + "description": "The type of delivery mechanism used for this channel." + } + } + }, + "UsageReport": { + "id": "UsageReport", + "type": "object", + "description": "JSON template for a usage report.", + "properties": { + "date": { + "type": "string", + "description": "The date to which the record belongs.", + "readOnly": true + }, + "entity": { + "type": "object", + "description": "Information about the type of the item.", + "readOnly": true, + "properties": { + "customerId": { + "type": "string", + "description": "Obfuscated customer id for the record.", + "readOnly": true + }, + "profileId": { + "type": "string", + "description": "Obfuscated user id for the record.", + "readOnly": true + }, + "type": { + "type": "string", + "description": "The type of item, can be a customer or user.", + "readOnly": true + }, + "userEmail": { + "type": "string", + "description": "user's email.", + "readOnly": true + } + } + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "The kind of object.", + "default": "admin#reports#usageReport" + }, + "parameters": { + "type": "array", + "description": "Parameter value pairs for various applications.", + "readOnly": true, + "items": { + "type": "object", + "properties": { + "boolValue": { + "type": "boolean", + "description": "Boolean value of the parameter.", + "readOnly": true + }, + "datetimeValue": { + "type": "string", + "description": "RFC 3339 formatted value of the parameter.", + "format": "date-time", + "readOnly": true + }, + "intValue": { + "type": "string", + "description": "Integral value of the parameter.", + "format": "int64", + "readOnly": true + }, + "msgValue": { + "type": "array", + "description": "Nested message value of the parameter.", + "readOnly": true, + "items": { + "type": "object", + "additionalProperties": { + "type": "any" + } + } + }, + "name": { + "type": "string", + "description": "The name of the parameter." + }, + "stringValue": { + "type": "string", + "description": "String value of the parameter.", + "readOnly": true + } + } + } + } + } + }, + "UsageReports": { + "id": "UsageReports", + "type": "object", + "description": "JSON template for a collection of usage reports.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "The kind of object.", + "default": "admin#reports#usageReports" + }, + "nextPageToken": { + "type": "string", + "description": "Token for retrieving the next page" + }, + "usageReports": { + "type": "array", + "description": "Various application parameter records.", + "items": { + "$ref": "UsageReport" + } + }, + "warnings": { + "type": "array", + "description": "Warnings if any.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Machine readable code / warning type." + }, + "data": { + "type": "array", + "description": "Key-Value pairs to give detailed information on the warning.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key associated with a key-value pair to give detailed information on the warning." + }, + "value": { + "type": "string", + "description": "Value associated with a key-value pair to give detailed information on the warning." + } + } + } + }, + "message": { + "type": "string", + "description": "Human readable message for the warning." + } + } + } + } + } + } + }, + "resources": { + "activities": { + "methods": { + "list": { + "id": "reports.activities.list", + "path": "activity/users/{userKey}/applications/{applicationName}", + "httpMethod": "GET", + "description": "Retrieves a list of activities for a specific customer and application.", + "parameters": { + "actorIpAddress": { + "type": "string", + "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + "location": "query" + }, + "applicationName": { + "type": "string", + "description": "Application name for which the events are to be retrieved.", + "required": true, + "pattern": "(admin)|(docs)|(login)", + "location": "path" + }, + "customerId": { + "type": "string", + "description": "Represents the customer for which the data is to be fetched.", + "pattern": "C.+", + "location": "query" + }, + "endTime": { + "type": "string", + "description": "Return events which occured at or before this time.", + "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + "location": "query" + }, + "eventName": { + "type": "string", + "description": "Name of the event being queried.", + "location": "query" + }, + "filters": { + "type": "string", + "description": "Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2 name][operator][parameter2 value],...", + "pattern": "(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+,)*(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+)", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Number of activity records to be shown in each page.", + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page.", + "location": "query" + }, + "startTime": { + "type": "string", + "description": "Return events which occured at or after this time.", + "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Represents the profile id or the user email for which the data should be filtered. When 'all' is specified as the userKey, it returns usageReports for all users.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "applicationName" + ], + "response": { + "$ref": "Activities" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.reports.audit.readonly" + ], + "supportsSubscription": true + }, + "watch": { + "id": "reports.activities.watch", + "path": "activity/users/{userKey}/applications/{applicationName}/watch", + "httpMethod": "POST", + "description": "Push changes to activities", + "parameters": { + "actorIpAddress": { + "type": "string", + "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + "location": "query" + }, + "applicationName": { + "type": "string", + "description": "Application name for which the events are to be retrieved.", + "required": true, + "pattern": "(admin)|(docs)|(login)", + "location": "path" + }, + "customerId": { + "type": "string", + "description": "Represents the customer for which the data is to be fetched.", + "pattern": "C.+", + "location": "query" + }, + "endTime": { + "type": "string", + "description": "Return events which occured at or before this time.", + "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + "location": "query" + }, + "eventName": { + "type": "string", + "description": "Name of the event being queried.", + "location": "query" + }, + "filters": { + "type": "string", + "description": "Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2 name][operator][parameter2 value],...", + "pattern": "(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+,)*(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+)", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Number of activity records to be shown in each page.", + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page.", + "location": "query" + }, + "startTime": { + "type": "string", + "description": "Return events which occured at or after this time.", + "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Represents the profile id or the user email for which the data should be filtered. When 'all' is specified as the userKey, it returns usageReports for all users.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "applicationName" + ], + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.reports.audit.readonly" + ], + "supportsSubscription": true + } + } + }, + "channels": { + "methods": { + "stop": { + "id": "admin.channels.stop", + "path": "/admin/reports_v1/channels/stop", + "httpMethod": "POST", + "description": "Stop watching resources through this channel", + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.reports.audit.readonly" + ] + } + } + }, + "customerUsageReports": { + "methods": { + "get": { + "id": "reports.customerUsageReports.get", + "path": "usage/dates/{date}", + "httpMethod": "GET", + "description": "Retrieves a report which is a collection of properties / statistics for a specific customer.", + "parameters": { + "customerId": { + "type": "string", + "description": "Represents the customer for which the data is to be fetched.", + "pattern": "C.+", + "location": "query" + }, + "date": { + "type": "string", + "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.", + "required": true, + "pattern": "(\\d){4}-(\\d){2}-(\\d){2}", + "location": "path" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page.", + "location": "query" + }, + "parameters": { + "type": "string", + "description": "Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.", + "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+)", + "location": "query" + } + }, + "parameterOrder": [ + "date" + ], + "response": { + "$ref": "UsageReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.reports.usage.readonly" + ] + } + } + }, + "userUsageReport": { + "methods": { + "get": { + "id": "reports.userUsageReport.get", + "path": "usage/users/{userKey}/dates/{date}", + "httpMethod": "GET", + "description": "Retrieves a report which is a collection of properties / statistics for a set of users.", + "parameters": { + "customerId": { + "type": "string", + "description": "Represents the customer for which the data is to be fetched.", + "pattern": "C.+", + "location": "query" + }, + "date": { + "type": "string", + "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.", + "required": true, + "pattern": "(\\d){4}-(\\d){2}-(\\d){2}", + "location": "path" + }, + "filters": { + "type": "string", + "description": "Represents the set of filters including parameter operator value.", + "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+[\u003c,\u003c=,==,\u003e=,\u003e,!=].+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+[\u003c,\u003c=,==,\u003e=,\u003e,!=].+)", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return. Maximum allowed is 1000", + "format": "uint32", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page.", + "location": "query" + }, + "parameters": { + "type": "string", + "description": "Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.", + "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+)", + "location": "query" + }, + "userKey": { + "type": "string", + "description": "Represents the profile id or the user email for which the data should be filtered.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userKey", + "date" + ], + "response": { + "$ref": "UsageReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/admin.reports.usage.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-gen.go b/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-gen.go new file mode 100644 index 0000000000000..a99fa2a6ae426 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/admin/reports_v1/admin-gen.go @@ -0,0 +1,1081 @@ +// Package admin provides access to the Admin Reports API. +// +// See https://developers.google.com/admin-sdk/reports/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/admin/reports_v1" +// ... +// adminService, err := admin.New(oauthHttpClient) +package admin + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "admin:reports_v1" +const apiName = "admin" +const apiVersion = "reports_v1" +const basePath = "https://www.googleapis.com/admin/reports/v1/" + +// OAuth2 scopes used by this API. +const ( + // View audit reports of Google Apps for your domain + AdminReportsAuditReadonlyScope = "https://www.googleapis.com/auth/admin.reports.audit.readonly" + + // View usage reports of Google Apps for your domain + AdminReportsUsageReadonlyScope = "https://www.googleapis.com/auth/admin.reports.usage.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Activities = NewActivitiesService(s) + s.Channels = NewChannelsService(s) + s.CustomerUsageReports = NewCustomerUsageReportsService(s) + s.UserUsageReport = NewUserUsageReportService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Activities *ActivitiesService + + Channels *ChannelsService + + CustomerUsageReports *CustomerUsageReportsService + + UserUsageReport *UserUsageReportService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewCustomerUsageReportsService(s *Service) *CustomerUsageReportsService { + rs := &CustomerUsageReportsService{s: s} + return rs +} + +type CustomerUsageReportsService struct { + s *Service +} + +func NewUserUsageReportService(s *Service) *UserUsageReportService { + rs := &UserUsageReportService{s: s} + return rs +} + +type UserUsageReportService struct { + s *Service +} + +type Activities struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: Each record in read response. + Items []*Activity `json:"items,omitempty"` + + // Kind: Kind of list response this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token for retrieving the next page + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Activity struct { + // Actor: User doing the action. + Actor *ActivityActor `json:"actor,omitempty"` + + // Etag: ETag of the entry. + Etag string `json:"etag,omitempty"` + + // Events: Activity events. + Events []*ActivityEvents `json:"events,omitempty"` + + // Id: Unique identifier for each activity record. + Id *ActivityId `json:"id,omitempty"` + + // IpAddress: IP Address of the user doing the action. + IpAddress string `json:"ipAddress,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OwnerDomain: Domain of source customer. + OwnerDomain string `json:"ownerDomain,omitempty"` +} + +type ActivityActor struct { + // CallerType: User or OAuth 2LO request. + CallerType string `json:"callerType,omitempty"` + + // Email: Email address of the user. + Email string `json:"email,omitempty"` + + // Key: For OAuth 2LO API requests, consumer_key of the requestor. + Key string `json:"key,omitempty"` + + // ProfileId: Obfuscated user id of the user. + ProfileId string `json:"profileId,omitempty"` +} + +type ActivityEvents struct { + // Name: Name of event. + Name string `json:"name,omitempty"` + + // Parameters: Parameter value pairs for various applications. + Parameters []*ActivityEventsParameters `json:"parameters,omitempty"` + + // Type: Type of event. + Type string `json:"type,omitempty"` +} + +type ActivityEventsParameters struct { + // BoolValue: Boolean value of the parameter. + BoolValue bool `json:"boolValue,omitempty"` + + // IntValue: Integral value of the parameter. + IntValue int64 `json:"intValue,omitempty,string"` + + // Name: The name of the parameter. + Name string `json:"name,omitempty"` + + // Value: String value of the parameter. + Value string `json:"value,omitempty"` +} + +type ActivityId struct { + // ApplicationName: Application name to which the event belongs. + ApplicationName string `json:"applicationName,omitempty"` + + // CustomerId: Obfuscated customer ID of the source customer. + CustomerId string `json:"customerId,omitempty"` + + // Time: Time of occurrence of the activity. + Time string `json:"time,omitempty"` + + // UniqueQualifier: Unique qualifier if multiple events have the same + // time. + UniqueQualifier int64 `json:"uniqueQualifier,omitempty,string"` +} + +type Channel struct { + // Address: The address where notifications are delivered for this + // channel. + Address string `json:"address,omitempty"` + + // Expiration: Date and time of notification channel expiration, + // expressed as a Unix timestamp, in milliseconds. Optional. + Expiration int64 `json:"expiration,omitempty,string"` + + // Id: A UUID or similar unique string that identifies this channel. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a notification channel used to watch for + // changes to a resource. Value: the fixed string "api#channel". + Kind string `json:"kind,omitempty"` + + // Params: Additional parameters controlling delivery channel behavior. + // Optional. + Params map[string]string `json:"params,omitempty"` + + // Payload: A Boolean value to indicate whether payload is wanted. + // Optional. + Payload bool `json:"payload,omitempty"` + + // ResourceId: An opaque ID that identifies the resource being watched + // on this channel. Stable across different API versions. + ResourceId string `json:"resourceId,omitempty"` + + // ResourceUri: A version-specific identifier for the watched resource. + ResourceUri string `json:"resourceUri,omitempty"` + + // Token: An arbitrary string delivered to the target address with each + // notification delivered over this channel. Optional. + Token string `json:"token,omitempty"` + + // Type: The type of delivery mechanism used for this channel. + Type string `json:"type,omitempty"` +} + +type UsageReport struct { + // Date: The date to which the record belongs. + Date string `json:"date,omitempty"` + + // Entity: Information about the type of the item. + Entity *UsageReportEntity `json:"entity,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of object. + Kind string `json:"kind,omitempty"` + + // Parameters: Parameter value pairs for various applications. + Parameters []*UsageReportParameters `json:"parameters,omitempty"` +} + +type UsageReportEntity struct { + // CustomerId: Obfuscated customer id for the record. + CustomerId string `json:"customerId,omitempty"` + + // ProfileId: Obfuscated user id for the record. + ProfileId string `json:"profileId,omitempty"` + + // Type: The type of item, can be a customer or user. + Type string `json:"type,omitempty"` + + // UserEmail: user's email. + UserEmail string `json:"userEmail,omitempty"` +} + +type UsageReportParameters struct { + // BoolValue: Boolean value of the parameter. + BoolValue bool `json:"boolValue,omitempty"` + + // DatetimeValue: RFC 3339 formatted value of the parameter. + DatetimeValue string `json:"datetimeValue,omitempty"` + + // IntValue: Integral value of the parameter. + IntValue int64 `json:"intValue,omitempty,string"` + + // MsgValue: Nested message value of the parameter. + MsgValue []*UsageReportParametersMsgValue `json:"msgValue,omitempty"` + + // Name: The name of the parameter. + Name string `json:"name,omitempty"` + + // StringValue: String value of the parameter. + StringValue string `json:"stringValue,omitempty"` +} + +type UsageReportParametersMsgValue struct { +} + +type UsageReports struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of object. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token for retrieving the next page + NextPageToken string `json:"nextPageToken,omitempty"` + + // UsageReports: Various application parameter records. + UsageReports []*UsageReport `json:"usageReports,omitempty"` + + // Warnings: Warnings if any. + Warnings []*UsageReportsWarnings `json:"warnings,omitempty"` +} + +type UsageReportsWarnings struct { + // Code: Machine readable code / warning type. + Code string `json:"code,omitempty"` + + // Data: Key-Value pairs to give detailed information on the warning. + Data []*UsageReportsWarningsData `json:"data,omitempty"` + + // Message: Human readable message for the warning. + Message string `json:"message,omitempty"` +} + +type UsageReportsWarningsData struct { + // Key: Key associated with a key-value pair to give detailed + // information on the warning. + Key string `json:"key,omitempty"` + + // Value: Value associated with a key-value pair to give detailed + // information on the warning. + Value string `json:"value,omitempty"` +} + +// method id "reports.activities.list": + +type ActivitiesListCall struct { + s *Service + userKey string + applicationName string + opt_ map[string]interface{} +} + +// List: Retrieves a list of activities for a specific customer and +// application. +func (r *ActivitiesService) List(userKey string, applicationName string) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.applicationName = applicationName + return c +} + +// ActorIpAddress sets the optional parameter "actorIpAddress": IP +// Address of host where the event was performed. Supports both IPv4 and +// IPv6 addresses. +func (c *ActivitiesListCall) ActorIpAddress(actorIpAddress string) *ActivitiesListCall { + c.opt_["actorIpAddress"] = actorIpAddress + return c +} + +// CustomerId sets the optional parameter "customerId": Represents the +// customer for which the data is to be fetched. +func (c *ActivitiesListCall) CustomerId(customerId string) *ActivitiesListCall { + c.opt_["customerId"] = customerId + return c +} + +// EndTime sets the optional parameter "endTime": Return events which +// occured at or before this time. +func (c *ActivitiesListCall) EndTime(endTime string) *ActivitiesListCall { + c.opt_["endTime"] = endTime + return c +} + +// EventName sets the optional parameter "eventName": Name of the event +// being queried. +func (c *ActivitiesListCall) EventName(eventName string) *ActivitiesListCall { + c.opt_["eventName"] = eventName + return c +} + +// Filters sets the optional parameter "filters": Event parameters in +// the form [parameter1 name][operator][parameter1 value],[parameter2 +// name][operator][parameter2 value],... +func (c *ActivitiesListCall) Filters(filters string) *ActivitiesListCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "maxResults": Number of +// activity records to be shown in each page. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page. +func (c *ActivitiesListCall) PageToken(pageToken string) *ActivitiesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartTime sets the optional parameter "startTime": Return events +// which occured at or after this time. +func (c *ActivitiesListCall) StartTime(startTime string) *ActivitiesListCall { + c.opt_["startTime"] = startTime + return c +} + +func (c *ActivitiesListCall) Do() (*Activities, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["actorIpAddress"]; ok { + params.Set("actorIpAddress", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endTime"]; ok { + params.Set("endTime", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventName"]; ok { + params.Set("eventName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startTime"]; ok { + params.Set("startTime", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activity/users/{userKey}/applications/{applicationName}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationName}", url.QueryEscape(c.applicationName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activities) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of activities for a specific customer and application.", + // "httpMethod": "GET", + // "id": "reports.activities.list", + // "parameterOrder": [ + // "userKey", + // "applicationName" + // ], + // "parameters": { + // "actorIpAddress": { + // "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + // "location": "query", + // "type": "string" + // }, + // "applicationName": { + // "description": "Application name for which the events are to be retrieved.", + // "location": "path", + // "pattern": "(admin)|(docs)|(login)", + // "required": true, + // "type": "string" + // }, + // "customerId": { + // "description": "Represents the customer for which the data is to be fetched.", + // "location": "query", + // "pattern": "C.+", + // "type": "string" + // }, + // "endTime": { + // "description": "Return events which occured at or before this time.", + // "location": "query", + // "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + // "type": "string" + // }, + // "eventName": { + // "description": "Name of the event being queried.", + // "location": "query", + // "type": "string" + // }, + // "filters": { + // "description": "Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2 name][operator][parameter2 value],...", + // "location": "query", + // "pattern": "(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+,)*(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+)", + // "type": "string" + // }, + // "maxResults": { + // "description": "Number of activity records to be shown in each page.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page.", + // "location": "query", + // "type": "string" + // }, + // "startTime": { + // "description": "Return events which occured at or after this time.", + // "location": "query", + // "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + // "type": "string" + // }, + // "userKey": { + // "description": "Represents the profile id or the user email for which the data should be filtered. When 'all' is specified as the userKey, it returns usageReports for all users.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activity/users/{userKey}/applications/{applicationName}", + // "response": { + // "$ref": "Activities" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.reports.audit.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "reports.activities.watch": + +type ActivitiesWatchCall struct { + s *Service + userKey string + applicationName string + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Push changes to activities +func (r *ActivitiesService) Watch(userKey string, applicationName string, channel *Channel) *ActivitiesWatchCall { + c := &ActivitiesWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.applicationName = applicationName + c.channel = channel + return c +} + +// ActorIpAddress sets the optional parameter "actorIpAddress": IP +// Address of host where the event was performed. Supports both IPv4 and +// IPv6 addresses. +func (c *ActivitiesWatchCall) ActorIpAddress(actorIpAddress string) *ActivitiesWatchCall { + c.opt_["actorIpAddress"] = actorIpAddress + return c +} + +// CustomerId sets the optional parameter "customerId": Represents the +// customer for which the data is to be fetched. +func (c *ActivitiesWatchCall) CustomerId(customerId string) *ActivitiesWatchCall { + c.opt_["customerId"] = customerId + return c +} + +// EndTime sets the optional parameter "endTime": Return events which +// occured at or before this time. +func (c *ActivitiesWatchCall) EndTime(endTime string) *ActivitiesWatchCall { + c.opt_["endTime"] = endTime + return c +} + +// EventName sets the optional parameter "eventName": Name of the event +// being queried. +func (c *ActivitiesWatchCall) EventName(eventName string) *ActivitiesWatchCall { + c.opt_["eventName"] = eventName + return c +} + +// Filters sets the optional parameter "filters": Event parameters in +// the form [parameter1 name][operator][parameter1 value],[parameter2 +// name][operator][parameter2 value],... +func (c *ActivitiesWatchCall) Filters(filters string) *ActivitiesWatchCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "maxResults": Number of +// activity records to be shown in each page. +func (c *ActivitiesWatchCall) MaxResults(maxResults int64) *ActivitiesWatchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page. +func (c *ActivitiesWatchCall) PageToken(pageToken string) *ActivitiesWatchCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartTime sets the optional parameter "startTime": Return events +// which occured at or after this time. +func (c *ActivitiesWatchCall) StartTime(startTime string) *ActivitiesWatchCall { + c.opt_["startTime"] = startTime + return c +} + +func (c *ActivitiesWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["actorIpAddress"]; ok { + params.Set("actorIpAddress", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endTime"]; ok { + params.Set("endTime", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventName"]; ok { + params.Set("eventName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startTime"]; ok { + params.Set("startTime", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activity/users/{userKey}/applications/{applicationName}/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationName}", url.QueryEscape(c.applicationName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Push changes to activities", + // "httpMethod": "POST", + // "id": "reports.activities.watch", + // "parameterOrder": [ + // "userKey", + // "applicationName" + // ], + // "parameters": { + // "actorIpAddress": { + // "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + // "location": "query", + // "type": "string" + // }, + // "applicationName": { + // "description": "Application name for which the events are to be retrieved.", + // "location": "path", + // "pattern": "(admin)|(docs)|(login)", + // "required": true, + // "type": "string" + // }, + // "customerId": { + // "description": "Represents the customer for which the data is to be fetched.", + // "location": "query", + // "pattern": "C.+", + // "type": "string" + // }, + // "endTime": { + // "description": "Return events which occured at or before this time.", + // "location": "query", + // "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + // "type": "string" + // }, + // "eventName": { + // "description": "Name of the event being queried.", + // "location": "query", + // "type": "string" + // }, + // "filters": { + // "description": "Event parameters in the form [parameter1 name][operator][parameter1 value],[parameter2 name][operator][parameter2 value],...", + // "location": "query", + // "pattern": "(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+,)*(.+[\u003c,\u003c=,==,\u003e=,\u003e,\u003c\u003e].+)", + // "type": "string" + // }, + // "maxResults": { + // "description": "Number of activity records to be shown in each page.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page.", + // "location": "query", + // "type": "string" + // }, + // "startTime": { + // "description": "Return events which occured at or after this time.", + // "location": "query", + // "pattern": "(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)T(\\d\\d):(\\d\\d):(\\d\\d)(?:\\.(\\d+))?(?:(Z)|([-+])(\\d\\d):(\\d\\d))", + // "type": "string" + // }, + // "userKey": { + // "description": "Represents the profile id or the user email for which the data should be filtered. When 'all' is specified as the userKey, it returns usageReports for all users.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activity/users/{userKey}/applications/{applicationName}/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.reports.audit.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "admin.channels.stop": + +type ChannelsStopCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Stop: Stop watching resources through this channel +func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { + c := &ChannelsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +func (c *ChannelsStopCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "/admin/reports_v1/channels/stop") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Stop watching resources through this channel", + // "httpMethod": "POST", + // "id": "admin.channels.stop", + // "path": "/admin/reports_v1/channels/stop", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.reports.audit.readonly" + // ] + // } + +} + +// method id "reports.customerUsageReports.get": + +type CustomerUsageReportsGetCall struct { + s *Service + date string + opt_ map[string]interface{} +} + +// Get: Retrieves a report which is a collection of properties / +// statistics for a specific customer. +func (r *CustomerUsageReportsService) Get(date string) *CustomerUsageReportsGetCall { + c := &CustomerUsageReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.date = date + return c +} + +// CustomerId sets the optional parameter "customerId": Represents the +// customer for which the data is to be fetched. +func (c *CustomerUsageReportsGetCall) CustomerId(customerId string) *CustomerUsageReportsGetCall { + c.opt_["customerId"] = customerId + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page. +func (c *CustomerUsageReportsGetCall) PageToken(pageToken string) *CustomerUsageReportsGetCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Parameters sets the optional parameter "parameters": Represents the +// application name, parameter name pairs to fetch in csv as +// app_name1:param_name1, app_name2:param_name2. +func (c *CustomerUsageReportsGetCall) Parameters(parameters string) *CustomerUsageReportsGetCall { + c.opt_["parameters"] = parameters + return c +} + +func (c *CustomerUsageReportsGetCall) Do() (*UsageReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["parameters"]; ok { + params.Set("parameters", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "usage/dates/{date}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{date}", url.QueryEscape(c.date), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UsageReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report which is a collection of properties / statistics for a specific customer.", + // "httpMethod": "GET", + // "id": "reports.customerUsageReports.get", + // "parameterOrder": [ + // "date" + // ], + // "parameters": { + // "customerId": { + // "description": "Represents the customer for which the data is to be fetched.", + // "location": "query", + // "pattern": "C.+", + // "type": "string" + // }, + // "date": { + // "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.", + // "location": "path", + // "pattern": "(\\d){4}-(\\d){2}-(\\d){2}", + // "required": true, + // "type": "string" + // }, + // "pageToken": { + // "description": "Token to specify next page.", + // "location": "query", + // "type": "string" + // }, + // "parameters": { + // "description": "Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.", + // "location": "query", + // "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+)", + // "type": "string" + // } + // }, + // "path": "usage/dates/{date}", + // "response": { + // "$ref": "UsageReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.reports.usage.readonly" + // ] + // } + +} + +// method id "reports.userUsageReport.get": + +type UserUsageReportGetCall struct { + s *Service + userKey string + date string + opt_ map[string]interface{} +} + +// Get: Retrieves a report which is a collection of properties / +// statistics for a set of users. +func (r *UserUsageReportService) Get(userKey string, date string) *UserUsageReportGetCall { + c := &UserUsageReportGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userKey = userKey + c.date = date + return c +} + +// CustomerId sets the optional parameter "customerId": Represents the +// customer for which the data is to be fetched. +func (c *UserUsageReportGetCall) CustomerId(customerId string) *UserUsageReportGetCall { + c.opt_["customerId"] = customerId + return c +} + +// Filters sets the optional parameter "filters": Represents the set of +// filters including parameter operator value. +func (c *UserUsageReportGetCall) Filters(filters string) *UserUsageReportGetCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. Maximum allowed is 1000 +func (c *UserUsageReportGetCall) MaxResults(maxResults int64) *UserUsageReportGetCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page. +func (c *UserUsageReportGetCall) PageToken(pageToken string) *UserUsageReportGetCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Parameters sets the optional parameter "parameters": Represents the +// application name, parameter name pairs to fetch in csv as +// app_name1:param_name1, app_name2:param_name2. +func (c *UserUsageReportGetCall) Parameters(parameters string) *UserUsageReportGetCall { + c.opt_["parameters"] = parameters + return c +} + +func (c *UserUsageReportGetCall) Do() (*UsageReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["parameters"]; ok { + params.Set("parameters", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "usage/users/{userKey}/dates/{date}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userKey}", url.QueryEscape(c.userKey), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{date}", url.QueryEscape(c.date), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UsageReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report which is a collection of properties / statistics for a set of users.", + // "httpMethod": "GET", + // "id": "reports.userUsageReport.get", + // "parameterOrder": [ + // "userKey", + // "date" + // ], + // "parameters": { + // "customerId": { + // "description": "Represents the customer for which the data is to be fetched.", + // "location": "query", + // "pattern": "C.+", + // "type": "string" + // }, + // "date": { + // "description": "Represents the date in yyyy-mm-dd format for which the data is to be fetched.", + // "location": "path", + // "pattern": "(\\d){4}-(\\d){2}-(\\d){2}", + // "required": true, + // "type": "string" + // }, + // "filters": { + // "description": "Represents the set of filters including parameter operator value.", + // "location": "query", + // "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+[\u003c,\u003c=,==,\u003e=,\u003e,!=].+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+[\u003c,\u003c=,==,\u003e=,\u003e,!=].+)", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return. Maximum allowed is 1000", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page.", + // "location": "query", + // "type": "string" + // }, + // "parameters": { + // "description": "Represents the application name, parameter name pairs to fetch in csv as app_name1:param_name1, app_name2:param_name2.", + // "location": "query", + // "pattern": "(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+,)*(((accounts)|(gmail)|(calendar)|(docs)|(gplus)):.+)", + // "type": "string" + // }, + // "userKey": { + // "description": "Represents the profile id or the user email for which the data should be filtered.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "usage/users/{userKey}/dates/{date}", + // "response": { + // "$ref": "UsageReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/admin.reports.usage.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-api.json new file mode 100644 index 0000000000000..270909445a866 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-api.json @@ -0,0 +1,1402 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"BgGnx7p-6wsAbOn4St99QhtBGbA/Ar5QHvnrmRKxw_c_OM9xYoUzlFI\"", + "discoveryVersion": "v1", + "id": "adsense:v1.1", + "name": "adsense", + "canonicalName": "AdSense", + "version": "v1.1", + "revision": "20130712", + "title": "AdSense Management API", + "description": "Gives AdSense publishers access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/management/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsense/v1.1/", + "basePath": "/adsense/v1.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsense/v1.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsense": { + "description": "View and manage your AdSense data" + }, + "https://www.googleapis.com/auth/adsense.readonly": { + "description": "View your AdSense data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#account.", + "default": "adsense#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + }, + "subAccounts": { + "type": "array", + "description": "Sub accounts of the this account.", + "items": { + "$ref": "Account" + } + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The accounts returned in this list response.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#accounts.", + "default": "adsense#accounts" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through accounts. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adClient.", + "default": "adsense#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adClients.", + "default": "adsense#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adUnit.", + "default": "adsense#adUnit" + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adUnits.", + "default": "adsense#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdsenseReportsGenerateResponse": { + "id": "AdsenseReportsGenerateResponse", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#report.", + "default": "adsense#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#customChannel.", + "default": "adsense#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#customChannels.", + "default": "adsense#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#urlChannel.", + "default": "adsense#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#urlChannels.", + "default": "adsense#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adsense.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about.", + "required": true, + "location": "path" + }, + "tree": { + "type": "boolean", + "description": "Whether the tree of sub accounts should be returned.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "List all accounts available to this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of accounts to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adsense.accounts.adclients.list", + "path": "accounts/{accountId}/adclients", + "httpMethod": "GET", + "description": "List all ad clients in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list ad clients.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.accounts.adunits.get", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.accounts.adunits.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.accounts.customchannels.get", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.accounts.customchannels.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.generate", + "path": "accounts/{accountId}/reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account upon which to report.", + "required": true, + "location": "path" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.accounts.urlchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "adclients": { + "methods": { + "list": { + "id": "adsense.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Accounts upon which to report.", + "repeated": true, + "location": "query" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-gen.go new file mode 100644 index 0000000000000..6d45aac112afd --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.1/adsense-gen.go @@ -0,0 +1,2787 @@ +// Package adsense provides access to the AdSense Management API. +// +// See https://developers.google.com/adsense/management/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsense/v1.1" +// ... +// adsenseService, err := adsense.New(oauthHttpClient) +package adsense + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsense:v1.1" +const apiName = "adsense" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/adsense/v1.1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense data + AdsenseScope = "https://www.googleapis.com/auth/adsense" + + // View your AdSense data + AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Reports = NewReportsService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Accounts *AccountsService + + Adclients *AdclientsService + + Adunits *AdunitsService + + Customchannels *CustomchannelsService + + Reports *ReportsService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + rs.Adclients = NewAccountsAdclientsService(s) + rs.Adunits = NewAccountsAdunitsService(s) + rs.Customchannels = NewAccountsCustomchannelsService(s) + rs.Reports = NewAccountsReportsService(s) + rs.Urlchannels = NewAccountsUrlchannelsService(s) + return rs +} + +type AccountsService struct { + s *Service + + Adclients *AccountsAdclientsService + + Adunits *AccountsAdunitsService + + Customchannels *AccountsCustomchannelsService + + Reports *AccountsReportsService + + Urlchannels *AccountsUrlchannelsService +} + +func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService { + rs := &AccountsAdclientsService{s: s} + return rs +} + +type AccountsAdclientsService struct { + s *Service +} + +func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService { + rs := &AccountsAdunitsService{s: s} + rs.Customchannels = NewAccountsAdunitsCustomchannelsService(s) + return rs +} + +type AccountsAdunitsService struct { + s *Service + + Customchannels *AccountsAdunitsCustomchannelsService +} + +func NewAccountsAdunitsCustomchannelsService(s *Service) *AccountsAdunitsCustomchannelsService { + rs := &AccountsAdunitsCustomchannelsService{s: s} + return rs +} + +type AccountsAdunitsCustomchannelsService struct { + s *Service +} + +func NewAccountsCustomchannelsService(s *Service) *AccountsCustomchannelsService { + rs := &AccountsCustomchannelsService{s: s} + rs.Adunits = NewAccountsCustomchannelsAdunitsService(s) + return rs +} + +type AccountsCustomchannelsService struct { + s *Service + + Adunits *AccountsCustomchannelsAdunitsService +} + +func NewAccountsCustomchannelsAdunitsService(s *Service) *AccountsCustomchannelsAdunitsService { + rs := &AccountsCustomchannelsAdunitsService{s: s} + return rs +} + +type AccountsCustomchannelsAdunitsService struct { + s *Service +} + +func NewAccountsReportsService(s *Service) *AccountsReportsService { + rs := &AccountsReportsService{s: s} + return rs +} + +type AccountsReportsService struct { + s *Service +} + +func NewAccountsUrlchannelsService(s *Service) *AccountsUrlchannelsService { + rs := &AccountsUrlchannelsService{s: s} + return rs +} + +type AccountsUrlchannelsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` + + // SubAccounts: Sub accounts of the this account. + SubAccounts []*Account `json:"subAccounts,omitempty"` +} + +type Accounts struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The accounts returned in this list response. + Items []*Account `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#accounts. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through accounts. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdClient struct { + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adUnit. + Kind string `json:"kind,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdsenseReportsGenerateResponse struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsense#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type AdsenseReportsGenerateResponseHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsense.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected AdSense account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Tree sets the optional parameter "tree": Whether the tree of sub +// accounts should be returned. +func (c *AccountsGetCall) Tree(tree bool) *AccountsGetCall { + c.opt_["tree"] = tree + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["tree"]; ok { + params.Set("tree", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tree": { + // "description": "Whether the tree of sub accounts should be returned.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all accounts available to this AdSense account. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of accounts to include in the response, used for paging. +func (c *AccountsListCall) MaxResults(maxResults int64) *AccountsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through accounts. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsListCall) PageToken(pageToken string) *AccountsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all accounts available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of accounts to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adclients.list": + +type AccountsAdclientsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all ad clients in the specified account. +func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall { + c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adclients.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list ad clients.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.get": + +type AccountsAdunitsGetCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client for the +// specified account. +func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall { + c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.list": + +type AccountsAdunitsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for the specified +// account. +func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall { + c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.customchannels.list": + +type AccountsAdunitsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AccountsAdunitsCustomchannelsService) List(accountId string, adClientId string, adUnitId string) *AccountsAdunitsCustomchannelsListCall { + c := &AccountsAdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsAdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsAdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsAdunitsCustomchannelsListCall) PageToken(pageToken string) *AccountsAdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.get": + +type AccountsCustomchannelsGetCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client +// for the specified account. +func (r *AccountsCustomchannelsService) Get(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsGetCall { + c := &AccountsCustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *AccountsCustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.list": + +type AccountsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for the +// specified account. +func (r *AccountsCustomchannelsService) List(accountId string, adClientId string) *AccountsCustomchannelsListCall { + c := &AccountsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsCustomchannelsListCall) PageToken(pageToken string) *AccountsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.adunits.list": + +type AccountsCustomchannelsAdunitsListCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *AccountsCustomchannelsAdunitsService) List(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsAdunitsListCall { + c := &AccountsCustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsCustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsCustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsCustomchannelsAdunitsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsCustomchannelsAdunitsListCall) PageToken(pageToken string) *AccountsCustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.generate": + +type AccountsReportsGenerateCall struct { + s *Service + accountId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall { + c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.startDate = startDate + c.endDate = endDate + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *AccountsReportsGenerateCall) Currency(currency string) *AccountsReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.generate", + // "parameterOrder": [ + // "accountId", + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Account upon which to report.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.accounts.urlchannels.list": + +type AccountsUrlchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for the +// specified account. +func (r *AccountsUrlchannelsService) List(accountId string, adClientId string) *AccountsUrlchannelsListCall { + c := &AccountsUrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *AccountsUrlchannelsListCall) MaxResults(maxResults int64) *AccountsUrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsUrlchannelsListCall) PageToken(pageToken string) *AccountsUrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsUrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "accounts/{accountId}/adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.urlchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this AdSense +// account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this +// AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// AccountId sets the optional parameter "accountId": Accounts upon +// which to report. +func (c *ReportsGenerateCall) AccountId(accountId string) *ReportsGenerateCall { + c.opt_["accountId"] = accountId + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["accountId"]; ok { + params.Set("accountId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Accounts upon which to report.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this +// AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1.1/", "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-api.json new file mode 100644 index 0000000000000..37a2d32fcc30b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-api.json @@ -0,0 +1,1948 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/AIo_7F6prmIO5AKtg_utl79123U\"", + "discoveryVersion": "v1", + "id": "adsense:v1.2", + "name": "adsense", + "canonicalName": "AdSense", + "version": "v1.2", + "title": "AdSense Management API", + "description": "Gives AdSense publishers access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/management/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsense/v1.2/", + "basePath": "/adsense/v1.2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsense/v1.2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsense": { + "description": "View and manage your AdSense data" + }, + "https://www.googleapis.com/auth/adsense.readonly": { + "description": "View your AdSense data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#account.", + "default": "adsense#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + }, + "premium": { + "type": "boolean", + "description": "Whether this account is premium." + }, + "subAccounts": { + "type": "array", + "description": "Sub accounts of the this account.", + "items": { + "$ref": "Account" + } + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The accounts returned in this list response.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#accounts.", + "default": "adsense#accounts" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through accounts. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adClient.", + "default": "adsense#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adClients.", + "default": "adsense#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdStyle": { + "id": "AdStyle", + "type": "object", + "properties": { + "colors": { + "type": "object", + "description": "The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.", + "properties": { + "background": { + "type": "string", + "description": "The color of the ad background." + }, + "border": { + "type": "string", + "description": "The color of the ad border." + }, + "text": { + "type": "string", + "description": "The color of the ad text." + }, + "title": { + "type": "string", + "description": "The color of the ad title." + }, + "url": { + "type": "string", + "description": "The color of the ad url." + } + } + }, + "corners": { + "type": "string", + "description": "The style of the corners in the ad." + }, + "font": { + "type": "object", + "description": "The font which is included in the style.", + "properties": { + "family": { + "type": "string", + "description": "The family of the font." + }, + "size": { + "type": "string", + "description": "The size of the font." + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#adStyle.", + "default": "adsense#adStyle" + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "contentAdsSettings": { + "type": "object", + "description": "Settings specific to content ads (AFC) and highend mobile content ads (AFMC).", + "properties": { + "backupOption": { + "type": "object", + "description": "The backup option to be used in instances where no ad is available.", + "properties": { + "color": { + "type": "string", + "description": "Color to use when type is set to COLOR." + }, + "type": { + "type": "string", + "description": "Type of the backup option. Possible values are BLANK, COLOR and URL." + }, + "url": { + "type": "string", + "description": "URL to use when type is set to URL." + } + } + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "customStyle": { + "$ref": "AdStyle", + "description": "Custom style information specific to this ad unit." + }, + "feedAdsSettings": { + "type": "object", + "description": "Settings specific to feed ads (AFF).", + "properties": { + "adPosition": { + "type": "string", + "description": "The position of the ads relative to the feed entries." + }, + "frequency": { + "type": "integer", + "description": "The frequency at which ads should appear in the feed (i.e. every N entries).", + "format": "int32" + }, + "minimumWordCount": { + "type": "integer", + "description": "The minimum length an entry should be in order to have attached ads.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of ads which should appear." + } + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adUnit.", + "default": "adsense#adUnit" + }, + "mobileContentAdsSettings": { + "type": "object", + "description": "Settings specific to WAP mobile content ads (AFMC).", + "properties": { + "markupLanguage": { + "type": "string", + "description": "The markup language to use for this ad unit." + }, + "scriptingLanguage": { + "type": "string", + "description": "The scripting language to use for this ad unit." + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "savedStyleId": { + "type": "string", + "description": "ID of the saved ad style which holds this ad unit's style information." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adUnits.", + "default": "adsense#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdsenseReportsGenerateResponse": { + "id": "AdsenseReportsGenerateResponse", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#report.", + "default": "adsense#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#customChannel.", + "default": "adsense#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#customChannels.", + "default": "adsense#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "SavedAdStyle": { + "id": "SavedAdStyle", + "type": "object", + "properties": { + "adStyle": { + "$ref": "AdStyle", + "description": "The AdStyle itself." + }, + "id": { + "type": "string", + "description": "Unique identifier of this saved ad style. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedAdStyle.", + "default": "adsense#savedAdStyle" + }, + "name": { + "type": "string", + "description": "The user selected name of this SavedAdStyle." + } + } + }, + "SavedAdStyles": { + "id": "SavedAdStyles", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved ad styles returned in this list response.", + "items": { + "$ref": "SavedAdStyle" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedAdStyles.", + "default": "adsense#savedAdStyles" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "SavedReport": { + "id": "SavedReport", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this saved report." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedReport.", + "default": "adsense#savedReport" + }, + "name": { + "type": "string", + "description": "This saved report's name." + } + } + }, + "SavedReports": { + "id": "SavedReports", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved reports returned in this list response.", + "items": { + "$ref": "SavedReport" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedReports.", + "default": "adsense#savedReports" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#urlChannel.", + "default": "adsense#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#urlChannels.", + "default": "adsense#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adsense.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about.", + "required": true, + "location": "path" + }, + "tree": { + "type": "boolean", + "description": "Whether the tree of sub accounts should be returned.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "List all accounts available to this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of accounts to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adsense.accounts.adclients.list", + "path": "accounts/{accountId}/adclients", + "httpMethod": "GET", + "description": "List all ad clients in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list ad clients.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.accounts.adunits.get", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.accounts.adunits.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.accounts.customchannels.get", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.accounts.customchannels.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.generate", + "path": "accounts/{accountId}/reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account upon which to report.", + "required": true, + "location": "path" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.saved.generate", + "path": "accounts/{accountId}/reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.reports.saved.list", + "path": "accounts/{accountId}/reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.accounts.savedadstyles.get", + "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "List a specific saved ad style for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to get the saved ad style.", + "required": true, + "location": "path" + }, + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.savedadstyles.list", + "path": "accounts/{accountId}/savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list saved ad styles.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.accounts.urlchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "adclients": { + "methods": { + "list": { + "id": "adsense.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Accounts upon which to report.", + "repeated": true, + "location": "query" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.reports.saved.generate", + "path": "reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.reports.saved.list", + "path": "reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.savedadstyles.get", + "path": "savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "Get a specific saved ad style from the user's account.", + "parameters": { + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.savedadstyles.list", + "path": "savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the user's account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-gen.go new file mode 100644 index 0000000000000..cd39298070b6c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.2/adsense-gen.go @@ -0,0 +1,3780 @@ +// Package adsense provides access to the AdSense Management API. +// +// See https://developers.google.com/adsense/management/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsense/v1.2" +// ... +// adsenseService, err := adsense.New(oauthHttpClient) +package adsense + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsense:v1.2" +const apiName = "adsense" +const apiVersion = "v1.2" +const basePath = "https://www.googleapis.com/adsense/v1.2/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense data + AdsenseScope = "https://www.googleapis.com/auth/adsense" + + // View your AdSense data + AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Reports = NewReportsService(s) + s.Savedadstyles = NewSavedadstylesService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Adclients *AdclientsService + + Adunits *AdunitsService + + Customchannels *CustomchannelsService + + Reports *ReportsService + + Savedadstyles *SavedadstylesService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + rs.Adclients = NewAccountsAdclientsService(s) + rs.Adunits = NewAccountsAdunitsService(s) + rs.Customchannels = NewAccountsCustomchannelsService(s) + rs.Reports = NewAccountsReportsService(s) + rs.Savedadstyles = NewAccountsSavedadstylesService(s) + rs.Urlchannels = NewAccountsUrlchannelsService(s) + return rs +} + +type AccountsService struct { + s *Service + + Adclients *AccountsAdclientsService + + Adunits *AccountsAdunitsService + + Customchannels *AccountsCustomchannelsService + + Reports *AccountsReportsService + + Savedadstyles *AccountsSavedadstylesService + + Urlchannels *AccountsUrlchannelsService +} + +func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService { + rs := &AccountsAdclientsService{s: s} + return rs +} + +type AccountsAdclientsService struct { + s *Service +} + +func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService { + rs := &AccountsAdunitsService{s: s} + rs.Customchannels = NewAccountsAdunitsCustomchannelsService(s) + return rs +} + +type AccountsAdunitsService struct { + s *Service + + Customchannels *AccountsAdunitsCustomchannelsService +} + +func NewAccountsAdunitsCustomchannelsService(s *Service) *AccountsAdunitsCustomchannelsService { + rs := &AccountsAdunitsCustomchannelsService{s: s} + return rs +} + +type AccountsAdunitsCustomchannelsService struct { + s *Service +} + +func NewAccountsCustomchannelsService(s *Service) *AccountsCustomchannelsService { + rs := &AccountsCustomchannelsService{s: s} + rs.Adunits = NewAccountsCustomchannelsAdunitsService(s) + return rs +} + +type AccountsCustomchannelsService struct { + s *Service + + Adunits *AccountsCustomchannelsAdunitsService +} + +func NewAccountsCustomchannelsAdunitsService(s *Service) *AccountsCustomchannelsAdunitsService { + rs := &AccountsCustomchannelsAdunitsService{s: s} + return rs +} + +type AccountsCustomchannelsAdunitsService struct { + s *Service +} + +func NewAccountsReportsService(s *Service) *AccountsReportsService { + rs := &AccountsReportsService{s: s} + rs.Saved = NewAccountsReportsSavedService(s) + return rs +} + +type AccountsReportsService struct { + s *Service + + Saved *AccountsReportsSavedService +} + +func NewAccountsReportsSavedService(s *Service) *AccountsReportsSavedService { + rs := &AccountsReportsSavedService{s: s} + return rs +} + +type AccountsReportsSavedService struct { + s *Service +} + +func NewAccountsSavedadstylesService(s *Service) *AccountsSavedadstylesService { + rs := &AccountsSavedadstylesService{s: s} + return rs +} + +type AccountsSavedadstylesService struct { + s *Service +} + +func NewAccountsUrlchannelsService(s *Service) *AccountsUrlchannelsService { + rs := &AccountsUrlchannelsService{s: s} + return rs +} + +type AccountsUrlchannelsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Saved = NewReportsSavedService(s) + return rs +} + +type ReportsService struct { + s *Service + + Saved *ReportsSavedService +} + +func NewReportsSavedService(s *Service) *ReportsSavedService { + rs := &ReportsSavedService{s: s} + return rs +} + +type ReportsSavedService struct { + s *Service +} + +func NewSavedadstylesService(s *Service) *SavedadstylesService { + rs := &SavedadstylesService{s: s} + return rs +} + +type SavedadstylesService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` + + // Premium: Whether this account is premium. + Premium bool `json:"premium,omitempty"` + + // SubAccounts: Sub accounts of the this account. + SubAccounts []*Account `json:"subAccounts,omitempty"` +} + +type Accounts struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The accounts returned in this list response. + Items []*Account `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#accounts. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through accounts. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdStyle struct { + // Colors: The colors which are included in the style. These are + // represented as six hexadecimal characters, similar to HTML color + // codes, but without the leading hash. + Colors *AdStyleColors `json:"colors,omitempty"` + + // Corners: The style of the corners in the ad. + Corners string `json:"corners,omitempty"` + + // Font: The font which is included in the style. + Font *AdStyleFont `json:"font,omitempty"` + + // Kind: Kind this is, in this case adsense#adStyle. + Kind string `json:"kind,omitempty"` +} + +type AdStyleColors struct { + // Background: The color of the ad background. + Background string `json:"background,omitempty"` + + // Border: The color of the ad border. + Border string `json:"border,omitempty"` + + // Text: The color of the ad text. + Text string `json:"text,omitempty"` + + // Title: The color of the ad title. + Title string `json:"title,omitempty"` + + // Url: The color of the ad url. + Url string `json:"url,omitempty"` +} + +type AdStyleFont struct { + // Family: The family of the font. + Family string `json:"family,omitempty"` + + // Size: The size of the font. + Size string `json:"size,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // ContentAdsSettings: Settings specific to content ads (AFC) and + // highend mobile content ads (AFMC). + ContentAdsSettings *AdUnitContentAdsSettings `json:"contentAdsSettings,omitempty"` + + // CustomStyle: Custom style information specific to this ad unit. + CustomStyle *AdStyle `json:"customStyle,omitempty"` + + // FeedAdsSettings: Settings specific to feed ads (AFF). + FeedAdsSettings *AdUnitFeedAdsSettings `json:"feedAdsSettings,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adUnit. + Kind string `json:"kind,omitempty"` + + // MobileContentAdsSettings: Settings specific to WAP mobile content ads + // (AFMC). + MobileContentAdsSettings *AdUnitMobileContentAdsSettings `json:"mobileContentAdsSettings,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // SavedStyleId: ID of the saved ad style which holds this ad unit's + // style information. + SavedStyleId string `json:"savedStyleId,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnitContentAdsSettings struct { + // BackupOption: The backup option to be used in instances where no ad + // is available. + BackupOption *AdUnitContentAdsSettingsBackupOption `json:"backupOption,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnitContentAdsSettingsBackupOption struct { + // Color: Color to use when type is set to COLOR. + Color string `json:"color,omitempty"` + + // Type: Type of the backup option. Possible values are BLANK, COLOR and + // URL. + Type string `json:"type,omitempty"` + + // Url: URL to use when type is set to URL. + Url string `json:"url,omitempty"` +} + +type AdUnitFeedAdsSettings struct { + // AdPosition: The position of the ads relative to the feed entries. + AdPosition string `json:"adPosition,omitempty"` + + // Frequency: The frequency at which ads should appear in the feed (i.e. + // every N entries). + Frequency int64 `json:"frequency,omitempty"` + + // MinimumWordCount: The minimum length an entry should be in order to + // have attached ads. + MinimumWordCount int64 `json:"minimumWordCount,omitempty"` + + // Type: The type of ads which should appear. + Type string `json:"type,omitempty"` +} + +type AdUnitMobileContentAdsSettings struct { + // MarkupLanguage: The markup language to use for this ad unit. + MarkupLanguage string `json:"markupLanguage,omitempty"` + + // ScriptingLanguage: The scripting language to use for this ad unit. + ScriptingLanguage string `json:"scriptingLanguage,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdsenseReportsGenerateResponse struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsense#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type AdsenseReportsGenerateResponseHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SavedAdStyle struct { + // AdStyle: The AdStyle itself. + AdStyle *AdStyle `json:"adStyle,omitempty"` + + // Id: Unique identifier of this saved ad style. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedAdStyle. + Kind string `json:"kind,omitempty"` + + // Name: The user selected name of this SavedAdStyle. + Name string `json:"name,omitempty"` +} + +type SavedAdStyles struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved ad styles returned in this list response. + Items []*SavedAdStyle `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedAdStyles. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SavedReport struct { + // Id: Unique identifier of this saved report. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedReport. + Kind string `json:"kind,omitempty"` + + // Name: This saved report's name. + Name string `json:"name,omitempty"` +} + +type SavedReports struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved reports returned in this list response. + Items []*SavedReport `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedReports. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through saved reports. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsense.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected AdSense account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Tree sets the optional parameter "tree": Whether the tree of sub +// accounts should be returned. +func (c *AccountsGetCall) Tree(tree bool) *AccountsGetCall { + c.opt_["tree"] = tree + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["tree"]; ok { + params.Set("tree", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tree": { + // "description": "Whether the tree of sub accounts should be returned.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all accounts available to this AdSense account. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of accounts to include in the response, used for paging. +func (c *AccountsListCall) MaxResults(maxResults int64) *AccountsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through accounts. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsListCall) PageToken(pageToken string) *AccountsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all accounts available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of accounts to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adclients.list": + +type AccountsAdclientsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all ad clients in the specified account. +func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall { + c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adclients.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list ad clients.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.get": + +type AccountsAdunitsGetCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client for the +// specified account. +func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall { + c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.list": + +type AccountsAdunitsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for the specified +// account. +func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall { + c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.customchannels.list": + +type AccountsAdunitsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AccountsAdunitsCustomchannelsService) List(accountId string, adClientId string, adUnitId string) *AccountsAdunitsCustomchannelsListCall { + c := &AccountsAdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsAdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsAdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsAdunitsCustomchannelsListCall) PageToken(pageToken string) *AccountsAdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.get": + +type AccountsCustomchannelsGetCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client +// for the specified account. +func (r *AccountsCustomchannelsService) Get(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsGetCall { + c := &AccountsCustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *AccountsCustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.list": + +type AccountsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for the +// specified account. +func (r *AccountsCustomchannelsService) List(accountId string, adClientId string) *AccountsCustomchannelsListCall { + c := &AccountsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsCustomchannelsListCall) PageToken(pageToken string) *AccountsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.adunits.list": + +type AccountsCustomchannelsAdunitsListCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *AccountsCustomchannelsAdunitsService) List(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsAdunitsListCall { + c := &AccountsCustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsCustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsCustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsCustomchannelsAdunitsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsCustomchannelsAdunitsListCall) PageToken(pageToken string) *AccountsCustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.generate": + +type AccountsReportsGenerateCall struct { + s *Service + accountId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall { + c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.startDate = startDate + c.endDate = endDate + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *AccountsReportsGenerateCall) Currency(currency string) *AccountsReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.generate", + // "parameterOrder": [ + // "accountId", + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Account upon which to report.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.accounts.reports.saved.generate": + +type AccountsReportsSavedGenerateCall struct { + s *Service + accountId string + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *AccountsReportsSavedService) Generate(accountId string, savedReportId string) *AccountsReportsSavedGenerateCall { + c := &AccountsReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsSavedGenerateCall) Locale(locale string) *AccountsReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsSavedGenerateCall) MaxResults(maxResults int64) *AccountsReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsSavedGenerateCall) StartIndex(startIndex int64) *AccountsReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.generate", + // "parameterOrder": [ + // "accountId", + // "savedReportId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.saved.list": + +type AccountsReportsSavedListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved reports in the specified AdSense account. +func (r *AccountsReportsSavedService) List(accountId string) *AccountsReportsSavedListCall { + c := &AccountsReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *AccountsReportsSavedListCall) MaxResults(maxResults int64) *AccountsReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsReportsSavedListCall) PageToken(pageToken string) *AccountsReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.get": + +type AccountsSavedadstylesGetCall struct { + s *Service + accountId string + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: List a specific saved ad style for the specified account. +func (r *AccountsSavedadstylesService) Get(accountId string, savedAdStyleId string) *AccountsSavedadstylesGetCall { + c := &AccountsSavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *AccountsSavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List a specific saved ad style for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.get", + // "parameterOrder": [ + // "accountId", + // "savedAdStyleId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to get the saved ad style.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.list": + +type AccountsSavedadstylesListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the specified account. +func (r *AccountsSavedadstylesService) List(accountId string) *AccountsSavedadstylesListCall { + c := &AccountsSavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *AccountsSavedadstylesListCall) MaxResults(maxResults int64) *AccountsSavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsSavedadstylesListCall) PageToken(pageToken string) *AccountsSavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsSavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list saved ad styles.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.urlchannels.list": + +type AccountsUrlchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for the +// specified account. +func (r *AccountsUrlchannelsService) List(accountId string, adClientId string) *AccountsUrlchannelsListCall { + c := &AccountsUrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *AccountsUrlchannelsListCall) MaxResults(maxResults int64) *AccountsUrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsUrlchannelsListCall) PageToken(pageToken string) *AccountsUrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsUrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.urlchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this AdSense +// account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this +// AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// AccountId sets the optional parameter "accountId": Accounts upon +// which to report. +func (c *ReportsGenerateCall) AccountId(accountId string) *ReportsGenerateCall { + c.opt_["accountId"] = accountId + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["accountId"]; ok { + params.Set("accountId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Accounts upon which to report.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.reports.saved.generate": + +type ReportsSavedGenerateCall struct { + s *Service + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall { + c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.generate", + // "parameterOrder": [ + // "savedReportId" + // ], + // "parameters": { + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.saved.list": + +type ReportsSavedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved reports in this AdSense account. +func (r *ReportsSavedService) List() *ReportsSavedListCall { + c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.get": + +type SavedadstylesGetCall struct { + s *Service + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: Get a specific saved ad style from the user's account. +func (r *SavedadstylesService) Get(savedAdStyleId string) *SavedadstylesGetCall { + c := &SavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *SavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a specific saved ad style from the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.get", + // "parameterOrder": [ + // "savedAdStyleId" + // ], + // "parameters": { + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.list": + +type SavedadstylesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the user's account. +func (r *SavedadstylesService) List() *SavedadstylesListCall { + c := &SavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *SavedadstylesListCall) MaxResults(maxResults int64) *SavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *SavedadstylesListCall) PageToken(pageToken string) *SavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this +// AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-api.json new file mode 100644 index 0000000000000..f511e58e80395 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-api.json @@ -0,0 +1,2249 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/RY77fvEvdMvjXK9LvO9FVN68TJk\"", + "discoveryVersion": "v1", + "id": "adsense:v1.3", + "name": "adsense", + "canonicalName": "AdSense", + "version": "v1.3", + "title": "AdSense Management API", + "description": "Gives AdSense publishers access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/management/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsense/v1.3/", + "basePath": "/adsense/v1.3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsense/v1.3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsense": { + "description": "View and manage your AdSense data" + }, + "https://www.googleapis.com/auth/adsense.readonly": { + "description": "View your AdSense data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#account.", + "default": "adsense#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + }, + "premium": { + "type": "boolean", + "description": "Whether this account is premium." + }, + "subAccounts": { + "type": "array", + "description": "Sub accounts of the this account.", + "items": { + "$ref": "Account" + } + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The accounts returned in this list response.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#accounts.", + "default": "adsense#accounts" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through accounts. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adClient.", + "default": "adsense#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adClients.", + "default": "adsense#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdCode": { + "id": "AdCode", + "type": "object", + "properties": { + "adCode": { + "type": "string", + "description": "The ad code snippet." + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#adCode.", + "default": "adsense#adCode" + } + } + }, + "AdStyle": { + "id": "AdStyle", + "type": "object", + "properties": { + "colors": { + "type": "object", + "description": "The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.", + "properties": { + "background": { + "type": "string", + "description": "The color of the ad background." + }, + "border": { + "type": "string", + "description": "The color of the ad border." + }, + "text": { + "type": "string", + "description": "The color of the ad text." + }, + "title": { + "type": "string", + "description": "The color of the ad title." + }, + "url": { + "type": "string", + "description": "The color of the ad url." + } + } + }, + "corners": { + "type": "string", + "description": "The style of the corners in the ad." + }, + "font": { + "type": "object", + "description": "The font which is included in the style.", + "properties": { + "family": { + "type": "string", + "description": "The family of the font." + }, + "size": { + "type": "string", + "description": "The size of the font." + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#adStyle.", + "default": "adsense#adStyle" + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "contentAdsSettings": { + "type": "object", + "description": "Settings specific to content ads (AFC) and highend mobile content ads (AFMC).", + "properties": { + "backupOption": { + "type": "object", + "description": "The backup option to be used in instances where no ad is available.", + "properties": { + "color": { + "type": "string", + "description": "Color to use when type is set to COLOR." + }, + "type": { + "type": "string", + "description": "Type of the backup option. Possible values are BLANK, COLOR and URL." + }, + "url": { + "type": "string", + "description": "URL to use when type is set to URL." + } + } + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "customStyle": { + "$ref": "AdStyle", + "description": "Custom style information specific to this ad unit." + }, + "feedAdsSettings": { + "type": "object", + "description": "Settings specific to feed ads (AFF).", + "properties": { + "adPosition": { + "type": "string", + "description": "The position of the ads relative to the feed entries." + }, + "frequency": { + "type": "integer", + "description": "The frequency at which ads should appear in the feed (i.e. every N entries).", + "format": "int32" + }, + "minimumWordCount": { + "type": "integer", + "description": "The minimum length an entry should be in order to have attached ads.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of ads which should appear." + } + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adUnit.", + "default": "adsense#adUnit" + }, + "mobileContentAdsSettings": { + "type": "object", + "description": "Settings specific to WAP mobile content ads (AFMC).", + "properties": { + "markupLanguage": { + "type": "string", + "description": "The markup language to use for this ad unit." + }, + "scriptingLanguage": { + "type": "string", + "description": "The scripting language to use for this ad unit." + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "savedStyleId": { + "type": "string", + "description": "ID of the saved ad style which holds this ad unit's style information." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adUnits.", + "default": "adsense#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdsenseReportsGenerateResponse": { + "id": "AdsenseReportsGenerateResponse", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#report.", + "default": "adsense#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "Alert": { + "id": "Alert", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this alert. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#alert.", + "default": "adsense#alert" + }, + "message": { + "type": "string", + "description": "The localized alert message." + }, + "severity": { + "type": "string", + "description": "Severity of this alert. Possible values: INFO, WARNING, SEVERE." + }, + "type": { + "type": "string", + "description": "Type of this alert. Possible values: SELF_HOLD, MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, API_HOLD." + } + } + }, + "Alerts": { + "id": "Alerts", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The alerts returned in this list response.", + "items": { + "$ref": "Alert" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#alerts.", + "default": "adsense#alerts" + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#customChannel.", + "default": "adsense#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#customChannels.", + "default": "adsense#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "ReportingMetadataEntry" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#metadata.", + "default": "adsense#metadata" + } + } + }, + "ReportingMetadataEntry": { + "id": "ReportingMetadataEntry", + "type": "object", + "properties": { + "compatibleDimensions": { + "type": "array", + "description": "For metrics this is a list of dimension IDs which the metric is compatible with, for dimensions it is a list of compatibility groups the dimension belongs to.", + "items": { + "type": "string" + } + }, + "compatibleMetrics": { + "type": "array", + "description": "The names of the metrics the dimension or metric this reporting metadata entry describes is compatible with.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this reporting metadata entry, corresponding to the name of the appropriate dimension or metric." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#reportingMetadataEntry.", + "default": "adsense#reportingMetadataEntry" + }, + "requiredDimensions": { + "type": "array", + "description": "The names of the dimensions which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "requiredMetrics": { + "type": "array", + "description": "The names of the metrics which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "supportedProducts": { + "type": "array", + "description": "The codes of the projects supported by the dimension or metric this reporting metadata entry describes.", + "items": { + "type": "string" + } + } + } + }, + "SavedAdStyle": { + "id": "SavedAdStyle", + "type": "object", + "properties": { + "adStyle": { + "$ref": "AdStyle", + "description": "The AdStyle itself." + }, + "id": { + "type": "string", + "description": "Unique identifier of this saved ad style. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedAdStyle.", + "default": "adsense#savedAdStyle" + }, + "name": { + "type": "string", + "description": "The user selected name of this SavedAdStyle." + } + } + }, + "SavedAdStyles": { + "id": "SavedAdStyles", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved ad styles returned in this list response.", + "items": { + "$ref": "SavedAdStyle" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedAdStyles.", + "default": "adsense#savedAdStyles" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "SavedReport": { + "id": "SavedReport", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this saved report." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedReport.", + "default": "adsense#savedReport" + }, + "name": { + "type": "string", + "description": "This saved report's name." + } + } + }, + "SavedReports": { + "id": "SavedReports", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved reports returned in this list response.", + "items": { + "$ref": "SavedReport" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedReports.", + "default": "adsense#savedReports" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#urlChannel.", + "default": "adsense#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#urlChannels.", + "default": "adsense#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adsense.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about.", + "required": true, + "location": "path" + }, + "tree": { + "type": "boolean", + "description": "Whether the tree of sub accounts should be returned.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "List all accounts available to this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of accounts to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adsense.accounts.adclients.list", + "path": "accounts/{accountId}/adclients", + "httpMethod": "GET", + "description": "List all ad clients in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list ad clients.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.accounts.adunits.get", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "getAdCode": { + "id": "adsense.accounts.adunits.getAdCode", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + "httpMethod": "GET", + "description": "Get ad code for the specified ad unit.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client with contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get the code for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdCode" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.accounts.adunits.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "alerts": { + "methods": { + "list": { + "id": "adsense.accounts.alerts.list", + "path": "accounts/{accountId}/alerts", + "httpMethod": "GET", + "description": "List the alerts for the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to retrieve the alerts.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Alerts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.accounts.customchannels.get", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.accounts.customchannels.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.generate", + "path": "accounts/{accountId}/reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account upon which to report.", + "required": true, + "location": "path" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + }, + "useTimezoneReporting": { + "type": "boolean", + "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.saved.generate", + "path": "accounts/{accountId}/reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.reports.saved.list", + "path": "accounts/{accountId}/reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.accounts.savedadstyles.get", + "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "List a specific saved ad style for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to get the saved ad style.", + "required": true, + "location": "path" + }, + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.savedadstyles.list", + "path": "accounts/{accountId}/savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list saved ad styles.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.accounts.urlchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "adclients": { + "methods": { + "list": { + "id": "adsense.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "getAdCode": { + "id": "adsense.adunits.getAdCode", + "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode", + "httpMethod": "GET", + "description": "Get ad code for the specified ad unit.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client with contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get the code for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdCode" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "alerts": { + "methods": { + "list": { + "id": "adsense.alerts.list", + "path": "alerts", + "httpMethod": "GET", + "description": "List the alerts for this AdSense account.", + "parameters": { + "locale": { + "type": "string", + "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + "location": "query" + } + }, + "response": { + "$ref": "Alerts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "metadata": { + "resources": { + "dimensions": { + "methods": { + "list": { + "id": "adsense.metadata.dimensions.list", + "path": "metadata/dimensions", + "httpMethod": "GET", + "description": "List the metadata for the dimensions available to this AdSense account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "metrics": { + "methods": { + "list": { + "id": "adsense.metadata.metrics.list", + "path": "metadata/metrics", + "httpMethod": "GET", + "description": "List the metadata for the metrics available to this AdSense account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Accounts upon which to report.", + "repeated": true, + "location": "query" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + }, + "useTimezoneReporting": { + "type": "boolean", + "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.reports.saved.generate", + "path": "reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.reports.saved.list", + "path": "reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.savedadstyles.get", + "path": "savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "Get a specific saved ad style from the user's account.", + "parameters": { + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.savedadstyles.list", + "path": "savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the user's account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-gen.go new file mode 100644 index 0000000000000..047434569818a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.3/adsense-gen.go @@ -0,0 +1,4373 @@ +// Package adsense provides access to the AdSense Management API. +// +// See https://developers.google.com/adsense/management/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsense/v1.3" +// ... +// adsenseService, err := adsense.New(oauthHttpClient) +package adsense + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsense:v1.3" +const apiName = "adsense" +const apiVersion = "v1.3" +const basePath = "https://www.googleapis.com/adsense/v1.3/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense data + AdsenseScope = "https://www.googleapis.com/auth/adsense" + + // View your AdSense data + AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Alerts = NewAlertsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Metadata = NewMetadataService(s) + s.Reports = NewReportsService(s) + s.Savedadstyles = NewSavedadstylesService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Adclients *AdclientsService + + Adunits *AdunitsService + + Alerts *AlertsService + + Customchannels *CustomchannelsService + + Metadata *MetadataService + + Reports *ReportsService + + Savedadstyles *SavedadstylesService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + rs.Adclients = NewAccountsAdclientsService(s) + rs.Adunits = NewAccountsAdunitsService(s) + rs.Alerts = NewAccountsAlertsService(s) + rs.Customchannels = NewAccountsCustomchannelsService(s) + rs.Reports = NewAccountsReportsService(s) + rs.Savedadstyles = NewAccountsSavedadstylesService(s) + rs.Urlchannels = NewAccountsUrlchannelsService(s) + return rs +} + +type AccountsService struct { + s *Service + + Adclients *AccountsAdclientsService + + Adunits *AccountsAdunitsService + + Alerts *AccountsAlertsService + + Customchannels *AccountsCustomchannelsService + + Reports *AccountsReportsService + + Savedadstyles *AccountsSavedadstylesService + + Urlchannels *AccountsUrlchannelsService +} + +func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService { + rs := &AccountsAdclientsService{s: s} + return rs +} + +type AccountsAdclientsService struct { + s *Service +} + +func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService { + rs := &AccountsAdunitsService{s: s} + rs.Customchannels = NewAccountsAdunitsCustomchannelsService(s) + return rs +} + +type AccountsAdunitsService struct { + s *Service + + Customchannels *AccountsAdunitsCustomchannelsService +} + +func NewAccountsAdunitsCustomchannelsService(s *Service) *AccountsAdunitsCustomchannelsService { + rs := &AccountsAdunitsCustomchannelsService{s: s} + return rs +} + +type AccountsAdunitsCustomchannelsService struct { + s *Service +} + +func NewAccountsAlertsService(s *Service) *AccountsAlertsService { + rs := &AccountsAlertsService{s: s} + return rs +} + +type AccountsAlertsService struct { + s *Service +} + +func NewAccountsCustomchannelsService(s *Service) *AccountsCustomchannelsService { + rs := &AccountsCustomchannelsService{s: s} + rs.Adunits = NewAccountsCustomchannelsAdunitsService(s) + return rs +} + +type AccountsCustomchannelsService struct { + s *Service + + Adunits *AccountsCustomchannelsAdunitsService +} + +func NewAccountsCustomchannelsAdunitsService(s *Service) *AccountsCustomchannelsAdunitsService { + rs := &AccountsCustomchannelsAdunitsService{s: s} + return rs +} + +type AccountsCustomchannelsAdunitsService struct { + s *Service +} + +func NewAccountsReportsService(s *Service) *AccountsReportsService { + rs := &AccountsReportsService{s: s} + rs.Saved = NewAccountsReportsSavedService(s) + return rs +} + +type AccountsReportsService struct { + s *Service + + Saved *AccountsReportsSavedService +} + +func NewAccountsReportsSavedService(s *Service) *AccountsReportsSavedService { + rs := &AccountsReportsSavedService{s: s} + return rs +} + +type AccountsReportsSavedService struct { + s *Service +} + +func NewAccountsSavedadstylesService(s *Service) *AccountsSavedadstylesService { + rs := &AccountsSavedadstylesService{s: s} + return rs +} + +type AccountsSavedadstylesService struct { + s *Service +} + +func NewAccountsUrlchannelsService(s *Service) *AccountsUrlchannelsService { + rs := &AccountsUrlchannelsService{s: s} + return rs +} + +type AccountsUrlchannelsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewAlertsService(s *Service) *AlertsService { + rs := &AlertsService{s: s} + return rs +} + +type AlertsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewMetadataService(s *Service) *MetadataService { + rs := &MetadataService{s: s} + rs.Dimensions = NewMetadataDimensionsService(s) + rs.Metrics = NewMetadataMetricsService(s) + return rs +} + +type MetadataService struct { + s *Service + + Dimensions *MetadataDimensionsService + + Metrics *MetadataMetricsService +} + +func NewMetadataDimensionsService(s *Service) *MetadataDimensionsService { + rs := &MetadataDimensionsService{s: s} + return rs +} + +type MetadataDimensionsService struct { + s *Service +} + +func NewMetadataMetricsService(s *Service) *MetadataMetricsService { + rs := &MetadataMetricsService{s: s} + return rs +} + +type MetadataMetricsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Saved = NewReportsSavedService(s) + return rs +} + +type ReportsService struct { + s *Service + + Saved *ReportsSavedService +} + +func NewReportsSavedService(s *Service) *ReportsSavedService { + rs := &ReportsSavedService{s: s} + return rs +} + +type ReportsSavedService struct { + s *Service +} + +func NewSavedadstylesService(s *Service) *SavedadstylesService { + rs := &SavedadstylesService{s: s} + return rs +} + +type SavedadstylesService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` + + // Premium: Whether this account is premium. + Premium bool `json:"premium,omitempty"` + + // SubAccounts: Sub accounts of the this account. + SubAccounts []*Account `json:"subAccounts,omitempty"` +} + +type Accounts struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The accounts returned in this list response. + Items []*Account `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#accounts. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through accounts. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdCode struct { + // AdCode: The ad code snippet. + AdCode string `json:"adCode,omitempty"` + + // Kind: Kind this is, in this case adsense#adCode. + Kind string `json:"kind,omitempty"` +} + +type AdStyle struct { + // Colors: The colors which are included in the style. These are + // represented as six hexadecimal characters, similar to HTML color + // codes, but without the leading hash. + Colors *AdStyleColors `json:"colors,omitempty"` + + // Corners: The style of the corners in the ad. + Corners string `json:"corners,omitempty"` + + // Font: The font which is included in the style. + Font *AdStyleFont `json:"font,omitempty"` + + // Kind: Kind this is, in this case adsense#adStyle. + Kind string `json:"kind,omitempty"` +} + +type AdStyleColors struct { + // Background: The color of the ad background. + Background string `json:"background,omitempty"` + + // Border: The color of the ad border. + Border string `json:"border,omitempty"` + + // Text: The color of the ad text. + Text string `json:"text,omitempty"` + + // Title: The color of the ad title. + Title string `json:"title,omitempty"` + + // Url: The color of the ad url. + Url string `json:"url,omitempty"` +} + +type AdStyleFont struct { + // Family: The family of the font. + Family string `json:"family,omitempty"` + + // Size: The size of the font. + Size string `json:"size,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // ContentAdsSettings: Settings specific to content ads (AFC) and + // highend mobile content ads (AFMC). + ContentAdsSettings *AdUnitContentAdsSettings `json:"contentAdsSettings,omitempty"` + + // CustomStyle: Custom style information specific to this ad unit. + CustomStyle *AdStyle `json:"customStyle,omitempty"` + + // FeedAdsSettings: Settings specific to feed ads (AFF). + FeedAdsSettings *AdUnitFeedAdsSettings `json:"feedAdsSettings,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adUnit. + Kind string `json:"kind,omitempty"` + + // MobileContentAdsSettings: Settings specific to WAP mobile content ads + // (AFMC). + MobileContentAdsSettings *AdUnitMobileContentAdsSettings `json:"mobileContentAdsSettings,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // SavedStyleId: ID of the saved ad style which holds this ad unit's + // style information. + SavedStyleId string `json:"savedStyleId,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnitContentAdsSettings struct { + // BackupOption: The backup option to be used in instances where no ad + // is available. + BackupOption *AdUnitContentAdsSettingsBackupOption `json:"backupOption,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnitContentAdsSettingsBackupOption struct { + // Color: Color to use when type is set to COLOR. + Color string `json:"color,omitempty"` + + // Type: Type of the backup option. Possible values are BLANK, COLOR and + // URL. + Type string `json:"type,omitempty"` + + // Url: URL to use when type is set to URL. + Url string `json:"url,omitempty"` +} + +type AdUnitFeedAdsSettings struct { + // AdPosition: The position of the ads relative to the feed entries. + AdPosition string `json:"adPosition,omitempty"` + + // Frequency: The frequency at which ads should appear in the feed (i.e. + // every N entries). + Frequency int64 `json:"frequency,omitempty"` + + // MinimumWordCount: The minimum length an entry should be in order to + // have attached ads. + MinimumWordCount int64 `json:"minimumWordCount,omitempty"` + + // Type: The type of ads which should appear. + Type string `json:"type,omitempty"` +} + +type AdUnitMobileContentAdsSettings struct { + // MarkupLanguage: The markup language to use for this ad unit. + MarkupLanguage string `json:"markupLanguage,omitempty"` + + // ScriptingLanguage: The scripting language to use for this ad unit. + ScriptingLanguage string `json:"scriptingLanguage,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdsenseReportsGenerateResponse struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsense#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type AdsenseReportsGenerateResponseHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type Alert struct { + // Id: Unique identifier of this alert. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#alert. + Kind string `json:"kind,omitempty"` + + // Message: The localized alert message. + Message string `json:"message,omitempty"` + + // Severity: Severity of this alert. Possible values: INFO, WARNING, + // SEVERE. + Severity string `json:"severity,omitempty"` + + // Type: Type of this alert. Possible values: SELF_HOLD, + // MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, + // PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, + // API_HOLD. + Type string `json:"type,omitempty"` +} + +type Alerts struct { + // Items: The alerts returned in this list response. + Items []*Alert `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#alerts. + Kind string `json:"kind,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Metadata struct { + Items []*ReportingMetadataEntry `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#metadata. + Kind string `json:"kind,omitempty"` +} + +type ReportingMetadataEntry struct { + // CompatibleDimensions: For metrics this is a list of dimension IDs + // which the metric is compatible with, for dimensions it is a list of + // compatibility groups the dimension belongs to. + CompatibleDimensions []string `json:"compatibleDimensions,omitempty"` + + // CompatibleMetrics: The names of the metrics the dimension or metric + // this reporting metadata entry describes is compatible with. + CompatibleMetrics []string `json:"compatibleMetrics,omitempty"` + + // Id: Unique identifier of this reporting metadata entry, corresponding + // to the name of the appropriate dimension or metric. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adsense#reportingMetadataEntry. + Kind string `json:"kind,omitempty"` + + // RequiredDimensions: The names of the dimensions which the dimension + // or metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredDimensions []string `json:"requiredDimensions,omitempty"` + + // RequiredMetrics: The names of the metrics which the dimension or + // metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredMetrics []string `json:"requiredMetrics,omitempty"` + + // SupportedProducts: The codes of the projects supported by the + // dimension or metric this reporting metadata entry describes. + SupportedProducts []string `json:"supportedProducts,omitempty"` +} + +type SavedAdStyle struct { + // AdStyle: The AdStyle itself. + AdStyle *AdStyle `json:"adStyle,omitempty"` + + // Id: Unique identifier of this saved ad style. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedAdStyle. + Kind string `json:"kind,omitempty"` + + // Name: The user selected name of this SavedAdStyle. + Name string `json:"name,omitempty"` +} + +type SavedAdStyles struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved ad styles returned in this list response. + Items []*SavedAdStyle `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedAdStyles. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SavedReport struct { + // Id: Unique identifier of this saved report. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedReport. + Kind string `json:"kind,omitempty"` + + // Name: This saved report's name. + Name string `json:"name,omitempty"` +} + +type SavedReports struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved reports returned in this list response. + Items []*SavedReport `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedReports. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through saved reports. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsense.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected AdSense account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Tree sets the optional parameter "tree": Whether the tree of sub +// accounts should be returned. +func (c *AccountsGetCall) Tree(tree bool) *AccountsGetCall { + c.opt_["tree"] = tree + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["tree"]; ok { + params.Set("tree", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tree": { + // "description": "Whether the tree of sub accounts should be returned.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all accounts available to this AdSense account. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of accounts to include in the response, used for paging. +func (c *AccountsListCall) MaxResults(maxResults int64) *AccountsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through accounts. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsListCall) PageToken(pageToken string) *AccountsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all accounts available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of accounts to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adclients.list": + +type AccountsAdclientsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all ad clients in the specified account. +func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall { + c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adclients.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list ad clients.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.get": + +type AccountsAdunitsGetCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client for the +// specified account. +func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall { + c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.getAdCode": + +type AccountsAdunitsGetAdCodeCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// GetAdCode: Get ad code for the specified ad unit. +func (r *AccountsAdunitsService) GetAdCode(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetAdCodeCall { + c := &AccountsAdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetAdCodeCall) Do() (*AdCode, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdCode) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get ad code for the specified ad unit.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.getAdCode", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client with contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get the code for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + // "response": { + // "$ref": "AdCode" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.list": + +type AccountsAdunitsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for the specified +// account. +func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall { + c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.customchannels.list": + +type AccountsAdunitsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AccountsAdunitsCustomchannelsService) List(accountId string, adClientId string, adUnitId string) *AccountsAdunitsCustomchannelsListCall { + c := &AccountsAdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsAdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsAdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsAdunitsCustomchannelsListCall) PageToken(pageToken string) *AccountsAdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.alerts.list": + +type AccountsAlertsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List the alerts for the specified AdSense account. +func (r *AccountsAlertsService) List(accountId string) *AccountsAlertsListCall { + c := &AccountsAlertsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Locale sets the optional parameter "locale": The locale to use for +// translating alert messages. The account locale will be used if this +// is not supplied. The AdSense default (English) will be used if the +// supplied locale is invalid or unsupported. +func (c *AccountsAlertsListCall) Locale(locale string) *AccountsAlertsListCall { + c.opt_["locale"] = locale + return c +} + +func (c *AccountsAlertsListCall) Do() (*Alerts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/alerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alerts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the alerts for the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.alerts.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to retrieve the alerts.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/alerts", + // "response": { + // "$ref": "Alerts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.get": + +type AccountsCustomchannelsGetCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client +// for the specified account. +func (r *AccountsCustomchannelsService) Get(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsGetCall { + c := &AccountsCustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *AccountsCustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.list": + +type AccountsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for the +// specified account. +func (r *AccountsCustomchannelsService) List(accountId string, adClientId string) *AccountsCustomchannelsListCall { + c := &AccountsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsCustomchannelsListCall) PageToken(pageToken string) *AccountsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.adunits.list": + +type AccountsCustomchannelsAdunitsListCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *AccountsCustomchannelsAdunitsService) List(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsAdunitsListCall { + c := &AccountsCustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsCustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsCustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsCustomchannelsAdunitsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsCustomchannelsAdunitsListCall) PageToken(pageToken string) *AccountsCustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.generate": + +type AccountsReportsGenerateCall struct { + s *Service + accountId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall { + c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.startDate = startDate + c.endDate = endDate + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *AccountsReportsGenerateCall) Currency(currency string) *AccountsReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +// UseTimezoneReporting sets the optional parameter +// "useTimezoneReporting": Whether the report should be generated in the +// AdSense account's local timezone. If false default PST/PDT timezone +// will be used. +func (c *AccountsReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *AccountsReportsGenerateCall { + c.opt_["useTimezoneReporting"] = useTimezoneReporting + return c +} + +func (c *AccountsReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useTimezoneReporting"]; ok { + params.Set("useTimezoneReporting", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.generate", + // "parameterOrder": [ + // "accountId", + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Account upon which to report.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // }, + // "useTimezoneReporting": { + // "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}/reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.accounts.reports.saved.generate": + +type AccountsReportsSavedGenerateCall struct { + s *Service + accountId string + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *AccountsReportsSavedService) Generate(accountId string, savedReportId string) *AccountsReportsSavedGenerateCall { + c := &AccountsReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsSavedGenerateCall) Locale(locale string) *AccountsReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsSavedGenerateCall) MaxResults(maxResults int64) *AccountsReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsSavedGenerateCall) StartIndex(startIndex int64) *AccountsReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.generate", + // "parameterOrder": [ + // "accountId", + // "savedReportId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.saved.list": + +type AccountsReportsSavedListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved reports in the specified AdSense account. +func (r *AccountsReportsSavedService) List(accountId string) *AccountsReportsSavedListCall { + c := &AccountsReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *AccountsReportsSavedListCall) MaxResults(maxResults int64) *AccountsReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsReportsSavedListCall) PageToken(pageToken string) *AccountsReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.get": + +type AccountsSavedadstylesGetCall struct { + s *Service + accountId string + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: List a specific saved ad style for the specified account. +func (r *AccountsSavedadstylesService) Get(accountId string, savedAdStyleId string) *AccountsSavedadstylesGetCall { + c := &AccountsSavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *AccountsSavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List a specific saved ad style for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.get", + // "parameterOrder": [ + // "accountId", + // "savedAdStyleId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to get the saved ad style.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.list": + +type AccountsSavedadstylesListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the specified account. +func (r *AccountsSavedadstylesService) List(accountId string) *AccountsSavedadstylesListCall { + c := &AccountsSavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *AccountsSavedadstylesListCall) MaxResults(maxResults int64) *AccountsSavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsSavedadstylesListCall) PageToken(pageToken string) *AccountsSavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsSavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list saved ad styles.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.urlchannels.list": + +type AccountsUrlchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for the +// specified account. +func (r *AccountsUrlchannelsService) List(accountId string, adClientId string) *AccountsUrlchannelsListCall { + c := &AccountsUrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *AccountsUrlchannelsListCall) MaxResults(maxResults int64) *AccountsUrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsUrlchannelsListCall) PageToken(pageToken string) *AccountsUrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsUrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.urlchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.getAdCode": + +type AdunitsGetAdCodeCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// GetAdCode: Get ad code for the specified ad unit. +func (r *AdunitsService) GetAdCode(adClientId string, adUnitId string) *AdunitsGetAdCodeCall { + c := &AdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetAdCodeCall) Do() (*AdCode, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/adcode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdCode) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get ad code for the specified ad unit.", + // "httpMethod": "GET", + // "id": "adsense.adunits.getAdCode", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client with contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get the code for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode", + // "response": { + // "$ref": "AdCode" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this AdSense +// account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.alerts.list": + +type AlertsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the alerts for this AdSense account. +func (r *AlertsService) List() *AlertsListCall { + c := &AlertsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Locale sets the optional parameter "locale": The locale to use for +// translating alert messages. The account locale will be used if this +// is not supplied. The AdSense default (English) will be used if the +// supplied locale is invalid or unsupported. +func (c *AlertsListCall) Locale(locale string) *AlertsListCall { + c.opt_["locale"] = locale + return c +} + +func (c *AlertsListCall) Do() (*Alerts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "alerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alerts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the alerts for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.alerts.list", + // "parameters": { + // "locale": { + // "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "alerts", + // "response": { + // "$ref": "Alerts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this +// AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.metadata.dimensions.list": + +type MetadataDimensionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the dimensions available to this AdSense +// account. +func (r *MetadataDimensionsService) List() *MetadataDimensionsListCall { + c := &MetadataDimensionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataDimensionsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/dimensions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the dimensions available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.metadata.dimensions.list", + // "path": "metadata/dimensions", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.metadata.metrics.list": + +type MetadataMetricsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the metrics available to this AdSense +// account. +func (r *MetadataMetricsService) List() *MetadataMetricsListCall { + c := &MetadataMetricsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataMetricsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/metrics") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the metrics available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.metadata.metrics.list", + // "path": "metadata/metrics", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// AccountId sets the optional parameter "accountId": Accounts upon +// which to report. +func (c *ReportsGenerateCall) AccountId(accountId string) *ReportsGenerateCall { + c.opt_["accountId"] = accountId + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +// UseTimezoneReporting sets the optional parameter +// "useTimezoneReporting": Whether the report should be generated in the +// AdSense account's local timezone. If false default PST/PDT timezone +// will be used. +func (c *ReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *ReportsGenerateCall { + c.opt_["useTimezoneReporting"] = useTimezoneReporting + return c +} + +func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["accountId"]; ok { + params.Set("accountId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useTimezoneReporting"]; ok { + params.Set("useTimezoneReporting", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Accounts upon which to report.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // }, + // "useTimezoneReporting": { + // "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.reports.saved.generate": + +type ReportsSavedGenerateCall struct { + s *Service + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall { + c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.generate", + // "parameterOrder": [ + // "savedReportId" + // ], + // "parameters": { + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.saved.list": + +type ReportsSavedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved reports in this AdSense account. +func (r *ReportsSavedService) List() *ReportsSavedListCall { + c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.get": + +type SavedadstylesGetCall struct { + s *Service + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: Get a specific saved ad style from the user's account. +func (r *SavedadstylesService) Get(savedAdStyleId string) *SavedadstylesGetCall { + c := &SavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *SavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a specific saved ad style from the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.get", + // "parameterOrder": [ + // "savedAdStyleId" + // ], + // "parameters": { + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.list": + +type SavedadstylesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the user's account. +func (r *SavedadstylesService) List() *SavedadstylesListCall { + c := &SavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *SavedadstylesListCall) MaxResults(maxResults int64) *SavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *SavedadstylesListCall) PageToken(pageToken string) *SavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this +// AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-api.json new file mode 100644 index 0000000000000..51032c372413c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-api.json @@ -0,0 +1,2406 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/G2IFVrRZc_qYUIJrbpW9h4_B9is\"", + "discoveryVersion": "v1", + "id": "adsense:v1.4", + "name": "adsense", + "canonicalName": "AdSense", + "version": "v1.4", + "title": "AdSense Management API", + "description": "Gives AdSense publishers access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/management/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsense/v1.4/", + "basePath": "/adsense/v1.4/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsense/v1.4/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsense": { + "description": "View and manage your AdSense data" + }, + "https://www.googleapis.com/auth/adsense.readonly": { + "description": "View your AdSense data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#account.", + "default": "adsense#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + }, + "premium": { + "type": "boolean", + "description": "Whether this account is premium." + }, + "subAccounts": { + "type": "array", + "description": "Sub accounts of the this account.", + "items": { + "$ref": "Account" + } + }, + "timezone": { + "type": "string", + "description": "AdSense timezone of this account." + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The accounts returned in this list response.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#accounts.", + "default": "adsense#accounts" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through accounts. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "arcReviewMode": { + "type": "string", + "description": "ARC review mode this ad client is in. Empty if the client is not opted in to ARC. Possible values: POST_REVIEW, AUTOMATIC_PRE_REVIEW." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adClient.", + "default": "adsense#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adClients.", + "default": "adsense#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdCode": { + "id": "AdCode", + "type": "object", + "properties": { + "adCode": { + "type": "string", + "description": "The ad code snippet." + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#adCode.", + "default": "adsense#adCode" + } + } + }, + "AdStyle": { + "id": "AdStyle", + "type": "object", + "properties": { + "colors": { + "type": "object", + "description": "The colors which are included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.", + "properties": { + "background": { + "type": "string", + "description": "The color of the ad background." + }, + "border": { + "type": "string", + "description": "The color of the ad border." + }, + "text": { + "type": "string", + "description": "The color of the ad text." + }, + "title": { + "type": "string", + "description": "The color of the ad title." + }, + "url": { + "type": "string", + "description": "The color of the ad url." + } + } + }, + "corners": { + "type": "string", + "description": "The style of the corners in the ad." + }, + "font": { + "type": "object", + "description": "The font which is included in the style.", + "properties": { + "family": { + "type": "string", + "description": "The family of the font." + }, + "size": { + "type": "string", + "description": "The size of the font." + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#adStyle.", + "default": "adsense#adStyle" + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "contentAdsSettings": { + "type": "object", + "description": "Settings specific to content ads (AFC) and highend mobile content ads (AFMC).", + "properties": { + "backupOption": { + "type": "object", + "description": "The backup option to be used in instances where no ad is available.", + "properties": { + "color": { + "type": "string", + "description": "Color to use when type is set to COLOR." + }, + "type": { + "type": "string", + "description": "Type of the backup option. Possible values are BLANK, COLOR and URL." + }, + "url": { + "type": "string", + "description": "URL to use when type is set to URL." + } + } + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "customStyle": { + "$ref": "AdStyle", + "description": "Custom style information specific to this ad unit." + }, + "feedAdsSettings": { + "type": "object", + "description": "Settings specific to feed ads (AFF).", + "properties": { + "adPosition": { + "type": "string", + "description": "The position of the ads relative to the feed entries." + }, + "frequency": { + "type": "integer", + "description": "The frequency at which ads should appear in the feed (i.e. every N entries).", + "format": "int32" + }, + "minimumWordCount": { + "type": "integer", + "description": "The minimum length an entry should be in order to have attached ads.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "The type of ads which should appear." + } + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adUnit.", + "default": "adsense#adUnit" + }, + "mobileContentAdsSettings": { + "type": "object", + "description": "Settings specific to WAP mobile content ads (AFMC).", + "properties": { + "markupLanguage": { + "type": "string", + "description": "The markup language to use for this ad unit." + }, + "scriptingLanguage": { + "type": "string", + "description": "The scripting language to use for this ad unit." + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "savedStyleId": { + "type": "string", + "description": "ID of the saved ad style which holds this ad unit's style information." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adUnits.", + "default": "adsense#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdsenseReportsGenerateResponse": { + "id": "AdsenseReportsGenerateResponse", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "endDate": { + "type": "string", + "description": "The requested end date in yyyy-mm-dd format." + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#report.", + "default": "adsense#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "startDate": { + "type": "string", + "description": "The requested start date in yyyy-mm-dd format." + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "Alert": { + "id": "Alert", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this alert. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "isDismissible": { + "type": "boolean", + "description": "Whether this alert can be dismissed." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#alert.", + "default": "adsense#alert" + }, + "message": { + "type": "string", + "description": "The localized alert message." + }, + "severity": { + "type": "string", + "description": "Severity of this alert. Possible values: INFO, WARNING, SEVERE." + }, + "type": { + "type": "string", + "description": "Type of this alert. Possible values: SELF_HOLD, MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, API_HOLD." + } + } + }, + "Alerts": { + "id": "Alerts", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The alerts returned in this list response.", + "items": { + "$ref": "Alert" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#alerts.", + "default": "adsense#alerts" + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#customChannel.", + "default": "adsense#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + }, + "targetingInfo": { + "type": "object", + "description": "The targeting information of this custom channel, if activated.", + "properties": { + "adsAppearOn": { + "type": "string", + "description": "The name used to describe this channel externally." + }, + "description": { + "type": "string", + "description": "The external description of the channel." + }, + "location": { + "type": "string", + "description": "The locations in which ads appear. (Only valid for content and mobile content ads). Acceptable values for content ads are: TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS." + }, + "siteLanguage": { + "type": "string", + "description": "The language of the sites ads will be displayed on." + } + } + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#customChannels.", + "default": "adsense#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "ReportingMetadataEntry" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#metadata.", + "default": "adsense#metadata" + } + } + }, + "Payment": { + "id": "Payment", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this Payment." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#payment.", + "default": "adsense#payment" + }, + "paymentAmount": { + "type": "string", + "description": "The amount to be paid." + }, + "paymentAmountCurrencyCode": { + "type": "string", + "description": "The currency code for the amount to be paid." + }, + "paymentDate": { + "type": "string", + "description": "The date this payment was/will be credited to the user, or none if the payment threshold has not been met." + } + } + }, + "Payments": { + "id": "Payments", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Payments for the account. One or both of a) the account's most recent payment; and b) the account's upcoming payment.", + "items": { + "$ref": "Payment" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#payments.", + "default": "adsense#payments" + } + } + }, + "ReportingMetadataEntry": { + "id": "ReportingMetadataEntry", + "type": "object", + "properties": { + "compatibleDimensions": { + "type": "array", + "description": "For metrics this is a list of dimension IDs which the metric is compatible with, for dimensions it is a list of compatibility groups the dimension belongs to.", + "items": { + "type": "string" + } + }, + "compatibleMetrics": { + "type": "array", + "description": "The names of the metrics the dimension or metric this reporting metadata entry describes is compatible with.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier of this reporting metadata entry, corresponding to the name of the appropriate dimension or metric." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#reportingMetadataEntry.", + "default": "adsense#reportingMetadataEntry" + }, + "requiredDimensions": { + "type": "array", + "description": "The names of the dimensions which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "requiredMetrics": { + "type": "array", + "description": "The names of the metrics which the dimension or metric this reporting metadata entry describes requires to also be present in order for the report to be valid. Omitting these will not cause an error or warning, but may result in data which cannot be correctly interpreted.", + "items": { + "type": "string" + } + }, + "supportedProducts": { + "type": "array", + "description": "The codes of the projects supported by the dimension or metric this reporting metadata entry describes.", + "items": { + "type": "string" + } + } + } + }, + "SavedAdStyle": { + "id": "SavedAdStyle", + "type": "object", + "properties": { + "adStyle": { + "$ref": "AdStyle", + "description": "The AdStyle itself." + }, + "id": { + "type": "string", + "description": "Unique identifier of this saved ad style. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedAdStyle.", + "default": "adsense#savedAdStyle" + }, + "name": { + "type": "string", + "description": "The user selected name of this SavedAdStyle." + } + } + }, + "SavedAdStyles": { + "id": "SavedAdStyles", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved ad styles returned in this list response.", + "items": { + "$ref": "SavedAdStyle" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedAdStyles.", + "default": "adsense#savedAdStyles" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "SavedReport": { + "id": "SavedReport", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this saved report." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#savedReport.", + "default": "adsense#savedReport" + }, + "name": { + "type": "string", + "description": "This saved report's name." + } + } + }, + "SavedReports": { + "id": "SavedReports", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The saved reports returned in this list response.", + "items": { + "$ref": "SavedReport" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#savedReports.", + "default": "adsense#savedReports" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through saved reports. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#urlChannel.", + "default": "adsense#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#urlChannels.", + "default": "adsense#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adsense.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about.", + "required": true, + "location": "path" + }, + "tree": { + "type": "boolean", + "description": "Whether the tree of sub accounts should be returned.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "List all accounts available to this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of accounts to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adsense.accounts.adclients.list", + "path": "accounts/{accountId}/adclients", + "httpMethod": "GET", + "description": "List all ad clients in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list ad clients.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.accounts.adunits.get", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "getAdCode": { + "id": "adsense.accounts.adunits.getAdCode", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + "httpMethod": "GET", + "description": "Get ad code for the specified ad unit.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client with contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get the code for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdCode" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.accounts.adunits.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "alerts": { + "methods": { + "delete": { + "id": "adsense.accounts.alerts.delete", + "path": "accounts/{accountId}/alerts/{alertId}", + "httpMethod": "DELETE", + "description": "Dismiss (delete) the specified alert from the specified publisher AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad unit.", + "required": true, + "location": "path" + }, + "alertId": { + "type": "string", + "description": "Alert to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "alertId" + ], + "scopes": [ + "https://www.googleapis.com/auth/adsense" + ] + }, + "list": { + "id": "adsense.accounts.alerts.list", + "path": "accounts/{accountId}/alerts", + "httpMethod": "GET", + "description": "List the alerts for the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to retrieve the alerts.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Alerts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.accounts.customchannels.get", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.customchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.accounts.customchannels.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "payments": { + "methods": { + "list": { + "id": "adsense.accounts.payments.list", + "path": "accounts/{accountId}/payments", + "httpMethod": "GET", + "description": "List the payments for the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to retrieve the payments.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Payments" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.generate", + "path": "accounts/{accountId}/reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account upon which to report.", + "required": true, + "location": "path" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + }, + "useTimezoneReporting": { + "type": "boolean", + "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.accounts.reports.saved.generate", + "path": "accounts/{accountId}/reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.reports.saved.list", + "path": "accounts/{accountId}/reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in the specified AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the saved reports belong.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.accounts.savedadstyles.get", + "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "List a specific saved ad style for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to get the saved ad style.", + "required": true, + "location": "path" + }, + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.accounts.savedadstyles.list", + "path": "accounts/{accountId}/savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list saved ad styles.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.accounts.urlchannels.list", + "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for the specified account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to which the ad client belongs.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "adclients": { + "methods": { + "list": { + "id": "adsense.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "get": { + "id": "adsense.adunits.get", + "path": "adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Gets the specified ad unit in the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to get the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "getAdCode": { + "id": "adsense.adunits.getAdCode", + "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode", + "httpMethod": "GET", + "description": "Get ad code for the specified ad unit.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client with contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get the code for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdCode" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "customchannels": { + "methods": { + "list": { + "id": "adsense.adunits.customchannels.list", + "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels which the specified ad unit belongs to.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "alerts": { + "methods": { + "delete": { + "id": "adsense.alerts.delete", + "path": "alerts/{alertId}", + "httpMethod": "DELETE", + "description": "Dismiss (delete) the specified alert from the publisher's AdSense account.", + "parameters": { + "alertId": { + "type": "string", + "description": "Alert to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "alertId" + ], + "scopes": [ + "https://www.googleapis.com/auth/adsense" + ] + }, + "list": { + "id": "adsense.alerts.list", + "path": "alerts", + "httpMethod": "GET", + "description": "List the alerts for this AdSense account.", + "parameters": { + "locale": { + "type": "string", + "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + "location": "query" + } + }, + "response": { + "$ref": "Alerts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "get": { + "id": "adsense.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get the specified custom channel from the specified ad client.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + }, + "resources": { + "adunits": { + "methods": { + "list": { + "id": "adsense.customchannels.adunits.list", + "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified custom channel.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client which contains the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "metadata": { + "resources": { + "dimensions": { + "methods": { + "list": { + "id": "adsense.metadata.dimensions.list", + "path": "metadata/dimensions", + "httpMethod": "GET", + "description": "List the metadata for the dimensions available to this AdSense account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "metrics": { + "methods": { + "list": { + "id": "adsense.metadata.metrics.list", + "path": "metadata/metrics", + "httpMethod": "GET", + "description": "List the metadata for the metrics available to this AdSense account.", + "response": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "payments": { + "methods": { + "list": { + "id": "adsense.payments.list", + "path": "payments", + "httpMethod": "GET", + "description": "List the payments for this AdSense account.", + "response": { + "$ref": "Payments" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Accounts upon which to report.", + "repeated": true, + "location": "query" + }, + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + }, + "useTimezoneReporting": { + "type": "boolean", + "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ], + "supportsMediaDownload": true + } + }, + "resources": { + "saved": { + "methods": { + "generate": { + "id": "adsense.reports.saved.generate", + "path": "reports/{savedReportId}", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + "parameters": { + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "savedReportId": { + "type": "string", + "description": "The saved report to retrieve.", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "savedReportId" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.reports.saved.list", + "path": "reports/saved", + "httpMethod": "GET", + "description": "List all saved reports in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved reports to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedReports" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } + }, + "savedadstyles": { + "methods": { + "get": { + "id": "adsense.savedadstyles.get", + "path": "savedadstyles/{savedAdStyleId}", + "httpMethod": "GET", + "description": "Get a specific saved ad style from the user's account.", + "parameters": { + "savedAdStyleId": { + "type": "string", + "description": "Saved ad style to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "savedAdStyleId" + ], + "response": { + "$ref": "SavedAdStyle" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + }, + "list": { + "id": "adsense.savedadstyles.list", + "path": "savedadstyles", + "httpMethod": "GET", + "description": "List all saved ad styles in the user's account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of saved ad styles to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "SavedAdStyles" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-gen.go new file mode 100644 index 0000000000000..318d216539827 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1.4/adsense-gen.go @@ -0,0 +1,4684 @@ +// Package adsense provides access to the AdSense Management API. +// +// See https://developers.google.com/adsense/management/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsense/v1.4" +// ... +// adsenseService, err := adsense.New(oauthHttpClient) +package adsense + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsense:v1.4" +const apiName = "adsense" +const apiVersion = "v1.4" +const basePath = "https://www.googleapis.com/adsense/v1.4/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense data + AdsenseScope = "https://www.googleapis.com/auth/adsense" + + // View your AdSense data + AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Alerts = NewAlertsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Metadata = NewMetadataService(s) + s.Payments = NewPaymentsService(s) + s.Reports = NewReportsService(s) + s.Savedadstyles = NewSavedadstylesService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Adclients *AdclientsService + + Adunits *AdunitsService + + Alerts *AlertsService + + Customchannels *CustomchannelsService + + Metadata *MetadataService + + Payments *PaymentsService + + Reports *ReportsService + + Savedadstyles *SavedadstylesService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + rs.Adclients = NewAccountsAdclientsService(s) + rs.Adunits = NewAccountsAdunitsService(s) + rs.Alerts = NewAccountsAlertsService(s) + rs.Customchannels = NewAccountsCustomchannelsService(s) + rs.Payments = NewAccountsPaymentsService(s) + rs.Reports = NewAccountsReportsService(s) + rs.Savedadstyles = NewAccountsSavedadstylesService(s) + rs.Urlchannels = NewAccountsUrlchannelsService(s) + return rs +} + +type AccountsService struct { + s *Service + + Adclients *AccountsAdclientsService + + Adunits *AccountsAdunitsService + + Alerts *AccountsAlertsService + + Customchannels *AccountsCustomchannelsService + + Payments *AccountsPaymentsService + + Reports *AccountsReportsService + + Savedadstyles *AccountsSavedadstylesService + + Urlchannels *AccountsUrlchannelsService +} + +func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService { + rs := &AccountsAdclientsService{s: s} + return rs +} + +type AccountsAdclientsService struct { + s *Service +} + +func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService { + rs := &AccountsAdunitsService{s: s} + rs.Customchannels = NewAccountsAdunitsCustomchannelsService(s) + return rs +} + +type AccountsAdunitsService struct { + s *Service + + Customchannels *AccountsAdunitsCustomchannelsService +} + +func NewAccountsAdunitsCustomchannelsService(s *Service) *AccountsAdunitsCustomchannelsService { + rs := &AccountsAdunitsCustomchannelsService{s: s} + return rs +} + +type AccountsAdunitsCustomchannelsService struct { + s *Service +} + +func NewAccountsAlertsService(s *Service) *AccountsAlertsService { + rs := &AccountsAlertsService{s: s} + return rs +} + +type AccountsAlertsService struct { + s *Service +} + +func NewAccountsCustomchannelsService(s *Service) *AccountsCustomchannelsService { + rs := &AccountsCustomchannelsService{s: s} + rs.Adunits = NewAccountsCustomchannelsAdunitsService(s) + return rs +} + +type AccountsCustomchannelsService struct { + s *Service + + Adunits *AccountsCustomchannelsAdunitsService +} + +func NewAccountsCustomchannelsAdunitsService(s *Service) *AccountsCustomchannelsAdunitsService { + rs := &AccountsCustomchannelsAdunitsService{s: s} + return rs +} + +type AccountsCustomchannelsAdunitsService struct { + s *Service +} + +func NewAccountsPaymentsService(s *Service) *AccountsPaymentsService { + rs := &AccountsPaymentsService{s: s} + return rs +} + +type AccountsPaymentsService struct { + s *Service +} + +func NewAccountsReportsService(s *Service) *AccountsReportsService { + rs := &AccountsReportsService{s: s} + rs.Saved = NewAccountsReportsSavedService(s) + return rs +} + +type AccountsReportsService struct { + s *Service + + Saved *AccountsReportsSavedService +} + +func NewAccountsReportsSavedService(s *Service) *AccountsReportsSavedService { + rs := &AccountsReportsSavedService{s: s} + return rs +} + +type AccountsReportsSavedService struct { + s *Service +} + +func NewAccountsSavedadstylesService(s *Service) *AccountsSavedadstylesService { + rs := &AccountsSavedadstylesService{s: s} + return rs +} + +type AccountsSavedadstylesService struct { + s *Service +} + +func NewAccountsUrlchannelsService(s *Service) *AccountsUrlchannelsService { + rs := &AccountsUrlchannelsService{s: s} + return rs +} + +type AccountsUrlchannelsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + rs.Customchannels = NewAdunitsCustomchannelsService(s) + return rs +} + +type AdunitsService struct { + s *Service + + Customchannels *AdunitsCustomchannelsService +} + +func NewAdunitsCustomchannelsService(s *Service) *AdunitsCustomchannelsService { + rs := &AdunitsCustomchannelsService{s: s} + return rs +} + +type AdunitsCustomchannelsService struct { + s *Service +} + +func NewAlertsService(s *Service) *AlertsService { + rs := &AlertsService{s: s} + return rs +} + +type AlertsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + rs.Adunits = NewCustomchannelsAdunitsService(s) + return rs +} + +type CustomchannelsService struct { + s *Service + + Adunits *CustomchannelsAdunitsService +} + +func NewCustomchannelsAdunitsService(s *Service) *CustomchannelsAdunitsService { + rs := &CustomchannelsAdunitsService{s: s} + return rs +} + +type CustomchannelsAdunitsService struct { + s *Service +} + +func NewMetadataService(s *Service) *MetadataService { + rs := &MetadataService{s: s} + rs.Dimensions = NewMetadataDimensionsService(s) + rs.Metrics = NewMetadataMetricsService(s) + return rs +} + +type MetadataService struct { + s *Service + + Dimensions *MetadataDimensionsService + + Metrics *MetadataMetricsService +} + +func NewMetadataDimensionsService(s *Service) *MetadataDimensionsService { + rs := &MetadataDimensionsService{s: s} + return rs +} + +type MetadataDimensionsService struct { + s *Service +} + +func NewMetadataMetricsService(s *Service) *MetadataMetricsService { + rs := &MetadataMetricsService{s: s} + return rs +} + +type MetadataMetricsService struct { + s *Service +} + +func NewPaymentsService(s *Service) *PaymentsService { + rs := &PaymentsService{s: s} + return rs +} + +type PaymentsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Saved = NewReportsSavedService(s) + return rs +} + +type ReportsService struct { + s *Service + + Saved *ReportsSavedService +} + +func NewReportsSavedService(s *Service) *ReportsSavedService { + rs := &ReportsSavedService{s: s} + return rs +} + +type ReportsSavedService struct { + s *Service +} + +func NewSavedadstylesService(s *Service) *SavedadstylesService { + rs := &SavedadstylesService{s: s} + return rs +} + +type SavedadstylesService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` + + // Premium: Whether this account is premium. + Premium bool `json:"premium,omitempty"` + + // SubAccounts: Sub accounts of the this account. + SubAccounts []*Account `json:"subAccounts,omitempty"` + + // Timezone: AdSense timezone of this account. + Timezone string `json:"timezone,omitempty"` +} + +type Accounts struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The accounts returned in this list response. + Items []*Account `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#accounts. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through accounts. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // ArcReviewMode: ARC review mode this ad client is in. Empty if the + // client is not opted in to ARC. Possible values: POST_REVIEW, + // AUTOMATIC_PRE_REVIEW. + ArcReviewMode string `json:"arcReviewMode,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdCode struct { + // AdCode: The ad code snippet. + AdCode string `json:"adCode,omitempty"` + + // Kind: Kind this is, in this case adsense#adCode. + Kind string `json:"kind,omitempty"` +} + +type AdStyle struct { + // Colors: The colors which are included in the style. These are + // represented as six hexadecimal characters, similar to HTML color + // codes, but without the leading hash. + Colors *AdStyleColors `json:"colors,omitempty"` + + // Corners: The style of the corners in the ad. + Corners string `json:"corners,omitempty"` + + // Font: The font which is included in the style. + Font *AdStyleFont `json:"font,omitempty"` + + // Kind: Kind this is, in this case adsense#adStyle. + Kind string `json:"kind,omitempty"` +} + +type AdStyleColors struct { + // Background: The color of the ad background. + Background string `json:"background,omitempty"` + + // Border: The color of the ad border. + Border string `json:"border,omitempty"` + + // Text: The color of the ad text. + Text string `json:"text,omitempty"` + + // Title: The color of the ad title. + Title string `json:"title,omitempty"` + + // Url: The color of the ad url. + Url string `json:"url,omitempty"` +} + +type AdStyleFont struct { + // Family: The family of the font. + Family string `json:"family,omitempty"` + + // Size: The size of the font. + Size string `json:"size,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // ContentAdsSettings: Settings specific to content ads (AFC) and + // highend mobile content ads (AFMC). + ContentAdsSettings *AdUnitContentAdsSettings `json:"contentAdsSettings,omitempty"` + + // CustomStyle: Custom style information specific to this ad unit. + CustomStyle *AdStyle `json:"customStyle,omitempty"` + + // FeedAdsSettings: Settings specific to feed ads (AFF). + FeedAdsSettings *AdUnitFeedAdsSettings `json:"feedAdsSettings,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adUnit. + Kind string `json:"kind,omitempty"` + + // MobileContentAdsSettings: Settings specific to WAP mobile content ads + // (AFMC). + MobileContentAdsSettings *AdUnitMobileContentAdsSettings `json:"mobileContentAdsSettings,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // SavedStyleId: ID of the saved ad style which holds this ad unit's + // style information. + SavedStyleId string `json:"savedStyleId,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnitContentAdsSettings struct { + // BackupOption: The backup option to be used in instances where no ad + // is available. + BackupOption *AdUnitContentAdsSettingsBackupOption `json:"backupOption,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnitContentAdsSettingsBackupOption struct { + // Color: Color to use when type is set to COLOR. + Color string `json:"color,omitempty"` + + // Type: Type of the backup option. Possible values are BLANK, COLOR and + // URL. + Type string `json:"type,omitempty"` + + // Url: URL to use when type is set to URL. + Url string `json:"url,omitempty"` +} + +type AdUnitFeedAdsSettings struct { + // AdPosition: The position of the ads relative to the feed entries. + AdPosition string `json:"adPosition,omitempty"` + + // Frequency: The frequency at which ads should appear in the feed (i.e. + // every N entries). + Frequency int64 `json:"frequency,omitempty"` + + // MinimumWordCount: The minimum length an entry should be in order to + // have attached ads. + MinimumWordCount int64 `json:"minimumWordCount,omitempty"` + + // Type: The type of ads which should appear. + Type string `json:"type,omitempty"` +} + +type AdUnitMobileContentAdsSettings struct { + // MarkupLanguage: The markup language to use for this ad unit. + MarkupLanguage string `json:"markupLanguage,omitempty"` + + // ScriptingLanguage: The scripting language to use for this ad unit. + ScriptingLanguage string `json:"scriptingLanguage,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdsenseReportsGenerateResponse struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // EndDate: The requested end date in yyyy-mm-dd format. + EndDate string `json:"endDate,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsense#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // StartDate: The requested start date in yyyy-mm-dd format. + StartDate string `json:"startDate,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type AdsenseReportsGenerateResponseHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type Alert struct { + // Id: Unique identifier of this alert. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // IsDismissible: Whether this alert can be dismissed. + IsDismissible bool `json:"isDismissible,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#alert. + Kind string `json:"kind,omitempty"` + + // Message: The localized alert message. + Message string `json:"message,omitempty"` + + // Severity: Severity of this alert. Possible values: INFO, WARNING, + // SEVERE. + Severity string `json:"severity,omitempty"` + + // Type: Type of this alert. Possible values: SELF_HOLD, + // MIGRATED_TO_BILLING3, ADDRESS_PIN_VERIFICATION, + // PHONE_PIN_VERIFICATION, CORPORATE_ENTITY, GRAYLISTED_PUBLISHER, + // API_HOLD. + Type string `json:"type,omitempty"` +} + +type Alerts struct { + // Items: The alerts returned in this list response. + Items []*Alert `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#alerts. + Kind string `json:"kind,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` + + // TargetingInfo: The targeting information of this custom channel, if + // activated. + TargetingInfo *CustomChannelTargetingInfo `json:"targetingInfo,omitempty"` +} + +type CustomChannelTargetingInfo struct { + // AdsAppearOn: The name used to describe this channel externally. + AdsAppearOn string `json:"adsAppearOn,omitempty"` + + // Description: The external description of the channel. + Description string `json:"description,omitempty"` + + // Location: The locations in which ads appear. (Only valid for content + // and mobile content ads). Acceptable values for content ads are: + // TOP_LEFT, TOP_CENTER, TOP_RIGHT, MIDDLE_LEFT, MIDDLE_CENTER, + // MIDDLE_RIGHT, BOTTOM_LEFT, BOTTOM_CENTER, BOTTOM_RIGHT, + // MULTIPLE_LOCATIONS. Acceptable values for mobile content ads are: + // TOP, MIDDLE, BOTTOM, MULTIPLE_LOCATIONS. + Location string `json:"location,omitempty"` + + // SiteLanguage: The language of the sites ads will be displayed on. + SiteLanguage string `json:"siteLanguage,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Metadata struct { + Items []*ReportingMetadataEntry `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#metadata. + Kind string `json:"kind,omitempty"` +} + +type Payment struct { + // Id: Unique identifier of this Payment. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#payment. + Kind string `json:"kind,omitempty"` + + // PaymentAmount: The amount to be paid. + PaymentAmount string `json:"paymentAmount,omitempty"` + + // PaymentAmountCurrencyCode: The currency code for the amount to be + // paid. + PaymentAmountCurrencyCode string `json:"paymentAmountCurrencyCode,omitempty"` + + // PaymentDate: The date this payment was/will be credited to the user, + // or none if the payment threshold has not been met. + PaymentDate string `json:"paymentDate,omitempty"` +} + +type Payments struct { + // Items: The list of Payments for the account. One or both of a) the + // account's most recent payment; and b) the account's upcoming payment. + Items []*Payment `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#payments. + Kind string `json:"kind,omitempty"` +} + +type ReportingMetadataEntry struct { + // CompatibleDimensions: For metrics this is a list of dimension IDs + // which the metric is compatible with, for dimensions it is a list of + // compatibility groups the dimension belongs to. + CompatibleDimensions []string `json:"compatibleDimensions,omitempty"` + + // CompatibleMetrics: The names of the metrics the dimension or metric + // this reporting metadata entry describes is compatible with. + CompatibleMetrics []string `json:"compatibleMetrics,omitempty"` + + // Id: Unique identifier of this reporting metadata entry, corresponding + // to the name of the appropriate dimension or metric. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adsense#reportingMetadataEntry. + Kind string `json:"kind,omitempty"` + + // RequiredDimensions: The names of the dimensions which the dimension + // or metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredDimensions []string `json:"requiredDimensions,omitempty"` + + // RequiredMetrics: The names of the metrics which the dimension or + // metric this reporting metadata entry describes requires to also be + // present in order for the report to be valid. Omitting these will not + // cause an error or warning, but may result in data which cannot be + // correctly interpreted. + RequiredMetrics []string `json:"requiredMetrics,omitempty"` + + // SupportedProducts: The codes of the projects supported by the + // dimension or metric this reporting metadata entry describes. + SupportedProducts []string `json:"supportedProducts,omitempty"` +} + +type SavedAdStyle struct { + // AdStyle: The AdStyle itself. + AdStyle *AdStyle `json:"adStyle,omitempty"` + + // Id: Unique identifier of this saved ad style. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedAdStyle. + Kind string `json:"kind,omitempty"` + + // Name: The user selected name of this SavedAdStyle. + Name string `json:"name,omitempty"` +} + +type SavedAdStyles struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved ad styles returned in this list response. + Items []*SavedAdStyle `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedAdStyles. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SavedReport struct { + // Id: Unique identifier of this saved report. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#savedReport. + Kind string `json:"kind,omitempty"` + + // Name: This saved report's name. + Name string `json:"name,omitempty"` +} + +type SavedReports struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The saved reports returned in this list response. + Items []*SavedReport `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#savedReports. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through saved reports. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsense.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected AdSense account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Tree sets the optional parameter "tree": Whether the tree of sub +// accounts should be returned. +func (c *AccountsGetCall) Tree(tree bool) *AccountsGetCall { + c.opt_["tree"] = tree + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["tree"]; ok { + params.Set("tree", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tree": { + // "description": "Whether the tree of sub accounts should be returned.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.list": + +type AccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all accounts available to this AdSense account. +func (r *AccountsService) List() *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of accounts to include in the response, used for paging. +func (c *AccountsListCall) MaxResults(maxResults int64) *AccountsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through accounts. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsListCall) PageToken(pageToken string) *AccountsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all accounts available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of accounts to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through accounts. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adclients.list": + +type AccountsAdclientsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all ad clients in the specified account. +func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall { + c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adclients.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list ad clients.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.get": + +type AccountsAdunitsGetCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client for the +// specified account. +func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall { + c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.getAdCode": + +type AccountsAdunitsGetAdCodeCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// GetAdCode: Get ad code for the specified ad unit. +func (r *AccountsAdunitsService) GetAdCode(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetAdCodeCall { + c := &AccountsAdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetAdCodeCall) Do() (*AdCode, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdCode) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get ad code for the specified ad unit.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.getAdCode", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client with contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get the code for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + // "response": { + // "$ref": "AdCode" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.list": + +type AccountsAdunitsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for the specified +// account. +func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall { + c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.adunits.customchannels.list": + +type AccountsAdunitsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AccountsAdunitsCustomchannelsService) List(accountId string, adClientId string, adUnitId string) *AccountsAdunitsCustomchannelsListCall { + c := &AccountsAdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsAdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsAdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsAdunitsCustomchannelsListCall) PageToken(pageToken string) *AccountsAdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.accounts.adunits.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.alerts.delete": + +type AccountsAlertsDeleteCall struct { + s *Service + accountId string + alertId string + opt_ map[string]interface{} +} + +// Delete: Dismiss (delete) the specified alert from the specified +// publisher AdSense account. +func (r *AccountsAlertsService) Delete(accountId string, alertId string) *AccountsAlertsDeleteCall { + c := &AccountsAlertsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.alertId = alertId + return c +} + +func (c *AccountsAlertsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/alerts/{alertId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{alertId}", url.QueryEscape(c.alertId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Dismiss (delete) the specified alert from the specified publisher AdSense account.", + // "httpMethod": "DELETE", + // "id": "adsense.accounts.alerts.delete", + // "parameterOrder": [ + // "accountId", + // "alertId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "alertId": { + // "description": "Alert to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/alerts/{alertId}", + // "scopes": [ + // "https://www.googleapis.com/auth/adsense" + // ] + // } + +} + +// method id "adsense.accounts.alerts.list": + +type AccountsAlertsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List the alerts for the specified AdSense account. +func (r *AccountsAlertsService) List(accountId string) *AccountsAlertsListCall { + c := &AccountsAlertsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// Locale sets the optional parameter "locale": The locale to use for +// translating alert messages. The account locale will be used if this +// is not supplied. The AdSense default (English) will be used if the +// supplied locale is invalid or unsupported. +func (c *AccountsAlertsListCall) Locale(locale string) *AccountsAlertsListCall { + c.opt_["locale"] = locale + return c +} + +func (c *AccountsAlertsListCall) Do() (*Alerts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/alerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alerts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the alerts for the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.alerts.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to retrieve the alerts.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/alerts", + // "response": { + // "$ref": "Alerts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.get": + +type AccountsCustomchannelsGetCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client +// for the specified account. +func (r *AccountsCustomchannelsService) Get(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsGetCall { + c := &AccountsCustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *AccountsCustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.list": + +type AccountsCustomchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for the +// specified account. +func (r *AccountsCustomchannelsService) List(accountId string, adClientId string) *AccountsCustomchannelsListCall { + c := &AccountsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AccountsCustomchannelsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsCustomchannelsListCall) PageToken(pageToken string) *AccountsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.customchannels.adunits.list": + +type AccountsCustomchannelsAdunitsListCall struct { + s *Service + accountId string + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *AccountsCustomchannelsAdunitsService) List(accountId string, adClientId string, customChannelId string) *AccountsCustomchannelsAdunitsListCall { + c := &AccountsCustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsCustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsCustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsCustomchannelsAdunitsListCall) MaxResults(maxResults int64) *AccountsCustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsCustomchannelsAdunitsListCall) PageToken(pageToken string) *AccountsCustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsCustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.accounts.customchannels.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.payments.list": + +type AccountsPaymentsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List the payments for the specified AdSense account. +func (r *AccountsPaymentsService) List(accountId string) *AccountsPaymentsListCall { + c := &AccountsPaymentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +func (c *AccountsPaymentsListCall) Do() (*Payments, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/payments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Payments) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the payments for the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.payments.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to retrieve the payments.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/payments", + // "response": { + // "$ref": "Payments" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.generate": + +type AccountsReportsGenerateCall struct { + s *Service + accountId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall { + c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.startDate = startDate + c.endDate = endDate + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *AccountsReportsGenerateCall) Currency(currency string) *AccountsReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +// UseTimezoneReporting sets the optional parameter +// "useTimezoneReporting": Whether the report should be generated in the +// AdSense account's local timezone. If false default PST/PDT timezone +// will be used. +func (c *AccountsReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *AccountsReportsGenerateCall { + c.opt_["useTimezoneReporting"] = useTimezoneReporting + return c +} + +func (c *AccountsReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useTimezoneReporting"]; ok { + params.Set("useTimezoneReporting", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.generate", + // "parameterOrder": [ + // "accountId", + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Account upon which to report.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // }, + // "useTimezoneReporting": { + // "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "accounts/{accountId}/reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.accounts.reports.saved.generate": + +type AccountsReportsSavedGenerateCall struct { + s *Service + accountId string + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *AccountsReportsSavedService) Generate(accountId string, savedReportId string) *AccountsReportsSavedGenerateCall { + c := &AccountsReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsSavedGenerateCall) Locale(locale string) *AccountsReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsSavedGenerateCall) MaxResults(maxResults int64) *AccountsReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsSavedGenerateCall) StartIndex(startIndex int64) *AccountsReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.generate", + // "parameterOrder": [ + // "accountId", + // "savedReportId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.reports.saved.list": + +type AccountsReportsSavedListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved reports in the specified AdSense account. +func (r *AccountsReportsSavedService) List(accountId string) *AccountsReportsSavedListCall { + c := &AccountsReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *AccountsReportsSavedListCall) MaxResults(maxResults int64) *AccountsReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsReportsSavedListCall) PageToken(pageToken string) *AccountsReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in the specified AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.reports.saved.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the saved reports belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.get": + +type AccountsSavedadstylesGetCall struct { + s *Service + accountId string + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: List a specific saved ad style for the specified account. +func (r *AccountsSavedadstylesService) Get(accountId string, savedAdStyleId string) *AccountsSavedadstylesGetCall { + c := &AccountsSavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *AccountsSavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List a specific saved ad style for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.get", + // "parameterOrder": [ + // "accountId", + // "savedAdStyleId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to get the saved ad style.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.savedadstyles.list": + +type AccountsSavedadstylesListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the specified account. +func (r *AccountsSavedadstylesService) List(accountId string) *AccountsSavedadstylesListCall { + c := &AccountsSavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *AccountsSavedadstylesListCall) MaxResults(maxResults int64) *AccountsSavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AccountsSavedadstylesListCall) PageToken(pageToken string) *AccountsSavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsSavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.savedadstyles.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list saved ad styles.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.accounts.urlchannels.list": + +type AccountsUrlchannelsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for the +// specified account. +func (r *AccountsUrlchannelsService) List(accountId string, adClientId string) *AccountsUrlchannelsListCall { + c := &AccountsUrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *AccountsUrlchannelsListCall) MaxResults(maxResults int64) *AccountsUrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsUrlchannelsListCall) PageToken(pageToken string) *AccountsUrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsUrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for the specified account.", + // "httpMethod": "GET", + // "id": "adsense.accounts.urlchannels.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to which the ad client belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.get": + +type AdunitsGetCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Gets the specified ad unit in the specified ad client. +func (r *AdunitsService) Get(adClientId string, adUnitId string) *AdunitsGetCall { + c := &AdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified ad unit in the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.adunits.get", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to get the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.getAdCode": + +type AdunitsGetAdCodeCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// GetAdCode: Get ad code for the specified ad unit. +func (r *AdunitsService) GetAdCode(adClientId string, adUnitId string) *AdunitsGetAdCodeCall { + c := &AdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AdunitsGetAdCodeCall) Do() (*AdCode, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/adcode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdCode) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get ad code for the specified ad unit.", + // "httpMethod": "GET", + // "id": "adsense.adunits.getAdCode", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client with contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get the code for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/adcode", + // "response": { + // "$ref": "AdCode" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this AdSense +// account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.customchannels.list": + +type AdunitsCustomchannelsListCall struct { + s *Service + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// List: List all custom channels which the specified ad unit belongs +// to. +func (r *AdunitsCustomchannelsService) List(adClientId string, adUnitId string) *AdunitsCustomchannelsListCall { + c := &AdunitsCustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *AdunitsCustomchannelsListCall) MaxResults(maxResults int64) *AdunitsCustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *AdunitsCustomchannelsListCall) PageToken(pageToken string) *AdunitsCustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsCustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/adunits/{adUnitId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels which the specified ad unit belongs to.", + // "httpMethod": "GET", + // "id": "adsense.adunits.customchannels.list", + // "parameterOrder": [ + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits/{adUnitId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.alerts.delete": + +type AlertsDeleteCall struct { + s *Service + alertId string + opt_ map[string]interface{} +} + +// Delete: Dismiss (delete) the specified alert from the publisher's +// AdSense account. +func (r *AlertsService) Delete(alertId string) *AlertsDeleteCall { + c := &AlertsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.alertId = alertId + return c +} + +func (c *AlertsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "alerts/{alertId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{alertId}", url.QueryEscape(c.alertId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Dismiss (delete) the specified alert from the publisher's AdSense account.", + // "httpMethod": "DELETE", + // "id": "adsense.alerts.delete", + // "parameterOrder": [ + // "alertId" + // ], + // "parameters": { + // "alertId": { + // "description": "Alert to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "alerts/{alertId}", + // "scopes": [ + // "https://www.googleapis.com/auth/adsense" + // ] + // } + +} + +// method id "adsense.alerts.list": + +type AlertsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the alerts for this AdSense account. +func (r *AlertsService) List() *AlertsListCall { + c := &AlertsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Locale sets the optional parameter "locale": The locale to use for +// translating alert messages. The account locale will be used if this +// is not supplied. The AdSense default (English) will be used if the +// supplied locale is invalid or unsupported. +func (c *AlertsListCall) Locale(locale string) *AlertsListCall { + c.opt_["locale"] = locale + return c +} + +func (c *AlertsListCall) Do() (*Alerts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "alerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Alerts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the alerts for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.alerts.list", + // "parameters": { + // "locale": { + // "description": "The locale to use for translating alert messages. The account locale will be used if this is not supplied. The AdSense default (English) will be used if the supplied locale is invalid or unsupported.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "alerts", + // "response": { + // "$ref": "Alerts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get the specified custom channel from the specified ad client. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified custom channel from the specified ad client.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this +// AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.adunits.list": + +type CustomchannelsAdunitsListCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified custom channel. +func (r *CustomchannelsAdunitsService) List(adClientId string, customChannelId string) *CustomchannelsAdunitsListCall { + c := &CustomchannelsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *CustomchannelsAdunitsListCall) IncludeInactive(includeInactive bool) *CustomchannelsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *CustomchannelsAdunitsListCall) MaxResults(maxResults int64) *CustomchannelsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *CustomchannelsAdunitsListCall) PageToken(pageToken string) *CustomchannelsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified custom channel.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.adunits.list", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client which contains the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.metadata.dimensions.list": + +type MetadataDimensionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the dimensions available to this AdSense +// account. +func (r *MetadataDimensionsService) List() *MetadataDimensionsListCall { + c := &MetadataDimensionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataDimensionsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/dimensions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the dimensions available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.metadata.dimensions.list", + // "path": "metadata/dimensions", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.metadata.metrics.list": + +type MetadataMetricsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the metadata for the metrics available to this AdSense +// account. +func (r *MetadataMetricsService) List() *MetadataMetricsListCall { + c := &MetadataMetricsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *MetadataMetricsListCall) Do() (*Metadata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/metrics") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Metadata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the metadata for the metrics available to this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.metadata.metrics.list", + // "path": "metadata/metrics", + // "response": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.payments.list": + +type PaymentsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the payments for this AdSense account. +func (r *PaymentsService) List() *PaymentsListCall { + c := &PaymentsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *PaymentsListCall) Do() (*Payments, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "payments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Payments) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the payments for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.payments.list", + // "path": "payments", + // "response": { + // "$ref": "Payments" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// AccountId sets the optional parameter "accountId": Accounts upon +// which to report. +func (c *ReportsGenerateCall) AccountId(accountId string) *ReportsGenerateCall { + c.opt_["accountId"] = accountId + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +// UseTimezoneReporting sets the optional parameter +// "useTimezoneReporting": Whether the report should be generated in the +// AdSense account's local timezone. If false default PST/PDT timezone +// will be used. +func (c *ReportsGenerateCall) UseTimezoneReporting(useTimezoneReporting bool) *ReportsGenerateCall { + c.opt_["useTimezoneReporting"] = useTimezoneReporting + return c +} + +func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["accountId"]; ok { + params.Set("accountId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useTimezoneReporting"]; ok { + params.Set("useTimezoneReporting", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Accounts upon which to report.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)|(latest-(\\d{2})-(\\d{2})(-\\d+y)?)|(latest-latest-(\\d{2})(-\\d+m)?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // }, + // "useTimezoneReporting": { + // "description": "Whether the report should be generated in the AdSense account's local timezone. If false default PST/PDT timezone will be used.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "adsense.reports.saved.generate": + +type ReportsSavedGenerateCall struct { + s *Service + savedReportId string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the saved report ID +// sent in the query parameters. +func (r *ReportsSavedService) Generate(savedReportId string) *ReportsSavedGenerateCall { + c := &ReportsSavedGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.savedReportId = savedReportId + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsSavedGenerateCall) Locale(locale string) *ReportsSavedGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsSavedGenerateCall) MaxResults(maxResults int64) *ReportsSavedGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsSavedGenerateCall) StartIndex(startIndex int64) *ReportsSavedGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsSavedGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{savedReportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedReportId}", url.QueryEscape(c.savedReportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the saved report ID sent in the query parameters.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.generate", + // "parameterOrder": [ + // "savedReportId" + // ], + // "parameters": { + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "savedReportId": { + // "description": "The saved report to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports/{savedReportId}", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.saved.list": + +type ReportsSavedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved reports in this AdSense account. +func (r *ReportsSavedService) List() *ReportsSavedListCall { + c := &ReportsSavedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved reports to include in the response, used for paging. +func (c *ReportsSavedListCall) MaxResults(maxResults int64) *ReportsSavedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved reports. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *ReportsSavedListCall) PageToken(pageToken string) *ReportsSavedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ReportsSavedListCall) Do() (*SavedReports, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/saved") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedReports) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved reports in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.reports.saved.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved reports to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved reports. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "reports/saved", + // "response": { + // "$ref": "SavedReports" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.get": + +type SavedadstylesGetCall struct { + s *Service + savedAdStyleId string + opt_ map[string]interface{} +} + +// Get: Get a specific saved ad style from the user's account. +func (r *SavedadstylesService) Get(savedAdStyleId string) *SavedadstylesGetCall { + c := &SavedadstylesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.savedAdStyleId = savedAdStyleId + return c +} + +func (c *SavedadstylesGetCall) Do() (*SavedAdStyle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles/{savedAdStyleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{savedAdStyleId}", url.QueryEscape(c.savedAdStyleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a specific saved ad style from the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.get", + // "parameterOrder": [ + // "savedAdStyleId" + // ], + // "parameters": { + // "savedAdStyleId": { + // "description": "Saved ad style to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "savedadstyles/{savedAdStyleId}", + // "response": { + // "$ref": "SavedAdStyle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.savedadstyles.list": + +type SavedadstylesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all saved ad styles in the user's account. +func (r *SavedadstylesService) List() *SavedadstylesListCall { + c := &SavedadstylesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of saved ad styles to include in the response, used for +// paging. +func (c *SavedadstylesListCall) MaxResults(maxResults int64) *SavedadstylesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through saved ad styles. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *SavedadstylesListCall) PageToken(pageToken string) *SavedadstylesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SavedadstylesListCall) Do() (*SavedAdStyles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "savedadstyles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SavedAdStyles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all saved ad styles in the user's account.", + // "httpMethod": "GET", + // "id": "adsense.savedadstyles.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of saved ad styles to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through saved ad styles. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "savedadstyles", + // "response": { + // "$ref": "SavedAdStyles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this +// AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-api.json new file mode 100644 index 0000000000000..a49d835699563 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-api.json @@ -0,0 +1,605 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"BgGnx7p-6wsAbOn4St99QhtBGbA/dDvqGV6BmrzgyC9htm-_zFD2_ME\"", + "discoveryVersion": "v1", + "id": "adsense:v1", + "name": "adsense", + "canonicalName": "AdSense", + "version": "v1", + "revision": "20130712", + "title": "AdSense Management API", + "description": "Gives AdSense publishers access to their inventory and the ability to generate reports", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/management/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsense/v1/", + "basePath": "/adsense/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsense/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsense": { + "description": "View and manage your AdSense data" + }, + "https://www.googleapis.com/auth/adsense.readonly": { + "description": "View your AdSense data" + } + } + } + }, + "schemas": { + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adClient.", + "default": "adsense#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adClients.", + "default": "adsense#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#adUnit.", + "default": "adsense#adUnit" + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#adUnits.", + "default": "adsense#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdsenseReportsGenerateResponse": { + "id": "AdsenseReportsGenerateResponse", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsense#report.", + "default": "adsense#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#customChannel.", + "default": "adsense#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#customChannels.", + "default": "adsense#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsense#urlChannel.", + "default": "adsense#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsense#urlChannels.", + "default": "adsense#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "adclients": { + "methods": { + "list": { + "id": "adsense.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "adunits": { + "methods": { + "list": { + "id": "adsense.adunits.list", + "path": "adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "customchannels": { + "methods": { + "list": { + "id": "adsense.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all custom channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsense.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "currency": { + "type": "string", + "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + "pattern": "[a-zA-Z]+", + "location": "query" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "int32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "AdsenseReportsGenerateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + }, + "urlchannels": { + "methods": { + "list": { + "id": "adsense.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all URL channels in the specified ad client for this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsense", + "https://www.googleapis.com/auth/adsense.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-gen.go new file mode 100644 index 0000000000000..97ad69f9b29f4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsense/v1/adsense-gen.go @@ -0,0 +1,934 @@ +// Package adsense provides access to the AdSense Management API. +// +// See https://developers.google.com/adsense/management/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsense/v1" +// ... +// adsenseService, err := adsense.New(oauthHttpClient) +package adsense + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsense:v1" +const apiName = "adsense" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/adsense/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense data + AdsenseScope = "https://www.googleapis.com/auth/adsense" + + // View your AdSense data + AdsenseReadonlyScope = "https://www.googleapis.com/auth/adsense.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Adclients = NewAdclientsService(s) + s.Adunits = NewAdunitsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Reports = NewReportsService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Adclients *AdclientsService + + Adunits *AdunitsService + + Customchannels *CustomchannelsService + + Reports *ReportsService + + Urlchannels *UrlchannelsService +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAdunitsService(s *Service) *AdunitsService { + rs := &AdunitsService{s: s} + return rs +} + +type AdunitsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + return rs +} + +type CustomchannelsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type AdClient struct { + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#adUnit. + Kind string `json:"kind,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdsenseReportsGenerateResponse struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*AdsenseReportsGenerateResponseHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsense#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type AdsenseReportsGenerateResponseHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsense#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsense#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsense.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1/", "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.adunits.list": + +type AdunitsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified ad client for this AdSense +// account. +func (r *AdunitsService) List(adClientId string) *AdunitsListCall { + c := &AdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AdunitsListCall) IncludeInactive(includeInactive bool) *AdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AdunitsListCall) MaxResults(maxResults int64) *AdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdunitsListCall) PageToken(pageToken string) *AdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1/", "adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.adunits.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all custom channels in the specified ad client for this +// AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1/", "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all custom channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// Currency sets the optional parameter "currency": Optional currency to +// use when reporting on monetary metrics. Defaults to the account's +// currency if not set. +func (c *ReportsGenerateCall) Currency(currency string) *ReportsGenerateCall { + c.opt_["currency"] = currency + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*AdsenseReportsGenerateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1/", "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdsenseReportsGenerateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsense.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "currency": { + // "description": "Optional currency to use when reporting on monetary metrics. Defaults to the account's currency if not set.", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,2}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "int32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "AdsenseReportsGenerateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} + +// method id "adsense.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all URL channels in the specified ad client for this +// AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/adsense/v1/", "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all URL channels in the specified ad client for this AdSense account.", + // "httpMethod": "GET", + // "id": "adsense.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsense", + // "https://www.googleapis.com/auth/adsense.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-api.json b/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-api.json new file mode 100644 index 0000000000000..556f6c8fdca57 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-api.json @@ -0,0 +1,1568 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/sg56Xf_5EyNWaO73kOWKtnVtRUE\"", + "discoveryVersion": "v1", + "id": "adsensehost:v4.1", + "name": "adsensehost", + "canonicalName": "AdSense Host", + "version": "v4.1", + "title": "AdSense Host API", + "description": "Gives AdSense Hosts access to report generation, ad code generation, and publisher management capabilities.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/adsense-16.png", + "x32": "http://www.google.com/images/icons/product/adsense-32.png" + }, + "documentationLink": "https://developers.google.com/adsense/host/", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adsensehost/v4.1/", + "basePath": "/adsensehost/v4.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adsensehost/v4.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adsensehost": { + "description": "View and manage your AdSense host data and associated accounts" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this account." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#account.", + "default": "adsensehost#account" + }, + "name": { + "type": "string", + "description": "Name of this account." + }, + "status": { + "type": "string", + "description": "Approval status of this account. One of: PENDING, APPROVED, DISABLED." + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The accounts returned in this list response.", + "items": { + "$ref": "Account" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsensehost#accounts.", + "default": "adsensehost#accounts" + } + } + }, + "AdClient": { + "id": "AdClient", + "type": "object", + "properties": { + "arcOptIn": { + "type": "boolean", + "description": "Whether this ad client is opted in to ARC." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad client." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#adClient.", + "default": "adsensehost#adClient" + }, + "productCode": { + "type": "string", + "description": "This ad client's product code, which corresponds to the PRODUCT_CODE report dimension." + }, + "supportsReporting": { + "type": "boolean", + "description": "Whether this ad client supports being reported on." + } + } + }, + "AdClients": { + "id": "AdClients", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad clients returned in this list response.", + "items": { + "$ref": "AdClient" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsensehost#adClients.", + "default": "adsensehost#adClients" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad clients. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AdCode": { + "id": "AdCode", + "type": "object", + "properties": { + "adCode": { + "type": "string", + "description": "The ad code snippet." + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsensehost#adCode.", + "default": "adsensehost#adCode" + } + } + }, + "AdStyle": { + "id": "AdStyle", + "type": "object", + "properties": { + "colors": { + "type": "object", + "description": "The colors included in the style. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash.", + "properties": { + "background": { + "type": "string", + "description": "The color of the ad background." + }, + "border": { + "type": "string", + "description": "The color of the ad border." + }, + "text": { + "type": "string", + "description": "The color of the ad text." + }, + "title": { + "type": "string", + "description": "The color of the ad title." + }, + "url": { + "type": "string", + "description": "The color of the ad url." + } + } + }, + "corners": { + "type": "string", + "description": "The style of the corners in the ad. Possible values are SQUARE, SLIGHTLY_ROUNDED and VERY_ROUNDED." + }, + "font": { + "type": "object", + "description": "The font which is included in the style.", + "properties": { + "family": { + "type": "string", + "description": "The family of the font. Possible values are: ACCOUNT_DEFAULT_FAMILY, ADSENSE_DEFAULT_FAMILY, ARIAL, TIMES and VERDANA." + }, + "size": { + "type": "string", + "description": "The size of the font. Possible values are: ACCOUNT_DEFAULT_SIZE, ADSENSE_DEFAULT_SIZE, SMALL, MEDIUM and LARGE." + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsensehost#adStyle.", + "default": "adsensehost#adStyle" + } + } + }, + "AdUnit": { + "id": "AdUnit", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Identity code of this ad unit, not necessarily unique across ad clients." + }, + "contentAdsSettings": { + "type": "object", + "description": "Settings specific to content ads (AFC) and highend mobile content ads (AFMC).", + "properties": { + "backupOption": { + "type": "object", + "description": "The backup option to be used in instances where no ad is available.", + "properties": { + "color": { + "type": "string", + "description": "Color to use when type is set to COLOR. These are represented as six hexadecimal characters, similar to HTML color codes, but without the leading hash." + }, + "type": { + "type": "string", + "description": "Type of the backup option. Possible values are BLANK, COLOR and URL." + }, + "url": { + "type": "string", + "description": "URL to use when type is set to URL." + } + } + }, + "size": { + "type": "string", + "description": "Size of this ad unit. Size values are in the form SIZE_{width}_{height}." + }, + "type": { + "type": "string", + "description": "Type of this ad unit. Possible values are TEXT, TEXT_IMAGE, IMAGE and LINK." + } + } + }, + "customStyle": { + "$ref": "AdStyle", + "description": "Custom style information specific to this ad unit." + }, + "id": { + "type": "string", + "description": "Unique identifier of this ad unit. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#adUnit.", + "default": "adsensehost#adUnit" + }, + "mobileContentAdsSettings": { + "type": "object", + "description": "Settings specific to WAP mobile content ads (AFMC).", + "properties": { + "markupLanguage": { + "type": "string", + "description": "The markup language to use for this ad unit." + }, + "scriptingLanguage": { + "type": "string", + "description": "The scripting language to use for this ad unit." + }, + "size": { + "type": "string", + "description": "Size of this ad unit." + }, + "type": { + "type": "string", + "description": "Type of this ad unit." + } + } + }, + "name": { + "type": "string", + "description": "Name of this ad unit." + }, + "status": { + "type": "string", + "description": "Status of this ad unit. Possible values are:\nNEW: Indicates that the ad unit was created within the last seven days and does not yet have any activity associated with it.\n\nACTIVE: Indicates that there has been activity on this ad unit in the last seven days.\n\nINACTIVE: Indicates that there has been no activity on this ad unit in the last seven days." + } + } + }, + "AdUnits": { + "id": "AdUnits", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The ad units returned in this list response.", + "items": { + "$ref": "AdUnit" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsensehost#adUnits.", + "default": "adsensehost#adUnits" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through ad units. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "AssociationSession": { + "id": "AssociationSession", + "type": "object", + "properties": { + "accountId": { + "type": "string", + "description": "Hosted account id of the associated publisher after association. Present if status is ACCEPTED." + }, + "id": { + "type": "string", + "description": "Unique identifier of this association session." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#associationSession.", + "default": "adsensehost#associationSession" + }, + "productCodes": { + "type": "array", + "description": "The products to associate with the user. Options: AFC, AFF, AFS, AFMC", + "items": { + "type": "string" + } + }, + "redirectUrl": { + "type": "string", + "description": "Redirect URL of this association session. Used to redirect users into the AdSense association flow." + }, + "status": { + "type": "string", + "description": "Status of the completed association, available once the association callback token has been verified. One of ACCEPTED, REJECTED, or ERROR." + }, + "userLocale": { + "type": "string", + "description": "The preferred locale of the user themselves when going through the AdSense association flow." + }, + "websiteLocale": { + "type": "string", + "description": "The locale of the user's hosted website." + }, + "websiteUrl": { + "type": "string", + "description": "The URL of the user's hosted website." + } + } + }, + "CustomChannel": { + "id": "CustomChannel", + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "Code of this custom channel, not necessarily unique across ad clients." + }, + "id": { + "type": "string", + "description": "Unique identifier of this custom channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#customChannel.", + "default": "adsensehost#customChannel" + }, + "name": { + "type": "string", + "description": "Name of this custom channel." + } + } + }, + "CustomChannels": { + "id": "CustomChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The custom channels returned in this list response.", + "items": { + "$ref": "CustomChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsensehost#customChannels.", + "default": "adsensehost#customChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through custom channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "properties": { + "averages": { + "type": "array", + "description": "The averages of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "headers": { + "type": "array", + "description": "The header information of the columns requested in the report. This is a list of headers; one for each dimension in the request, followed by one for each metric in the request.", + "items": { + "type": "object", + "properties": { + "currency": { + "type": "string", + "description": "The currency of this column. Only present if the header type is METRIC_CURRENCY." + }, + "name": { + "type": "string", + "description": "The name of the header." + }, + "type": { + "type": "string", + "description": "The type of the header; one of DIMENSION, METRIC_TALLY, METRIC_RATIO, or METRIC_CURRENCY." + } + } + } + }, + "kind": { + "type": "string", + "description": "Kind this is, in this case adsensehost#report.", + "default": "adsensehost#report" + }, + "rows": { + "type": "array", + "description": "The output rows of the report. Each row is a list of cells; one for each dimension in the request, followed by one for each metric in the request. The dimension cells contain strings, and the metric cells contain numbers.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "totalMatchedRows": { + "type": "string", + "description": "The total number of rows matched by the report request. Fewer rows may be returned in the response due to being limited by the row count requested or the report row limit.", + "format": "int64" + }, + "totals": { + "type": "array", + "description": "The totals of the report. This is the same length as any other row in the report; cells corresponding to dimension columns are empty.", + "items": { + "type": "string" + } + }, + "warnings": { + "type": "array", + "description": "Any warnings associated with generation of the report.", + "items": { + "type": "string" + } + } + } + }, + "UrlChannel": { + "id": "UrlChannel", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier of this URL channel. This should be considered an opaque identifier; it is not safe to rely on it being in any particular format." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case adsensehost#urlChannel.", + "default": "adsensehost#urlChannel" + }, + "urlPattern": { + "type": "string", + "description": "URL Pattern of this URL channel. Does not include \"http://\" or \"https://\". Example: www.example.com/home" + } + } + }, + "UrlChannels": { + "id": "UrlChannels", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The URL channels returned in this list response.", + "items": { + "$ref": "UrlChannel" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case adsensehost#urlChannels.", + "default": "adsensehost#urlChannels" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through URL channels. To retrieve the next page of results, set the next request's \"pageToken\" value to this." + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "get": { + "id": "adsensehost.accounts.get", + "path": "accounts/{accountId}", + "httpMethod": "GET", + "description": "Get information about the selected associated AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account to get information about.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Account" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.accounts.list", + "path": "accounts", + "httpMethod": "GET", + "description": "List hosted accounts associated with this AdSense account by ad client id.", + "parameters": { + "filterAdClientId": { + "type": "string", + "description": "Ad clients to list accounts for.", + "required": true, + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "filterAdClientId" + ], + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + }, + "resources": { + "adclients": { + "methods": { + "get": { + "id": "adsensehost.accounts.adclients.get", + "path": "accounts/{accountId}/adclients/{adClientId}", + "httpMethod": "GET", + "description": "Get information about one of the ad clients in the specified publisher's AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdClient" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.accounts.adclients.list", + "path": "accounts/{accountId}/adclients", + "httpMethod": "GET", + "description": "List all hosted ad clients in the specified hosted account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account for which to list ad clients.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "adunits": { + "methods": { + "delete": { + "id": "adsensehost.accounts.adunits.delete", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "DELETE", + "description": "Delete the specified ad unit from the specified publisher AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad unit.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "get": { + "id": "adsensehost.accounts.adunits.get", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + "httpMethod": "GET", + "description": "Get the specified host ad unit in this AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad unit.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to get ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "getAdCode": { + "id": "adsensehost.accounts.adunits.getAdCode", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + "httpMethod": "GET", + "description": "Get ad code for the specified ad unit, attaching the specified host custom channels.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client with contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get the code for.", + "required": true, + "location": "path" + }, + "hostCustomChannelId": { + "type": "string", + "description": "Host custom channel to attach to the ad code.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "response": { + "$ref": "AdCode" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "insert": { + "id": "adsensehost.accounts.adunits.insert", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "POST", + "description": "Insert the supplied ad unit into the specified publisher AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which will contain the ad unit.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client into which to insert the ad unit.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "request": { + "$ref": "AdUnit" + }, + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.accounts.adunits.list", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "GET", + "description": "List all ad units in the specified publisher's AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client for which to list ad units.", + "required": true, + "location": "path" + }, + "includeInactive": { + "type": "boolean", + "description": "Whether to include inactive ad units. Default: true.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of ad units to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "response": { + "$ref": "AdUnits" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "patch": { + "id": "adsensehost.accounts.adunits.patch", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "PATCH", + "description": "Update the supplied ad unit in the specified publisher AdSense account. This method supports patch semantics.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + }, + "adUnitId": { + "type": "string", + "description": "Ad unit to get.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "adClientId", + "adUnitId" + ], + "request": { + "$ref": "AdUnit" + }, + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "update": { + "id": "adsensehost.accounts.adunits.update", + "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + "httpMethod": "PUT", + "description": "Update the supplied ad unit in the specified publisher AdSense account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account which contains the ad client.", + "required": true, + "location": "path" + }, + "adClientId": { + "type": "string", + "description": "Ad client which contains the ad unit.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "adClientId" + ], + "request": { + "$ref": "AdUnit" + }, + "response": { + "$ref": "AdUnit" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsensehost.accounts.reports.generate", + "path": "accounts/{accountId}/reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "accountId": { + "type": "string", + "description": "Hosted account upon which to report.", + "required": true, + "location": "path" + }, + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "accountId", + "startDate", + "endDate" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + } + } + }, + "adclients": { + "methods": { + "get": { + "id": "adsensehost.adclients.get", + "path": "adclients/{adClientId}", + "httpMethod": "GET", + "description": "Get information about one of the ad clients in the Host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "AdClient" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.adclients.list", + "path": "adclients", + "httpMethod": "GET", + "description": "List all host ad clients in this AdSense account.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of ad clients to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "response": { + "$ref": "AdClients" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "associationsessions": { + "methods": { + "start": { + "id": "adsensehost.associationsessions.start", + "path": "associationsessions/start", + "httpMethod": "GET", + "description": "Create an association session for initiating an association with an AdSense user.", + "parameters": { + "productCode": { + "type": "string", + "description": "Products to associate with the user.", + "required": true, + "enum": [ + "AFC", + "AFG", + "AFMC", + "AFS", + "AFV" + ], + "enumDescriptions": [ + "AdSense For Content", + "AdSense For Games", + "AdSense For Mobile Content", + "AdSense For Search", + "AdSense For Video" + ], + "repeated": true, + "location": "query" + }, + "userLocale": { + "type": "string", + "description": "The preferred locale of the user.", + "location": "query" + }, + "websiteLocale": { + "type": "string", + "description": "The locale of the user's hosted website.", + "location": "query" + }, + "websiteUrl": { + "type": "string", + "description": "The URL of the user's hosted website.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "productCode", + "websiteUrl" + ], + "response": { + "$ref": "AssociationSession" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "verify": { + "id": "adsensehost.associationsessions.verify", + "path": "associationsessions/verify", + "httpMethod": "GET", + "description": "Verify an association session after the association callback returns from AdSense signup.", + "parameters": { + "token": { + "type": "string", + "description": "The token returned to the association callback URL.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "token" + ], + "response": { + "$ref": "AssociationSession" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "customchannels": { + "methods": { + "delete": { + "id": "adsensehost.customchannels.delete", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "DELETE", + "description": "Delete a specific custom channel from the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client from which to delete the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "get": { + "id": "adsensehost.customchannels.get", + "path": "adclients/{adClientId}/customchannels/{customChannelId}", + "httpMethod": "GET", + "description": "Get a specific custom channel from the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client from which to get the custom channel.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "insert": { + "id": "adsensehost.customchannels.insert", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "POST", + "description": "Add a new custom channel to the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client to which the new custom channel will be added.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId" + ], + "request": { + "$ref": "CustomChannel" + }, + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.customchannels.list", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "GET", + "description": "List all host custom channels in this AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list custom channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of custom channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "CustomChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "patch": { + "id": "adsensehost.customchannels.patch", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "PATCH", + "description": "Update a custom channel in the host AdSense account. This method supports patch semantics.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client in which the custom channel will be updated.", + "required": true, + "location": "path" + }, + "customChannelId": { + "type": "string", + "description": "Custom channel to get.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "adClientId", + "customChannelId" + ], + "request": { + "$ref": "CustomChannel" + }, + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "update": { + "id": "adsensehost.customchannels.update", + "path": "adclients/{adClientId}/customchannels", + "httpMethod": "PUT", + "description": "Update a custom channel in the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client in which the custom channel will be updated.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId" + ], + "request": { + "$ref": "CustomChannel" + }, + "response": { + "$ref": "CustomChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "adsensehost.reports.generate", + "path": "reports", + "httpMethod": "GET", + "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + "parameters": { + "dimension": { + "type": "string", + "description": "Dimensions to base the report on.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "endDate": { + "type": "string", + "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filters to be run on the report.", + "pattern": "[a-zA-Z_]+(==|=@).+", + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + "pattern": "[a-zA-Z_]+", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rows of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "50000", + "location": "query" + }, + "metric": { + "type": "string", + "description": "Numeric columns to include in the report.", + "pattern": "[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "sort": { + "type": "string", + "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + "pattern": "(\\+|-)?[a-zA-Z_]+", + "repeated": true, + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + "required": true, + "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first row of report data to return.", + "format": "uint32", + "minimum": "0", + "maximum": "5000", + "location": "query" + } + }, + "parameterOrder": [ + "startDate", + "endDate" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + }, + "urlchannels": { + "methods": { + "delete": { + "id": "adsensehost.urlchannels.delete", + "path": "adclients/{adClientId}/urlchannels/{urlChannelId}", + "httpMethod": "DELETE", + "description": "Delete a URL channel from the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client from which to delete the URL channel.", + "required": true, + "location": "path" + }, + "urlChannelId": { + "type": "string", + "description": "URL channel to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId", + "urlChannelId" + ], + "response": { + "$ref": "UrlChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "insert": { + "id": "adsensehost.urlchannels.insert", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "POST", + "description": "Add a new URL channel to the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client to which the new URL channel will be added.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "adClientId" + ], + "request": { + "$ref": "UrlChannel" + }, + "response": { + "$ref": "UrlChannel" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + }, + "list": { + "id": "adsensehost.urlchannels.list", + "path": "adclients/{adClientId}/urlchannels", + "httpMethod": "GET", + "description": "List all host URL channels in the host AdSense account.", + "parameters": { + "adClientId": { + "type": "string", + "description": "Ad client for which to list URL channels.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of URL channels to include in the response, used for paging.", + "format": "uint32", + "minimum": "0", + "maximum": "10000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "adClientId" + ], + "response": { + "$ref": "UrlChannels" + }, + "scopes": [ + "https://www.googleapis.com/auth/adsensehost" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-gen.go b/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-gen.go new file mode 100644 index 0000000000000..48a186e04ab50 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/adsensehost/v4.1/adsensehost-gen.go @@ -0,0 +1,2978 @@ +// Package adsensehost provides access to the AdSense Host API. +// +// See https://developers.google.com/adsense/host/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adsensehost/v4.1" +// ... +// adsensehostService, err := adsensehost.New(oauthHttpClient) +package adsensehost + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adsensehost:v4.1" +const apiName = "adsensehost" +const apiVersion = "v4.1" +const basePath = "https://www.googleapis.com/adsensehost/v4.1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your AdSense host data and associated accounts + AdsensehostScope = "https://www.googleapis.com/auth/adsensehost" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Adclients = NewAdclientsService(s) + s.Associationsessions = NewAssociationsessionsService(s) + s.Customchannels = NewCustomchannelsService(s) + s.Reports = NewReportsService(s) + s.Urlchannels = NewUrlchannelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Adclients *AdclientsService + + Associationsessions *AssociationsessionsService + + Customchannels *CustomchannelsService + + Reports *ReportsService + + Urlchannels *UrlchannelsService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + rs.Adclients = NewAccountsAdclientsService(s) + rs.Adunits = NewAccountsAdunitsService(s) + rs.Reports = NewAccountsReportsService(s) + return rs +} + +type AccountsService struct { + s *Service + + Adclients *AccountsAdclientsService + + Adunits *AccountsAdunitsService + + Reports *AccountsReportsService +} + +func NewAccountsAdclientsService(s *Service) *AccountsAdclientsService { + rs := &AccountsAdclientsService{s: s} + return rs +} + +type AccountsAdclientsService struct { + s *Service +} + +func NewAccountsAdunitsService(s *Service) *AccountsAdunitsService { + rs := &AccountsAdunitsService{s: s} + return rs +} + +type AccountsAdunitsService struct { + s *Service +} + +func NewAccountsReportsService(s *Service) *AccountsReportsService { + rs := &AccountsReportsService{s: s} + return rs +} + +type AccountsReportsService struct { + s *Service +} + +func NewAdclientsService(s *Service) *AdclientsService { + rs := &AdclientsService{s: s} + return rs +} + +type AdclientsService struct { + s *Service +} + +func NewAssociationsessionsService(s *Service) *AssociationsessionsService { + rs := &AssociationsessionsService{s: s} + return rs +} + +type AssociationsessionsService struct { + s *Service +} + +func NewCustomchannelsService(s *Service) *CustomchannelsService { + rs := &CustomchannelsService{s: s} + return rs +} + +type CustomchannelsService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +func NewUrlchannelsService(s *Service) *UrlchannelsService { + rs := &UrlchannelsService{s: s} + return rs +} + +type UrlchannelsService struct { + s *Service +} + +type Account struct { + // Id: Unique identifier of this account. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsensehost#account. + Kind string `json:"kind,omitempty"` + + // Name: Name of this account. + Name string `json:"name,omitempty"` + + // Status: Approval status of this account. One of: PENDING, APPROVED, + // DISABLED. + Status string `json:"status,omitempty"` +} + +type Accounts struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The accounts returned in this list response. + Items []*Account `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsensehost#accounts. + Kind string `json:"kind,omitempty"` +} + +type AdClient struct { + // ArcOptIn: Whether this ad client is opted in to ARC. + ArcOptIn bool `json:"arcOptIn,omitempty"` + + // Id: Unique identifier of this ad client. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsensehost#adClient. + Kind string `json:"kind,omitempty"` + + // ProductCode: This ad client's product code, which corresponds to the + // PRODUCT_CODE report dimension. + ProductCode string `json:"productCode,omitempty"` + + // SupportsReporting: Whether this ad client supports being reported on. + SupportsReporting bool `json:"supportsReporting,omitempty"` +} + +type AdClients struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad clients returned in this list response. + Items []*AdClient `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsensehost#adClients. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad clients. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AdCode struct { + // AdCode: The ad code snippet. + AdCode string `json:"adCode,omitempty"` + + // Kind: Kind this is, in this case adsensehost#adCode. + Kind string `json:"kind,omitempty"` +} + +type AdStyle struct { + // Colors: The colors included in the style. These are represented as + // six hexadecimal characters, similar to HTML color codes, but without + // the leading hash. + Colors *AdStyleColors `json:"colors,omitempty"` + + // Corners: The style of the corners in the ad. Possible values are + // SQUARE, SLIGHTLY_ROUNDED and VERY_ROUNDED. + Corners string `json:"corners,omitempty"` + + // Font: The font which is included in the style. + Font *AdStyleFont `json:"font,omitempty"` + + // Kind: Kind this is, in this case adsensehost#adStyle. + Kind string `json:"kind,omitempty"` +} + +type AdStyleColors struct { + // Background: The color of the ad background. + Background string `json:"background,omitempty"` + + // Border: The color of the ad border. + Border string `json:"border,omitempty"` + + // Text: The color of the ad text. + Text string `json:"text,omitempty"` + + // Title: The color of the ad title. + Title string `json:"title,omitempty"` + + // Url: The color of the ad url. + Url string `json:"url,omitempty"` +} + +type AdStyleFont struct { + // Family: The family of the font. Possible values are: + // ACCOUNT_DEFAULT_FAMILY, ADSENSE_DEFAULT_FAMILY, ARIAL, TIMES and + // VERDANA. + Family string `json:"family,omitempty"` + + // Size: The size of the font. Possible values are: + // ACCOUNT_DEFAULT_SIZE, ADSENSE_DEFAULT_SIZE, SMALL, MEDIUM and LARGE. + Size string `json:"size,omitempty"` +} + +type AdUnit struct { + // Code: Identity code of this ad unit, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // ContentAdsSettings: Settings specific to content ads (AFC) and + // highend mobile content ads (AFMC). + ContentAdsSettings *AdUnitContentAdsSettings `json:"contentAdsSettings,omitempty"` + + // CustomStyle: Custom style information specific to this ad unit. + CustomStyle *AdStyle `json:"customStyle,omitempty"` + + // Id: Unique identifier of this ad unit. This should be considered an + // opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsensehost#adUnit. + Kind string `json:"kind,omitempty"` + + // MobileContentAdsSettings: Settings specific to WAP mobile content ads + // (AFMC). + MobileContentAdsSettings *AdUnitMobileContentAdsSettings `json:"mobileContentAdsSettings,omitempty"` + + // Name: Name of this ad unit. + Name string `json:"name,omitempty"` + + // Status: Status of this ad unit. Possible values are: + // NEW: Indicates + // that the ad unit was created within the last seven days and does not + // yet have any activity associated with it. + // + // ACTIVE: Indicates that + // there has been activity on this ad unit in the last seven + // days. + // + // INACTIVE: Indicates that there has been no activity on this ad + // unit in the last seven days. + Status string `json:"status,omitempty"` +} + +type AdUnitContentAdsSettings struct { + // BackupOption: The backup option to be used in instances where no ad + // is available. + BackupOption *AdUnitContentAdsSettingsBackupOption `json:"backupOption,omitempty"` + + // Size: Size of this ad unit. Size values are in the form + // SIZE_{width}_{height}. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. Possible values are TEXT, TEXT_IMAGE, + // IMAGE and LINK. + Type string `json:"type,omitempty"` +} + +type AdUnitContentAdsSettingsBackupOption struct { + // Color: Color to use when type is set to COLOR. These are represented + // as six hexadecimal characters, similar to HTML color codes, but + // without the leading hash. + Color string `json:"color,omitempty"` + + // Type: Type of the backup option. Possible values are BLANK, COLOR and + // URL. + Type string `json:"type,omitempty"` + + // Url: URL to use when type is set to URL. + Url string `json:"url,omitempty"` +} + +type AdUnitMobileContentAdsSettings struct { + // MarkupLanguage: The markup language to use for this ad unit. + MarkupLanguage string `json:"markupLanguage,omitempty"` + + // ScriptingLanguage: The scripting language to use for this ad unit. + ScriptingLanguage string `json:"scriptingLanguage,omitempty"` + + // Size: Size of this ad unit. + Size string `json:"size,omitempty"` + + // Type: Type of this ad unit. + Type string `json:"type,omitempty"` +} + +type AdUnits struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The ad units returned in this list response. + Items []*AdUnit `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsensehost#adUnits. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through ad units. To + // retrieve the next page of results, set the next request's "pageToken" + // value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AssociationSession struct { + // AccountId: Hosted account id of the associated publisher after + // association. Present if status is ACCEPTED. + AccountId string `json:"accountId,omitempty"` + + // Id: Unique identifier of this association session. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adsensehost#associationSession. + Kind string `json:"kind,omitempty"` + + // ProductCodes: The products to associate with the user. Options: AFC, + // AFF, AFS, AFMC + ProductCodes []string `json:"productCodes,omitempty"` + + // RedirectUrl: Redirect URL of this association session. Used to + // redirect users into the AdSense association flow. + RedirectUrl string `json:"redirectUrl,omitempty"` + + // Status: Status of the completed association, available once the + // association callback token has been verified. One of ACCEPTED, + // REJECTED, or ERROR. + Status string `json:"status,omitempty"` + + // UserLocale: The preferred locale of the user themselves when going + // through the AdSense association flow. + UserLocale string `json:"userLocale,omitempty"` + + // WebsiteLocale: The locale of the user's hosted website. + WebsiteLocale string `json:"websiteLocale,omitempty"` + + // WebsiteUrl: The URL of the user's hosted website. + WebsiteUrl string `json:"websiteUrl,omitempty"` +} + +type CustomChannel struct { + // Code: Code of this custom channel, not necessarily unique across ad + // clients. + Code string `json:"code,omitempty"` + + // Id: Unique identifier of this custom channel. This should be + // considered an opaque identifier; it is not safe to rely on it being + // in any particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // adsensehost#customChannel. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom channel. + Name string `json:"name,omitempty"` +} + +type CustomChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The custom channels returned in this list response. + Items []*CustomChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsensehost#customChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through custom + // channels. To retrieve the next page of results, set the next + // request's "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Report struct { + // Averages: The averages of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Averages []string `json:"averages,omitempty"` + + // Headers: The header information of the columns requested in the + // report. This is a list of headers; one for each dimension in the + // request, followed by one for each metric in the request. + Headers []*ReportHeaders `json:"headers,omitempty"` + + // Kind: Kind this is, in this case adsensehost#report. + Kind string `json:"kind,omitempty"` + + // Rows: The output rows of the report. Each row is a list of cells; one + // for each dimension in the request, followed by one for each metric in + // the request. The dimension cells contain strings, and the metric + // cells contain numbers. + Rows [][]string `json:"rows,omitempty"` + + // TotalMatchedRows: The total number of rows matched by the report + // request. Fewer rows may be returned in the response due to being + // limited by the row count requested or the report row limit. + TotalMatchedRows int64 `json:"totalMatchedRows,omitempty,string"` + + // Totals: The totals of the report. This is the same length as any + // other row in the report; cells corresponding to dimension columns are + // empty. + Totals []string `json:"totals,omitempty"` + + // Warnings: Any warnings associated with generation of the report. + Warnings []string `json:"warnings,omitempty"` +} + +type ReportHeaders struct { + // Currency: The currency of this column. Only present if the header + // type is METRIC_CURRENCY. + Currency string `json:"currency,omitempty"` + + // Name: The name of the header. + Name string `json:"name,omitempty"` + + // Type: The type of the header; one of DIMENSION, METRIC_TALLY, + // METRIC_RATIO, or METRIC_CURRENCY. + Type string `json:"type,omitempty"` +} + +type UrlChannel struct { + // Id: Unique identifier of this URL channel. This should be considered + // an opaque identifier; it is not safe to rely on it being in any + // particular format. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case adsensehost#urlChannel. + Kind string `json:"kind,omitempty"` + + // UrlPattern: URL Pattern of this URL channel. Does not include + // "http://" or "https://". Example: www.example.com/home + UrlPattern string `json:"urlPattern,omitempty"` +} + +type UrlChannels struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The URL channels returned in this list response. + Items []*UrlChannel `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case adsensehost#urlChannels. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through URL channels. + // To retrieve the next page of results, set the next request's + // "pageToken" value to this. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "adsensehost.accounts.get": + +type AccountsGetCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// Get: Get information about the selected associated AdSense account. +func (r *AccountsService) Get(accountId string) *AccountsGetCall { + c := &AccountsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +func (c *AccountsGetCall) Do() (*Account, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about the selected associated AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.get", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account to get information about.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}", + // "response": { + // "$ref": "Account" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.list": + +type AccountsListCall struct { + s *Service + filterAdClientId []string + opt_ map[string]interface{} +} + +// List: List hosted accounts associated with this AdSense account by ad +// client id. +func (r *AccountsService) List(filterAdClientId []string) *AccountsListCall { + c := &AccountsListCall{s: r.s, opt_: make(map[string]interface{})} + c.filterAdClientId = filterAdClientId + return c +} + +func (c *AccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + for _, v := range c.filterAdClientId { + params.Add("filterAdClientId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List hosted accounts associated with this AdSense account by ad client id.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.list", + // "parameterOrder": [ + // "filterAdClientId" + // ], + // "parameters": { + // "filterAdClientId": { + // "description": "Ad clients to list accounts for.", + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adclients.get": + +type AccountsAdclientsGetCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// Get: Get information about one of the ad clients in the specified +// publisher's AdSense account. +func (r *AccountsAdclientsService) Get(accountId string, adClientId string) *AccountsAdclientsGetCall { + c := &AccountsAdclientsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +func (c *AccountsAdclientsGetCall) Do() (*AdClient, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClient) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about one of the ad clients in the specified publisher's AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.adclients.get", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}", + // "response": { + // "$ref": "AdClient" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adclients.list": + +type AccountsAdclientsListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: List all hosted ad clients in the specified hosted account. +func (r *AccountsAdclientsService) List(accountId string) *AccountsAdclientsListCall { + c := &AccountsAdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AccountsAdclientsListCall) MaxResults(maxResults int64) *AccountsAdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdclientsListCall) PageToken(pageToken string) *AccountsAdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all hosted ad clients in the specified hosted account.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.adclients.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account for which to list ad clients.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.delete": + +type AccountsAdunitsDeleteCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Delete: Delete the specified ad unit from the specified publisher +// AdSense account. +func (r *AccountsAdunitsService) Delete(accountId string, adClientId string, adUnitId string) *AccountsAdunitsDeleteCall { + c := &AccountsAdunitsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsDeleteCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Delete the specified ad unit from the specified publisher AdSense account.", + // "httpMethod": "DELETE", + // "id": "adsensehost.accounts.adunits.delete", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.get": + +type AccountsAdunitsGetCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// Get: Get the specified host ad unit in this AdSense account. +func (r *AccountsAdunitsService) Get(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetCall { + c := &AccountsAdunitsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +func (c *AccountsAdunitsGetCall) Do() (*AdUnit, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the specified host ad unit in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.adunits.get", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to get ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}", + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.getAdCode": + +type AccountsAdunitsGetAdCodeCall struct { + s *Service + accountId string + adClientId string + adUnitId string + opt_ map[string]interface{} +} + +// GetAdCode: Get ad code for the specified ad unit, attaching the +// specified host custom channels. +func (r *AccountsAdunitsService) GetAdCode(accountId string, adClientId string, adUnitId string) *AccountsAdunitsGetAdCodeCall { + c := &AccountsAdunitsGetAdCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + return c +} + +// HostCustomChannelId sets the optional parameter +// "hostCustomChannelId": Host custom channel to attach to the ad code. +func (c *AccountsAdunitsGetAdCodeCall) HostCustomChannelId(hostCustomChannelId string) *AccountsAdunitsGetAdCodeCall { + c.opt_["hostCustomChannelId"] = hostCustomChannelId + return c +} + +func (c *AccountsAdunitsGetAdCodeCall) Do() (*AdCode, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hostCustomChannelId"]; ok { + params.Set("hostCustomChannelId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adUnitId}", url.QueryEscape(c.adUnitId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdCode) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get ad code for the specified ad unit, attaching the specified host custom channels.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.adunits.getAdCode", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client with contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get the code for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "hostCustomChannelId": { + // "description": "Host custom channel to attach to the ad code.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits/{adUnitId}/adcode", + // "response": { + // "$ref": "AdCode" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.insert": + +type AccountsAdunitsInsertCall struct { + s *Service + accountId string + adClientId string + adunit *AdUnit + opt_ map[string]interface{} +} + +// Insert: Insert the supplied ad unit into the specified publisher +// AdSense account. +func (r *AccountsAdunitsService) Insert(accountId string, adClientId string, adunit *AdUnit) *AccountsAdunitsInsertCall { + c := &AccountsAdunitsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adunit = adunit + return c +} + +func (c *AccountsAdunitsInsertCall) Do() (*AdUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Insert the supplied ad unit into the specified publisher AdSense account.", + // "httpMethod": "POST", + // "id": "adsensehost.accounts.adunits.insert", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which will contain the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client into which to insert the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "request": { + // "$ref": "AdUnit" + // }, + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.list": + +type AccountsAdunitsListCall struct { + s *Service + accountId string + adClientId string + opt_ map[string]interface{} +} + +// List: List all ad units in the specified publisher's AdSense account. +func (r *AccountsAdunitsService) List(accountId string, adClientId string) *AccountsAdunitsListCall { + c := &AccountsAdunitsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + return c +} + +// IncludeInactive sets the optional parameter "includeInactive": +// Whether to include inactive ad units. Default: true. +func (c *AccountsAdunitsListCall) IncludeInactive(includeInactive bool) *AccountsAdunitsListCall { + c.opt_["includeInactive"] = includeInactive + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad units to include in the response, used for paging. +func (c *AccountsAdunitsListCall) MaxResults(maxResults int64) *AccountsAdunitsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad units. To retrieve the next page, set +// this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AccountsAdunitsListCall) PageToken(pageToken string) *AccountsAdunitsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AccountsAdunitsListCall) Do() (*AdUnits, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeInactive"]; ok { + params.Set("includeInactive", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnits) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all ad units in the specified publisher's AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.adunits.list", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client for which to list ad units.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeInactive": { + // "description": "Whether to include inactive ad units. Default: true.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of ad units to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad units. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "response": { + // "$ref": "AdUnits" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.patch": + +type AccountsAdunitsPatchCall struct { + s *Service + accountId string + adClientId string + adUnitId string + adunit *AdUnit + opt_ map[string]interface{} +} + +// Patch: Update the supplied ad unit in the specified publisher AdSense +// account. This method supports patch semantics. +func (r *AccountsAdunitsService) Patch(accountId string, adClientId string, adUnitId string, adunit *AdUnit) *AccountsAdunitsPatchCall { + c := &AccountsAdunitsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adUnitId = adUnitId + c.adunit = adunit + return c +} + +func (c *AccountsAdunitsPatchCall) Do() (*AdUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("adUnitId", fmt.Sprintf("%v", c.adUnitId)) + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update the supplied ad unit in the specified publisher AdSense account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adsensehost.accounts.adunits.patch", + // "parameterOrder": [ + // "accountId", + // "adClientId", + // "adUnitId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adUnitId": { + // "description": "Ad unit to get.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "request": { + // "$ref": "AdUnit" + // }, + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.adunits.update": + +type AccountsAdunitsUpdateCall struct { + s *Service + accountId string + adClientId string + adunit *AdUnit + opt_ map[string]interface{} +} + +// Update: Update the supplied ad unit in the specified publisher +// AdSense account. +func (r *AccountsAdunitsService) Update(accountId string, adClientId string, adunit *AdUnit) *AccountsAdunitsUpdateCall { + c := &AccountsAdunitsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.adClientId = adClientId + c.adunit = adunit + return c +} + +func (c *AccountsAdunitsUpdateCall) Do() (*AdUnit, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.adunit) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/adclients/{adClientId}/adunits") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdUnit) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update the supplied ad unit in the specified publisher AdSense account.", + // "httpMethod": "PUT", + // "id": "adsensehost.accounts.adunits.update", + // "parameterOrder": [ + // "accountId", + // "adClientId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account which contains the ad client.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "adClientId": { + // "description": "Ad client which contains the ad unit.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{accountId}/adclients/{adClientId}/adunits", + // "request": { + // "$ref": "AdUnit" + // }, + // "response": { + // "$ref": "AdUnit" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.accounts.reports.generate": + +type AccountsReportsGenerateCall struct { + s *Service + accountId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *AccountsReportsService) Generate(accountId string, startDate string, endDate string) *AccountsReportsGenerateCall { + c := &AccountsReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.startDate = startDate + c.endDate = endDate + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *AccountsReportsGenerateCall) Dimension(dimension string) *AccountsReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *AccountsReportsGenerateCall) Filter(filter string) *AccountsReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *AccountsReportsGenerateCall) Locale(locale string) *AccountsReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *AccountsReportsGenerateCall) MaxResults(maxResults int64) *AccountsReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *AccountsReportsGenerateCall) Metric(metric string) *AccountsReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *AccountsReportsGenerateCall) Sort(sort string) *AccountsReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *AccountsReportsGenerateCall) StartIndex(startIndex int64) *AccountsReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *AccountsReportsGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{accountId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsensehost.accounts.reports.generate", + // "parameterOrder": [ + // "accountId", + // "startDate", + // "endDate" + // ], + // "parameters": { + // "accountId": { + // "description": "Hosted account upon which to report.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "accounts/{accountId}/reports", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.adclients.get": + +type AdclientsGetCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// Get: Get information about one of the ad clients in the Host AdSense +// account. +func (r *AdclientsService) Get(adClientId string) *AdclientsGetCall { + c := &AdclientsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +func (c *AdclientsGetCall) Do() (*AdClient, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClient) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get information about one of the ad clients in the Host AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.adclients.get", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}", + // "response": { + // "$ref": "AdClient" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.adclients.list": + +type AdclientsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all host ad clients in this AdSense account. +func (r *AdclientsService) List() *AdclientsListCall { + c := &AdclientsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of ad clients to include in the response, used for paging. +func (c *AdclientsListCall) MaxResults(maxResults int64) *AdclientsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through ad clients. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *AdclientsListCall) PageToken(pageToken string) *AdclientsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AdclientsListCall) Do() (*AdClients, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AdClients) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all host ad clients in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.adclients.list", + // "parameters": { + // "maxResults": { + // "description": "The maximum number of ad clients to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through ad clients. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients", + // "response": { + // "$ref": "AdClients" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.associationsessions.start": + +type AssociationsessionsStartCall struct { + s *Service + productCode []string + websiteUrl string + opt_ map[string]interface{} +} + +// Start: Create an association session for initiating an association +// with an AdSense user. +func (r *AssociationsessionsService) Start(productCode []string, websiteUrl string) *AssociationsessionsStartCall { + c := &AssociationsessionsStartCall{s: r.s, opt_: make(map[string]interface{})} + c.productCode = productCode + c.websiteUrl = websiteUrl + return c +} + +// UserLocale sets the optional parameter "userLocale": The preferred +// locale of the user. +func (c *AssociationsessionsStartCall) UserLocale(userLocale string) *AssociationsessionsStartCall { + c.opt_["userLocale"] = userLocale + return c +} + +// WebsiteLocale sets the optional parameter "websiteLocale": The locale +// of the user's hosted website. +func (c *AssociationsessionsStartCall) WebsiteLocale(websiteLocale string) *AssociationsessionsStartCall { + c.opt_["websiteLocale"] = websiteLocale + return c +} + +func (c *AssociationsessionsStartCall) Do() (*AssociationSession, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("websiteUrl", fmt.Sprintf("%v", c.websiteUrl)) + for _, v := range c.productCode { + params.Add("productCode", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userLocale"]; ok { + params.Set("userLocale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["websiteLocale"]; ok { + params.Set("websiteLocale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "associationsessions/start") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AssociationSession) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create an association session for initiating an association with an AdSense user.", + // "httpMethod": "GET", + // "id": "adsensehost.associationsessions.start", + // "parameterOrder": [ + // "productCode", + // "websiteUrl" + // ], + // "parameters": { + // "productCode": { + // "description": "Products to associate with the user.", + // "enum": [ + // "AFC", + // "AFG", + // "AFMC", + // "AFS", + // "AFV" + // ], + // "enumDescriptions": [ + // "AdSense For Content", + // "AdSense For Games", + // "AdSense For Mobile Content", + // "AdSense For Search", + // "AdSense For Video" + // ], + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // }, + // "userLocale": { + // "description": "The preferred locale of the user.", + // "location": "query", + // "type": "string" + // }, + // "websiteLocale": { + // "description": "The locale of the user's hosted website.", + // "location": "query", + // "type": "string" + // }, + // "websiteUrl": { + // "description": "The URL of the user's hosted website.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "associationsessions/start", + // "response": { + // "$ref": "AssociationSession" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.associationsessions.verify": + +type AssociationsessionsVerifyCall struct { + s *Service + token string + opt_ map[string]interface{} +} + +// Verify: Verify an association session after the association callback +// returns from AdSense signup. +func (r *AssociationsessionsService) Verify(token string) *AssociationsessionsVerifyCall { + c := &AssociationsessionsVerifyCall{s: r.s, opt_: make(map[string]interface{})} + c.token = token + return c +} + +func (c *AssociationsessionsVerifyCall) Do() (*AssociationSession, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("token", fmt.Sprintf("%v", c.token)) + urls := googleapi.ResolveRelative(c.s.BasePath, "associationsessions/verify") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AssociationSession) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Verify an association session after the association callback returns from AdSense signup.", + // "httpMethod": "GET", + // "id": "adsensehost.associationsessions.verify", + // "parameterOrder": [ + // "token" + // ], + // "parameters": { + // "token": { + // "description": "The token returned to the association callback URL.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "associationsessions/verify", + // "response": { + // "$ref": "AssociationSession" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.delete": + +type CustomchannelsDeleteCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Delete: Delete a specific custom channel from the host AdSense +// account. +func (r *CustomchannelsService) Delete(adClientId string, customChannelId string) *CustomchannelsDeleteCall { + c := &CustomchannelsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsDeleteCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Delete a specific custom channel from the host AdSense account.", + // "httpMethod": "DELETE", + // "id": "adsensehost.customchannels.delete", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client from which to delete the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.get": + +type CustomchannelsGetCall struct { + s *Service + adClientId string + customChannelId string + opt_ map[string]interface{} +} + +// Get: Get a specific custom channel from the host AdSense account. +func (r *CustomchannelsService) Get(adClientId string, customChannelId string) *CustomchannelsGetCall { + c := &CustomchannelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + return c +} + +func (c *CustomchannelsGetCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels/{customChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customChannelId}", url.QueryEscape(c.customChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a specific custom channel from the host AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.customchannels.get", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client from which to get the custom channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels/{customChannelId}", + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.insert": + +type CustomchannelsInsertCall struct { + s *Service + adClientId string + customchannel *CustomChannel + opt_ map[string]interface{} +} + +// Insert: Add a new custom channel to the host AdSense account. +func (r *CustomchannelsService) Insert(adClientId string, customchannel *CustomChannel) *CustomchannelsInsertCall { + c := &CustomchannelsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customchannel = customchannel + return c +} + +func (c *CustomchannelsInsertCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a new custom channel to the host AdSense account.", + // "httpMethod": "POST", + // "id": "adsensehost.customchannels.insert", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client to which the new custom channel will be added.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "request": { + // "$ref": "CustomChannel" + // }, + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.list": + +type CustomchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all host custom channels in this AdSense account. +func (r *CustomchannelsService) List(adClientId string) *CustomchannelsListCall { + c := &CustomchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of custom channels to include in the response, used for +// paging. +func (c *CustomchannelsListCall) MaxResults(maxResults int64) *CustomchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through custom channels. To retrieve the next +// page, set this parameter to the value of "nextPageToken" from the +// previous response. +func (c *CustomchannelsListCall) PageToken(pageToken string) *CustomchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CustomchannelsListCall) Do() (*CustomChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all host custom channels in this AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.customchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list custom channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of custom channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through custom channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "response": { + // "$ref": "CustomChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.patch": + +type CustomchannelsPatchCall struct { + s *Service + adClientId string + customChannelId string + customchannel *CustomChannel + opt_ map[string]interface{} +} + +// Patch: Update a custom channel in the host AdSense account. This +// method supports patch semantics. +func (r *CustomchannelsService) Patch(adClientId string, customChannelId string, customchannel *CustomChannel) *CustomchannelsPatchCall { + c := &CustomchannelsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customChannelId = customChannelId + c.customchannel = customchannel + return c +} + +func (c *CustomchannelsPatchCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("customChannelId", fmt.Sprintf("%v", c.customChannelId)) + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a custom channel in the host AdSense account. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "adsensehost.customchannels.patch", + // "parameterOrder": [ + // "adClientId", + // "customChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client in which the custom channel will be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "customChannelId": { + // "description": "Custom channel to get.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "request": { + // "$ref": "CustomChannel" + // }, + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.customchannels.update": + +type CustomchannelsUpdateCall struct { + s *Service + adClientId string + customchannel *CustomChannel + opt_ map[string]interface{} +} + +// Update: Update a custom channel in the host AdSense account. +func (r *CustomchannelsService) Update(adClientId string, customchannel *CustomChannel) *CustomchannelsUpdateCall { + c := &CustomchannelsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.customchannel = customchannel + return c +} + +func (c *CustomchannelsUpdateCall) Do() (*CustomChannel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customchannel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/customchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a custom channel in the host AdSense account.", + // "httpMethod": "PUT", + // "id": "adsensehost.customchannels.update", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client in which the custom channel will be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/customchannels", + // "request": { + // "$ref": "CustomChannel" + // }, + // "response": { + // "$ref": "CustomChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.reports.generate": + +type ReportsGenerateCall struct { + s *Service + startDate string + endDate string + opt_ map[string]interface{} +} + +// Generate: Generate an AdSense report based on the report request sent +// in the query parameters. Returns the result as JSON; to retrieve +// output in CSV format specify "alt=csv" as a query parameter. +func (r *ReportsService) Generate(startDate string, endDate string) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.startDate = startDate + c.endDate = endDate + return c +} + +// Dimension sets the optional parameter "dimension": Dimensions to base +// the report on. +func (c *ReportsGenerateCall) Dimension(dimension string) *ReportsGenerateCall { + c.opt_["dimension"] = dimension + return c +} + +// Filter sets the optional parameter "filter": Filters to be run on the +// report. +func (c *ReportsGenerateCall) Filter(filter string) *ReportsGenerateCall { + c.opt_["filter"] = filter + return c +} + +// Locale sets the optional parameter "locale": Optional locale to use +// for translating report output to a local language. Defaults to +// "en_US" if not specified. +func (c *ReportsGenerateCall) Locale(locale string) *ReportsGenerateCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rows of report data to return. +func (c *ReportsGenerateCall) MaxResults(maxResults int64) *ReportsGenerateCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Metric sets the optional parameter "metric": Numeric columns to +// include in the report. +func (c *ReportsGenerateCall) Metric(metric string) *ReportsGenerateCall { + c.opt_["metric"] = metric + return c +} + +// Sort sets the optional parameter "sort": The name of a dimension or +// metric to sort the resulting report on, optionally prefixed with "+" +// to sort ascending or "-" to sort descending. If no prefix is +// specified, the column is sorted ascending. +func (c *ReportsGenerateCall) Sort(sort string) *ReportsGenerateCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first row of report data to return. +func (c *ReportsGenerateCall) StartIndex(startIndex int64) *ReportsGenerateCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *ReportsGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimension"]; ok { + params.Set("dimension", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["metric"]; ok { + params.Set("metric", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generate an AdSense report based on the report request sent in the query parameters. Returns the result as JSON; to retrieve output in CSV format specify \"alt=csv\" as a query parameter.", + // "httpMethod": "GET", + // "id": "adsensehost.reports.generate", + // "parameterOrder": [ + // "startDate", + // "endDate" + // ], + // "parameters": { + // "dimension": { + // "description": "Dimensions to base the report on.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "endDate": { + // "description": "End of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "filter": { + // "description": "Filters to be run on the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+(==|=@).+", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "Optional locale to use for translating report output to a local language. Defaults to \"en_US\" if not specified.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rows of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "50000", + // "minimum": "0", + // "type": "integer" + // }, + // "metric": { + // "description": "Numeric columns to include in the report.", + // "location": "query", + // "pattern": "[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "sort": { + // "description": "The name of a dimension or metric to sort the resulting report on, optionally prefixed with \"+\" to sort ascending or \"-\" to sort descending. If no prefix is specified, the column is sorted ascending.", + // "location": "query", + // "pattern": "(\\+|-)?[a-zA-Z_]+", + // "repeated": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Start of the date range to report on in \"YYYY-MM-DD\" format, inclusive.", + // "location": "query", + // "pattern": "\\d{4}-\\d{2}-\\d{2}|(today|startOfMonth|startOfYear)(([\\-\\+]\\d+[dwmy]){0,3}?)", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first row of report data to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "5000", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "reports", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.urlchannels.delete": + +type UrlchannelsDeleteCall struct { + s *Service + adClientId string + urlChannelId string + opt_ map[string]interface{} +} + +// Delete: Delete a URL channel from the host AdSense account. +func (r *UrlchannelsService) Delete(adClientId string, urlChannelId string) *UrlchannelsDeleteCall { + c := &UrlchannelsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.urlChannelId = urlChannelId + return c +} + +func (c *UrlchannelsDeleteCall) Do() (*UrlChannel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels/{urlChannelId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{urlChannelId}", url.QueryEscape(c.urlChannelId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Delete a URL channel from the host AdSense account.", + // "httpMethod": "DELETE", + // "id": "adsensehost.urlchannels.delete", + // "parameterOrder": [ + // "adClientId", + // "urlChannelId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client from which to delete the URL channel.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "urlChannelId": { + // "description": "URL channel to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels/{urlChannelId}", + // "response": { + // "$ref": "UrlChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.urlchannels.insert": + +type UrlchannelsInsertCall struct { + s *Service + adClientId string + urlchannel *UrlChannel + opt_ map[string]interface{} +} + +// Insert: Add a new URL channel to the host AdSense account. +func (r *UrlchannelsService) Insert(adClientId string, urlchannel *UrlChannel) *UrlchannelsInsertCall { + c := &UrlchannelsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + c.urlchannel = urlchannel + return c +} + +func (c *UrlchannelsInsertCall) Do() (*UrlChannel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.urlchannel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a new URL channel to the host AdSense account.", + // "httpMethod": "POST", + // "id": "adsensehost.urlchannels.insert", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client to which the new URL channel will be added.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "request": { + // "$ref": "UrlChannel" + // }, + // "response": { + // "$ref": "UrlChannel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} + +// method id "adsensehost.urlchannels.list": + +type UrlchannelsListCall struct { + s *Service + adClientId string + opt_ map[string]interface{} +} + +// List: List all host URL channels in the host AdSense account. +func (r *UrlchannelsService) List(adClientId string) *UrlchannelsListCall { + c := &UrlchannelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.adClientId = adClientId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of URL channels to include in the response, used for paging. +func (c *UrlchannelsListCall) MaxResults(maxResults int64) *UrlchannelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token, used to page through URL channels. To retrieve the next page, +// set this parameter to the value of "nextPageToken" from the previous +// response. +func (c *UrlchannelsListCall) PageToken(pageToken string) *UrlchannelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *UrlchannelsListCall) Do() (*UrlChannels, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "adclients/{adClientId}/urlchannels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{adClientId}", url.QueryEscape(c.adClientId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlChannels) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all host URL channels in the host AdSense account.", + // "httpMethod": "GET", + // "id": "adsensehost.urlchannels.list", + // "parameterOrder": [ + // "adClientId" + // ], + // "parameters": { + // "adClientId": { + // "description": "Ad client for which to list URL channels.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of URL channels to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "maximum": "10000", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token, used to page through URL channels. To retrieve the next page, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "adclients/{adClientId}/urlchannels", + // "response": { + // "$ref": "UrlChannels" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/adsensehost" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-api.json b/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-api.json new file mode 100644 index 0000000000000..8aae151778754 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-api.json @@ -0,0 +1,365 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/g0dlAqv19pD_cw5NLrQ2z9eB7ig\"", + "discoveryVersion": "v1", + "id": "analytics:v2.4", + "name": "analytics", + "version": "v2.4", + "title": "Google Analytics API", + "description": "View and manage your Google Analytics data", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/analytics-16.png", + "x32": "http://www.google.com/images/icons/product/analytics-32.png" + }, + "documentationLink": "https://developers.google.com/analytics/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/analytics/v2.4/", + "basePath": "/analytics/v2.4/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "analytics/v2.4/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "atom", + "enum": [ + "atom" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "false", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/analytics": { + "description": "View and manage your Google Analytics data" + }, + "https://www.googleapis.com/auth/analytics.readonly": { + "description": "View your Google Analytics data" + } + } + } + }, + "resources": { + "data": { + "methods": { + "get": { + "id": "analytics.data.get", + "path": "data", + "httpMethod": "GET", + "description": "Returns Analytics report data for a view (profile).", + "parameters": { + "dimensions": { + "type": "string", + "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.", + "pattern": "(ga:.+)?", + "location": "query" + }, + "end-date": { + "type": "string", + "description": "End date for fetching report data. All requests should specify an end date formatted as YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "query" + }, + "filters": { + "type": "string", + "description": "A comma-separated list of dimension or metric filters to be applied to the report data.", + "pattern": "ga:.+", + "location": "query" + }, + "ids": { + "type": "string", + "description": "Unique table ID for retrieving report data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + "required": true, + "pattern": "ga:[0-9]+", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of entries to include in this feed.", + "format": "int32", + "location": "query" + }, + "metrics": { + "type": "string", + "description": "A comma-separated list of Analytics metrics. E.g., 'ga:visits,ga:pageviews'. At least one metric must be specified to retrieve a valid Analytics report.", + "required": true, + "pattern": "ga:.+", + "location": "query" + }, + "segment": { + "type": "string", + "description": "An Analytics advanced segment to be applied to the report data.", + "location": "query" + }, + "sort": { + "type": "string", + "description": "A comma-separated list of dimensions or metrics that determine the sort order for the report data.", + "pattern": "(-)?ga:.+", + "location": "query" + }, + "start-date": { + "type": "string", + "description": "Start date for fetching report data. All requests should specify a start date formatted as YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "ids", + "start-date", + "end-date", + "metrics" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "management": { + "resources": { + "accounts": { + "methods": { + "list": { + "id": "analytics.management.accounts.list", + "path": "management/accounts", + "httpMethod": "GET", + "description": "Lists all accounts to which the user has access.", + "parameters": { + "max-results": { + "type": "integer", + "description": "The maximum number of accounts to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "goals": { + "methods": { + "list": { + "id": "analytics.management.goals.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + "httpMethod": "GET", + "description": "Lists goals to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of goals to include in this response.", + "format": "int32", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to.", + "required": true, + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "profiles": { + "methods": { + "list": { + "id": "analytics.management.profiles.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + "httpMethod": "GET", + "description": "Lists views (profiles) to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID for the views (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of views (profiles) to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "segments": { + "methods": { + "list": { + "id": "analytics.management.segments.list", + "path": "management/segments", + "httpMethod": "GET", + "description": "Lists advanced segments to which the user has access.", + "parameters": { + "max-results": { + "type": "integer", + "description": "The maximum number of advanced segments to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first advanced segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "webproperties": { + "methods": { + "list": { + "id": "analytics.management.webproperties.list", + "path": "management/accounts/{accountId}/webproperties", + "httpMethod": "GET", + "description": "Lists web properties to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of web properties to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-gen.go b/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-gen.go new file mode 100644 index 0000000000000..8f3834ba8d649 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/analytics/v2.4/analytics-gen.go @@ -0,0 +1,803 @@ +// Package analytics provides access to the Google Analytics API. +// +// See https://developers.google.com/analytics/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/analytics/v2.4" +// ... +// analyticsService, err := analytics.New(oauthHttpClient) +package analytics + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "analytics:v2.4" +const apiName = "analytics" +const apiVersion = "v2.4" +const basePath = "https://www.googleapis.com/analytics/v2.4/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Analytics data + AnalyticsScope = "https://www.googleapis.com/auth/analytics" + + // View your Google Analytics data + AnalyticsReadonlyScope = "https://www.googleapis.com/auth/analytics.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Data = NewDataService(s) + s.Management = NewManagementService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Data *DataService + + Management *ManagementService +} + +func NewDataService(s *Service) *DataService { + rs := &DataService{s: s} + return rs +} + +type DataService struct { + s *Service +} + +func NewManagementService(s *Service) *ManagementService { + rs := &ManagementService{s: s} + rs.Accounts = NewManagementAccountsService(s) + rs.Goals = NewManagementGoalsService(s) + rs.Profiles = NewManagementProfilesService(s) + rs.Segments = NewManagementSegmentsService(s) + rs.Webproperties = NewManagementWebpropertiesService(s) + return rs +} + +type ManagementService struct { + s *Service + + Accounts *ManagementAccountsService + + Goals *ManagementGoalsService + + Profiles *ManagementProfilesService + + Segments *ManagementSegmentsService + + Webproperties *ManagementWebpropertiesService +} + +func NewManagementAccountsService(s *Service) *ManagementAccountsService { + rs := &ManagementAccountsService{s: s} + return rs +} + +type ManagementAccountsService struct { + s *Service +} + +func NewManagementGoalsService(s *Service) *ManagementGoalsService { + rs := &ManagementGoalsService{s: s} + return rs +} + +type ManagementGoalsService struct { + s *Service +} + +func NewManagementProfilesService(s *Service) *ManagementProfilesService { + rs := &ManagementProfilesService{s: s} + return rs +} + +type ManagementProfilesService struct { + s *Service +} + +func NewManagementSegmentsService(s *Service) *ManagementSegmentsService { + rs := &ManagementSegmentsService{s: s} + return rs +} + +type ManagementSegmentsService struct { + s *Service +} + +func NewManagementWebpropertiesService(s *Service) *ManagementWebpropertiesService { + rs := &ManagementWebpropertiesService{s: s} + return rs +} + +type ManagementWebpropertiesService struct { + s *Service +} + +// method id "analytics.data.get": + +type DataGetCall struct { + s *Service + ids string + startDate string + endDate string + metrics string + opt_ map[string]interface{} +} + +// Get: Returns Analytics report data for a view (profile). +func (r *DataService) Get(ids string, startDate string, endDate string, metrics string) *DataGetCall { + c := &DataGetCall{s: r.s, opt_: make(map[string]interface{})} + c.ids = ids + c.startDate = startDate + c.endDate = endDate + c.metrics = metrics + return c +} + +// Dimensions sets the optional parameter "dimensions": A +// comma-separated list of Analytics dimensions. E.g., +// 'ga:browser,ga:city'. +func (c *DataGetCall) Dimensions(dimensions string) *DataGetCall { + c.opt_["dimensions"] = dimensions + return c +} + +// Filters sets the optional parameter "filters": A comma-separated list +// of dimension or metric filters to be applied to the report data. +func (c *DataGetCall) Filters(filters string) *DataGetCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of entries to include in this feed. +func (c *DataGetCall) MaxResults(maxResults int64) *DataGetCall { + c.opt_["max-results"] = maxResults + return c +} + +// Segment sets the optional parameter "segment": An Analytics advanced +// segment to be applied to the report data. +func (c *DataGetCall) Segment(segment string) *DataGetCall { + c.opt_["segment"] = segment + return c +} + +// Sort sets the optional parameter "sort": A comma-separated list of +// dimensions or metrics that determine the sort order for the report +// data. +func (c *DataGetCall) Sort(sort string) *DataGetCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *DataGetCall) StartIndex(startIndex int64) *DataGetCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *DataGetCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("end-date", fmt.Sprintf("%v", c.endDate)) + params.Set("ids", fmt.Sprintf("%v", c.ids)) + params.Set("metrics", fmt.Sprintf("%v", c.metrics)) + params.Set("start-date", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimensions"]; ok { + params.Set("dimensions", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["segment"]; ok { + params.Set("segment", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "data") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Returns Analytics report data for a view (profile).", + // "httpMethod": "GET", + // "id": "analytics.data.get", + // "parameterOrder": [ + // "ids", + // "start-date", + // "end-date", + // "metrics" + // ], + // "parameters": { + // "dimensions": { + // "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.", + // "location": "query", + // "pattern": "(ga:.+)?", + // "type": "string" + // }, + // "end-date": { + // "description": "End date for fetching report data. All requests should specify an end date formatted as YYYY-MM-DD.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "filters": { + // "description": "A comma-separated list of dimension or metric filters to be applied to the report data.", + // "location": "query", + // "pattern": "ga:.+", + // "type": "string" + // }, + // "ids": { + // "description": "Unique table ID for retrieving report data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + // "location": "query", + // "pattern": "ga:[0-9]+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of entries to include in this feed.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "metrics": { + // "description": "A comma-separated list of Analytics metrics. E.g., 'ga:visits,ga:pageviews'. At least one metric must be specified to retrieve a valid Analytics report.", + // "location": "query", + // "pattern": "ga:.+", + // "required": true, + // "type": "string" + // }, + // "segment": { + // "description": "An Analytics advanced segment to be applied to the report data.", + // "location": "query", + // "type": "string" + // }, + // "sort": { + // "description": "A comma-separated list of dimensions or metrics that determine the sort order for the report data.", + // "location": "query", + // "pattern": "(-)?ga:.+", + // "type": "string" + // }, + // "start-date": { + // "description": "Start date for fetching report data. All requests should specify a start date formatted as YYYY-MM-DD.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "data", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.accounts.list": + +type ManagementAccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all accounts to which the user has access. +func (r *ManagementAccountsService) List() *ManagementAccountsListCall { + c := &ManagementAccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of accounts to include in this response. +func (c *ManagementAccountsListCall) MaxResults(maxResults int64) *ManagementAccountsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first account to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementAccountsListCall) StartIndex(startIndex int64) *ManagementAccountsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementAccountsListCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Lists all accounts to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.accounts.list", + // "parameters": { + // "max-results": { + // "description": "The maximum number of accounts to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accounts", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.goals.list": + +type ManagementGoalsListCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// List: Lists goals to which the user has access. +func (r *ManagementGoalsService) List(accountId string, webPropertyId string, profileId string) *ManagementGoalsListCall { + c := &ManagementGoalsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of goals to include in this response. +func (c *ManagementGoalsListCall) MaxResults(maxResults int64) *ManagementGoalsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first goal to retrieve. Use this parameter as a pagination mechanism +// along with the max-results parameter. +func (c *ManagementGoalsListCall) StartIndex(startIndex int64) *ManagementGoalsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementGoalsListCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Lists goals to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.goals.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of goals to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.profiles.list": + +type ManagementProfilesListCall struct { + s *Service + accountId string + webPropertyId string + opt_ map[string]interface{} +} + +// List: Lists views (profiles) to which the user has access. +func (r *ManagementProfilesService) List(accountId string, webPropertyId string) *ManagementProfilesListCall { + c := &ManagementProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of views (profiles) to include in this response. +func (c *ManagementProfilesListCall) MaxResults(maxResults int64) *ManagementProfilesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementProfilesListCall) StartIndex(startIndex int64) *ManagementProfilesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementProfilesListCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Lists views (profiles) to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.profiles.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID for the views (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of views (profiles) to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.segments.list": + +type ManagementSegmentsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists advanced segments to which the user has access. +func (r *ManagementSegmentsService) List() *ManagementSegmentsListCall { + c := &ManagementSegmentsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of advanced segments to include in this response. +func (c *ManagementSegmentsListCall) MaxResults(maxResults int64) *ManagementSegmentsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first advanced segment to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementSegmentsListCall) StartIndex(startIndex int64) *ManagementSegmentsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementSegmentsListCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/segments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Lists advanced segments to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.segments.list", + // "parameters": { + // "max-results": { + // "description": "The maximum number of advanced segments to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first advanced segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/segments", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.webproperties.list": + +type ManagementWebpropertiesListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: Lists web properties to which the user has access. +func (r *ManagementWebpropertiesService) List(accountId string) *ManagementWebpropertiesListCall { + c := &ManagementWebpropertiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of web properties to include in this response. +func (c *ManagementWebpropertiesListCall) MaxResults(maxResults int64) *ManagementWebpropertiesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementWebpropertiesListCall) StartIndex(startIndex int64) *ManagementWebpropertiesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementWebpropertiesListCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Lists web properties to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.webproperties.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of web properties to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-api.json b/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-api.json new file mode 100644 index 0000000000000..7be6702b2aa17 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-api.json @@ -0,0 +1,4749 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/nYpof5sWVgQxA1Kf0FAXxMsfkXY\"", + "discoveryVersion": "v1", + "id": "analytics:v3", + "name": "analytics", + "version": "v3", + "title": "Google Analytics API", + "description": "View and manage your Google Analytics data", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/analytics-16.png", + "x32": "http://www.google.com/images/icons/product/analytics-32.png" + }, + "documentationLink": "https://developers.google.com/analytics/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/analytics/v3/", + "basePath": "/analytics/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "analytics/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "false", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/analytics": { + "description": "View and manage your Google Analytics data" + }, + "https://www.googleapis.com/auth/analytics.edit": { + "description": "Edit Google Analytics management entities" + }, + "https://www.googleapis.com/auth/analytics.manage.users": { + "description": "Manage Google Analytics Account users by email address" + }, + "https://www.googleapis.com/auth/analytics.readonly": { + "description": "View your Google Analytics data" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "JSON template for Analytics account entry.", + "properties": { + "childLink": { + "type": "object", + "description": "Child link for an account entry. Points to the list of web properties for this account.", + "properties": { + "href": { + "type": "string", + "description": "Link to the list of web properties for this account." + }, + "type": { + "type": "string", + "description": "Type of the child link. Its value is \"analytics#webproperties\".", + "default": "analytics#webproperties" + } + } + }, + "created": { + "type": "string", + "description": "Time the account was created.", + "format": "date-time" + }, + "id": { + "type": "string", + "description": "Account ID." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics account.", + "default": "analytics#account" + }, + "name": { + "type": "string", + "description": "Account name." + }, + "permissions": { + "type": "object", + "description": "Permissions the user has for this account.", + "properties": { + "effective": { + "type": "array", + "description": "All the permissions that the user has for this account. These include any implied permissions (e.g., EDIT implies VIEW).", + "readOnly": true, + "items": { + "type": "string" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Link for this account." + }, + "updated": { + "type": "string", + "description": "Time the account was last modified.", + "format": "date-time" + } + } + }, + "AccountRef": { + "id": "AccountRef", + "type": "object", + "description": "JSON template for a linked account.", + "properties": { + "href": { + "type": "string", + "description": "Link for this account." + }, + "id": { + "type": "string", + "description": "Account ID." + }, + "kind": { + "type": "string", + "description": "Analytics account reference.", + "default": "analytics#accountRef" + }, + "name": { + "type": "string", + "description": "Account name." + } + } + }, + "AccountSummaries": { + "id": "AccountSummaries", + "type": "object", + "description": "An AccountSummary collection lists a summary of accounts, properties and views (profiles) to which the user has access. Each resource in the collection corresponds to a single AccountSummary.", + "properties": { + "items": { + "type": "array", + "description": "A list of AccountSummaries.", + "items": { + "$ref": "AccountSummary" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#accountSummaries" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this AccountSummary collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this AccountSummary collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "AccountSummary": { + "id": "AccountSummary", + "type": "object", + "description": "JSON template for an Analytics AccountSummary. An AccountSummary is a lightweight tree comprised of properties/profiles.", + "properties": { + "id": { + "type": "string", + "description": "Account ID." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics AccountSummary.", + "default": "analytics#accountSummary" + }, + "name": { + "type": "string", + "description": "Account name." + }, + "webProperties": { + "type": "array", + "description": "List of web properties under this account.", + "items": { + "$ref": "WebPropertySummary" + } + } + } + }, + "Accounts": { + "id": "Accounts", + "type": "object", + "description": "An account collection provides a list of Analytics accounts to which a user has access. The account collection is the entry point to all management information. Each resource in the collection corresponds to a single Analytics account.", + "properties": { + "items": { + "type": "array", + "description": "A list of accounts.", + "items": { + "$ref": "Account" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#accounts" + }, + "nextLink": { + "type": "string", + "description": "Next link for this account collection." + }, + "previousLink": { + "type": "string", + "description": "Previous link for this account collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "AnalyticsDataimportDeleteUploadDataRequest": { + "id": "AnalyticsDataimportDeleteUploadDataRequest", + "type": "object", + "description": "Request template for the delete upload data request.", + "properties": { + "customDataImportUids": { + "type": "array", + "description": "A list of upload UIDs.", + "items": { + "type": "string" + } + } + } + }, + "Column": { + "id": "Column", + "type": "object", + "description": "JSON template for a metadata column.", + "properties": { + "attributes": { + "type": "object", + "description": "Map of attribute name and value for this column.", + "additionalProperties": { + "type": "string", + "description": "The name of the attribute." + } + }, + "id": { + "type": "string", + "description": "Column id." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics column.", + "default": "analytics#column" + } + } + }, + "Columns": { + "id": "Columns", + "type": "object", + "description": "Lists columns (dimensions and metrics) for a particular report type.", + "properties": { + "attributeNames": { + "type": "array", + "description": "List of attributes names returned by columns.", + "items": { + "type": "string" + } + }, + "etag": { + "type": "string", + "description": "Etag of collection. This etag can be compared with the last response etag to check if response has changed." + }, + "items": { + "type": "array", + "description": "List of columns for a report type.", + "items": { + "$ref": "Column" + } + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#columns" + }, + "totalResults": { + "type": "integer", + "description": "Total number of columns returned in the response.", + "format": "int32" + } + } + }, + "CustomDataSource": { + "id": "CustomDataSource", + "type": "object", + "description": "JSON template for an Analytics custom data source.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this custom data source belongs." + }, + "childLink": { + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "Link to the list of daily uploads for this custom data source. Link to the list of uploads for this custom data source." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#dailyUploads\". Value is \"analytics#uploads\"." + } + } + }, + "created": { + "type": "string", + "description": "Time this custom data source was created.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "Description of custom data source." + }, + "id": { + "type": "string", + "description": "Custom data source ID." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics custom data source.", + "default": "analytics#customDataSource" + }, + "name": { + "type": "string", + "description": "Name of this custom data source." + }, + "parentLink": { + "type": "object", + "description": "Parent link for this custom data source. Points to the web property to which this custom data source belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the web property to which this custom data source belongs." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#webproperty\".", + "default": "analytics#webproperty" + } + } + }, + "profilesLinked": { + "type": "array", + "description": "IDs of views (profiles) linked to the custom data source.", + "items": { + "type": "string" + } + }, + "selfLink": { + "type": "string", + "description": "Link for this Analytics custom data source." + }, + "type": { + "type": "string", + "description": "Type of the custom data source." + }, + "updated": { + "type": "string", + "description": "Time this custom data source was last modified.", + "format": "date-time" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY to which this custom data source belongs." + } + } + }, + "CustomDataSources": { + "id": "CustomDataSources", + "type": "object", + "description": "Lists Analytics custom data sources to which the user has access. Each resource in the collection corresponds to a single Analytics custom data source.", + "properties": { + "items": { + "type": "array", + "description": "Collection of custom data sources.", + "items": { + "$ref": "CustomDataSource" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#customDataSources" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this custom data source collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this custom data source collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "DailyUpload": { + "id": "DailyUpload", + "type": "object", + "description": "Metadata for daily upload entity.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this daily upload belongs." + }, + "appendCount": { + "type": "integer", + "description": "Number of appends for this date.", + "format": "int32" + }, + "createdTime": { + "type": "string", + "description": "Time this daily upload was created.", + "format": "date-time" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source ID to which this daily upload belongs." + }, + "date": { + "type": "string", + "description": "Date associated with daily upload." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics daily upload.", + "default": "analytics#dailyUpload" + }, + "modifiedTime": { + "type": "string", + "description": "Time this daily upload was last modified.", + "format": "date-time" + }, + "parentLink": { + "type": "object", + "description": "Parent link for a daily upload. Points to the custom data source to which this daily upload belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the custom data source to which this daily upload belongs." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#customDataSource\".", + "default": "analytics#customDataSource" + } + } + }, + "recentChanges": { + "type": "array", + "description": "Change log for last 10 changes in chronological order.", + "items": { + "type": "object", + "properties": { + "change": { + "type": "string", + "description": "The type of change: APPEND, RESET, or DELETE." + }, + "time": { + "type": "string", + "description": "The time when the change occurred.", + "format": "date-time" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Link for this daily upload." + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY to which this daily upload belongs." + } + } + }, + "DailyUploadAppend": { + "id": "DailyUploadAppend", + "type": "object", + "description": "Metadata returned for a successful append operation.", + "properties": { + "accountId": { + "type": "string", + "description": "Account Id to which this daily upload append belongs." + }, + "appendNumber": { + "type": "integer", + "description": "Append number.", + "format": "int32" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id to which this daily upload append belongs." + }, + "date": { + "type": "string", + "description": "Date associated with daily upload append." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics daily upload append.", + "default": "analytics#dailyUploadAppend" + }, + "nextAppendLink": { + "type": "string" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id of the form UA-XXXXX-YY to which this daily upload append belongs." + } + } + }, + "DailyUploads": { + "id": "DailyUploads", + "type": "object", + "description": "A daily upload collection lists Analytics daily uploads to which the user has access. Each resource in the collection corresponds to a single Analytics daily upload.", + "properties": { + "items": { + "type": "array", + "description": "A collection of daily uploads.", + "items": { + "$ref": "DailyUpload" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type. Value is analytics#dailyUploads.", + "default": "analytics#dailyUploads" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this daily upload collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this daily upload collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "EntityUserLink": { + "id": "EntityUserLink", + "type": "object", + "description": "JSON template for an Analytics Entity-User Link. Returns permissions that a user has for an entity.", + "properties": { + "entity": { + "type": "object", + "description": "Entity for this link. It can be an account, a web property, or a view (profile).", + "properties": { + "accountRef": { + "$ref": "AccountRef", + "description": "Account for this link." + }, + "profileRef": { + "$ref": "ProfileRef", + "description": "View (Profile) for this link." + }, + "webPropertyRef": { + "$ref": "WebPropertyRef", + "description": "Web property for this link." + } + } + }, + "id": { + "type": "string", + "description": "Entity user link ID" + }, + "kind": { + "type": "string", + "description": "Resource type for entity user link.", + "default": "analytics#entityUserLink" + }, + "permissions": { + "type": "object", + "description": "Permissions the user has for this entity.", + "properties": { + "effective": { + "type": "array", + "description": "Effective permissions represent all the permissions that a user has for this entity. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent entity. Effective permissions are read-only.", + "readOnly": true, + "items": { + "type": "string" + } + }, + "local": { + "type": "array", + "description": "Permissions that a user has been assigned at this very level. Does not include any implied or inherited permissions. Local permissions are modifiable.", + "items": { + "type": "string" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Self link for this resource." + }, + "userRef": { + "$ref": "UserRef", + "description": "User reference." + } + } + }, + "EntityUserLinks": { + "id": "EntityUserLinks", + "type": "object", + "description": "An entity user link collection provides a list of Analytics ACL links Each resource in this collection corresponds to a single link.", + "properties": { + "items": { + "type": "array", + "description": "A list of entity user links.", + "items": { + "$ref": "EntityUserLink" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of entries the response can contain, regardless of the actual number of entries returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#entityUserLinks" + }, + "nextLink": { + "type": "string", + "description": "Next link for this account collection." + }, + "previousLink": { + "type": "string", + "description": "Previous link for this account collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the entries, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + } + } + }, + "Experiment": { + "id": "Experiment", + "type": "object", + "description": "JSON template for Analytics experiment resource.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this experiment belongs. This field is read-only." + }, + "created": { + "type": "string", + "description": "Time the experiment was created. This field is read-only.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "Notes about this experiment." + }, + "editableInGaUi": { + "type": "boolean", + "description": "If true, the end user will be able to edit the experiment via the Google Analytics user interface." + }, + "endTime": { + "type": "string", + "description": "The ending time of the experiment (the time the status changed from RUNNING to ENDED). This field is present only if the experiment has ended. This field is read-only.", + "format": "date-time" + }, + "equalWeighting": { + "type": "boolean", + "description": "Boolean specifying whether to distribute traffic evenly across all variations. If the value is False, content experiments follows the default behavior of adjusting traffic dynamically based on variation performance. Optional -- defaults to False. This field may not be changed for an experiment whose status is ENDED." + }, + "id": { + "type": "string", + "description": "Experiment ID. Required for patch and update. Disallowed for create.", + "annotations": { + "required": [ + "analytics.management.experiments.patch", + "analytics.management.experiments.update" + ] + } + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this experiment belongs. This field is read-only." + }, + "kind": { + "type": "string", + "description": "Resource type for an Analytics experiment. This field is read-only.", + "default": "analytics#experiment" + }, + "minimumExperimentLengthInDays": { + "type": "integer", + "description": "Specifies the minimum length of the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Experiment name. This field may not be changed for an experiment whose status is ENDED. This field is required when creating an experiment.", + "annotations": { + "required": [ + "analytics.management.experiments.insert", + "analytics.management.experiments.update" + ] + } + }, + "objectiveMetric": { + "type": "string", + "description": "The metric that the experiment is optimizing. Valid values: \"ga:goal(n)Completions\", \"ga:adsenseAdsClicks\", \"ga:adsenseAdsViewed\", \"ga:adsenseRevenue\", \"ga:bounces\", \"ga:pageviews\", \"ga:timeOnSite\", \"ga:transactions\", \"ga:transactionRevenue\". This field is required if status is \"RUNNING\" and servingFramework is one of \"REDIRECT\" or \"API\"." + }, + "optimizationType": { + "type": "string", + "description": "Whether the objectiveMetric should be minimized or maximized. Possible values: \"MAXIMUM\", \"MINIMUM\". Optional--defaults to \"MAXIMUM\". Cannot be specified without objectiveMetric. Cannot be modified when status is \"RUNNING\" or \"ENDED\"." + }, + "parentLink": { + "type": "object", + "description": "Parent link for an experiment. Points to the view (profile) to which this experiment belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the view (profile) to which this experiment belongs. This field is read-only." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#profile\". This field is read-only.", + "default": "analytics#profile" + } + } + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to which this experiment belongs. This field is read-only." + }, + "reasonExperimentEnded": { + "type": "string", + "description": "Why the experiment ended. Possible values: \"STOPPED_BY_USER\", \"WINNER_FOUND\", \"EXPERIMENT_EXPIRED\", \"ENDED_WITH_NO_WINNER\", \"GOAL_OBJECTIVE_CHANGED\". \"ENDED_WITH_NO_WINNER\" means that the experiment didn't expire but no winner was projected to be found. If the experiment status is changed via the API to ENDED this field is set to STOPPED_BY_USER. This field is read-only." + }, + "rewriteVariationUrlsAsOriginal": { + "type": "boolean", + "description": "Boolean specifying whether variations URLS are rewritten to match those of the original. This field may not be changed for an experiments whose status is ENDED." + }, + "selfLink": { + "type": "string", + "description": "Link for this experiment. This field is read-only." + }, + "servingFramework": { + "type": "string", + "description": "The framework used to serve the experiment variations and evaluate the results. One of: \n- REDIRECT: Google Analytics redirects traffic to different variation pages, reports the chosen variation and evaluates the results.\n- API: Google Analytics chooses and reports the variation to serve and evaluates the results; the caller is responsible for serving the selected variation.\n- EXTERNAL: The variations will be served externally and the chosen variation reported to Google Analytics. The caller is responsible for serving the selected variation and evaluating the results." + }, + "snippet": { + "type": "string", + "description": "The snippet of code to include on the control page(s). This field is read-only." + }, + "startTime": { + "type": "string", + "description": "The starting time of the experiment (the time the status changed from READY_TO_RUN to RUNNING). This field is present only if the experiment has started. This field is read-only.", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "Experiment status. Possible values: \"DRAFT\", \"READY_TO_RUN\", \"RUNNING\", \"ENDED\". Experiments can be created in the \"DRAFT\", \"READY_TO_RUN\" or \"RUNNING\" state. This field is required when creating an experiment.", + "annotations": { + "required": [ + "analytics.management.experiments.insert", + "analytics.management.experiments.update" + ] + } + }, + "trafficCoverage": { + "type": "number", + "description": "A floating-point number between 0 and 1. Specifies the fraction of the traffic that participates in the experiment. Can be changed for a running experiment. This field may not be changed for an experiments whose status is ENDED.", + "format": "double" + }, + "updated": { + "type": "string", + "description": "Time the experiment was last modified. This field is read-only.", + "format": "date-time" + }, + "variations": { + "type": "array", + "description": "Array of variations. The first variation in the array is the original. The number of variations may not change once an experiment is in the RUNNING state. At least two variations are required before status can be set to RUNNING.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the variation. This field is required when creating an experiment. This field may not be changed for an experiment whose status is ENDED.", + "annotations": { + "required": [ + "analytics.management.experiments.insert", + "analytics.management.experiments.update" + ] + } + }, + "status": { + "type": "string", + "description": "Status of the variation. Possible values: \"ACTIVE\", \"INACTIVE\". INACTIVE variations are not served. This field may not be changed for an experiment whose status is ENDED." + }, + "url": { + "type": "string", + "description": "The URL of the variation. This field may not be changed for an experiment whose status is RUNNING or ENDED." + }, + "weight": { + "type": "number", + "description": "Weight that this variation should receive. Only present if the experiment is running. This field is read-only.", + "format": "double" + }, + "won": { + "type": "boolean", + "description": "True if the experiment has ended and this variation performed (statistically) significantly better than the original. This field is read-only." + } + } + } + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to which this experiment belongs. The web property ID is of the form UA-XXXXX-YY. This field is read-only." + }, + "winnerConfidenceLevel": { + "type": "number", + "description": "A floating-point number between 0 and 1. Specifies the necessary confidence level to choose a winner. This field may not be changed for an experiments whose status is ENDED.", + "format": "double" + }, + "winnerFound": { + "type": "boolean", + "description": "Boolean specifying whether a winner has been found for this experiment. This field is read-only." + } + } + }, + "Experiments": { + "id": "Experiments", + "type": "object", + "description": "An experiment collection lists Analytics experiments to which the user has access. Each view (profile) can have a set of experiments. Each resource in the Experiment collection corresponds to a single Analytics experiment.", + "properties": { + "items": { + "type": "array", + "description": "A list of experiments.", + "items": { + "$ref": "Experiment" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#experiments" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this experiment collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this experiment collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of resources in the result.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "GaData": { + "id": "GaData", + "type": "object", + "description": "Analytics data for a given view (profile).", + "properties": { + "columnHeaders": { + "type": "array", + "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "object", + "properties": { + "columnType": { + "type": "string", + "description": "Column Type. Either DIMENSION or METRIC." + }, + "dataType": { + "type": "string", + "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc." + }, + "name": { + "type": "string", + "description": "Column name." + } + } + } + }, + "containsSampledData": { + "type": "boolean", + "description": "Determines if Analytics data contains samples." + }, + "dataTable": { + "type": "object", + "properties": { + "cols": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "type": { + "type": "string" + } + } + } + }, + "rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "c": { + "type": "array", + "items": { + "type": "object", + "properties": { + "v": { + "type": "string" + } + } + } + } + } + } + } + } + }, + "id": { + "type": "string", + "description": "Unique ID for this data response." + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "analytics#gaData" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this Analytics data query." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this Analytics data query." + }, + "profileInfo": { + "type": "object", + "description": "Information for the view (profile), for which the Analytics data was requested.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this view (profile) belongs." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this view (profile) belongs." + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID." + }, + "profileName": { + "type": "string", + "description": "View (Profile) name." + }, + "tableId": { + "type": "string", + "description": "Table ID for view (profile)." + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to which this view (profile) belongs." + } + } + }, + "query": { + "type": "object", + "description": "Analytics data request query parameters.", + "properties": { + "dimensions": { + "type": "string", + "description": "List of analytics dimensions." + }, + "end-date": { + "type": "string", + "description": "End date." + }, + "filters": { + "type": "string", + "description": "Comma-separated list of dimension or metric filters." + }, + "ids": { + "type": "string", + "description": "Unique table ID." + }, + "max-results": { + "type": "integer", + "description": "Maximum results per page.", + "format": "int32" + }, + "metrics": { + "type": "array", + "description": "List of analytics metrics.", + "items": { + "type": "string" + } + }, + "samplingLevel": { + "type": "string", + "description": "Desired sampling level" + }, + "segment": { + "type": "string", + "description": "Analytics advanced segment." + }, + "sort": { + "type": "array", + "description": "List of dimensions or metrics based on which Analytics data is sorted.", + "items": { + "type": "string" + } + }, + "start-date": { + "type": "string", + "description": "Start date." + }, + "start-index": { + "type": "integer", + "description": "Start index.", + "format": "int32" + } + } + }, + "rows": { + "type": "array", + "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "sampleSize": { + "type": "string", + "description": "The number of samples used to calculate the result.", + "format": "int64" + }, + "sampleSpace": { + "type": "string", + "description": "Total size of the sample space from which the samples were selected.", + "format": "int64" + }, + "selfLink": { + "type": "string", + "description": "Link to this page." + }, + "totalResults": { + "type": "integer", + "description": "The total number of rows for the query, regardless of the number of rows in the response.", + "format": "int32" + }, + "totalsForAllResults": { + "type": "object", + "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.", + "additionalProperties": { + "type": "string", + "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric." + } + } + } + }, + "Goal": { + "id": "Goal", + "type": "object", + "description": "JSON template for Analytics goal resource.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this goal belongs." + }, + "active": { + "type": "boolean", + "description": "Determines whether this goal is active." + }, + "created": { + "type": "string", + "description": "Time this goal was created.", + "format": "date-time" + }, + "eventDetails": { + "type": "object", + "description": "Details for the goal of the type EVENT.", + "properties": { + "eventConditions": { + "type": "array", + "description": "List of event conditions.", + "items": { + "type": "object", + "properties": { + "comparisonType": { + "type": "string", + "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN or EQUAL." + }, + "comparisonValue": { + "type": "string", + "description": "Value used for this comparison.", + "format": "int64" + }, + "expression": { + "type": "string", + "description": "Expression used for this match." + }, + "matchType": { + "type": "string", + "description": "Type of the match to be performed. Possible values are REGEXP, BEGINS_WITH, or EXACT." + }, + "type": { + "type": "string", + "description": "Type of this event condition. Possible values are CATEGORY, ACTION, LABEL, or VALUE." + } + } + } + }, + "useEventValue": { + "type": "boolean", + "description": "Determines if the event value should be used as the value for this goal." + } + } + }, + "id": { + "type": "string", + "description": "Goal ID." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this goal belongs." + }, + "kind": { + "type": "string", + "description": "Resource type for an Analytics goal.", + "default": "analytics#goal" + }, + "name": { + "type": "string", + "description": "Goal name." + }, + "parentLink": { + "type": "object", + "description": "Parent link for a goal. Points to the view (profile) to which this goal belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the view (profile) to which this goal belongs." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#profile\".", + "default": "analytics#profile" + } + } + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to which this goal belongs." + }, + "selfLink": { + "type": "string", + "description": "Link for this goal." + }, + "type": { + "type": "string", + "description": "Goal type. Possible values are URL_DESTINATION, VISIT_TIME_ON_SITE, VISIT_NUM_PAGES, AND EVENT." + }, + "updated": { + "type": "string", + "description": "Time this goal was last modified.", + "format": "date-time" + }, + "urlDestinationDetails": { + "type": "object", + "description": "Details for the goal of the type URL_DESTINATION.", + "properties": { + "caseSensitive": { + "type": "boolean", + "description": "Determines if the goal URL must exactly match the capitalization of visited URLs." + }, + "firstStepRequired": { + "type": "boolean", + "description": "Determines if the first step in this goal is required." + }, + "matchType": { + "type": "string", + "description": "Match type for the goal URL. Possible values are HEAD, EXACT, or REGEX." + }, + "steps": { + "type": "array", + "description": "List of steps configured for this goal funnel.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Step name." + }, + "number": { + "type": "integer", + "description": "Step number.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "URL for this step." + } + } + } + }, + "url": { + "type": "string", + "description": "URL for this goal." + } + } + }, + "value": { + "type": "number", + "description": "Goal value.", + "format": "float" + }, + "visitNumPagesDetails": { + "type": "object", + "description": "Details for the goal of the type VISIT_NUM_PAGES.", + "properties": { + "comparisonType": { + "type": "string", + "description": "Type of comparison. Possible values are LESS_THAN, GREATER_THAN, or EQUAL." + }, + "comparisonValue": { + "type": "string", + "description": "Value used for this comparison.", + "format": "int64" + } + } + }, + "visitTimeOnSiteDetails": { + "type": "object", + "description": "Details for the goal of the type VISIT_TIME_ON_SITE.", + "properties": { + "comparisonType": { + "type": "string", + "description": "Type of comparison. Possible values are LESS_THAN or GREATER_THAN." + }, + "comparisonValue": { + "type": "string", + "description": "Value used for this comparison.", + "format": "int64" + } + } + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to which this goal belongs. The web property ID is of the form UA-XXXXX-YY." + } + } + }, + "Goals": { + "id": "Goals", + "type": "object", + "description": "A goal collection lists Analytics goals to which the user has access. Each view (profile) can have a set of goals. Each resource in the Goal collection corresponds to a single Analytics goal.", + "properties": { + "items": { + "type": "array", + "description": "A list of goals.", + "items": { + "$ref": "Goal" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#goals" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this goal collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this goal collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of resources in the result.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "McfData": { + "id": "McfData", + "type": "object", + "description": "Multi-Channel Funnels data for a given view (profile).", + "properties": { + "columnHeaders": { + "type": "array", + "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "object", + "properties": { + "columnType": { + "type": "string", + "description": "Column Type. Either DIMENSION or METRIC." + }, + "dataType": { + "type": "string", + "description": "Data type. Dimension and metric values data types such as INTEGER, DOUBLE, CURRENCY, MCF_SEQUENCE etc." + }, + "name": { + "type": "string", + "description": "Column name." + } + } + } + }, + "containsSampledData": { + "type": "boolean", + "description": "Determines if the Analytics data contains sampled data." + }, + "id": { + "type": "string", + "description": "Unique ID for this data response." + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of rows the response can contain, regardless of the actual number of rows returned. Its value ranges from 1 to 10,000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "analytics#mcfData" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this Analytics data query." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this Analytics data query." + }, + "profileInfo": { + "type": "object", + "description": "Information for the view (profile), for which the Analytics data was requested.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this view (profile) belongs." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this view (profile) belongs." + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID." + }, + "profileName": { + "type": "string", + "description": "View (Profile) name." + }, + "tableId": { + "type": "string", + "description": "Table ID for view (profile)." + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to which this view (profile) belongs." + } + } + }, + "query": { + "type": "object", + "description": "Analytics data request query parameters.", + "properties": { + "dimensions": { + "type": "string", + "description": "List of analytics dimensions." + }, + "end-date": { + "type": "string", + "description": "End date." + }, + "filters": { + "type": "string", + "description": "Comma-separated list of dimension or metric filters." + }, + "ids": { + "type": "string", + "description": "Unique table ID." + }, + "max-results": { + "type": "integer", + "description": "Maximum results per page.", + "format": "int32" + }, + "metrics": { + "type": "array", + "description": "List of analytics metrics.", + "items": { + "type": "string" + } + }, + "samplingLevel": { + "type": "string", + "description": "Desired sampling level" + }, + "segment": { + "type": "string", + "description": "Analytics advanced segment." + }, + "sort": { + "type": "array", + "description": "List of dimensions or metrics based on which Analytics data is sorted.", + "items": { + "type": "string" + } + }, + "start-date": { + "type": "string", + "description": "Start date." + }, + "start-index": { + "type": "integer", + "description": "Start index.", + "format": "int32" + } + } + }, + "rows": { + "type": "array", + "description": "Analytics data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "array", + "items": { + "type": "object", + "description": "A union object representing a dimension or metric value. Only one of \"primitiveValue\" or \"conversionPathValue\" attribute will be populated.", + "properties": { + "conversionPathValue": { + "type": "array", + "description": "A conversion path dimension value, containing a list of interactions with their attributes.", + "items": { + "type": "object", + "properties": { + "interactionType": { + "type": "string", + "description": "Type of an interaction on conversion path. Such as CLICK, IMPRESSION etc." + }, + "nodeValue": { + "type": "string", + "description": "Node value of an interaction on conversion path. Such as source, medium etc." + } + } + } + }, + "primitiveValue": { + "type": "string", + "description": "A primitive dimension value. A primitive metric value." + } + } + } + } + }, + "sampleSize": { + "type": "string", + "description": "The number of samples used to calculate the result.", + "format": "int64" + }, + "sampleSpace": { + "type": "string", + "description": "Total size of the sample space from which the samples were selected.", + "format": "int64" + }, + "selfLink": { + "type": "string", + "description": "Link to this page." + }, + "totalResults": { + "type": "integer", + "description": "The total number of rows for the query, regardless of the number of rows in the response.", + "format": "int32" + }, + "totalsForAllResults": { + "type": "object", + "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.", + "additionalProperties": { + "type": "string", + "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric." + } + } + } + }, + "Profile": { + "id": "Profile", + "type": "object", + "description": "JSON template for an Analytics view (profile).", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this view (profile) belongs." + }, + "childLink": { + "type": "object", + "description": "Child link for this view (profile). Points to the list of goals for this view (profile).", + "properties": { + "href": { + "type": "string", + "description": "Link to the list of goals for this view (profile)." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#goals\".", + "default": "analytics#goals" + } + } + }, + "created": { + "type": "string", + "description": "Time this view (profile) was created.", + "format": "date-time", + "readOnly": true + }, + "currency": { + "type": "string", + "description": "The currency type associated with this view (profile). The supported values are:\nARS, AUD, BGN, BRL, CAD, CHF, CNY, CZK, DKK, EUR, GBP, HKD, HUF, IDR, INR, JPY, KRW, LTL, MXN, NOK, NZD, PHP, PLN, RUB, SEK, THB, TRY, TWD, USD, VND, ZAR" + }, + "defaultPage": { + "type": "string", + "description": "Default page for this view (profile)." + }, + "eCommerceTracking": { + "type": "boolean", + "description": "Indicates whether ecommerce tracking is enabled for this view (profile)." + }, + "excludeQueryParameters": { + "type": "string", + "description": "The query parameters that are excluded from this view (profile)." + }, + "id": { + "type": "string", + "description": "View (Profile) ID." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this view (profile) belongs.", + "readOnly": true + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics view (profile).", + "default": "analytics#profile", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of this view (profile)." + }, + "parentLink": { + "type": "object", + "description": "Parent link for this view (profile). Points to the web property to which this view (profile) belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the web property to which this view (profile) belongs." + }, + "type": { + "type": "string", + "description": "Value is \"analytics#webproperty\".", + "default": "analytics#webproperty" + } + } + }, + "permissions": { + "type": "object", + "description": "Permissions the user has for this view (profile).", + "properties": { + "effective": { + "type": "array", + "description": "All the permissions that the user has for this view (profile). These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent web property.", + "readOnly": true, + "items": { + "type": "string" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Link for this view (profile).", + "readOnly": true + }, + "siteSearchCategoryParameters": { + "type": "string", + "description": "Site search category parameters for this view (profile)." + }, + "siteSearchQueryParameters": { + "type": "string", + "description": "The site search query parameters for this view (profile)." + }, + "stripSiteSearchCategoryParameters": { + "type": "boolean", + "description": "Whether or not Analytics will strip search category parameters from the URLs in your reports." + }, + "stripSiteSearchQueryParameters": { + "type": "boolean", + "description": "Whether or not Analytics will strip search query parameters from the URLs in your reports." + }, + "timezone": { + "type": "string", + "description": "Time zone for which this view (profile) has been configured. Time zones are identified by strings from the TZ database." + }, + "type": { + "type": "string", + "description": "View (Profile) type. Supported types: WEB or APP." + }, + "updated": { + "type": "string", + "description": "Time this view (profile) was last modified.", + "format": "date-time", + "readOnly": true + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs.", + "readOnly": true + }, + "websiteUrl": { + "type": "string", + "description": "Website URL for this view (profile)." + } + } + }, + "ProfileRef": { + "id": "ProfileRef", + "type": "object", + "description": "JSON template for a linked view (profile).", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this view (profile) belongs." + }, + "href": { + "type": "string", + "description": "Link for this view (profile)." + }, + "id": { + "type": "string", + "description": "View (Profile) ID." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this view (profile) belongs." + }, + "kind": { + "type": "string", + "description": "Analytics view (profile) reference.", + "default": "analytics#profileRef" + }, + "name": { + "type": "string", + "description": "Name of this view (profile)." + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY to which this view (profile) belongs." + } + } + }, + "ProfileSummary": { + "id": "ProfileSummary", + "type": "object", + "description": "JSON template for an Analytics ProfileSummary. ProfileSummary returns basic information (i.e., summary) for a profile.", + "properties": { + "id": { + "type": "string", + "description": "View (profile) ID." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics ProfileSummary.", + "default": "analytics#profileSummary" + }, + "name": { + "type": "string", + "description": "View (profile) name." + }, + "type": { + "type": "string", + "description": "View (Profile) type. Supported types: WEB or APP." + } + } + }, + "Profiles": { + "id": "Profiles", + "type": "object", + "description": "A view (profile) collection lists Analytics views (profiles) to which the user has access. Each resource in the collection corresponds to a single Analytics view (profile).", + "properties": { + "items": { + "type": "array", + "description": "A list of views (profiles).", + "items": { + "$ref": "Profile" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#profiles" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this view (profile) collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this view (profile) collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "RealtimeData": { + "id": "RealtimeData", + "type": "object", + "description": "Real time data for a given view (profile).", + "properties": { + "columnHeaders": { + "type": "array", + "description": "Column headers that list dimension names followed by the metric names. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "object", + "properties": { + "columnType": { + "type": "string", + "description": "Column Type. Either DIMENSION or METRIC." + }, + "dataType": { + "type": "string", + "description": "Data type. Dimension column headers have only STRING as the data type. Metric column headers have data types for metric values such as INTEGER, DOUBLE, CURRENCY etc." + }, + "name": { + "type": "string", + "description": "Column name." + } + } + } + }, + "id": { + "type": "string", + "description": "Unique ID for this data response." + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "analytics#realtimeData" + }, + "profileInfo": { + "type": "object", + "description": "Information for the view (profile), for which the real time data was requested.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this view (profile) belongs." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for the web property to which this view (profile) belongs." + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID." + }, + "profileName": { + "type": "string", + "description": "View (Profile) name." + }, + "tableId": { + "type": "string", + "description": "Table ID for view (profile)." + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to which this view (profile) belongs." + } + } + }, + "query": { + "type": "object", + "description": "Real time data request query parameters.", + "properties": { + "dimensions": { + "type": "string", + "description": "List of real time dimensions." + }, + "filters": { + "type": "string", + "description": "Comma-separated list of dimension or metric filters." + }, + "ids": { + "type": "string", + "description": "Unique table ID." + }, + "max-results": { + "type": "integer", + "description": "Maximum results per page.", + "format": "int32" + }, + "metrics": { + "type": "array", + "description": "List of real time metrics.", + "items": { + "type": "string" + } + }, + "sort": { + "type": "array", + "description": "List of dimensions or metrics based on which real time data is sorted.", + "items": { + "type": "string" + } + } + } + }, + "rows": { + "type": "array", + "description": "Real time data rows, where each row contains a list of dimension values followed by the metric values. The order of dimensions and metrics is same as specified in the request.", + "items": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "selfLink": { + "type": "string", + "description": "Link to this page." + }, + "totalResults": { + "type": "integer", + "description": "The total number of rows for the query, regardless of the number of rows in the response.", + "format": "int32" + }, + "totalsForAllResults": { + "type": "object", + "description": "Total values for the requested metrics over all the results, not just the results returned in this response. The order of the metric totals is same as the metric order specified in the request.", + "additionalProperties": { + "type": "string", + "description": "Key-value pair for the total value of a metric. Key is the metric name and the value is the total value for that metric." + } + } + } + }, + "Segment": { + "id": "Segment", + "type": "object", + "description": "JSON template for an Analytics segment.", + "properties": { + "created": { + "type": "string", + "description": "Time the segment was created.", + "format": "date-time" + }, + "definition": { + "type": "string", + "description": "Segment definition." + }, + "id": { + "type": "string", + "description": "Segment ID." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics segment.", + "default": "analytics#segment" + }, + "name": { + "type": "string", + "description": "Segment name." + }, + "segmentId": { + "type": "string", + "description": "Segment ID. Can be used with the 'segment' parameter in Core Reporting API." + }, + "selfLink": { + "type": "string", + "description": "Link for this segment." + }, + "type": { + "type": "string", + "description": "Type for a segment. Possible values are \"BUILT_IN\" or \"CUSTOM\"." + }, + "updated": { + "type": "string", + "description": "Time the segment was last modified.", + "format": "date-time" + } + } + }, + "Segments": { + "id": "Segments", + "type": "object", + "description": "An segment collection lists Analytics segments that the user has access to. Each resource in the collection corresponds to a single Analytics segment.", + "properties": { + "items": { + "type": "array", + "description": "A list of segments.", + "items": { + "$ref": "Segment" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type for segments.", + "default": "analytics#segments" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this segment collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this segment collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "Upload": { + "id": "Upload", + "type": "object", + "description": "Metadata returned for an upload operation.", + "properties": { + "accountId": { + "type": "string", + "description": "Account Id to which this upload belongs.", + "format": "int64" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id to which this data import belongs." + }, + "errors": { + "type": "array", + "description": "Data import errors collection.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "A unique ID for this upload." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics upload.", + "default": "analytics#upload" + }, + "status": { + "type": "string", + "description": "Upload status. Possible values: PENDING, COMPLETED, FAILED, DELETING, DELETED." + } + } + }, + "Uploads": { + "id": "Uploads", + "type": "object", + "description": "Upload collection lists Analytics uploads to which the user has access. Each custom data source can have a set of uploads. Each resource in the upload collection corresponds to a single Analytics data upload.", + "properties": { + "items": { + "type": "array", + "description": "A list of uploads.", + "items": { + "$ref": "Upload" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#uploads" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this upload collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this upload collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of resources in the result.", + "format": "int32" + } + } + }, + "UserRef": { + "id": "UserRef", + "type": "object", + "description": "JSON template for a user reference.", + "properties": { + "email": { + "type": "string", + "description": "Email ID of this user." + }, + "id": { + "type": "string", + "description": "User ID." + }, + "kind": { + "type": "string", + "default": "analytics#userRef" + } + } + }, + "WebPropertyRef": { + "id": "WebPropertyRef", + "type": "object", + "description": "JSON template for a web property reference.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this web property belongs." + }, + "href": { + "type": "string", + "description": "Link for this web property." + }, + "id": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for this web property." + }, + "kind": { + "type": "string", + "description": "Analytics web property reference.", + "default": "analytics#webPropertyRef" + }, + "name": { + "type": "string", + "description": "Name of this web property." + } + } + }, + "WebPropertySummary": { + "id": "WebPropertySummary", + "type": "object", + "description": "JSON template for an Analytics WebPropertySummary. WebPropertySummary returns basic information (i.e., summary) for a web property.", + "properties": { + "id": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for this web property." + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics WebPropertySummary.", + "default": "analytics#webPropertySummary" + }, + "level": { + "type": "string", + "description": "Level for this web property. Possible values are STANDARD or PREMIUM." + }, + "name": { + "type": "string", + "description": "Web property name." + }, + "profiles": { + "type": "array", + "description": "List of profiles under this web property.", + "items": { + "$ref": "ProfileSummary" + } + }, + "websiteUrl": { + "type": "string", + "description": "Website url for this web property." + } + } + }, + "Webproperties": { + "id": "Webproperties", + "type": "object", + "description": "A web property collection lists Analytics web properties to which the user has access. Each resource in the collection corresponds to a single Analytics web property.", + "properties": { + "items": { + "type": "array", + "description": "A list of web properties.", + "items": { + "$ref": "Webproperty" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "The maximum number of resources the response can contain, regardless of the actual number of resources returned. Its value ranges from 1 to 1000 with a value of 1000 by default, or otherwise specified by the max-results query parameter.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Collection type.", + "default": "analytics#webproperties" + }, + "nextLink": { + "type": "string", + "description": "Link to next page for this web property collection." + }, + "previousLink": { + "type": "string", + "description": "Link to previous page for this web property collection." + }, + "startIndex": { + "type": "integer", + "description": "The starting index of the resources, which is 1 by default or otherwise specified by the start-index query parameter.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results for the query, regardless of the number of results in the response.", + "format": "int32" + }, + "username": { + "type": "string", + "description": "Email ID of the authenticated user" + } + } + }, + "Webproperty": { + "id": "Webproperty", + "type": "object", + "description": "JSON template for an Analytics web property.", + "properties": { + "accountId": { + "type": "string", + "description": "Account ID to which this web property belongs." + }, + "childLink": { + "type": "object", + "description": "Child link for this web property. Points to the list of views (profiles) for this web property.", + "properties": { + "href": { + "type": "string", + "description": "Link to the list of views (profiles) for this web property." + }, + "type": { + "type": "string", + "description": "Type of the parent link. Its value is \"analytics#profiles\".", + "default": "analytics#profiles" + } + } + }, + "created": { + "type": "string", + "description": "Time this web property was created.", + "format": "date-time", + "readOnly": true + }, + "defaultProfileId": { + "type": "string", + "description": "Default view (profile) ID.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Web property ID of the form UA-XXXXX-YY." + }, + "industryVertical": { + "type": "string", + "description": "The industry vertical/category selected for this web property." + }, + "internalWebPropertyId": { + "type": "string", + "description": "Internal ID for this web property.", + "readOnly": true + }, + "kind": { + "type": "string", + "description": "Resource type for Analytics WebProperty.", + "default": "analytics#webproperty", + "readOnly": true + }, + "level": { + "type": "string", + "description": "Level for this web property. Possible values are STANDARD or PREMIUM.", + "readOnly": true + }, + "name": { + "type": "string", + "description": "Name of this web property." + }, + "parentLink": { + "type": "object", + "description": "Parent link for this web property. Points to the account to which this web property belongs.", + "properties": { + "href": { + "type": "string", + "description": "Link to the account for this web property." + }, + "type": { + "type": "string", + "description": "Type of the parent link. Its value is \"analytics#account\".", + "default": "analytics#account" + } + } + }, + "permissions": { + "type": "object", + "description": "Permissions the user has for this web property.", + "properties": { + "effective": { + "type": "array", + "description": "All the permissions that the user has for this web property. These include any implied permissions (e.g., EDIT implies VIEW) or inherited permissions from the parent account.", + "readOnly": true, + "items": { + "type": "string" + } + } + } + }, + "profileCount": { + "type": "integer", + "description": "View (Profile) count for this web property.", + "format": "int32", + "readOnly": true + }, + "selfLink": { + "type": "string", + "description": "Link for this web property.", + "readOnly": true + }, + "updated": { + "type": "string", + "description": "Time this web property was last modified.", + "format": "date-time", + "readOnly": true + }, + "websiteUrl": { + "type": "string", + "description": "Website url for this web property." + } + } + } + }, + "resources": { + "data": { + "resources": { + "ga": { + "methods": { + "get": { + "id": "analytics.data.ga.get", + "path": "data/ga", + "httpMethod": "GET", + "description": "Returns Analytics data for a view (profile).", + "parameters": { + "dimensions": { + "type": "string", + "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.", + "pattern": "(ga:.+)?", + "location": "query" + }, + "end-date": { + "type": "string", + "description": "End date for fetching Analytics data. Request can should specify an end date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is yesterday.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + "location": "query" + }, + "filters": { + "type": "string", + "description": "A comma-separated list of dimension or metric filters to be applied to Analytics data.", + "pattern": "ga:.+", + "location": "query" + }, + "ids": { + "type": "string", + "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + "required": true, + "pattern": "ga:[0-9]+", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of entries to include in this feed.", + "format": "int32", + "location": "query" + }, + "metrics": { + "type": "string", + "description": "A comma-separated list of Analytics metrics. E.g., 'ga:visits,ga:pageviews'. At least one metric must be specified.", + "required": true, + "pattern": "ga:.+", + "location": "query" + }, + "output": { + "type": "string", + "description": "The selected format for the response. Default format is JSON.", + "enum": [ + "dataTable", + "json" + ], + "enumDescriptions": [ + "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.", + "Returns the response in standard JSON format." + ], + "location": "query" + }, + "samplingLevel": { + "type": "string", + "description": "The desired sampling level.", + "enum": [ + "DEFAULT", + "FASTER", + "HIGHER_PRECISION" + ], + "enumDescriptions": [ + "Returns response with a sample size that balances speed and accuracy.", + "Returns a fast response with a smaller sample size.", + "Returns a more accurate response using a large sample size, but this may result in the response being slower." + ], + "location": "query" + }, + "segment": { + "type": "string", + "description": "An Analytics segment to be applied to data.", + "location": "query" + }, + "sort": { + "type": "string", + "description": "A comma-separated list of dimensions or metrics that determine the sort order for Analytics data.", + "pattern": "(-)?ga:.+", + "location": "query" + }, + "start-date": { + "type": "string", + "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "ids", + "start-date", + "end-date", + "metrics" + ], + "response": { + "$ref": "GaData" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "mcf": { + "methods": { + "get": { + "id": "analytics.data.mcf.get", + "path": "data/mcf", + "httpMethod": "GET", + "description": "Returns Analytics Multi-Channel Funnels data for a view (profile).", + "parameters": { + "dimensions": { + "type": "string", + "description": "A comma-separated list of Multi-Channel Funnels dimensions. E.g., 'mcf:source,mcf:medium'.", + "pattern": "(mcf:.+)?", + "location": "query" + }, + "end-date": { + "type": "string", + "description": "End date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + "location": "query" + }, + "filters": { + "type": "string", + "description": "A comma-separated list of dimension or metric filters to be applied to the Analytics data.", + "pattern": "mcf:.+", + "location": "query" + }, + "ids": { + "type": "string", + "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + "required": true, + "pattern": "ga:[0-9]+", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of entries to include in this feed.", + "format": "int32", + "location": "query" + }, + "metrics": { + "type": "string", + "description": "A comma-separated list of Multi-Channel Funnels metrics. E.g., 'mcf:totalConversions,mcf:totalConversionValue'. At least one metric must be specified.", + "required": true, + "pattern": "mcf:.+", + "location": "query" + }, + "samplingLevel": { + "type": "string", + "description": "The desired sampling level.", + "enum": [ + "DEFAULT", + "FASTER", + "HIGHER_PRECISION" + ], + "enumDescriptions": [ + "Returns response with a sample size that balances speed and accuracy.", + "Returns a fast response with a smaller sample size.", + "Returns a more accurate response using a large sample size, but this may result in the response being slower." + ], + "location": "query" + }, + "sort": { + "type": "string", + "description": "A comma-separated list of dimensions or metrics that determine the sort order for the Analytics data.", + "pattern": "(-)?mcf:.+", + "location": "query" + }, + "start-date": { + "type": "string", + "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "ids", + "start-date", + "end-date", + "metrics" + ], + "response": { + "$ref": "McfData" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "realtime": { + "methods": { + "get": { + "id": "analytics.data.realtime.get", + "path": "data/realtime", + "httpMethod": "GET", + "description": "Returns real time data for a view (profile).", + "parameters": { + "dimensions": { + "type": "string", + "description": "A comma-separated list of real time dimensions. E.g., 'rt:medium,rt:city'.", + "pattern": "(ga:.+)|(rt:.+)", + "location": "query" + }, + "filters": { + "type": "string", + "description": "A comma-separated list of dimension or metric filters to be applied to real time data.", + "pattern": "(ga:.+)|(rt:.+)", + "location": "query" + }, + "ids": { + "type": "string", + "description": "Unique table ID for retrieving real time data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + "required": true, + "pattern": "ga:[0-9]+", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of entries to include in this feed.", + "format": "int32", + "location": "query" + }, + "metrics": { + "type": "string", + "description": "A comma-separated list of real time metrics. E.g., 'rt:activeVisitors'. At least one metric must be specified.", + "required": true, + "pattern": "(ga:.+)|(rt:.+)", + "location": "query" + }, + "sort": { + "type": "string", + "description": "A comma-separated list of dimensions or metrics that determine the sort order for real time data.", + "pattern": "(-)?((ga:.+)|(rt:.+))", + "location": "query" + } + }, + "parameterOrder": [ + "ids", + "metrics" + ], + "response": { + "$ref": "RealtimeData" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + } + } + }, + "management": { + "resources": { + "accountSummaries": { + "methods": { + "list": { + "id": "analytics.management.accountSummaries.list", + "path": "management/accountSummaries", + "httpMethod": "GET", + "description": "Lists account summaries (lightweight tree comprised of accounts/properties/profiles) to which the user has access.", + "parameters": { + "max-results": { + "type": "integer", + "description": "The maximum number of filters to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "response": { + "$ref": "AccountSummaries" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "accountUserLinks": { + "methods": { + "delete": { + "id": "analytics.management.accountUserLinks.delete", + "path": "management/accounts/{accountId}/entityUserLinks/{linkId}", + "httpMethod": "DELETE", + "description": "Removes a user from the given account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to delete the user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to delete the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "linkId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "insert": { + "id": "analytics.management.accountUserLinks.insert", + "path": "management/accounts/{accountId}/entityUserLinks", + "httpMethod": "POST", + "description": "Adds a new user to the given account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "list": { + "id": "analytics.management.accountUserLinks.list", + "path": "management/accounts/{accountId}/entityUserLinks", + "httpMethod": "GET", + "description": "Lists account-user links for a given account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve the user links for.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of account-user links to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first account-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "EntityUserLinks" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "update": { + "id": "analytics.management.accountUserLinks.update", + "path": "management/accounts/{accountId}/entityUserLinks/{linkId}", + "httpMethod": "PUT", + "description": "Updates permissions for an existing user on the given account.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to update the account-user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to update the account-user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "linkId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + } + } + }, + "accounts": { + "methods": { + "list": { + "id": "analytics.management.accounts.list", + "path": "management/accounts", + "httpMethod": "GET", + "description": "Lists all accounts to which the user has access.", + "parameters": { + "max-results": { + "type": "integer", + "description": "The maximum number of accounts to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "response": { + "$ref": "Accounts" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "customDataSources": { + "methods": { + "list": { + "id": "analytics.management.customDataSources.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources", + "httpMethod": "GET", + "description": "List custom data sources to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id for the custom data sources to retrieve.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of custom data sources to include in this response.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "A 1-based index of the first custom data source to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id for the custom data sources to retrieve.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "response": { + "$ref": "CustomDataSources" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "dailyUploads": { + "methods": { + "delete": { + "id": "analytics.management.dailyUploads.delete", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}", + "httpMethod": "DELETE", + "description": "Delete uploaded data for the given date.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id associated with daily upload delete.", + "required": true, + "pattern": "[0-9]+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id associated with daily upload delete.", + "required": true, + "location": "path" + }, + "date": { + "type": "string", + "description": "Date for which data is to be deleted. Date should be formatted as YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "path" + }, + "type": { + "type": "string", + "description": "Type of data for this delete.", + "required": true, + "enum": [ + "cost" + ], + "enumDescriptions": [ + "Value for specifying cost data upload." + ], + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id associated with daily upload delete.", + "required": true, + "pattern": "UA-[0-9]+-[0-9]+", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId", + "date", + "type" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "list": { + "id": "analytics.management.dailyUploads.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads", + "httpMethod": "GET", + "description": "List daily uploads to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id for the daily uploads to retrieve.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id for daily uploads to retrieve.", + "required": true, + "pattern": ".{22}", + "location": "path" + }, + "end-date": { + "type": "string", + "description": "End date of the form YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of custom data sources to include in this response.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "start-date": { + "type": "string", + "description": "Start date of the form YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "A 1-based index of the first daily upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id for the daily uploads to retrieve.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId", + "start-date", + "end-date" + ], + "response": { + "$ref": "DailyUploads" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "upload": { + "id": "analytics.management.dailyUploads.upload", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads", + "httpMethod": "POST", + "description": "Update/Overwrite data for a custom data source.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id associated with daily upload.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "appendNumber": { + "type": "integer", + "description": "Append number for this upload indexed from 1.", + "required": true, + "format": "int32", + "minimum": "1", + "maximum": "20", + "location": "query" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id to which the data being uploaded belongs.", + "required": true, + "location": "path" + }, + "date": { + "type": "string", + "description": "Date for which data is uploaded. Date should be formatted as YYYY-MM-DD.", + "required": true, + "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + "location": "path" + }, + "reset": { + "type": "boolean", + "description": "Reset/Overwrite all previous appends for this date and start over with this file as the first upload.", + "default": "false", + "location": "query" + }, + "type": { + "type": "string", + "description": "Type of data for this upload.", + "required": true, + "enum": [ + "cost" + ], + "enumDescriptions": [ + "Value for specifying cost data upload." + ], + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id associated with daily upload.", + "required": true, + "pattern": "UA-\\d+-\\d+", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId", + "date", + "appendNumber", + "type" + ], + "response": { + "$ref": "DailyUploadAppend" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream" + ], + "maxSize": "5MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads" + } + } + } + } + } + }, + "experiments": { + "methods": { + "delete": { + "id": "analytics.management.experiments.delete", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + "httpMethod": "DELETE", + "description": "Delete an experiment.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to which the experiment belongs", + "required": true, + "location": "path" + }, + "experimentId": { + "type": "string", + "description": "ID of the experiment to delete", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to which the experiment belongs", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to which the experiment belongs", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "experimentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "get": { + "id": "analytics.management.experiments.get", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + "httpMethod": "GET", + "description": "Returns an experiment to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve the experiment for.", + "required": true, + "location": "path" + }, + "experimentId": { + "type": "string", + "description": "Experiment ID to retrieve the experiment for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve the experiment for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve the experiment for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "experimentId" + ], + "response": { + "$ref": "Experiment" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "insert": { + "id": "analytics.management.experiments.insert", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", + "httpMethod": "POST", + "description": "Create a new experiment.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the experiment for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to create the experiment for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to create the experiment for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "request": { + "$ref": "Experiment" + }, + "response": { + "$ref": "Experiment" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "list": { + "id": "analytics.management.experiments.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", + "httpMethod": "GET", + "description": "Lists experiments to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve experiments for.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of experiments to include in this response.", + "format": "int32", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve experiments for.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "An index of the first experiment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve experiments for.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "response": { + "$ref": "Experiments" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "patch": { + "id": "analytics.management.experiments.patch", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + "httpMethod": "PATCH", + "description": "Update an existing experiment. This method supports patch semantics.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID of the experiment to update.", + "required": true, + "location": "path" + }, + "experimentId": { + "type": "string", + "description": "Experiment ID of the experiment to update.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID of the experiment to update.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the experiment to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "experimentId" + ], + "request": { + "$ref": "Experiment" + }, + "response": { + "$ref": "Experiment" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "update": { + "id": "analytics.management.experiments.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + "httpMethod": "PUT", + "description": "Update an existing experiment.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID of the experiment to update.", + "required": true, + "location": "path" + }, + "experimentId": { + "type": "string", + "description": "Experiment ID of the experiment to update.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID of the experiment to update.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID of the experiment to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "experimentId" + ], + "request": { + "$ref": "Experiment" + }, + "response": { + "$ref": "Experiment" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + } + } + }, + "goals": { + "methods": { + "get": { + "id": "analytics.management.goals.get", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + "httpMethod": "GET", + "description": "Gets a goal to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve the goal for.", + "required": true, + "location": "path" + }, + "goalId": { + "type": "string", + "description": "Goal ID to retrieve the goal for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve the goal for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve the goal for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "goalId" + ], + "response": { + "$ref": "Goal" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "insert": { + "id": "analytics.management.goals.insert", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + "httpMethod": "POST", + "description": "Create a new goal.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the goal for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to create the goal for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to create the goal for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "request": { + "$ref": "Goal" + }, + "response": { + "$ref": "Goal" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "list": { + "id": "analytics.management.goals.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + "httpMethod": "GET", + "description": "Lists goals to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of goals to include in this response.", + "format": "int32", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to.", + "required": true, + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "response": { + "$ref": "Goals" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "patch": { + "id": "analytics.management.goals.patch", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + "httpMethod": "PATCH", + "description": "Updates an existing view (profile). This method supports patch semantics.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to update the goal.", + "required": true, + "location": "path" + }, + "goalId": { + "type": "string", + "description": "Index of the goal to be updated.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to update the goal.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to update the goal.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "goalId" + ], + "request": { + "$ref": "Goal" + }, + "response": { + "$ref": "Goal" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "update": { + "id": "analytics.management.goals.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + "httpMethod": "PUT", + "description": "Updates an existing view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to update the goal.", + "required": true, + "location": "path" + }, + "goalId": { + "type": "string", + "description": "Index of the goal to be updated.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to update the goal.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to update the goal.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "goalId" + ], + "request": { + "$ref": "Goal" + }, + "response": { + "$ref": "Goal" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + } + } + }, + "profileUserLinks": { + "methods": { + "delete": { + "id": "analytics.management.profileUserLinks.delete", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", + "httpMethod": "DELETE", + "description": "Removes a user from the given view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to delete the user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to delete the user link for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to delete the user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to delete the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "linkId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "insert": { + "id": "analytics.management.profileUserLinks.insert", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", + "httpMethod": "POST", + "description": "Adds a new user to the given view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the user link for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to create the user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to create the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "list": { + "id": "analytics.management.profileUserLinks.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", + "httpMethod": "GET", + "description": "Lists profile-user links for a given view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID which the given view (profile) belongs to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of profile-user links to include in this response.", + "format": "int32", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve the profile-user links for", + "required": true, + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "An index of the first profile-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID which the given view (profile) belongs to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "response": { + "$ref": "EntityUserLinks" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "update": { + "id": "analytics.management.profileUserLinks.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", + "httpMethod": "PUT", + "description": "Updates permissions for an existing user on the given view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to update the user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to update the user link for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile ID) to update the user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to update the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId", + "linkId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + } + } + }, + "profiles": { + "methods": { + "delete": { + "id": "analytics.management.profiles.delete", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + "httpMethod": "DELETE", + "description": "Deletes a view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to delete the view (profile) for.", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "ID of the view (profile) to be deleted.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to delete the view (profile) for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "get": { + "id": "analytics.management.profiles.get", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + "httpMethod": "GET", + "description": "Gets a view (profile) to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve the goal for.", + "required": true, + "pattern": "[0-9]+", + "location": "path" + }, + "profileId": { + "type": "string", + "description": "View (Profile) ID to retrieve the goal for.", + "required": true, + "pattern": "[0-9]+", + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to retrieve the goal for.", + "required": true, + "pattern": "UA-[0-9]+-[0-9]+", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "insert": { + "id": "analytics.management.profiles.insert", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + "httpMethod": "POST", + "description": "Create a new view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the view (profile) for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to create the view (profile) for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "request": { + "$ref": "Profile" + }, + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "list": { + "id": "analytics.management.profiles.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + "httpMethod": "GET", + "description": "Lists views (profiles) to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID for the view (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of views (profiles) to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "response": { + "$ref": "Profiles" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "patch": { + "id": "analytics.management.profiles.patch", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + "httpMethod": "PATCH", + "description": "Updates an existing view (profile). This method supports patch semantics.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to which the view (profile) belongs", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "ID of the view (profile) to be updated.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to which the view (profile) belongs", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "request": { + "$ref": "Profile" + }, + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "update": { + "id": "analytics.management.profiles.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + "httpMethod": "PUT", + "description": "Updates an existing view (profile).", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to which the view (profile) belongs", + "required": true, + "location": "path" + }, + "profileId": { + "type": "string", + "description": "ID of the view (profile) to be updated.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to which the view (profile) belongs", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "profileId" + ], + "request": { + "$ref": "Profile" + }, + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + } + } + }, + "segments": { + "methods": { + "list": { + "id": "analytics.management.segments.list", + "path": "management/segments", + "httpMethod": "GET", + "description": "Lists segments to which the user has access.", + "parameters": { + "max-results": { + "type": "integer", + "description": "The maximum number of segments to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "response": { + "$ref": "Segments" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + }, + "uploads": { + "methods": { + "deleteUploadData": { + "id": "analytics.management.uploads.deleteUploadData", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData", + "httpMethod": "POST", + "description": "Delete data associated with a previous upload.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id for the uploads to be deleted.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id for the uploads to be deleted.", + "required": true, + "pattern": ".{22}", + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id for the uploads to be deleted.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId" + ], + "request": { + "$ref": "AnalyticsDataimportDeleteUploadDataRequest" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "get": { + "id": "analytics.management.uploads.get", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}", + "httpMethod": "GET", + "description": "List uploads to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id for the upload to retrieve.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id for upload to retrieve.", + "required": true, + "pattern": ".{22}", + "location": "path" + }, + "uploadId": { + "type": "string", + "description": "Upload Id to retrieve.", + "required": true, + "pattern": ".{22}", + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id for the upload to retrieve.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId", + "uploadId" + ], + "response": { + "$ref": "Upload" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "list": { + "id": "analytics.management.uploads.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", + "httpMethod": "GET", + "description": "List uploads to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id for the uploads to retrieve.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id for uploads to retrieve.", + "required": true, + "pattern": ".{22}", + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of uploads to include in this response.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "A 1-based index of the first upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web property Id for the uploads to retrieve.", + "required": true, + "pattern": "UA-(\\d+)-(\\d+)", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId" + ], + "response": { + "$ref": "Uploads" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "uploadData": { + "id": "analytics.management.uploads.uploadData", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", + "httpMethod": "POST", + "description": "Upload data for a custom data source.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account Id associated with the upload.", + "required": true, + "pattern": "\\d+", + "location": "path" + }, + "customDataSourceId": { + "type": "string", + "description": "Custom data source Id to which the data being uploaded belongs.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property UA-string associated with the upload.", + "required": true, + "pattern": "UA-\\d+-\\d+", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "customDataSourceId" + ], + "response": { + "$ref": "Upload" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream" + ], + "maxSize": "1GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads" + } + } + } + } + } + }, + "webproperties": { + "methods": { + "get": { + "id": "analytics.management.webproperties.get", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + "httpMethod": "GET", + "description": "Gets a web property to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve the web property for.", + "required": true, + "pattern": "[0-9]+", + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "ID to retrieve the web property for.", + "required": true, + "pattern": "UA-[0-9]+-[0-9]+", + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "response": { + "$ref": "Webproperty" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "insert": { + "id": "analytics.management.webproperties.insert", + "path": "management/accounts/{accountId}/webproperties", + "httpMethod": "POST", + "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the web property for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId" + ], + "request": { + "$ref": "Webproperty" + }, + "response": { + "$ref": "Webproperty" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "list": { + "id": "analytics.management.webproperties.list", + "path": "management/accounts/{accountId}/webproperties", + "httpMethod": "GET", + "description": "Lists web properties to which the user has access.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of web properties to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "accountId" + ], + "response": { + "$ref": "Webproperties" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + }, + "patch": { + "id": "analytics.management.webproperties.patch", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + "httpMethod": "PATCH", + "description": "Updates an existing web property. This method supports patch semantics.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to which the web property belongs", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "request": { + "$ref": "Webproperty" + }, + "response": { + "$ref": "Webproperty" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + }, + "update": { + "id": "analytics.management.webproperties.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + "httpMethod": "PUT", + "description": "Updates an existing web property.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to which the web property belongs", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "request": { + "$ref": "Webproperty" + }, + "response": { + "$ref": "Webproperty" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.edit" + ] + } + } + }, + "webpropertyUserLinks": { + "methods": { + "delete": { + "id": "analytics.management.webpropertyUserLinks.delete", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", + "httpMethod": "DELETE", + "description": "Removes a user from the given web property.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to delete the user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to delete the user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to delete the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "linkId" + ], + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "insert": { + "id": "analytics.management.webpropertyUserLinks.insert", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", + "httpMethod": "POST", + "description": "Adds a new user to the given web property.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to create the user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID to create the user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "list": { + "id": "analytics.management.webpropertyUserLinks.list", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", + "httpMethod": "GET", + "description": "Lists webProperty-user links for a given web property.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID which the given web property belongs to.", + "required": true, + "location": "path" + }, + "max-results": { + "type": "integer", + "description": "The maximum number of webProperty-user Links to include in this response.", + "format": "int32", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "An index of the first webProperty-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "webPropertyId": { + "type": "string", + "description": "Web Property ID for the webProperty-user links to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId" + ], + "response": { + "$ref": "EntityUserLinks" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + }, + "update": { + "id": "analytics.management.webpropertyUserLinks.update", + "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", + "httpMethod": "PUT", + "description": "Updates permissions for an existing user on the given web property.", + "parameters": { + "accountId": { + "type": "string", + "description": "Account ID to update the account-user link for.", + "required": true, + "location": "path" + }, + "linkId": { + "type": "string", + "description": "Link ID to update the account-user link for.", + "required": true, + "location": "path" + }, + "webPropertyId": { + "type": "string", + "description": "Web property ID to update the account-user link for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "accountId", + "webPropertyId", + "linkId" + ], + "request": { + "$ref": "EntityUserLink" + }, + "response": { + "$ref": "EntityUserLink" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics.manage.users" + ] + } + } + } + } + }, + "metadata": { + "resources": { + "columns": { + "methods": { + "list": { + "id": "analytics.metadata.columns.list", + "path": "metadata/{reportType}/columns", + "httpMethod": "GET", + "description": "Lists all columns for a report type", + "parameters": { + "reportType": { + "type": "string", + "description": "Report type. Allowed Values: 'ga'. Where 'ga' corresponds to the Core Reporting API", + "required": true, + "pattern": "ga", + "location": "path" + } + }, + "parameterOrder": [ + "reportType" + ], + "response": { + "$ref": "Columns" + }, + "scopes": [ + "https://www.googleapis.com/auth/analytics", + "https://www.googleapis.com/auth/analytics.edit", + "https://www.googleapis.com/auth/analytics.readonly" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-gen.go b/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-gen.go new file mode 100644 index 0000000000000..887cf13ba6b76 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/analytics/v3/analytics-gen.go @@ -0,0 +1,7113 @@ +// Package analytics provides access to the Google Analytics API. +// +// See https://developers.google.com/analytics/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/analytics/v3" +// ... +// analyticsService, err := analytics.New(oauthHttpClient) +package analytics + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "analytics:v3" +const apiName = "analytics" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/analytics/v3/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Analytics data + AnalyticsScope = "https://www.googleapis.com/auth/analytics" + + // Edit Google Analytics management entities + AnalyticsEditScope = "https://www.googleapis.com/auth/analytics.edit" + + // Manage Google Analytics Account users by email address + AnalyticsManageUsersScope = "https://www.googleapis.com/auth/analytics.manage.users" + + // View your Google Analytics data + AnalyticsReadonlyScope = "https://www.googleapis.com/auth/analytics.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Data = NewDataService(s) + s.Management = NewManagementService(s) + s.Metadata = NewMetadataService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Data *DataService + + Management *ManagementService + + Metadata *MetadataService +} + +func NewDataService(s *Service) *DataService { + rs := &DataService{s: s} + rs.Ga = NewDataGaService(s) + rs.Mcf = NewDataMcfService(s) + rs.Realtime = NewDataRealtimeService(s) + return rs +} + +type DataService struct { + s *Service + + Ga *DataGaService + + Mcf *DataMcfService + + Realtime *DataRealtimeService +} + +func NewDataGaService(s *Service) *DataGaService { + rs := &DataGaService{s: s} + return rs +} + +type DataGaService struct { + s *Service +} + +func NewDataMcfService(s *Service) *DataMcfService { + rs := &DataMcfService{s: s} + return rs +} + +type DataMcfService struct { + s *Service +} + +func NewDataRealtimeService(s *Service) *DataRealtimeService { + rs := &DataRealtimeService{s: s} + return rs +} + +type DataRealtimeService struct { + s *Service +} + +func NewManagementService(s *Service) *ManagementService { + rs := &ManagementService{s: s} + rs.AccountSummaries = NewManagementAccountSummariesService(s) + rs.AccountUserLinks = NewManagementAccountUserLinksService(s) + rs.Accounts = NewManagementAccountsService(s) + rs.CustomDataSources = NewManagementCustomDataSourcesService(s) + rs.DailyUploads = NewManagementDailyUploadsService(s) + rs.Experiments = NewManagementExperimentsService(s) + rs.Goals = NewManagementGoalsService(s) + rs.ProfileUserLinks = NewManagementProfileUserLinksService(s) + rs.Profiles = NewManagementProfilesService(s) + rs.Segments = NewManagementSegmentsService(s) + rs.Uploads = NewManagementUploadsService(s) + rs.Webproperties = NewManagementWebpropertiesService(s) + rs.WebpropertyUserLinks = NewManagementWebpropertyUserLinksService(s) + return rs +} + +type ManagementService struct { + s *Service + + AccountSummaries *ManagementAccountSummariesService + + AccountUserLinks *ManagementAccountUserLinksService + + Accounts *ManagementAccountsService + + CustomDataSources *ManagementCustomDataSourcesService + + DailyUploads *ManagementDailyUploadsService + + Experiments *ManagementExperimentsService + + Goals *ManagementGoalsService + + ProfileUserLinks *ManagementProfileUserLinksService + + Profiles *ManagementProfilesService + + Segments *ManagementSegmentsService + + Uploads *ManagementUploadsService + + Webproperties *ManagementWebpropertiesService + + WebpropertyUserLinks *ManagementWebpropertyUserLinksService +} + +func NewManagementAccountSummariesService(s *Service) *ManagementAccountSummariesService { + rs := &ManagementAccountSummariesService{s: s} + return rs +} + +type ManagementAccountSummariesService struct { + s *Service +} + +func NewManagementAccountUserLinksService(s *Service) *ManagementAccountUserLinksService { + rs := &ManagementAccountUserLinksService{s: s} + return rs +} + +type ManagementAccountUserLinksService struct { + s *Service +} + +func NewManagementAccountsService(s *Service) *ManagementAccountsService { + rs := &ManagementAccountsService{s: s} + return rs +} + +type ManagementAccountsService struct { + s *Service +} + +func NewManagementCustomDataSourcesService(s *Service) *ManagementCustomDataSourcesService { + rs := &ManagementCustomDataSourcesService{s: s} + return rs +} + +type ManagementCustomDataSourcesService struct { + s *Service +} + +func NewManagementDailyUploadsService(s *Service) *ManagementDailyUploadsService { + rs := &ManagementDailyUploadsService{s: s} + return rs +} + +type ManagementDailyUploadsService struct { + s *Service +} + +func NewManagementExperimentsService(s *Service) *ManagementExperimentsService { + rs := &ManagementExperimentsService{s: s} + return rs +} + +type ManagementExperimentsService struct { + s *Service +} + +func NewManagementGoalsService(s *Service) *ManagementGoalsService { + rs := &ManagementGoalsService{s: s} + return rs +} + +type ManagementGoalsService struct { + s *Service +} + +func NewManagementProfileUserLinksService(s *Service) *ManagementProfileUserLinksService { + rs := &ManagementProfileUserLinksService{s: s} + return rs +} + +type ManagementProfileUserLinksService struct { + s *Service +} + +func NewManagementProfilesService(s *Service) *ManagementProfilesService { + rs := &ManagementProfilesService{s: s} + return rs +} + +type ManagementProfilesService struct { + s *Service +} + +func NewManagementSegmentsService(s *Service) *ManagementSegmentsService { + rs := &ManagementSegmentsService{s: s} + return rs +} + +type ManagementSegmentsService struct { + s *Service +} + +func NewManagementUploadsService(s *Service) *ManagementUploadsService { + rs := &ManagementUploadsService{s: s} + return rs +} + +type ManagementUploadsService struct { + s *Service +} + +func NewManagementWebpropertiesService(s *Service) *ManagementWebpropertiesService { + rs := &ManagementWebpropertiesService{s: s} + return rs +} + +type ManagementWebpropertiesService struct { + s *Service +} + +func NewManagementWebpropertyUserLinksService(s *Service) *ManagementWebpropertyUserLinksService { + rs := &ManagementWebpropertyUserLinksService{s: s} + return rs +} + +type ManagementWebpropertyUserLinksService struct { + s *Service +} + +func NewMetadataService(s *Service) *MetadataService { + rs := &MetadataService{s: s} + rs.Columns = NewMetadataColumnsService(s) + return rs +} + +type MetadataService struct { + s *Service + + Columns *MetadataColumnsService +} + +func NewMetadataColumnsService(s *Service) *MetadataColumnsService { + rs := &MetadataColumnsService{s: s} + return rs +} + +type MetadataColumnsService struct { + s *Service +} + +type Account struct { + // ChildLink: Child link for an account entry. Points to the list of web + // properties for this account. + ChildLink *AccountChildLink `json:"childLink,omitempty"` + + // Created: Time the account was created. + Created string `json:"created,omitempty"` + + // Id: Account ID. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics account. + Kind string `json:"kind,omitempty"` + + // Name: Account name. + Name string `json:"name,omitempty"` + + // Permissions: Permissions the user has for this account. + Permissions *AccountPermissions `json:"permissions,omitempty"` + + // SelfLink: Link for this account. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Time the account was last modified. + Updated string `json:"updated,omitempty"` +} + +type AccountChildLink struct { + // Href: Link to the list of web properties for this account. + Href string `json:"href,omitempty"` + + // Type: Type of the child link. Its value is "analytics#webproperties". + Type string `json:"type,omitempty"` +} + +type AccountPermissions struct { + // Effective: All the permissions that the user has for this account. + // These include any implied permissions (e.g., EDIT implies VIEW). + Effective []string `json:"effective,omitempty"` +} + +type AccountRef struct { + // Href: Link for this account. + Href string `json:"href,omitempty"` + + // Id: Account ID. + Id string `json:"id,omitempty"` + + // Kind: Analytics account reference. + Kind string `json:"kind,omitempty"` + + // Name: Account name. + Name string `json:"name,omitempty"` +} + +type AccountSummaries struct { + // Items: A list of AccountSummaries. + Items []*AccountSummary `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this AccountSummary collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this AccountSummary + // collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type AccountSummary struct { + // Id: Account ID. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics AccountSummary. + Kind string `json:"kind,omitempty"` + + // Name: Account name. + Name string `json:"name,omitempty"` + + // WebProperties: List of web properties under this account. + WebProperties []*WebPropertySummary `json:"webProperties,omitempty"` +} + +type Accounts struct { + // Items: A list of accounts. + Items []*Account `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of entries the response can contain, + // regardless of the actual number of entries returned. Its value ranges + // from 1 to 1000 with a value of 1000 by default, or otherwise + // specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Next link for this account collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Previous link for this account collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the entries, which is 1 by default + // or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type AnalyticsDataimportDeleteUploadDataRequest struct { + // CustomDataImportUids: A list of upload UIDs. + CustomDataImportUids []string `json:"customDataImportUids,omitempty"` +} + +type Column struct { + // Attributes: Map of attribute name and value for this column. + Attributes map[string]string `json:"attributes,omitempty"` + + // Id: Column id. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics column. + Kind string `json:"kind,omitempty"` +} + +type Columns struct { + // AttributeNames: List of attributes names returned by columns. + AttributeNames []string `json:"attributeNames,omitempty"` + + // Etag: Etag of collection. This etag can be compared with the last + // response etag to check if response has changed. + Etag string `json:"etag,omitempty"` + + // Items: List of columns for a report type. + Items []*Column `json:"items,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // TotalResults: Total number of columns returned in the response. + TotalResults int64 `json:"totalResults,omitempty"` +} + +type CustomDataSource struct { + // AccountId: Account ID to which this custom data source belongs. + AccountId string `json:"accountId,omitempty"` + + ChildLink *CustomDataSourceChildLink `json:"childLink,omitempty"` + + // Created: Time this custom data source was created. + Created string `json:"created,omitempty"` + + // Description: Description of custom data source. + Description string `json:"description,omitempty"` + + // Id: Custom data source ID. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics custom data source. + Kind string `json:"kind,omitempty"` + + // Name: Name of this custom data source. + Name string `json:"name,omitempty"` + + // ParentLink: Parent link for this custom data source. Points to the + // web property to which this custom data source belongs. + ParentLink *CustomDataSourceParentLink `json:"parentLink,omitempty"` + + // ProfilesLinked: IDs of views (profiles) linked to the custom data + // source. + ProfilesLinked []string `json:"profilesLinked,omitempty"` + + // SelfLink: Link for this Analytics custom data source. + SelfLink string `json:"selfLink,omitempty"` + + // Type: Type of the custom data source. + Type string `json:"type,omitempty"` + + // Updated: Time this custom data source was last modified. + Updated string `json:"updated,omitempty"` + + // WebPropertyId: Web property ID of the form UA-XXXXX-YY to which this + // custom data source belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type CustomDataSourceChildLink struct { + // Href: Link to the list of daily uploads for this custom data source. + // Link to the list of uploads for this custom data source. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#dailyUploads". Value is + // "analytics#uploads". + Type string `json:"type,omitempty"` +} + +type CustomDataSourceParentLink struct { + // Href: Link to the web property to which this custom data source + // belongs. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#webproperty". + Type string `json:"type,omitempty"` +} + +type CustomDataSources struct { + // Items: Collection of custom data sources. + Items []*CustomDataSource `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this custom data source collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this custom data source + // collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type DailyUpload struct { + // AccountId: Account ID to which this daily upload belongs. + AccountId string `json:"accountId,omitempty"` + + // AppendCount: Number of appends for this date. + AppendCount int64 `json:"appendCount,omitempty"` + + // CreatedTime: Time this daily upload was created. + CreatedTime string `json:"createdTime,omitempty"` + + // CustomDataSourceId: Custom data source ID to which this daily upload + // belongs. + CustomDataSourceId string `json:"customDataSourceId,omitempty"` + + // Date: Date associated with daily upload. + Date string `json:"date,omitempty"` + + // Kind: Resource type for Analytics daily upload. + Kind string `json:"kind,omitempty"` + + // ModifiedTime: Time this daily upload was last modified. + ModifiedTime string `json:"modifiedTime,omitempty"` + + // ParentLink: Parent link for a daily upload. Points to the custom data + // source to which this daily upload belongs. + ParentLink *DailyUploadParentLink `json:"parentLink,omitempty"` + + // RecentChanges: Change log for last 10 changes in chronological order. + RecentChanges []*DailyUploadRecentChanges `json:"recentChanges,omitempty"` + + // SelfLink: Link for this daily upload. + SelfLink string `json:"selfLink,omitempty"` + + // WebPropertyId: Web property ID of the form UA-XXXXX-YY to which this + // daily upload belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type DailyUploadParentLink struct { + // Href: Link to the custom data source to which this daily upload + // belongs. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#customDataSource". + Type string `json:"type,omitempty"` +} + +type DailyUploadRecentChanges struct { + // Change: The type of change: APPEND, RESET, or DELETE. + Change string `json:"change,omitempty"` + + // Time: The time when the change occurred. + Time string `json:"time,omitempty"` +} + +type DailyUploadAppend struct { + // AccountId: Account Id to which this daily upload append belongs. + AccountId string `json:"accountId,omitempty"` + + // AppendNumber: Append number. + AppendNumber int64 `json:"appendNumber,omitempty"` + + // CustomDataSourceId: Custom data source Id to which this daily upload + // append belongs. + CustomDataSourceId string `json:"customDataSourceId,omitempty"` + + // Date: Date associated with daily upload append. + Date string `json:"date,omitempty"` + + // Kind: Resource type for Analytics daily upload append. + Kind string `json:"kind,omitempty"` + + NextAppendLink string `json:"nextAppendLink,omitempty"` + + // WebPropertyId: Web property Id of the form UA-XXXXX-YY to which this + // daily upload append belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type DailyUploads struct { + // Items: A collection of daily uploads. + Items []*DailyUpload `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. Value is analytics#dailyUploads. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this daily upload collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this daily upload collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type EntityUserLink struct { + // Entity: Entity for this link. It can be an account, a web property, + // or a view (profile). + Entity *EntityUserLinkEntity `json:"entity,omitempty"` + + // Id: Entity user link ID + Id string `json:"id,omitempty"` + + // Kind: Resource type for entity user link. + Kind string `json:"kind,omitempty"` + + // Permissions: Permissions the user has for this entity. + Permissions *EntityUserLinkPermissions `json:"permissions,omitempty"` + + // SelfLink: Self link for this resource. + SelfLink string `json:"selfLink,omitempty"` + + // UserRef: User reference. + UserRef *UserRef `json:"userRef,omitempty"` +} + +type EntityUserLinkEntity struct { + // AccountRef: Account for this link. + AccountRef *AccountRef `json:"accountRef,omitempty"` + + // ProfileRef: View (Profile) for this link. + ProfileRef *ProfileRef `json:"profileRef,omitempty"` + + // WebPropertyRef: Web property for this link. + WebPropertyRef *WebPropertyRef `json:"webPropertyRef,omitempty"` +} + +type EntityUserLinkPermissions struct { + // Effective: Effective permissions represent all the permissions that a + // user has for this entity. These include any implied permissions + // (e.g., EDIT implies VIEW) or inherited permissions from the parent + // entity. Effective permissions are read-only. + Effective []string `json:"effective,omitempty"` + + // Local: Permissions that a user has been assigned at this very level. + // Does not include any implied or inherited permissions. Local + // permissions are modifiable. + Local []string `json:"local,omitempty"` +} + +type EntityUserLinks struct { + // Items: A list of entity user links. + Items []*EntityUserLink `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of entries the response can contain, + // regardless of the actual number of entries returned. Its value ranges + // from 1 to 1000 with a value of 1000 by default, or otherwise + // specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Next link for this account collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Previous link for this account collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the entries, which is 1 by default + // or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` +} + +type Experiment struct { + // AccountId: Account ID to which this experiment belongs. This field is + // read-only. + AccountId string `json:"accountId,omitempty"` + + // Created: Time the experiment was created. This field is read-only. + Created string `json:"created,omitempty"` + + // Description: Notes about this experiment. + Description string `json:"description,omitempty"` + + // EditableInGaUi: If true, the end user will be able to edit the + // experiment via the Google Analytics user interface. + EditableInGaUi bool `json:"editableInGaUi,omitempty"` + + // EndTime: The ending time of the experiment (the time the status + // changed from RUNNING to ENDED). This field is present only if the + // experiment has ended. This field is read-only. + EndTime string `json:"endTime,omitempty"` + + // EqualWeighting: Boolean specifying whether to distribute traffic + // evenly across all variations. If the value is False, content + // experiments follows the default behavior of adjusting traffic + // dynamically based on variation performance. Optional -- defaults to + // False. This field may not be changed for an experiment whose status + // is ENDED. + EqualWeighting bool `json:"equalWeighting,omitempty"` + + // Id: Experiment ID. Required for patch and update. Disallowed for + // create. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // experiment belongs. This field is read-only. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Resource type for an Analytics experiment. This field is + // read-only. + Kind string `json:"kind,omitempty"` + + // MinimumExperimentLengthInDays: Specifies the minimum length of the + // experiment. Can be changed for a running experiment. This field may + // not be changed for an experiments whose status is ENDED. + MinimumExperimentLengthInDays int64 `json:"minimumExperimentLengthInDays,omitempty"` + + // Name: Experiment name. This field may not be changed for an + // experiment whose status is ENDED. This field is required when + // creating an experiment. + Name string `json:"name,omitempty"` + + // ObjectiveMetric: The metric that the experiment is optimizing. Valid + // values: "ga:goal(n)Completions", "ga:adsenseAdsClicks", + // "ga:adsenseAdsViewed", "ga:adsenseRevenue", "ga:bounces", + // "ga:pageviews", "ga:timeOnSite", "ga:transactions", + // "ga:transactionRevenue". This field is required if status is + // "RUNNING" and servingFramework is one of "REDIRECT" or "API". + ObjectiveMetric string `json:"objectiveMetric,omitempty"` + + // OptimizationType: Whether the objectiveMetric should be minimized or + // maximized. Possible values: "MAXIMUM", "MINIMUM". Optional--defaults + // to "MAXIMUM". Cannot be specified without objectiveMetric. Cannot be + // modified when status is "RUNNING" or "ENDED". + OptimizationType string `json:"optimizationType,omitempty"` + + // ParentLink: Parent link for an experiment. Points to the view + // (profile) to which this experiment belongs. + ParentLink *ExperimentParentLink `json:"parentLink,omitempty"` + + // ProfileId: View (Profile) ID to which this experiment belongs. This + // field is read-only. + ProfileId string `json:"profileId,omitempty"` + + // ReasonExperimentEnded: Why the experiment ended. Possible values: + // "STOPPED_BY_USER", "WINNER_FOUND", "EXPERIMENT_EXPIRED", + // "ENDED_WITH_NO_WINNER", "GOAL_OBJECTIVE_CHANGED". + // "ENDED_WITH_NO_WINNER" means that the experiment didn't expire but no + // winner was projected to be found. If the experiment status is changed + // via the API to ENDED this field is set to STOPPED_BY_USER. This field + // is read-only. + ReasonExperimentEnded string `json:"reasonExperimentEnded,omitempty"` + + // RewriteVariationUrlsAsOriginal: Boolean specifying whether variations + // URLS are rewritten to match those of the original. This field may not + // be changed for an experiments whose status is ENDED. + RewriteVariationUrlsAsOriginal bool `json:"rewriteVariationUrlsAsOriginal,omitempty"` + + // SelfLink: Link for this experiment. This field is read-only. + SelfLink string `json:"selfLink,omitempty"` + + // ServingFramework: The framework used to serve the experiment + // variations and evaluate the results. One of: + // - REDIRECT: Google + // Analytics redirects traffic to different variation pages, reports the + // chosen variation and evaluates the results. + // - API: Google Analytics + // chooses and reports the variation to serve and evaluates the results; + // the caller is responsible for serving the selected variation. + // - + // EXTERNAL: The variations will be served externally and the chosen + // variation reported to Google Analytics. The caller is responsible for + // serving the selected variation and evaluating the results. + ServingFramework string `json:"servingFramework,omitempty"` + + // Snippet: The snippet of code to include on the control page(s). This + // field is read-only. + Snippet string `json:"snippet,omitempty"` + + // StartTime: The starting time of the experiment (the time the status + // changed from READY_TO_RUN to RUNNING). This field is present only if + // the experiment has started. This field is read-only. + StartTime string `json:"startTime,omitempty"` + + // Status: Experiment status. Possible values: "DRAFT", "READY_TO_RUN", + // "RUNNING", "ENDED". Experiments can be created in the "DRAFT", + // "READY_TO_RUN" or "RUNNING" state. This field is required when + // creating an experiment. + Status string `json:"status,omitempty"` + + // TrafficCoverage: A floating-point number between 0 and 1. Specifies + // the fraction of the traffic that participates in the experiment. Can + // be changed for a running experiment. This field may not be changed + // for an experiments whose status is ENDED. + TrafficCoverage float64 `json:"trafficCoverage,omitempty"` + + // Updated: Time the experiment was last modified. This field is + // read-only. + Updated string `json:"updated,omitempty"` + + // Variations: Array of variations. The first variation in the array is + // the original. The number of variations may not change once an + // experiment is in the RUNNING state. At least two variations are + // required before status can be set to RUNNING. + Variations []*ExperimentVariations `json:"variations,omitempty"` + + // WebPropertyId: Web property ID to which this experiment belongs. The + // web property ID is of the form UA-XXXXX-YY. This field is read-only. + WebPropertyId string `json:"webPropertyId,omitempty"` + + // WinnerConfidenceLevel: A floating-point number between 0 and 1. + // Specifies the necessary confidence level to choose a winner. This + // field may not be changed for an experiments whose status is ENDED. + WinnerConfidenceLevel float64 `json:"winnerConfidenceLevel,omitempty"` + + // WinnerFound: Boolean specifying whether a winner has been found for + // this experiment. This field is read-only. + WinnerFound bool `json:"winnerFound,omitempty"` +} + +type ExperimentParentLink struct { + // Href: Link to the view (profile) to which this experiment belongs. + // This field is read-only. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#profile". This field is read-only. + Type string `json:"type,omitempty"` +} + +type ExperimentVariations struct { + // Name: The name of the variation. This field is required when creating + // an experiment. This field may not be changed for an experiment whose + // status is ENDED. + Name string `json:"name,omitempty"` + + // Status: Status of the variation. Possible values: "ACTIVE", + // "INACTIVE". INACTIVE variations are not served. This field may not be + // changed for an experiment whose status is ENDED. + Status string `json:"status,omitempty"` + + // Url: The URL of the variation. This field may not be changed for an + // experiment whose status is RUNNING or ENDED. + Url string `json:"url,omitempty"` + + // Weight: Weight that this variation should receive. Only present if + // the experiment is running. This field is read-only. + Weight float64 `json:"weight,omitempty"` + + // Won: True if the experiment has ended and this variation performed + // (statistically) significantly better than the original. This field is + // read-only. + Won bool `json:"won,omitempty"` +} + +type Experiments struct { + // Items: A list of experiments. + Items []*Experiment `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this experiment collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this experiment collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of resources in the result. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type GaData struct { + // ColumnHeaders: Column headers that list dimension names followed by + // the metric names. The order of dimensions and metrics is same as + // specified in the request. + ColumnHeaders []*GaDataColumnHeaders `json:"columnHeaders,omitempty"` + + // ContainsSampledData: Determines if Analytics data contains samples. + ContainsSampledData bool `json:"containsSampledData,omitempty"` + + DataTable *GaDataDataTable `json:"dataTable,omitempty"` + + // Id: Unique ID for this data response. + Id string `json:"id,omitempty"` + + // ItemsPerPage: The maximum number of rows the response can contain, + // regardless of the actual number of rows returned. Its value ranges + // from 1 to 10,000 with a value of 1000 by default, or otherwise + // specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this Analytics data query. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this Analytics data query. + PreviousLink string `json:"previousLink,omitempty"` + + // ProfileInfo: Information for the view (profile), for which the + // Analytics data was requested. + ProfileInfo *GaDataProfileInfo `json:"profileInfo,omitempty"` + + // Query: Analytics data request query parameters. + Query *GaDataQuery `json:"query,omitempty"` + + // Rows: Analytics data rows, where each row contains a list of + // dimension values followed by the metric values. The order of + // dimensions and metrics is same as specified in the request. + Rows [][]string `json:"rows,omitempty"` + + // SampleSize: The number of samples used to calculate the result. + SampleSize int64 `json:"sampleSize,omitempty,string"` + + // SampleSpace: Total size of the sample space from which the samples + // were selected. + SampleSpace int64 `json:"sampleSpace,omitempty,string"` + + // SelfLink: Link to this page. + SelfLink string `json:"selfLink,omitempty"` + + // TotalResults: The total number of rows for the query, regardless of + // the number of rows in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // TotalsForAllResults: Total values for the requested metrics over all + // the results, not just the results returned in this response. The + // order of the metric totals is same as the metric order specified in + // the request. + TotalsForAllResults map[string]string `json:"totalsForAllResults,omitempty"` +} + +type GaDataColumnHeaders struct { + // ColumnType: Column Type. Either DIMENSION or METRIC. + ColumnType string `json:"columnType,omitempty"` + + // DataType: Data type. Dimension column headers have only STRING as the + // data type. Metric column headers have data types for metric values + // such as INTEGER, DOUBLE, CURRENCY etc. + DataType string `json:"dataType,omitempty"` + + // Name: Column name. + Name string `json:"name,omitempty"` +} + +type GaDataDataTable struct { + Cols []*GaDataDataTableCols `json:"cols,omitempty"` + + Rows []*GaDataDataTableRows `json:"rows,omitempty"` +} + +type GaDataDataTableCols struct { + Id string `json:"id,omitempty"` + + Label string `json:"label,omitempty"` + + Type string `json:"type,omitempty"` +} + +type GaDataDataTableRows struct { + C []*GaDataDataTableRowsC `json:"c,omitempty"` +} + +type GaDataDataTableRowsC struct { + V string `json:"v,omitempty"` +} + +type GaDataProfileInfo struct { + // AccountId: Account ID to which this view (profile) belongs. + AccountId string `json:"accountId,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // view (profile) belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // ProfileId: View (Profile) ID. + ProfileId string `json:"profileId,omitempty"` + + // ProfileName: View (Profile) name. + ProfileName string `json:"profileName,omitempty"` + + // TableId: Table ID for view (profile). + TableId string `json:"tableId,omitempty"` + + // WebPropertyId: Web Property ID to which this view (profile) belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type GaDataQuery struct { + // Dimensions: List of analytics dimensions. + Dimensions string `json:"dimensions,omitempty"` + + // EndDate: End date. + EndDate string `json:"end-date,omitempty"` + + // Filters: Comma-separated list of dimension or metric filters. + Filters string `json:"filters,omitempty"` + + // Ids: Unique table ID. + Ids string `json:"ids,omitempty"` + + // MaxResults: Maximum results per page. + MaxResults int64 `json:"max-results,omitempty"` + + // Metrics: List of analytics metrics. + Metrics []string `json:"metrics,omitempty"` + + // SamplingLevel: Desired sampling level + SamplingLevel string `json:"samplingLevel,omitempty"` + + // Segment: Analytics advanced segment. + Segment string `json:"segment,omitempty"` + + // Sort: List of dimensions or metrics based on which Analytics data is + // sorted. + Sort []string `json:"sort,omitempty"` + + // StartDate: Start date. + StartDate string `json:"start-date,omitempty"` + + // StartIndex: Start index. + StartIndex int64 `json:"start-index,omitempty"` +} + +type Goal struct { + // AccountId: Account ID to which this goal belongs. + AccountId string `json:"accountId,omitempty"` + + // Active: Determines whether this goal is active. + Active bool `json:"active,omitempty"` + + // Created: Time this goal was created. + Created string `json:"created,omitempty"` + + // EventDetails: Details for the goal of the type EVENT. + EventDetails *GoalEventDetails `json:"eventDetails,omitempty"` + + // Id: Goal ID. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // goal belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Resource type for an Analytics goal. + Kind string `json:"kind,omitempty"` + + // Name: Goal name. + Name string `json:"name,omitempty"` + + // ParentLink: Parent link for a goal. Points to the view (profile) to + // which this goal belongs. + ParentLink *GoalParentLink `json:"parentLink,omitempty"` + + // ProfileId: View (Profile) ID to which this goal belongs. + ProfileId string `json:"profileId,omitempty"` + + // SelfLink: Link for this goal. + SelfLink string `json:"selfLink,omitempty"` + + // Type: Goal type. Possible values are URL_DESTINATION, + // VISIT_TIME_ON_SITE, VISIT_NUM_PAGES, AND EVENT. + Type string `json:"type,omitempty"` + + // Updated: Time this goal was last modified. + Updated string `json:"updated,omitempty"` + + // UrlDestinationDetails: Details for the goal of the type + // URL_DESTINATION. + UrlDestinationDetails *GoalUrlDestinationDetails `json:"urlDestinationDetails,omitempty"` + + // Value: Goal value. + Value float64 `json:"value,omitempty"` + + // VisitNumPagesDetails: Details for the goal of the type + // VISIT_NUM_PAGES. + VisitNumPagesDetails *GoalVisitNumPagesDetails `json:"visitNumPagesDetails,omitempty"` + + // VisitTimeOnSiteDetails: Details for the goal of the type + // VISIT_TIME_ON_SITE. + VisitTimeOnSiteDetails *GoalVisitTimeOnSiteDetails `json:"visitTimeOnSiteDetails,omitempty"` + + // WebPropertyId: Web property ID to which this goal belongs. The web + // property ID is of the form UA-XXXXX-YY. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type GoalEventDetails struct { + // EventConditions: List of event conditions. + EventConditions []*GoalEventDetailsEventConditions `json:"eventConditions,omitempty"` + + // UseEventValue: Determines if the event value should be used as the + // value for this goal. + UseEventValue bool `json:"useEventValue,omitempty"` +} + +type GoalEventDetailsEventConditions struct { + // ComparisonType: Type of comparison. Possible values are LESS_THAN, + // GREATER_THAN or EQUAL. + ComparisonType string `json:"comparisonType,omitempty"` + + // ComparisonValue: Value used for this comparison. + ComparisonValue int64 `json:"comparisonValue,omitempty,string"` + + // Expression: Expression used for this match. + Expression string `json:"expression,omitempty"` + + // MatchType: Type of the match to be performed. Possible values are + // REGEXP, BEGINS_WITH, or EXACT. + MatchType string `json:"matchType,omitempty"` + + // Type: Type of this event condition. Possible values are CATEGORY, + // ACTION, LABEL, or VALUE. + Type string `json:"type,omitempty"` +} + +type GoalParentLink struct { + // Href: Link to the view (profile) to which this goal belongs. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#profile". + Type string `json:"type,omitempty"` +} + +type GoalUrlDestinationDetails struct { + // CaseSensitive: Determines if the goal URL must exactly match the + // capitalization of visited URLs. + CaseSensitive bool `json:"caseSensitive,omitempty"` + + // FirstStepRequired: Determines if the first step in this goal is + // required. + FirstStepRequired bool `json:"firstStepRequired,omitempty"` + + // MatchType: Match type for the goal URL. Possible values are HEAD, + // EXACT, or REGEX. + MatchType string `json:"matchType,omitempty"` + + // Steps: List of steps configured for this goal funnel. + Steps []*GoalUrlDestinationDetailsSteps `json:"steps,omitempty"` + + // Url: URL for this goal. + Url string `json:"url,omitempty"` +} + +type GoalUrlDestinationDetailsSteps struct { + // Name: Step name. + Name string `json:"name,omitempty"` + + // Number: Step number. + Number int64 `json:"number,omitempty"` + + // Url: URL for this step. + Url string `json:"url,omitempty"` +} + +type GoalVisitNumPagesDetails struct { + // ComparisonType: Type of comparison. Possible values are LESS_THAN, + // GREATER_THAN, or EQUAL. + ComparisonType string `json:"comparisonType,omitempty"` + + // ComparisonValue: Value used for this comparison. + ComparisonValue int64 `json:"comparisonValue,omitempty,string"` +} + +type GoalVisitTimeOnSiteDetails struct { + // ComparisonType: Type of comparison. Possible values are LESS_THAN or + // GREATER_THAN. + ComparisonType string `json:"comparisonType,omitempty"` + + // ComparisonValue: Value used for this comparison. + ComparisonValue int64 `json:"comparisonValue,omitempty,string"` +} + +type Goals struct { + // Items: A list of goals. + Items []*Goal `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this goal collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this goal collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of resources in the result. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type McfData struct { + // ColumnHeaders: Column headers that list dimension names followed by + // the metric names. The order of dimensions and metrics is same as + // specified in the request. + ColumnHeaders []*McfDataColumnHeaders `json:"columnHeaders,omitempty"` + + // ContainsSampledData: Determines if the Analytics data contains + // sampled data. + ContainsSampledData bool `json:"containsSampledData,omitempty"` + + // Id: Unique ID for this data response. + Id string `json:"id,omitempty"` + + // ItemsPerPage: The maximum number of rows the response can contain, + // regardless of the actual number of rows returned. Its value ranges + // from 1 to 10,000 with a value of 1000 by default, or otherwise + // specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this Analytics data query. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this Analytics data query. + PreviousLink string `json:"previousLink,omitempty"` + + // ProfileInfo: Information for the view (profile), for which the + // Analytics data was requested. + ProfileInfo *McfDataProfileInfo `json:"profileInfo,omitempty"` + + // Query: Analytics data request query parameters. + Query *McfDataQuery `json:"query,omitempty"` + + // Rows: Analytics data rows, where each row contains a list of + // dimension values followed by the metric values. The order of + // dimensions and metrics is same as specified in the request. + Rows [][]*McfDataRowsItem `json:"rows,omitempty"` + + // SampleSize: The number of samples used to calculate the result. + SampleSize int64 `json:"sampleSize,omitempty,string"` + + // SampleSpace: Total size of the sample space from which the samples + // were selected. + SampleSpace int64 `json:"sampleSpace,omitempty,string"` + + // SelfLink: Link to this page. + SelfLink string `json:"selfLink,omitempty"` + + // TotalResults: The total number of rows for the query, regardless of + // the number of rows in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // TotalsForAllResults: Total values for the requested metrics over all + // the results, not just the results returned in this response. The + // order of the metric totals is same as the metric order specified in + // the request. + TotalsForAllResults map[string]string `json:"totalsForAllResults,omitempty"` +} + +type McfDataColumnHeaders struct { + // ColumnType: Column Type. Either DIMENSION or METRIC. + ColumnType string `json:"columnType,omitempty"` + + // DataType: Data type. Dimension and metric values data types such as + // INTEGER, DOUBLE, CURRENCY, MCF_SEQUENCE etc. + DataType string `json:"dataType,omitempty"` + + // Name: Column name. + Name string `json:"name,omitempty"` +} + +type McfDataProfileInfo struct { + // AccountId: Account ID to which this view (profile) belongs. + AccountId string `json:"accountId,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // view (profile) belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // ProfileId: View (Profile) ID. + ProfileId string `json:"profileId,omitempty"` + + // ProfileName: View (Profile) name. + ProfileName string `json:"profileName,omitempty"` + + // TableId: Table ID for view (profile). + TableId string `json:"tableId,omitempty"` + + // WebPropertyId: Web Property ID to which this view (profile) belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type McfDataQuery struct { + // Dimensions: List of analytics dimensions. + Dimensions string `json:"dimensions,omitempty"` + + // EndDate: End date. + EndDate string `json:"end-date,omitempty"` + + // Filters: Comma-separated list of dimension or metric filters. + Filters string `json:"filters,omitempty"` + + // Ids: Unique table ID. + Ids string `json:"ids,omitempty"` + + // MaxResults: Maximum results per page. + MaxResults int64 `json:"max-results,omitempty"` + + // Metrics: List of analytics metrics. + Metrics []string `json:"metrics,omitempty"` + + // SamplingLevel: Desired sampling level + SamplingLevel string `json:"samplingLevel,omitempty"` + + // Segment: Analytics advanced segment. + Segment string `json:"segment,omitempty"` + + // Sort: List of dimensions or metrics based on which Analytics data is + // sorted. + Sort []string `json:"sort,omitempty"` + + // StartDate: Start date. + StartDate string `json:"start-date,omitempty"` + + // StartIndex: Start index. + StartIndex int64 `json:"start-index,omitempty"` +} + +type McfDataRowsItem struct { + // ConversionPathValue: A conversion path dimension value, containing a + // list of interactions with their attributes. + ConversionPathValue []*McfDataRowsItemConversionPathValue `json:"conversionPathValue,omitempty"` + + // PrimitiveValue: A primitive dimension value. A primitive metric + // value. + PrimitiveValue string `json:"primitiveValue,omitempty"` +} + +type McfDataRowsItemConversionPathValue struct { + // InteractionType: Type of an interaction on conversion path. Such as + // CLICK, IMPRESSION etc. + InteractionType string `json:"interactionType,omitempty"` + + // NodeValue: Node value of an interaction on conversion path. Such as + // source, medium etc. + NodeValue string `json:"nodeValue,omitempty"` +} + +type Profile struct { + // AccountId: Account ID to which this view (profile) belongs. + AccountId string `json:"accountId,omitempty"` + + // ChildLink: Child link for this view (profile). Points to the list of + // goals for this view (profile). + ChildLink *ProfileChildLink `json:"childLink,omitempty"` + + // Created: Time this view (profile) was created. + Created string `json:"created,omitempty"` + + // Currency: The currency type associated with this view (profile). The + // supported values are: + // ARS, AUD, BGN, BRL, CAD, CHF, CNY, CZK, DKK, + // EUR, GBP, HKD, HUF, IDR, INR, JPY, KRW, LTL, MXN, NOK, NZD, PHP, PLN, + // RUB, SEK, THB, TRY, TWD, USD, VND, ZAR + Currency string `json:"currency,omitempty"` + + // DefaultPage: Default page for this view (profile). + DefaultPage string `json:"defaultPage,omitempty"` + + // ECommerceTracking: Indicates whether ecommerce tracking is enabled + // for this view (profile). + ECommerceTracking bool `json:"eCommerceTracking,omitempty"` + + // ExcludeQueryParameters: The query parameters that are excluded from + // this view (profile). + ExcludeQueryParameters string `json:"excludeQueryParameters,omitempty"` + + // Id: View (Profile) ID. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // view (profile) belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Resource type for Analytics view (profile). + Kind string `json:"kind,omitempty"` + + // Name: Name of this view (profile). + Name string `json:"name,omitempty"` + + // ParentLink: Parent link for this view (profile). Points to the web + // property to which this view (profile) belongs. + ParentLink *ProfileParentLink `json:"parentLink,omitempty"` + + // Permissions: Permissions the user has for this view (profile). + Permissions *ProfilePermissions `json:"permissions,omitempty"` + + // SelfLink: Link for this view (profile). + SelfLink string `json:"selfLink,omitempty"` + + // SiteSearchCategoryParameters: Site search category parameters for + // this view (profile). + SiteSearchCategoryParameters string `json:"siteSearchCategoryParameters,omitempty"` + + // SiteSearchQueryParameters: The site search query parameters for this + // view (profile). + SiteSearchQueryParameters string `json:"siteSearchQueryParameters,omitempty"` + + // StripSiteSearchCategoryParameters: Whether or not Analytics will + // strip search category parameters from the URLs in your reports. + StripSiteSearchCategoryParameters bool `json:"stripSiteSearchCategoryParameters,omitempty"` + + // StripSiteSearchQueryParameters: Whether or not Analytics will strip + // search query parameters from the URLs in your reports. + StripSiteSearchQueryParameters bool `json:"stripSiteSearchQueryParameters,omitempty"` + + // Timezone: Time zone for which this view (profile) has been + // configured. Time zones are identified by strings from the TZ + // database. + Timezone string `json:"timezone,omitempty"` + + // Type: View (Profile) type. Supported types: WEB or APP. + Type string `json:"type,omitempty"` + + // Updated: Time this view (profile) was last modified. + Updated string `json:"updated,omitempty"` + + // WebPropertyId: Web property ID of the form UA-XXXXX-YY to which this + // view (profile) belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` + + // WebsiteUrl: Website URL for this view (profile). + WebsiteUrl string `json:"websiteUrl,omitempty"` +} + +type ProfileChildLink struct { + // Href: Link to the list of goals for this view (profile). + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#goals". + Type string `json:"type,omitempty"` +} + +type ProfileParentLink struct { + // Href: Link to the web property to which this view (profile) belongs. + Href string `json:"href,omitempty"` + + // Type: Value is "analytics#webproperty". + Type string `json:"type,omitempty"` +} + +type ProfilePermissions struct { + // Effective: All the permissions that the user has for this view + // (profile). These include any implied permissions (e.g., EDIT implies + // VIEW) or inherited permissions from the parent web property. + Effective []string `json:"effective,omitempty"` +} + +type ProfileRef struct { + // AccountId: Account ID to which this view (profile) belongs. + AccountId string `json:"accountId,omitempty"` + + // Href: Link for this view (profile). + Href string `json:"href,omitempty"` + + // Id: View (Profile) ID. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // view (profile) belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Analytics view (profile) reference. + Kind string `json:"kind,omitempty"` + + // Name: Name of this view (profile). + Name string `json:"name,omitempty"` + + // WebPropertyId: Web property ID of the form UA-XXXXX-YY to which this + // view (profile) belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type ProfileSummary struct { + // Id: View (profile) ID. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics ProfileSummary. + Kind string `json:"kind,omitempty"` + + // Name: View (profile) name. + Name string `json:"name,omitempty"` + + // Type: View (Profile) type. Supported types: WEB or APP. + Type string `json:"type,omitempty"` +} + +type Profiles struct { + // Items: A list of views (profiles). + Items []*Profile `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this view (profile) collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this view (profile) + // collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type RealtimeData struct { + // ColumnHeaders: Column headers that list dimension names followed by + // the metric names. The order of dimensions and metrics is same as + // specified in the request. + ColumnHeaders []*RealtimeDataColumnHeaders `json:"columnHeaders,omitempty"` + + // Id: Unique ID for this data response. + Id string `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // ProfileInfo: Information for the view (profile), for which the real + // time data was requested. + ProfileInfo *RealtimeDataProfileInfo `json:"profileInfo,omitempty"` + + // Query: Real time data request query parameters. + Query *RealtimeDataQuery `json:"query,omitempty"` + + // Rows: Real time data rows, where each row contains a list of + // dimension values followed by the metric values. The order of + // dimensions and metrics is same as specified in the request. + Rows [][]string `json:"rows,omitempty"` + + // SelfLink: Link to this page. + SelfLink string `json:"selfLink,omitempty"` + + // TotalResults: The total number of rows for the query, regardless of + // the number of rows in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // TotalsForAllResults: Total values for the requested metrics over all + // the results, not just the results returned in this response. The + // order of the metric totals is same as the metric order specified in + // the request. + TotalsForAllResults map[string]string `json:"totalsForAllResults,omitempty"` +} + +type RealtimeDataColumnHeaders struct { + // ColumnType: Column Type. Either DIMENSION or METRIC. + ColumnType string `json:"columnType,omitempty"` + + // DataType: Data type. Dimension column headers have only STRING as the + // data type. Metric column headers have data types for metric values + // such as INTEGER, DOUBLE, CURRENCY etc. + DataType string `json:"dataType,omitempty"` + + // Name: Column name. + Name string `json:"name,omitempty"` +} + +type RealtimeDataProfileInfo struct { + // AccountId: Account ID to which this view (profile) belongs. + AccountId string `json:"accountId,omitempty"` + + // InternalWebPropertyId: Internal ID for the web property to which this + // view (profile) belongs. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // ProfileId: View (Profile) ID. + ProfileId string `json:"profileId,omitempty"` + + // ProfileName: View (Profile) name. + ProfileName string `json:"profileName,omitempty"` + + // TableId: Table ID for view (profile). + TableId string `json:"tableId,omitempty"` + + // WebPropertyId: Web Property ID to which this view (profile) belongs. + WebPropertyId string `json:"webPropertyId,omitempty"` +} + +type RealtimeDataQuery struct { + // Dimensions: List of real time dimensions. + Dimensions string `json:"dimensions,omitempty"` + + // Filters: Comma-separated list of dimension or metric filters. + Filters string `json:"filters,omitempty"` + + // Ids: Unique table ID. + Ids string `json:"ids,omitempty"` + + // MaxResults: Maximum results per page. + MaxResults int64 `json:"max-results,omitempty"` + + // Metrics: List of real time metrics. + Metrics []string `json:"metrics,omitempty"` + + // Sort: List of dimensions or metrics based on which real time data is + // sorted. + Sort []string `json:"sort,omitempty"` +} + +type Segment struct { + // Created: Time the segment was created. + Created string `json:"created,omitempty"` + + // Definition: Segment definition. + Definition string `json:"definition,omitempty"` + + // Id: Segment ID. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics segment. + Kind string `json:"kind,omitempty"` + + // Name: Segment name. + Name string `json:"name,omitempty"` + + // SegmentId: Segment ID. Can be used with the 'segment' parameter in + // Core Reporting API. + SegmentId string `json:"segmentId,omitempty"` + + // SelfLink: Link for this segment. + SelfLink string `json:"selfLink,omitempty"` + + // Type: Type for a segment. Possible values are "BUILT_IN" or "CUSTOM". + Type string `json:"type,omitempty"` + + // Updated: Time the segment was last modified. + Updated string `json:"updated,omitempty"` +} + +type Segments struct { + // Items: A list of segments. + Items []*Segment `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type for segments. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this segment collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this segment collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type Upload struct { + // AccountId: Account Id to which this upload belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // CustomDataSourceId: Custom data source Id to which this data import + // belongs. + CustomDataSourceId string `json:"customDataSourceId,omitempty"` + + // Errors: Data import errors collection. + Errors []string `json:"errors,omitempty"` + + // Id: A unique ID for this upload. + Id string `json:"id,omitempty"` + + // Kind: Resource type for Analytics upload. + Kind string `json:"kind,omitempty"` + + // Status: Upload status. Possible values: PENDING, COMPLETED, FAILED, + // DELETING, DELETED. + Status string `json:"status,omitempty"` +} + +type Uploads struct { + // Items: A list of uploads. + Items []*Upload `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this upload collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this upload collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of resources in the result. + TotalResults int64 `json:"totalResults,omitempty"` +} + +type UserRef struct { + // Email: Email ID of this user. + Email string `json:"email,omitempty"` + + // Id: User ID. + Id string `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type WebPropertyRef struct { + // AccountId: Account ID to which this web property belongs. + AccountId string `json:"accountId,omitempty"` + + // Href: Link for this web property. + Href string `json:"href,omitempty"` + + // Id: Web property ID of the form UA-XXXXX-YY. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for this web property. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Analytics web property reference. + Kind string `json:"kind,omitempty"` + + // Name: Name of this web property. + Name string `json:"name,omitempty"` +} + +type WebPropertySummary struct { + // Id: Web property ID of the form UA-XXXXX-YY. + Id string `json:"id,omitempty"` + + // InternalWebPropertyId: Internal ID for this web property. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Resource type for Analytics WebPropertySummary. + Kind string `json:"kind,omitempty"` + + // Level: Level for this web property. Possible values are STANDARD or + // PREMIUM. + Level string `json:"level,omitempty"` + + // Name: Web property name. + Name string `json:"name,omitempty"` + + // Profiles: List of profiles under this web property. + Profiles []*ProfileSummary `json:"profiles,omitempty"` + + // WebsiteUrl: Website url for this web property. + WebsiteUrl string `json:"websiteUrl,omitempty"` +} + +type Webproperties struct { + // Items: A list of web properties. + Items []*Webproperty `json:"items,omitempty"` + + // ItemsPerPage: The maximum number of resources the response can + // contain, regardless of the actual number of resources returned. Its + // value ranges from 1 to 1000 with a value of 1000 by default, or + // otherwise specified by the max-results query parameter. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: Collection type. + Kind string `json:"kind,omitempty"` + + // NextLink: Link to next page for this web property collection. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Link to previous page for this web property collection. + PreviousLink string `json:"previousLink,omitempty"` + + // StartIndex: The starting index of the resources, which is 1 by + // default or otherwise specified by the start-index query parameter. + StartIndex int64 `json:"startIndex,omitempty"` + + // TotalResults: The total number of results for the query, regardless + // of the number of results in the response. + TotalResults int64 `json:"totalResults,omitempty"` + + // Username: Email ID of the authenticated user + Username string `json:"username,omitempty"` +} + +type Webproperty struct { + // AccountId: Account ID to which this web property belongs. + AccountId string `json:"accountId,omitempty"` + + // ChildLink: Child link for this web property. Points to the list of + // views (profiles) for this web property. + ChildLink *WebpropertyChildLink `json:"childLink,omitempty"` + + // Created: Time this web property was created. + Created string `json:"created,omitempty"` + + // DefaultProfileId: Default view (profile) ID. + DefaultProfileId int64 `json:"defaultProfileId,omitempty,string"` + + // Id: Web property ID of the form UA-XXXXX-YY. + Id string `json:"id,omitempty"` + + // IndustryVertical: The industry vertical/category selected for this + // web property. + IndustryVertical string `json:"industryVertical,omitempty"` + + // InternalWebPropertyId: Internal ID for this web property. + InternalWebPropertyId string `json:"internalWebPropertyId,omitempty"` + + // Kind: Resource type for Analytics WebProperty. + Kind string `json:"kind,omitempty"` + + // Level: Level for this web property. Possible values are STANDARD or + // PREMIUM. + Level string `json:"level,omitempty"` + + // Name: Name of this web property. + Name string `json:"name,omitempty"` + + // ParentLink: Parent link for this web property. Points to the account + // to which this web property belongs. + ParentLink *WebpropertyParentLink `json:"parentLink,omitempty"` + + // Permissions: Permissions the user has for this web property. + Permissions *WebpropertyPermissions `json:"permissions,omitempty"` + + // ProfileCount: View (Profile) count for this web property. + ProfileCount int64 `json:"profileCount,omitempty"` + + // SelfLink: Link for this web property. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Time this web property was last modified. + Updated string `json:"updated,omitempty"` + + // WebsiteUrl: Website url for this web property. + WebsiteUrl string `json:"websiteUrl,omitempty"` +} + +type WebpropertyChildLink struct { + // Href: Link to the list of views (profiles) for this web property. + Href string `json:"href,omitempty"` + + // Type: Type of the parent link. Its value is "analytics#profiles". + Type string `json:"type,omitempty"` +} + +type WebpropertyParentLink struct { + // Href: Link to the account for this web property. + Href string `json:"href,omitempty"` + + // Type: Type of the parent link. Its value is "analytics#account". + Type string `json:"type,omitempty"` +} + +type WebpropertyPermissions struct { + // Effective: All the permissions that the user has for this web + // property. These include any implied permissions (e.g., EDIT implies + // VIEW) or inherited permissions from the parent account. + Effective []string `json:"effective,omitempty"` +} + +// method id "analytics.data.ga.get": + +type DataGaGetCall struct { + s *Service + ids string + startDate string + endDate string + metrics string + opt_ map[string]interface{} +} + +// Get: Returns Analytics data for a view (profile). +func (r *DataGaService) Get(ids string, startDate string, endDate string, metrics string) *DataGaGetCall { + c := &DataGaGetCall{s: r.s, opt_: make(map[string]interface{})} + c.ids = ids + c.startDate = startDate + c.endDate = endDate + c.metrics = metrics + return c +} + +// Dimensions sets the optional parameter "dimensions": A +// comma-separated list of Analytics dimensions. E.g., +// 'ga:browser,ga:city'. +func (c *DataGaGetCall) Dimensions(dimensions string) *DataGaGetCall { + c.opt_["dimensions"] = dimensions + return c +} + +// Filters sets the optional parameter "filters": A comma-separated list +// of dimension or metric filters to be applied to Analytics data. +func (c *DataGaGetCall) Filters(filters string) *DataGaGetCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of entries to include in this feed. +func (c *DataGaGetCall) MaxResults(maxResults int64) *DataGaGetCall { + c.opt_["max-results"] = maxResults + return c +} + +// Output sets the optional parameter "output": The selected format for +// the response. Default format is JSON. +func (c *DataGaGetCall) Output(output string) *DataGaGetCall { + c.opt_["output"] = output + return c +} + +// SamplingLevel sets the optional parameter "samplingLevel": The +// desired sampling level. +func (c *DataGaGetCall) SamplingLevel(samplingLevel string) *DataGaGetCall { + c.opt_["samplingLevel"] = samplingLevel + return c +} + +// Segment sets the optional parameter "segment": An Analytics segment +// to be applied to data. +func (c *DataGaGetCall) Segment(segment string) *DataGaGetCall { + c.opt_["segment"] = segment + return c +} + +// Sort sets the optional parameter "sort": A comma-separated list of +// dimensions or metrics that determine the sort order for Analytics +// data. +func (c *DataGaGetCall) Sort(sort string) *DataGaGetCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *DataGaGetCall) StartIndex(startIndex int64) *DataGaGetCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *DataGaGetCall) Do() (*GaData, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("end-date", fmt.Sprintf("%v", c.endDate)) + params.Set("ids", fmt.Sprintf("%v", c.ids)) + params.Set("metrics", fmt.Sprintf("%v", c.metrics)) + params.Set("start-date", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimensions"]; ok { + params.Set("dimensions", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["output"]; ok { + params.Set("output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["samplingLevel"]; ok { + params.Set("samplingLevel", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["segment"]; ok { + params.Set("segment", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "data/ga") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(GaData) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns Analytics data for a view (profile).", + // "httpMethod": "GET", + // "id": "analytics.data.ga.get", + // "parameterOrder": [ + // "ids", + // "start-date", + // "end-date", + // "metrics" + // ], + // "parameters": { + // "dimensions": { + // "description": "A comma-separated list of Analytics dimensions. E.g., 'ga:browser,ga:city'.", + // "location": "query", + // "pattern": "(ga:.+)?", + // "type": "string" + // }, + // "end-date": { + // "description": "End date for fetching Analytics data. Request can should specify an end date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is yesterday.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + // "required": true, + // "type": "string" + // }, + // "filters": { + // "description": "A comma-separated list of dimension or metric filters to be applied to Analytics data.", + // "location": "query", + // "pattern": "ga:.+", + // "type": "string" + // }, + // "ids": { + // "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + // "location": "query", + // "pattern": "ga:[0-9]+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of entries to include in this feed.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "metrics": { + // "description": "A comma-separated list of Analytics metrics. E.g., 'ga:visits,ga:pageviews'. At least one metric must be specified.", + // "location": "query", + // "pattern": "ga:.+", + // "required": true, + // "type": "string" + // }, + // "output": { + // "description": "The selected format for the response. Default format is JSON.", + // "enum": [ + // "dataTable", + // "json" + // ], + // "enumDescriptions": [ + // "Returns the response in Google Charts Data Table format. This is useful in creating visualization using Google Charts.", + // "Returns the response in standard JSON format." + // ], + // "location": "query", + // "type": "string" + // }, + // "samplingLevel": { + // "description": "The desired sampling level.", + // "enum": [ + // "DEFAULT", + // "FASTER", + // "HIGHER_PRECISION" + // ], + // "enumDescriptions": [ + // "Returns response with a sample size that balances speed and accuracy.", + // "Returns a fast response with a smaller sample size.", + // "Returns a more accurate response using a large sample size, but this may result in the response being slower." + // ], + // "location": "query", + // "type": "string" + // }, + // "segment": { + // "description": "An Analytics segment to be applied to data.", + // "location": "query", + // "type": "string" + // }, + // "sort": { + // "description": "A comma-separated list of dimensions or metrics that determine the sort order for Analytics data.", + // "location": "query", + // "pattern": "(-)?ga:.+", + // "type": "string" + // }, + // "start-date": { + // "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "data/ga", + // "response": { + // "$ref": "GaData" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.data.mcf.get": + +type DataMcfGetCall struct { + s *Service + ids string + startDate string + endDate string + metrics string + opt_ map[string]interface{} +} + +// Get: Returns Analytics Multi-Channel Funnels data for a view +// (profile). +func (r *DataMcfService) Get(ids string, startDate string, endDate string, metrics string) *DataMcfGetCall { + c := &DataMcfGetCall{s: r.s, opt_: make(map[string]interface{})} + c.ids = ids + c.startDate = startDate + c.endDate = endDate + c.metrics = metrics + return c +} + +// Dimensions sets the optional parameter "dimensions": A +// comma-separated list of Multi-Channel Funnels dimensions. E.g., +// 'mcf:source,mcf:medium'. +func (c *DataMcfGetCall) Dimensions(dimensions string) *DataMcfGetCall { + c.opt_["dimensions"] = dimensions + return c +} + +// Filters sets the optional parameter "filters": A comma-separated list +// of dimension or metric filters to be applied to the Analytics data. +func (c *DataMcfGetCall) Filters(filters string) *DataMcfGetCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of entries to include in this feed. +func (c *DataMcfGetCall) MaxResults(maxResults int64) *DataMcfGetCall { + c.opt_["max-results"] = maxResults + return c +} + +// SamplingLevel sets the optional parameter "samplingLevel": The +// desired sampling level. +func (c *DataMcfGetCall) SamplingLevel(samplingLevel string) *DataMcfGetCall { + c.opt_["samplingLevel"] = samplingLevel + return c +} + +// Sort sets the optional parameter "sort": A comma-separated list of +// dimensions or metrics that determine the sort order for the Analytics +// data. +func (c *DataMcfGetCall) Sort(sort string) *DataMcfGetCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *DataMcfGetCall) StartIndex(startIndex int64) *DataMcfGetCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *DataMcfGetCall) Do() (*McfData, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("end-date", fmt.Sprintf("%v", c.endDate)) + params.Set("ids", fmt.Sprintf("%v", c.ids)) + params.Set("metrics", fmt.Sprintf("%v", c.metrics)) + params.Set("start-date", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["dimensions"]; ok { + params.Set("dimensions", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["samplingLevel"]; ok { + params.Set("samplingLevel", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "data/mcf") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(McfData) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns Analytics Multi-Channel Funnels data for a view (profile).", + // "httpMethod": "GET", + // "id": "analytics.data.mcf.get", + // "parameterOrder": [ + // "ids", + // "start-date", + // "end-date", + // "metrics" + // ], + // "parameters": { + // "dimensions": { + // "description": "A comma-separated list of Multi-Channel Funnels dimensions. E.g., 'mcf:source,mcf:medium'.", + // "location": "query", + // "pattern": "(mcf:.+)?", + // "type": "string" + // }, + // "end-date": { + // "description": "End date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + // "required": true, + // "type": "string" + // }, + // "filters": { + // "description": "A comma-separated list of dimension or metric filters to be applied to the Analytics data.", + // "location": "query", + // "pattern": "mcf:.+", + // "type": "string" + // }, + // "ids": { + // "description": "Unique table ID for retrieving Analytics data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + // "location": "query", + // "pattern": "ga:[0-9]+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of entries to include in this feed.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "metrics": { + // "description": "A comma-separated list of Multi-Channel Funnels metrics. E.g., 'mcf:totalConversions,mcf:totalConversionValue'. At least one metric must be specified.", + // "location": "query", + // "pattern": "mcf:.+", + // "required": true, + // "type": "string" + // }, + // "samplingLevel": { + // "description": "The desired sampling level.", + // "enum": [ + // "DEFAULT", + // "FASTER", + // "HIGHER_PRECISION" + // ], + // "enumDescriptions": [ + // "Returns response with a sample size that balances speed and accuracy.", + // "Returns a fast response with a smaller sample size.", + // "Returns a more accurate response using a large sample size, but this may result in the response being slower." + // ], + // "location": "query", + // "type": "string" + // }, + // "sort": { + // "description": "A comma-separated list of dimensions or metrics that determine the sort order for the Analytics data.", + // "location": "query", + // "pattern": "(-)?mcf:.+", + // "type": "string" + // }, + // "start-date": { + // "description": "Start date for fetching Analytics data. Requests can specify a start date formatted as YYYY-MM-DD, or as a relative date (e.g., today, yesterday, or 7daysAgo). The default value is 7daysAgo.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}|today|yesterday|[0-9]+(daysAgo)", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "data/mcf", + // "response": { + // "$ref": "McfData" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.data.realtime.get": + +type DataRealtimeGetCall struct { + s *Service + ids string + metrics string + opt_ map[string]interface{} +} + +// Get: Returns real time data for a view (profile). +func (r *DataRealtimeService) Get(ids string, metrics string) *DataRealtimeGetCall { + c := &DataRealtimeGetCall{s: r.s, opt_: make(map[string]interface{})} + c.ids = ids + c.metrics = metrics + return c +} + +// Dimensions sets the optional parameter "dimensions": A +// comma-separated list of real time dimensions. E.g., +// 'rt:medium,rt:city'. +func (c *DataRealtimeGetCall) Dimensions(dimensions string) *DataRealtimeGetCall { + c.opt_["dimensions"] = dimensions + return c +} + +// Filters sets the optional parameter "filters": A comma-separated list +// of dimension or metric filters to be applied to real time data. +func (c *DataRealtimeGetCall) Filters(filters string) *DataRealtimeGetCall { + c.opt_["filters"] = filters + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of entries to include in this feed. +func (c *DataRealtimeGetCall) MaxResults(maxResults int64) *DataRealtimeGetCall { + c.opt_["max-results"] = maxResults + return c +} + +// Sort sets the optional parameter "sort": A comma-separated list of +// dimensions or metrics that determine the sort order for real time +// data. +func (c *DataRealtimeGetCall) Sort(sort string) *DataRealtimeGetCall { + c.opt_["sort"] = sort + return c +} + +func (c *DataRealtimeGetCall) Do() (*RealtimeData, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("ids", fmt.Sprintf("%v", c.ids)) + params.Set("metrics", fmt.Sprintf("%v", c.metrics)) + if v, ok := c.opt_["dimensions"]; ok { + params.Set("dimensions", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filters"]; ok { + params.Set("filters", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "data/realtime") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RealtimeData) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns real time data for a view (profile).", + // "httpMethod": "GET", + // "id": "analytics.data.realtime.get", + // "parameterOrder": [ + // "ids", + // "metrics" + // ], + // "parameters": { + // "dimensions": { + // "description": "A comma-separated list of real time dimensions. E.g., 'rt:medium,rt:city'.", + // "location": "query", + // "pattern": "(ga:.+)|(rt:.+)", + // "type": "string" + // }, + // "filters": { + // "description": "A comma-separated list of dimension or metric filters to be applied to real time data.", + // "location": "query", + // "pattern": "(ga:.+)|(rt:.+)", + // "type": "string" + // }, + // "ids": { + // "description": "Unique table ID for retrieving real time data. Table ID is of the form ga:XXXX, where XXXX is the Analytics view (profile) ID.", + // "location": "query", + // "pattern": "ga:[0-9]+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of entries to include in this feed.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "metrics": { + // "description": "A comma-separated list of real time metrics. E.g., 'rt:activeVisitors'. At least one metric must be specified.", + // "location": "query", + // "pattern": "(ga:.+)|(rt:.+)", + // "required": true, + // "type": "string" + // }, + // "sort": { + // "description": "A comma-separated list of dimensions or metrics that determine the sort order for real time data.", + // "location": "query", + // "pattern": "(-)?((ga:.+)|(rt:.+))", + // "type": "string" + // } + // }, + // "path": "data/realtime", + // "response": { + // "$ref": "RealtimeData" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.accountSummaries.list": + +type ManagementAccountSummariesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists account summaries (lightweight tree comprised of +// accounts/properties/profiles) to which the user has access. +func (r *ManagementAccountSummariesService) List() *ManagementAccountSummariesListCall { + c := &ManagementAccountSummariesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of filters to include in this response. +func (c *ManagementAccountSummariesListCall) MaxResults(maxResults int64) *ManagementAccountSummariesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementAccountSummariesListCall) StartIndex(startIndex int64) *ManagementAccountSummariesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementAccountSummariesListCall) Do() (*AccountSummaries, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accountSummaries") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AccountSummaries) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists account summaries (lightweight tree comprised of accounts/properties/profiles) to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.accountSummaries.list", + // "parameters": { + // "max-results": { + // "description": "The maximum number of filters to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accountSummaries", + // "response": { + // "$ref": "AccountSummaries" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.accountUserLinks.delete": + +type ManagementAccountUserLinksDeleteCall struct { + s *Service + accountId string + linkId string + opt_ map[string]interface{} +} + +// Delete: Removes a user from the given account. +func (r *ManagementAccountUserLinksService) Delete(accountId string, linkId string) *ManagementAccountUserLinksDeleteCall { + c := &ManagementAccountUserLinksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.linkId = linkId + return c +} + +func (c *ManagementAccountUserLinksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a user from the given account.", + // "httpMethod": "DELETE", + // "id": "analytics.management.accountUserLinks.delete", + // "parameterOrder": [ + // "accountId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/entityUserLinks/{linkId}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.accountUserLinks.insert": + +type ManagementAccountUserLinksInsertCall struct { + s *Service + accountId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Insert: Adds a new user to the given account. +func (r *ManagementAccountUserLinksService) Insert(accountId string, entityuserlink *EntityUserLink) *ManagementAccountUserLinksInsertCall { + c := &ManagementAccountUserLinksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementAccountUserLinksInsertCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a new user to the given account.", + // "httpMethod": "POST", + // "id": "analytics.management.accountUserLinks.insert", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/entityUserLinks", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.accountUserLinks.list": + +type ManagementAccountUserLinksListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: Lists account-user links for a given account. +func (r *ManagementAccountUserLinksService) List(accountId string) *ManagementAccountUserLinksListCall { + c := &ManagementAccountUserLinksListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of account-user links to include in this response. +func (c *ManagementAccountUserLinksListCall) MaxResults(maxResults int64) *ManagementAccountUserLinksListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first account-user link to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementAccountUserLinksListCall) StartIndex(startIndex int64) *ManagementAccountUserLinksListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementAccountUserLinksListCall) Do() (*EntityUserLinks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLinks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists account-user links for a given account.", + // "httpMethod": "GET", + // "id": "analytics.management.accountUserLinks.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve the user links for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of account-user links to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first account-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accounts/{accountId}/entityUserLinks", + // "response": { + // "$ref": "EntityUserLinks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.accountUserLinks.update": + +type ManagementAccountUserLinksUpdateCall struct { + s *Service + accountId string + linkId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Update: Updates permissions for an existing user on the given +// account. +func (r *ManagementAccountUserLinksService) Update(accountId string, linkId string, entityuserlink *EntityUserLink) *ManagementAccountUserLinksUpdateCall { + c := &ManagementAccountUserLinksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.linkId = linkId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementAccountUserLinksUpdateCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates permissions for an existing user on the given account.", + // "httpMethod": "PUT", + // "id": "analytics.management.accountUserLinks.update", + // "parameterOrder": [ + // "accountId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to update the account-user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to update the account-user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/entityUserLinks/{linkId}", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.accounts.list": + +type ManagementAccountsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all accounts to which the user has access. +func (r *ManagementAccountsService) List() *ManagementAccountsListCall { + c := &ManagementAccountsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of accounts to include in this response. +func (c *ManagementAccountsListCall) MaxResults(maxResults int64) *ManagementAccountsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first account to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementAccountsListCall) StartIndex(startIndex int64) *ManagementAccountsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementAccountsListCall) Do() (*Accounts, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Accounts) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all accounts to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.accounts.list", + // "parameters": { + // "max-results": { + // "description": "The maximum number of accounts to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first account to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accounts", + // "response": { + // "$ref": "Accounts" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.customDataSources.list": + +type ManagementCustomDataSourcesListCall struct { + s *Service + accountId string + webPropertyId string + opt_ map[string]interface{} +} + +// List: List custom data sources to which the user has access. +func (r *ManagementCustomDataSourcesService) List(accountId string, webPropertyId string) *ManagementCustomDataSourcesListCall { + c := &ManagementCustomDataSourcesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of custom data sources to include in this response. +func (c *ManagementCustomDataSourcesListCall) MaxResults(maxResults int64) *ManagementCustomDataSourcesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": A 1-based index +// of the first custom data source to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementCustomDataSourcesListCall) StartIndex(startIndex int64) *ManagementCustomDataSourcesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementCustomDataSourcesListCall) Do() (*CustomDataSources, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomDataSources) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List custom data sources to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.customDataSources.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id for the custom data sources to retrieve.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of custom data sources to include in this response.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "start-index": { + // "description": "A 1-based index of the first custom data source to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property Id for the custom data sources to retrieve.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources", + // "response": { + // "$ref": "CustomDataSources" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.dailyUploads.delete": + +type ManagementDailyUploadsDeleteCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + date string + type_ string + opt_ map[string]interface{} +} + +// Delete: Delete uploaded data for the given date. +func (r *ManagementDailyUploadsService) Delete(accountId string, webPropertyId string, customDataSourceId string, date string, type_ string) *ManagementDailyUploadsDeleteCall { + c := &ManagementDailyUploadsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + c.date = date + c.type_ = type_ + return c +} + +func (c *ManagementDailyUploadsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("type", fmt.Sprintf("%v", c.type_)) + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{date}", url.QueryEscape(c.date), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete uploaded data for the given date.", + // "httpMethod": "DELETE", + // "id": "analytics.management.dailyUploads.delete", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId", + // "date", + // "type" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id associated with daily upload delete.", + // "location": "path", + // "pattern": "[0-9]+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id associated with daily upload delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "date": { + // "description": "Date for which data is to be deleted. Date should be formatted as YYYY-MM-DD.", + // "location": "path", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "type": { + // "description": "Type of data for this delete.", + // "enum": [ + // "cost" + // ], + // "enumDescriptions": [ + // "Value for specifying cost data upload." + // ], + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property Id associated with daily upload delete.", + // "location": "path", + // "pattern": "UA-[0-9]+-[0-9]+", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.dailyUploads.list": + +type ManagementDailyUploadsListCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + startDate string + endDate string + opt_ map[string]interface{} +} + +// List: List daily uploads to which the user has access. +func (r *ManagementDailyUploadsService) List(accountId string, webPropertyId string, customDataSourceId string, startDate string, endDate string) *ManagementDailyUploadsListCall { + c := &ManagementDailyUploadsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + c.startDate = startDate + c.endDate = endDate + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of custom data sources to include in this response. +func (c *ManagementDailyUploadsListCall) MaxResults(maxResults int64) *ManagementDailyUploadsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": A 1-based index +// of the first daily upload to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementDailyUploadsListCall) StartIndex(startIndex int64) *ManagementDailyUploadsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementDailyUploadsListCall) Do() (*DailyUploads, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("end-date", fmt.Sprintf("%v", c.endDate)) + params.Set("start-date", fmt.Sprintf("%v", c.startDate)) + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DailyUploads) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List daily uploads to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.dailyUploads.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId", + // "start-date", + // "end-date" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id for the daily uploads to retrieve.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id for daily uploads to retrieve.", + // "location": "path", + // "pattern": ".{22}", + // "required": true, + // "type": "string" + // }, + // "end-date": { + // "description": "End date of the form YYYY-MM-DD.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of custom data sources to include in this response.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "start-date": { + // "description": "Start date of the form YYYY-MM-DD.", + // "location": "query", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "A 1-based index of the first daily upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property Id for the daily uploads to retrieve.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads", + // "response": { + // "$ref": "DailyUploads" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.dailyUploads.upload": + +type ManagementDailyUploadsUploadCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + date string + appendNumber int64 + type_ string + opt_ map[string]interface{} + media_ io.Reader +} + +// Upload: Update/Overwrite data for a custom data source. +func (r *ManagementDailyUploadsService) Upload(accountId string, webPropertyId string, customDataSourceId string, date string, appendNumber int64, type_ string) *ManagementDailyUploadsUploadCall { + c := &ManagementDailyUploadsUploadCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + c.date = date + c.appendNumber = appendNumber + c.type_ = type_ + return c +} + +// Reset sets the optional parameter "reset": Reset/Overwrite all +// previous appends for this date and start over with this file as the +// first upload. +func (c *ManagementDailyUploadsUploadCall) Reset(reset bool) *ManagementDailyUploadsUploadCall { + c.opt_["reset"] = reset + return c +} +func (c *ManagementDailyUploadsUploadCall) Media(r io.Reader) *ManagementDailyUploadsUploadCall { + c.media_ = r + return c +} + +func (c *ManagementDailyUploadsUploadCall) Do() (*DailyUploadAppend, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("appendNumber", fmt.Sprintf("%v", c.appendNumber)) + params.Set("type", fmt.Sprintf("%v", c.type_)) + if v, ok := c.opt_["reset"]; ok { + params.Set("reset", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{date}", url.QueryEscape(c.date), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DailyUploadAppend) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update/Overwrite data for a custom data source.", + // "httpMethod": "POST", + // "id": "analytics.management.dailyUploads.upload", + // "mediaUpload": { + // "accept": [ + // "application/octet-stream" + // ], + // "maxSize": "5MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads" + // } + // } + // }, + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId", + // "date", + // "appendNumber", + // "type" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id associated with daily upload.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "appendNumber": { + // "description": "Append number for this upload indexed from 1.", + // "format": "int32", + // "location": "query", + // "maximum": "20", + // "minimum": "1", + // "required": true, + // "type": "integer" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id to which the data being uploaded belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "date": { + // "description": "Date for which data is uploaded. Date should be formatted as YYYY-MM-DD.", + // "location": "path", + // "pattern": "[0-9]{4}-[0-9]{2}-[0-9]{2}", + // "required": true, + // "type": "string" + // }, + // "reset": { + // "default": "false", + // "description": "Reset/Overwrite all previous appends for this date and start over with this file as the first upload.", + // "location": "query", + // "type": "boolean" + // }, + // "type": { + // "description": "Type of data for this upload.", + // "enum": [ + // "cost" + // ], + // "enumDescriptions": [ + // "Value for specifying cost data upload." + // ], + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property Id associated with daily upload.", + // "location": "path", + // "pattern": "UA-\\d+-\\d+", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/dailyUploads/{date}/uploads", + // "response": { + // "$ref": "DailyUploadAppend" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "analytics.management.experiments.delete": + +type ManagementExperimentsDeleteCall struct { + s *Service + accountId string + webPropertyId string + profileId string + experimentId string + opt_ map[string]interface{} +} + +// Delete: Delete an experiment. +func (r *ManagementExperimentsService) Delete(accountId string, webPropertyId string, profileId string, experimentId string) *ManagementExperimentsDeleteCall { + c := &ManagementExperimentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.experimentId = experimentId + return c +} + +func (c *ManagementExperimentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{experimentId}", url.QueryEscape(c.experimentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete an experiment.", + // "httpMethod": "DELETE", + // "id": "analytics.management.experiments.delete", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "experimentId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to which the experiment belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "experimentId": { + // "description": "ID of the experiment to delete", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to which the experiment belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to which the experiment belongs", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.experiments.get": + +type ManagementExperimentsGetCall struct { + s *Service + accountId string + webPropertyId string + profileId string + experimentId string + opt_ map[string]interface{} +} + +// Get: Returns an experiment to which the user has access. +func (r *ManagementExperimentsService) Get(accountId string, webPropertyId string, profileId string, experimentId string) *ManagementExperimentsGetCall { + c := &ManagementExperimentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.experimentId = experimentId + return c +} + +func (c *ManagementExperimentsGetCall) Do() (*Experiment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{experimentId}", url.QueryEscape(c.experimentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Experiment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns an experiment to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.experiments.get", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "experimentId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "experimentId": { + // "description": "Experiment ID to retrieve the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + // "response": { + // "$ref": "Experiment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.experiments.insert": + +type ManagementExperimentsInsertCall struct { + s *Service + accountId string + webPropertyId string + profileId string + experiment *Experiment + opt_ map[string]interface{} +} + +// Insert: Create a new experiment. +func (r *ManagementExperimentsService) Insert(accountId string, webPropertyId string, profileId string, experiment *Experiment) *ManagementExperimentsInsertCall { + c := &ManagementExperimentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.experiment = experiment + return c +} + +func (c *ManagementExperimentsInsertCall) Do() (*Experiment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Experiment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new experiment.", + // "httpMethod": "POST", + // "id": "analytics.management.experiments.insert", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to create the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to create the experiment for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", + // "request": { + // "$ref": "Experiment" + // }, + // "response": { + // "$ref": "Experiment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.experiments.list": + +type ManagementExperimentsListCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// List: Lists experiments to which the user has access. +func (r *ManagementExperimentsService) List(accountId string, webPropertyId string, profileId string) *ManagementExperimentsListCall { + c := &ManagementExperimentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of experiments to include in this response. +func (c *ManagementExperimentsListCall) MaxResults(maxResults int64) *ManagementExperimentsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first experiment to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementExperimentsListCall) StartIndex(startIndex int64) *ManagementExperimentsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementExperimentsListCall) Do() (*Experiments, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Experiments) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists experiments to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.experiments.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve experiments for.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of experiments to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve experiments for.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first experiment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve experiments for.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments", + // "response": { + // "$ref": "Experiments" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.experiments.patch": + +type ManagementExperimentsPatchCall struct { + s *Service + accountId string + webPropertyId string + profileId string + experimentId string + experiment *Experiment + opt_ map[string]interface{} +} + +// Patch: Update an existing experiment. This method supports patch +// semantics. +func (r *ManagementExperimentsService) Patch(accountId string, webPropertyId string, profileId string, experimentId string, experiment *Experiment) *ManagementExperimentsPatchCall { + c := &ManagementExperimentsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.experimentId = experimentId + c.experiment = experiment + return c +} + +func (c *ManagementExperimentsPatchCall) Do() (*Experiment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{experimentId}", url.QueryEscape(c.experimentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Experiment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update an existing experiment. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "analytics.management.experiments.patch", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "experimentId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "experimentId": { + // "description": "Experiment ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + // "request": { + // "$ref": "Experiment" + // }, + // "response": { + // "$ref": "Experiment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.experiments.update": + +type ManagementExperimentsUpdateCall struct { + s *Service + accountId string + webPropertyId string + profileId string + experimentId string + experiment *Experiment + opt_ map[string]interface{} +} + +// Update: Update an existing experiment. +func (r *ManagementExperimentsService) Update(accountId string, webPropertyId string, profileId string, experimentId string, experiment *Experiment) *ManagementExperimentsUpdateCall { + c := &ManagementExperimentsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.experimentId = experimentId + c.experiment = experiment + return c +} + +func (c *ManagementExperimentsUpdateCall) Do() (*Experiment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.experiment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{experimentId}", url.QueryEscape(c.experimentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Experiment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update an existing experiment.", + // "httpMethod": "PUT", + // "id": "analytics.management.experiments.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "experimentId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "experimentId": { + // "description": "Experiment ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID of the experiment to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/experiments/{experimentId}", + // "request": { + // "$ref": "Experiment" + // }, + // "response": { + // "$ref": "Experiment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.goals.get": + +type ManagementGoalsGetCall struct { + s *Service + accountId string + webPropertyId string + profileId string + goalId string + opt_ map[string]interface{} +} + +// Get: Gets a goal to which the user has access. +func (r *ManagementGoalsService) Get(accountId string, webPropertyId string, profileId string, goalId string) *ManagementGoalsGetCall { + c := &ManagementGoalsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.goalId = goalId + return c +} + +func (c *ManagementGoalsGetCall) Do() (*Goal, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{goalId}", url.QueryEscape(c.goalId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Goal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a goal to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.goals.get", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "goalId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "goalId": { + // "description": "Goal ID to retrieve the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + // "response": { + // "$ref": "Goal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.goals.insert": + +type ManagementGoalsInsertCall struct { + s *Service + accountId string + webPropertyId string + profileId string + goal *Goal + opt_ map[string]interface{} +} + +// Insert: Create a new goal. +func (r *ManagementGoalsService) Insert(accountId string, webPropertyId string, profileId string, goal *Goal) *ManagementGoalsInsertCall { + c := &ManagementGoalsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.goal = goal + return c +} + +func (c *ManagementGoalsInsertCall) Do() (*Goal, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Goal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new goal.", + // "httpMethod": "POST", + // "id": "analytics.management.goals.insert", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to create the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to create the goal for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + // "request": { + // "$ref": "Goal" + // }, + // "response": { + // "$ref": "Goal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.goals.list": + +type ManagementGoalsListCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// List: Lists goals to which the user has access. +func (r *ManagementGoalsService) List(accountId string, webPropertyId string, profileId string) *ManagementGoalsListCall { + c := &ManagementGoalsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of goals to include in this response. +func (c *ManagementGoalsListCall) MaxResults(maxResults int64) *ManagementGoalsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first goal to retrieve. Use this parameter as a pagination mechanism +// along with the max-results parameter. +func (c *ManagementGoalsListCall) StartIndex(startIndex int64) *ManagementGoalsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementGoalsListCall) Do() (*Goals, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Goals) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists goals to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.goals.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve goals for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of goals to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve goals for. Can either be a specific view (profile) ID or '~all', which refers to all the views (profiles) that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first goal to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve goals for. Can either be a specific web property ID or '~all', which refers to all the web properties that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals", + // "response": { + // "$ref": "Goals" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.goals.patch": + +type ManagementGoalsPatchCall struct { + s *Service + accountId string + webPropertyId string + profileId string + goalId string + goal *Goal + opt_ map[string]interface{} +} + +// Patch: Updates an existing view (profile). This method supports patch +// semantics. +func (r *ManagementGoalsService) Patch(accountId string, webPropertyId string, profileId string, goalId string, goal *Goal) *ManagementGoalsPatchCall { + c := &ManagementGoalsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.goalId = goalId + c.goal = goal + return c +} + +func (c *ManagementGoalsPatchCall) Do() (*Goal, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{goalId}", url.QueryEscape(c.goalId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Goal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing view (profile). This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "analytics.management.goals.patch", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "goalId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "goalId": { + // "description": "Index of the goal to be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + // "request": { + // "$ref": "Goal" + // }, + // "response": { + // "$ref": "Goal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.goals.update": + +type ManagementGoalsUpdateCall struct { + s *Service + accountId string + webPropertyId string + profileId string + goalId string + goal *Goal + opt_ map[string]interface{} +} + +// Update: Updates an existing view (profile). +func (r *ManagementGoalsService) Update(accountId string, webPropertyId string, profileId string, goalId string, goal *Goal) *ManagementGoalsUpdateCall { + c := &ManagementGoalsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.goalId = goalId + c.goal = goal + return c +} + +func (c *ManagementGoalsUpdateCall) Do() (*Goal, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.goal) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{goalId}", url.QueryEscape(c.goalId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Goal) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing view (profile).", + // "httpMethod": "PUT", + // "id": "analytics.management.goals.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "goalId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "goalId": { + // "description": "Index of the goal to be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to update the goal.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/goals/{goalId}", + // "request": { + // "$ref": "Goal" + // }, + // "response": { + // "$ref": "Goal" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.profileUserLinks.delete": + +type ManagementProfileUserLinksDeleteCall struct { + s *Service + accountId string + webPropertyId string + profileId string + linkId string + opt_ map[string]interface{} +} + +// Delete: Removes a user from the given view (profile). +func (r *ManagementProfileUserLinksService) Delete(accountId string, webPropertyId string, profileId string, linkId string) *ManagementProfileUserLinksDeleteCall { + c := &ManagementProfileUserLinksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.linkId = linkId + return c +} + +func (c *ManagementProfileUserLinksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a user from the given view (profile).", + // "httpMethod": "DELETE", + // "id": "analytics.management.profileUserLinks.delete", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web Property ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.profileUserLinks.insert": + +type ManagementProfileUserLinksInsertCall struct { + s *Service + accountId string + webPropertyId string + profileId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Insert: Adds a new user to the given view (profile). +func (r *ManagementProfileUserLinksService) Insert(accountId string, webPropertyId string, profileId string, entityuserlink *EntityUserLink) *ManagementProfileUserLinksInsertCall { + c := &ManagementProfileUserLinksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementProfileUserLinksInsertCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a new user to the given view (profile).", + // "httpMethod": "POST", + // "id": "analytics.management.profileUserLinks.insert", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web Property ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.profileUserLinks.list": + +type ManagementProfileUserLinksListCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// List: Lists profile-user links for a given view (profile). +func (r *ManagementProfileUserLinksService) List(accountId string, webPropertyId string, profileId string) *ManagementProfileUserLinksListCall { + c := &ManagementProfileUserLinksListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of profile-user links to include in this response. +func (c *ManagementProfileUserLinksListCall) MaxResults(maxResults int64) *ManagementProfileUserLinksListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first profile-user link to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementProfileUserLinksListCall) StartIndex(startIndex int64) *ManagementProfileUserLinksListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementProfileUserLinksListCall) Do() (*EntityUserLinks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLinks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists profile-user links for a given view (profile).", + // "httpMethod": "GET", + // "id": "analytics.management.profileUserLinks.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID which the given view (profile) belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of profile-user links to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve the profile-user links for", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "start-index": { + // "description": "An index of the first profile-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web Property ID which the given view (profile) belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks", + // "response": { + // "$ref": "EntityUserLinks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.profileUserLinks.update": + +type ManagementProfileUserLinksUpdateCall struct { + s *Service + accountId string + webPropertyId string + profileId string + linkId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Update: Updates permissions for an existing user on the given view +// (profile). +func (r *ManagementProfileUserLinksService) Update(accountId string, webPropertyId string, profileId string, linkId string, entityuserlink *EntityUserLink) *ManagementProfileUserLinksUpdateCall { + c := &ManagementProfileUserLinksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.linkId = linkId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementProfileUserLinksUpdateCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates permissions for an existing user on the given view (profile).", + // "httpMethod": "PUT", + // "id": "analytics.management.profileUserLinks.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to update the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to update the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile ID) to update the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web Property ID to update the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}/entityUserLinks/{linkId}", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.profiles.delete": + +type ManagementProfilesDeleteCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// Delete: Deletes a view (profile). +func (r *ManagementProfilesService) Delete(accountId string, webPropertyId string, profileId string) *ManagementProfilesDeleteCall { + c := &ManagementProfilesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +func (c *ManagementProfilesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a view (profile).", + // "httpMethod": "DELETE", + // "id": "analytics.management.profiles.delete", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to delete the view (profile) for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "ID of the view (profile) to be deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to delete the view (profile) for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.profiles.get": + +type ManagementProfilesGetCall struct { + s *Service + accountId string + webPropertyId string + profileId string + opt_ map[string]interface{} +} + +// Get: Gets a view (profile) to which the user has access. +func (r *ManagementProfilesService) Get(accountId string, webPropertyId string, profileId string) *ManagementProfilesGetCall { + c := &ManagementProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + return c +} + +func (c *ManagementProfilesGetCall) Do() (*Profile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a view (profile) to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.profiles.get", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve the goal for.", + // "location": "path", + // "pattern": "[0-9]+", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "View (Profile) ID to retrieve the goal for.", + // "location": "path", + // "pattern": "[0-9]+", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to retrieve the goal for.", + // "location": "path", + // "pattern": "UA-[0-9]+-[0-9]+", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.profiles.insert": + +type ManagementProfilesInsertCall struct { + s *Service + accountId string + webPropertyId string + profile *Profile + opt_ map[string]interface{} +} + +// Insert: Create a new view (profile). +func (r *ManagementProfilesService) Insert(accountId string, webPropertyId string, profile *Profile) *ManagementProfilesInsertCall { + c := &ManagementProfilesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profile = profile + return c +} + +func (c *ManagementProfilesInsertCall) Do() (*Profile, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new view (profile).", + // "httpMethod": "POST", + // "id": "analytics.management.profiles.insert", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the view (profile) for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to create the view (profile) for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + // "request": { + // "$ref": "Profile" + // }, + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.profiles.list": + +type ManagementProfilesListCall struct { + s *Service + accountId string + webPropertyId string + opt_ map[string]interface{} +} + +// List: Lists views (profiles) to which the user has access. +func (r *ManagementProfilesService) List(accountId string, webPropertyId string) *ManagementProfilesListCall { + c := &ManagementProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of views (profiles) to include in this response. +func (c *ManagementProfilesListCall) MaxResults(maxResults int64) *ManagementProfilesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementProfilesListCall) StartIndex(startIndex int64) *ManagementProfilesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementProfilesListCall) Do() (*Profiles, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profiles) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists views (profiles) to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.profiles.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID for the view (profiles) to retrieve. Can either be a specific account ID or '~all', which refers to all the accounts to which the user has access.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of views (profiles) to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property ID for the views (profiles) to retrieve. Can either be a specific web property ID or '~all', which refers to all the web properties to which the user has access.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles", + // "response": { + // "$ref": "Profiles" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.profiles.patch": + +type ManagementProfilesPatchCall struct { + s *Service + accountId string + webPropertyId string + profileId string + profile *Profile + opt_ map[string]interface{} +} + +// Patch: Updates an existing view (profile). This method supports patch +// semantics. +func (r *ManagementProfilesService) Patch(accountId string, webPropertyId string, profileId string, profile *Profile) *ManagementProfilesPatchCall { + c := &ManagementProfilesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.profile = profile + return c +} + +func (c *ManagementProfilesPatchCall) Do() (*Profile, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing view (profile). This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "analytics.management.profiles.patch", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to which the view (profile) belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "ID of the view (profile) to be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to which the view (profile) belongs", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + // "request": { + // "$ref": "Profile" + // }, + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.profiles.update": + +type ManagementProfilesUpdateCall struct { + s *Service + accountId string + webPropertyId string + profileId string + profile *Profile + opt_ map[string]interface{} +} + +// Update: Updates an existing view (profile). +func (r *ManagementProfilesService) Update(accountId string, webPropertyId string, profileId string, profile *Profile) *ManagementProfilesUpdateCall { + c := &ManagementProfilesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.profileId = profileId + c.profile = profile + return c +} + +func (c *ManagementProfilesUpdateCall) Do() (*Profile, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.profile) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", url.QueryEscape(c.profileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing view (profile).", + // "httpMethod": "PUT", + // "id": "analytics.management.profiles.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "profileId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to which the view (profile) belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "ID of the view (profile) to be updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to which the view (profile) belongs", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/profiles/{profileId}", + // "request": { + // "$ref": "Profile" + // }, + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.segments.list": + +type ManagementSegmentsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists segments to which the user has access. +func (r *ManagementSegmentsService) List() *ManagementSegmentsListCall { + c := &ManagementSegmentsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of segments to include in this response. +func (c *ManagementSegmentsListCall) MaxResults(maxResults int64) *ManagementSegmentsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first segment to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementSegmentsListCall) StartIndex(startIndex int64) *ManagementSegmentsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementSegmentsListCall) Do() (*Segments, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/segments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Segments) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists segments to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.segments.list", + // "parameters": { + // "max-results": { + // "description": "The maximum number of segments to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first segment to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/segments", + // "response": { + // "$ref": "Segments" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.uploads.deleteUploadData": + +type ManagementUploadsDeleteUploadDataCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + analyticsdataimportdeleteuploaddatarequest *AnalyticsDataimportDeleteUploadDataRequest + opt_ map[string]interface{} +} + +// DeleteUploadData: Delete data associated with a previous upload. +func (r *ManagementUploadsService) DeleteUploadData(accountId string, webPropertyId string, customDataSourceId string, analyticsdataimportdeleteuploaddatarequest *AnalyticsDataimportDeleteUploadDataRequest) *ManagementUploadsDeleteUploadDataCall { + c := &ManagementUploadsDeleteUploadDataCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + c.analyticsdataimportdeleteuploaddatarequest = analyticsdataimportdeleteuploaddatarequest + return c +} + +func (c *ManagementUploadsDeleteUploadDataCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.analyticsdataimportdeleteuploaddatarequest) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete data associated with a previous upload.", + // "httpMethod": "POST", + // "id": "analytics.management.uploads.deleteUploadData", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id for the uploads to be deleted.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id for the uploads to be deleted.", + // "location": "path", + // "pattern": ".{22}", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property Id for the uploads to be deleted.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/deleteUploadData", + // "request": { + // "$ref": "AnalyticsDataimportDeleteUploadDataRequest" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.uploads.get": + +type ManagementUploadsGetCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + uploadId string + opt_ map[string]interface{} +} + +// Get: List uploads to which the user has access. +func (r *ManagementUploadsService) Get(accountId string, webPropertyId string, customDataSourceId string, uploadId string) *ManagementUploadsGetCall { + c := &ManagementUploadsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + c.uploadId = uploadId + return c +} + +func (c *ManagementUploadsGetCall) Do() (*Upload, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{uploadId}", url.QueryEscape(c.uploadId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Upload) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List uploads to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.uploads.get", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId", + // "uploadId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id for the upload to retrieve.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id for upload to retrieve.", + // "location": "path", + // "pattern": ".{22}", + // "required": true, + // "type": "string" + // }, + // "uploadId": { + // "description": "Upload Id to retrieve.", + // "location": "path", + // "pattern": ".{22}", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property Id for the upload to retrieve.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads/{uploadId}", + // "response": { + // "$ref": "Upload" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.uploads.list": + +type ManagementUploadsListCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + opt_ map[string]interface{} +} + +// List: List uploads to which the user has access. +func (r *ManagementUploadsService) List(accountId string, webPropertyId string, customDataSourceId string) *ManagementUploadsListCall { + c := &ManagementUploadsListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of uploads to include in this response. +func (c *ManagementUploadsListCall) MaxResults(maxResults int64) *ManagementUploadsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": A 1-based index +// of the first upload to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementUploadsListCall) StartIndex(startIndex int64) *ManagementUploadsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementUploadsListCall) Do() (*Uploads, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Uploads) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List uploads to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.uploads.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id for the uploads to retrieve.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id for uploads to retrieve.", + // "location": "path", + // "pattern": ".{22}", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of uploads to include in this response.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "start-index": { + // "description": "A 1-based index of the first upload to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web property Id for the uploads to retrieve.", + // "location": "path", + // "pattern": "UA-(\\d+)-(\\d+)", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", + // "response": { + // "$ref": "Uploads" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.uploads.uploadData": + +type ManagementUploadsUploadDataCall struct { + s *Service + accountId string + webPropertyId string + customDataSourceId string + opt_ map[string]interface{} + media_ io.Reader +} + +// UploadData: Upload data for a custom data source. +func (r *ManagementUploadsService) UploadData(accountId string, webPropertyId string, customDataSourceId string) *ManagementUploadsUploadDataCall { + c := &ManagementUploadsUploadDataCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.customDataSourceId = customDataSourceId + return c +} +func (c *ManagementUploadsUploadDataCall) Media(r io.Reader) *ManagementUploadsUploadDataCall { + c.media_ = r + return c +} + +func (c *ManagementUploadsUploadDataCall) Do() (*Upload, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{customDataSourceId}", url.QueryEscape(c.customDataSourceId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Upload) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Upload data for a custom data source.", + // "httpMethod": "POST", + // "id": "analytics.management.uploads.uploadData", + // "mediaUpload": { + // "accept": [ + // "application/octet-stream" + // ], + // "maxSize": "1GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/analytics/v3/management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads" + // } + // } + // }, + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "customDataSourceId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account Id associated with the upload.", + // "location": "path", + // "pattern": "\\d+", + // "required": true, + // "type": "string" + // }, + // "customDataSourceId": { + // "description": "Custom data source Id to which the data being uploaded belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property UA-string associated with the upload.", + // "location": "path", + // "pattern": "UA-\\d+-\\d+", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/customDataSources/{customDataSourceId}/uploads", + // "response": { + // "$ref": "Upload" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "analytics.management.webproperties.get": + +type ManagementWebpropertiesGetCall struct { + s *Service + accountId string + webPropertyId string + opt_ map[string]interface{} +} + +// Get: Gets a web property to which the user has access. +func (r *ManagementWebpropertiesService) Get(accountId string, webPropertyId string) *ManagementWebpropertiesGetCall { + c := &ManagementWebpropertiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + return c +} + +func (c *ManagementWebpropertiesGetCall) Do() (*Webproperty, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Webproperty) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a web property to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.webproperties.get", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve the web property for.", + // "location": "path", + // "pattern": "[0-9]+", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "ID to retrieve the web property for.", + // "location": "path", + // "pattern": "UA-[0-9]+-[0-9]+", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + // "response": { + // "$ref": "Webproperty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.webproperties.insert": + +type ManagementWebpropertiesInsertCall struct { + s *Service + accountId string + webproperty *Webproperty + opt_ map[string]interface{} +} + +// Insert: Create a new property if the account has fewer than 20 +// properties. Web properties are visible in the Google Analytics +// interface only if they have at least one profile. +func (r *ManagementWebpropertiesService) Insert(accountId string, webproperty *Webproperty) *ManagementWebpropertiesInsertCall { + c := &ManagementWebpropertiesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webproperty = webproperty + return c +} + +func (c *ManagementWebpropertiesInsertCall) Do() (*Webproperty, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Webproperty) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new property if the account has fewer than 20 properties. Web properties are visible in the Google Analytics interface only if they have at least one profile.", + // "httpMethod": "POST", + // "id": "analytics.management.webproperties.insert", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the web property for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties", + // "request": { + // "$ref": "Webproperty" + // }, + // "response": { + // "$ref": "Webproperty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.webproperties.list": + +type ManagementWebpropertiesListCall struct { + s *Service + accountId string + opt_ map[string]interface{} +} + +// List: Lists web properties to which the user has access. +func (r *ManagementWebpropertiesService) List(accountId string) *ManagementWebpropertiesListCall { + c := &ManagementWebpropertiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of web properties to include in this response. +func (c *ManagementWebpropertiesListCall) MaxResults(maxResults int64) *ManagementWebpropertiesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first entity to retrieve. Use this parameter as a pagination +// mechanism along with the max-results parameter. +func (c *ManagementWebpropertiesListCall) StartIndex(startIndex int64) *ManagementWebpropertiesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementWebpropertiesListCall) Do() (*Webproperties, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Webproperties) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists web properties to which the user has access.", + // "httpMethod": "GET", + // "id": "analytics.management.webproperties.list", + // "parameterOrder": [ + // "accountId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to retrieve web properties for. Can either be a specific account ID or '~all', which refers to all the accounts that user has access to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of web properties to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first entity to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties", + // "response": { + // "$ref": "Webproperties" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} + +// method id "analytics.management.webproperties.patch": + +type ManagementWebpropertiesPatchCall struct { + s *Service + accountId string + webPropertyId string + webproperty *Webproperty + opt_ map[string]interface{} +} + +// Patch: Updates an existing web property. This method supports patch +// semantics. +func (r *ManagementWebpropertiesService) Patch(accountId string, webPropertyId string, webproperty *Webproperty) *ManagementWebpropertiesPatchCall { + c := &ManagementWebpropertiesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.webproperty = webproperty + return c +} + +func (c *ManagementWebpropertiesPatchCall) Do() (*Webproperty, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Webproperty) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing web property. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "analytics.management.webproperties.patch", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to which the web property belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + // "request": { + // "$ref": "Webproperty" + // }, + // "response": { + // "$ref": "Webproperty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.webproperties.update": + +type ManagementWebpropertiesUpdateCall struct { + s *Service + accountId string + webPropertyId string + webproperty *Webproperty + opt_ map[string]interface{} +} + +// Update: Updates an existing web property. +func (r *ManagementWebpropertiesService) Update(accountId string, webPropertyId string, webproperty *Webproperty) *ManagementWebpropertiesUpdateCall { + c := &ManagementWebpropertiesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.webproperty = webproperty + return c +} + +func (c *ManagementWebpropertiesUpdateCall) Do() (*Webproperty, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.webproperty) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Webproperty) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing web property.", + // "httpMethod": "PUT", + // "id": "analytics.management.webproperties.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to which the web property belongs", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}", + // "request": { + // "$ref": "Webproperty" + // }, + // "response": { + // "$ref": "Webproperty" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.edit" + // ] + // } + +} + +// method id "analytics.management.webpropertyUserLinks.delete": + +type ManagementWebpropertyUserLinksDeleteCall struct { + s *Service + accountId string + webPropertyId string + linkId string + opt_ map[string]interface{} +} + +// Delete: Removes a user from the given web property. +func (r *ManagementWebpropertyUserLinksService) Delete(accountId string, webPropertyId string, linkId string) *ManagementWebpropertyUserLinksDeleteCall { + c := &ManagementWebpropertyUserLinksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.linkId = linkId + return c +} + +func (c *ManagementWebpropertyUserLinksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a user from the given web property.", + // "httpMethod": "DELETE", + // "id": "analytics.management.webpropertyUserLinks.delete", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web Property ID to delete the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.webpropertyUserLinks.insert": + +type ManagementWebpropertyUserLinksInsertCall struct { + s *Service + accountId string + webPropertyId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Insert: Adds a new user to the given web property. +func (r *ManagementWebpropertyUserLinksService) Insert(accountId string, webPropertyId string, entityuserlink *EntityUserLink) *ManagementWebpropertyUserLinksInsertCall { + c := &ManagementWebpropertyUserLinksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementWebpropertyUserLinksInsertCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a new user to the given web property.", + // "httpMethod": "POST", + // "id": "analytics.management.webpropertyUserLinks.insert", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web Property ID to create the user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.webpropertyUserLinks.list": + +type ManagementWebpropertyUserLinksListCall struct { + s *Service + accountId string + webPropertyId string + opt_ map[string]interface{} +} + +// List: Lists webProperty-user links for a given web property. +func (r *ManagementWebpropertyUserLinksService) List(accountId string, webPropertyId string) *ManagementWebpropertyUserLinksListCall { + c := &ManagementWebpropertyUserLinksListCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + return c +} + +// MaxResults sets the optional parameter "max-results": The maximum +// number of webProperty-user Links to include in this response. +func (c *ManagementWebpropertyUserLinksListCall) MaxResults(maxResults int64) *ManagementWebpropertyUserLinksListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": An index of the +// first webProperty-user link to retrieve. Use this parameter as a +// pagination mechanism along with the max-results parameter. +func (c *ManagementWebpropertyUserLinksListCall) StartIndex(startIndex int64) *ManagementWebpropertyUserLinksListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ManagementWebpropertyUserLinksListCall) Do() (*EntityUserLinks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLinks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists webProperty-user links for a given web property.", + // "httpMethod": "GET", + // "id": "analytics.management.webpropertyUserLinks.list", + // "parameterOrder": [ + // "accountId", + // "webPropertyId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID which the given web property belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "max-results": { + // "description": "The maximum number of webProperty-user Links to include in this response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "start-index": { + // "description": "An index of the first webProperty-user link to retrieve. Use this parameter as a pagination mechanism along with the max-results parameter.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "webPropertyId": { + // "description": "Web Property ID for the webProperty-user links to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks", + // "response": { + // "$ref": "EntityUserLinks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.management.webpropertyUserLinks.update": + +type ManagementWebpropertyUserLinksUpdateCall struct { + s *Service + accountId string + webPropertyId string + linkId string + entityuserlink *EntityUserLink + opt_ map[string]interface{} +} + +// Update: Updates permissions for an existing user on the given web +// property. +func (r *ManagementWebpropertyUserLinksService) Update(accountId string, webPropertyId string, linkId string, entityuserlink *EntityUserLink) *ManagementWebpropertyUserLinksUpdateCall { + c := &ManagementWebpropertyUserLinksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.accountId = accountId + c.webPropertyId = webPropertyId + c.linkId = linkId + c.entityuserlink = entityuserlink + return c +} + +func (c *ManagementWebpropertyUserLinksUpdateCall) Do() (*EntityUserLink, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.entityuserlink) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", url.QueryEscape(c.accountId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{webPropertyId}", url.QueryEscape(c.webPropertyId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", url.QueryEscape(c.linkId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(EntityUserLink) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates permissions for an existing user on the given web property.", + // "httpMethod": "PUT", + // "id": "analytics.management.webpropertyUserLinks.update", + // "parameterOrder": [ + // "accountId", + // "webPropertyId", + // "linkId" + // ], + // "parameters": { + // "accountId": { + // "description": "Account ID to update the account-user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "linkId": { + // "description": "Link ID to update the account-user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "webPropertyId": { + // "description": "Web property ID to update the account-user link for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "management/accounts/{accountId}/webproperties/{webPropertyId}/entityUserLinks/{linkId}", + // "request": { + // "$ref": "EntityUserLink" + // }, + // "response": { + // "$ref": "EntityUserLink" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics.manage.users" + // ] + // } + +} + +// method id "analytics.metadata.columns.list": + +type MetadataColumnsListCall struct { + s *Service + reportType string + opt_ map[string]interface{} +} + +// List: Lists all columns for a report type +func (r *MetadataColumnsService) List(reportType string) *MetadataColumnsListCall { + c := &MetadataColumnsListCall{s: r.s, opt_: make(map[string]interface{})} + c.reportType = reportType + return c +} + +func (c *MetadataColumnsListCall) Do() (*Columns, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "metadata/{reportType}/columns") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{reportType}", url.QueryEscape(c.reportType), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Columns) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all columns for a report type", + // "httpMethod": "GET", + // "id": "analytics.metadata.columns.list", + // "parameterOrder": [ + // "reportType" + // ], + // "parameters": { + // "reportType": { + // "description": "Report type. Allowed Values: 'ga'. Where 'ga' corresponds to the Core Reporting API", + // "location": "path", + // "pattern": "ga", + // "required": true, + // "type": "string" + // } + // }, + // "path": "metadata/{reportType}/columns", + // "response": { + // "$ref": "Columns" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/analytics", + // "https://www.googleapis.com/auth/analytics.edit", + // "https://www.googleapis.com/auth/analytics.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-api.json b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-api.json new file mode 100644 index 0000000000000..7884dace88803 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-api.json @@ -0,0 +1,255 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/i7ndXglQkcB7KPR_-HCYBmUKBRE\"", + "discoveryVersion": "v1", + "id": "androidpublisher:v1.1", + "name": "androidpublisher", + "canonicalName": "Android Publisher", + "version": "v1.1", + "title": "Google Play Android Developer API", + "description": "Lets Android application developers access their Google Play accounts.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/android-16.png", + "x32": "http://www.google.com/images/icons/product/android-32.png" + }, + "documentationLink": "https://developers.google.com/android-publisher", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/androidpublisher/v1.1/applications/", + "basePath": "/androidpublisher/v1.1/applications/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "androidpublisher/v1.1/applications/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/androidpublisher": { + "description": "View and manage your Google Play Android Developer account" + } + } + } + }, + "schemas": { + "InappPurchase": { + "id": "InappPurchase", + "type": "object", + "description": "A Purchase resource indicates the status of a user's subscription purchase.", + "properties": { + "consumptionState": { + "type": "integer", + "description": "The consumption state of the inapp product. Possible values are: \n- Yet to be consumed \n- Consumed", + "format": "int32" + }, + "developerPayload": { + "type": "string", + "description": "A developer-specified string that contains supplemental information about an order." + }, + "kind": { + "type": "string", + "description": "This kind represents a inappPurchase object in the androidpublisher service.", + "default": "androidpublisher#inappPurchase" + }, + "purchaseState": { + "type": "integer", + "description": "The purchase state of the order. Possible values are: \n- Purchased \n- Cancelled", + "format": "int32" + }, + "purchaseTime": { + "type": "string", + "description": "The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).", + "format": "int64" + } + } + }, + "SubscriptionPurchase": { + "id": "SubscriptionPurchase", + "type": "object", + "description": "A Purchase resource indicates the status of a user's subscription purchase.", + "properties": { + "autoRenewing": { + "type": "boolean", + "description": "Whether the subscription will automatically be renewed when it reaches its current expiry time." + }, + "initiationTimestampMsec": { + "type": "string", + "description": "Time at which the subscription was granted, in milliseconds since Epoch.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This kind represents a subscriptionPurchase object in the androidpublisher service.", + "default": "androidpublisher#subscriptionPurchase" + }, + "validUntilTimestampMsec": { + "type": "string", + "description": "Time at which the subscription will expire, in milliseconds since Epoch.", + "format": "int64" + } + } + } + }, + "resources": { + "inapppurchases": { + "methods": { + "get": { + "id": "androidpublisher.inapppurchases.get", + "path": "{packageName}/inapp/{productId}/purchases/{token}", + "httpMethod": "GET", + "description": "Checks the purchase and consumption status of an inapp item.", + "parameters": { + "packageName": { + "type": "string", + "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').", + "required": true, + "location": "path" + }, + "productId": { + "type": "string", + "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').", + "required": true, + "location": "path" + }, + "token": { + "type": "string", + "description": "The token provided to the user's device when the inapp product was purchased.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "packageName", + "productId", + "token" + ], + "response": { + "$ref": "InappPurchase" + }, + "scopes": [ + "https://www.googleapis.com/auth/androidpublisher" + ] + } + } + }, + "purchases": { + "methods": { + "cancel": { + "id": "androidpublisher.purchases.cancel", + "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", + "httpMethod": "POST", + "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.", + "parameters": { + "packageName": { + "type": "string", + "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "The purchased subscription ID (for example, 'monthly001').", + "required": true, + "location": "path" + }, + "token": { + "type": "string", + "description": "The token provided to the user's device when the subscription was purchased.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "packageName", + "subscriptionId", + "token" + ], + "scopes": [ + "https://www.googleapis.com/auth/androidpublisher" + ] + }, + "get": { + "id": "androidpublisher.purchases.get", + "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}", + "httpMethod": "GET", + "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.", + "parameters": { + "packageName": { + "type": "string", + "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "The purchased subscription ID (for example, 'monthly001').", + "required": true, + "location": "path" + }, + "token": { + "type": "string", + "description": "The token provided to the user's device when the subscription was purchased.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "packageName", + "subscriptionId", + "token" + ], + "response": { + "$ref": "SubscriptionPurchase" + }, + "scopes": [ + "https://www.googleapis.com/auth/androidpublisher" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-gen.go b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-gen.go new file mode 100644 index 0000000000000..e9740b165addb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1.1/androidpublisher-gen.go @@ -0,0 +1,374 @@ +// Package androidpublisher provides access to the Google Play Android Developer API. +// +// See https://developers.google.com/android-publisher +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/androidpublisher/v1.1" +// ... +// androidpublisherService, err := androidpublisher.New(oauthHttpClient) +package androidpublisher + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "androidpublisher:v1.1" +const apiName = "androidpublisher" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/androidpublisher/v1.1/applications/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Play Android Developer account + AndroidpublisherScope = "https://www.googleapis.com/auth/androidpublisher" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Inapppurchases = NewInapppurchasesService(s) + s.Purchases = NewPurchasesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Inapppurchases *InapppurchasesService + + Purchases *PurchasesService +} + +func NewInapppurchasesService(s *Service) *InapppurchasesService { + rs := &InapppurchasesService{s: s} + return rs +} + +type InapppurchasesService struct { + s *Service +} + +func NewPurchasesService(s *Service) *PurchasesService { + rs := &PurchasesService{s: s} + return rs +} + +type PurchasesService struct { + s *Service +} + +type InappPurchase struct { + // ConsumptionState: The consumption state of the inapp product. + // Possible values are: + // - Yet to be consumed + // - Consumed + ConsumptionState int64 `json:"consumptionState,omitempty"` + + // DeveloperPayload: A developer-specified string that contains + // supplemental information about an order. + DeveloperPayload string `json:"developerPayload,omitempty"` + + // Kind: This kind represents a inappPurchase object in the + // androidpublisher service. + Kind string `json:"kind,omitempty"` + + // PurchaseState: The purchase state of the order. Possible values are: + // + // - Purchased + // - Cancelled + PurchaseState int64 `json:"purchaseState,omitempty"` + + // PurchaseTime: The time the product was purchased, in milliseconds + // since the epoch (Jan 1, 1970). + PurchaseTime int64 `json:"purchaseTime,omitempty,string"` +} + +type SubscriptionPurchase struct { + // AutoRenewing: Whether the subscription will automatically be renewed + // when it reaches its current expiry time. + AutoRenewing bool `json:"autoRenewing,omitempty"` + + // InitiationTimestampMsec: Time at which the subscription was granted, + // in milliseconds since Epoch. + InitiationTimestampMsec int64 `json:"initiationTimestampMsec,omitempty,string"` + + // Kind: This kind represents a subscriptionPurchase object in the + // androidpublisher service. + Kind string `json:"kind,omitempty"` + + // ValidUntilTimestampMsec: Time at which the subscription will expire, + // in milliseconds since Epoch. + ValidUntilTimestampMsec int64 `json:"validUntilTimestampMsec,omitempty,string"` +} + +// method id "androidpublisher.inapppurchases.get": + +type InapppurchasesGetCall struct { + s *Service + packageName string + productId string + token string + opt_ map[string]interface{} +} + +// Get: Checks the purchase and consumption status of an inapp item. +func (r *InapppurchasesService) Get(packageName string, productId string, token string) *InapppurchasesGetCall { + c := &InapppurchasesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.packageName = packageName + c.productId = productId + c.token = token + return c +} + +func (c *InapppurchasesGetCall) Do() (*InappPurchase, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/inapp/{productId}/purchases/{token}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{packageName}", url.QueryEscape(c.packageName), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{token}", url.QueryEscape(c.token), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InappPurchase) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Checks the purchase and consumption status of an inapp item.", + // "httpMethod": "GET", + // "id": "androidpublisher.inapppurchases.get", + // "parameterOrder": [ + // "packageName", + // "productId", + // "token" + // ], + // "parameters": { + // "packageName": { + // "description": "The package name of the application the inapp product was sold in (for example, 'com.some.thing').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "productId": { + // "description": "The inapp product SKU (for example, 'com.some.thing.inapp1').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "token": { + // "description": "The token provided to the user's device when the inapp product was purchased.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{packageName}/inapp/{productId}/purchases/{token}", + // "response": { + // "$ref": "InappPurchase" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/androidpublisher" + // ] + // } + +} + +// method id "androidpublisher.purchases.cancel": + +type PurchasesCancelCall struct { + s *Service + packageName string + subscriptionId string + token string + opt_ map[string]interface{} +} + +// Cancel: Cancels a user's subscription purchase. The subscription +// remains valid until its expiration time. +func (r *PurchasesService) Cancel(packageName string, subscriptionId string, token string) *PurchasesCancelCall { + c := &PurchasesCancelCall{s: r.s, opt_: make(map[string]interface{})} + c.packageName = packageName + c.subscriptionId = subscriptionId + c.token = token + return c +} + +func (c *PurchasesCancelCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{packageName}", url.QueryEscape(c.packageName), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{token}", url.QueryEscape(c.token), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.", + // "httpMethod": "POST", + // "id": "androidpublisher.purchases.cancel", + // "parameterOrder": [ + // "packageName", + // "subscriptionId", + // "token" + // ], + // "parameters": { + // "packageName": { + // "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "The purchased subscription ID (for example, 'monthly001').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "token": { + // "description": "The token provided to the user's device when the subscription was purchased.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", + // "scopes": [ + // "https://www.googleapis.com/auth/androidpublisher" + // ] + // } + +} + +// method id "androidpublisher.purchases.get": + +type PurchasesGetCall struct { + s *Service + packageName string + subscriptionId string + token string + opt_ map[string]interface{} +} + +// Get: Checks whether a user's subscription purchase is valid and +// returns its expiry time. +func (r *PurchasesService) Get(packageName string, subscriptionId string, token string) *PurchasesGetCall { + c := &PurchasesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.packageName = packageName + c.subscriptionId = subscriptionId + c.token = token + return c +} + +func (c *PurchasesGetCall) Do() (*SubscriptionPurchase, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{packageName}", url.QueryEscape(c.packageName), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{token}", url.QueryEscape(c.token), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SubscriptionPurchase) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.", + // "httpMethod": "GET", + // "id": "androidpublisher.purchases.get", + // "parameterOrder": [ + // "packageName", + // "subscriptionId", + // "token" + // ], + // "parameters": { + // "packageName": { + // "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "The purchased subscription ID (for example, 'monthly001').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "token": { + // "description": "The token provided to the user's device when the subscription was purchased.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}", + // "response": { + // "$ref": "SubscriptionPurchase" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/androidpublisher" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-api.json b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-api.json new file mode 100644 index 0000000000000..9bbc5077b9157 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-api.json @@ -0,0 +1,183 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/7feCcsSBHiSVKUXs7gmA_Rg25gw\"", + "discoveryVersion": "v1", + "id": "androidpublisher:v1", + "name": "androidpublisher", + "canonicalName": "Android Publisher", + "version": "v1", + "title": "Google Play Android Developer API", + "description": "Lets Android application developers access their Google Play accounts.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/android-16.png", + "x32": "http://www.google.com/images/icons/product/android-32.png" + }, + "documentationLink": "https://developers.google.com/android-publisher", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/androidpublisher/v1/applications/", + "basePath": "/androidpublisher/v1/applications/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "androidpublisher/v1/applications/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/androidpublisher": { + "description": "View and manage your Google Play Android Developer account" + } + } + } + }, + "schemas": { + "SubscriptionPurchase": { + "id": "SubscriptionPurchase", + "type": "object", + "description": "A Purchase resource indicates the status of a user's subscription purchase.", + "properties": { + "autoRenewing": { + "type": "boolean", + "description": "Whether the subscription will automatically be renewed when it reaches its current expiry time." + }, + "initiationTimestampMsec": { + "type": "string", + "description": "Time at which the subscription was granted, in milliseconds since Epoch.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This kind represents a subscriptionPurchase object in the androidpublisher service.", + "default": "androidpublisher#subscriptionPurchase" + }, + "validUntilTimestampMsec": { + "type": "string", + "description": "Time at which the subscription will expire, in milliseconds since Epoch.", + "format": "int64" + } + } + } + }, + "resources": { + "purchases": { + "methods": { + "cancel": { + "id": "androidpublisher.purchases.cancel", + "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", + "httpMethod": "POST", + "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.", + "parameters": { + "packageName": { + "type": "string", + "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "The purchased subscription ID (for example, 'monthly001').", + "required": true, + "location": "path" + }, + "token": { + "type": "string", + "description": "The token provided to the user's device when the subscription was purchased.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "packageName", + "subscriptionId", + "token" + ], + "scopes": [ + "https://www.googleapis.com/auth/androidpublisher" + ] + }, + "get": { + "id": "androidpublisher.purchases.get", + "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}", + "httpMethod": "GET", + "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.", + "parameters": { + "packageName": { + "type": "string", + "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "The purchased subscription ID (for example, 'monthly001').", + "required": true, + "location": "path" + }, + "token": { + "type": "string", + "description": "The token provided to the user's device when the subscription was purchased.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "packageName", + "subscriptionId", + "token" + ], + "response": { + "$ref": "SubscriptionPurchase" + }, + "scopes": [ + "https://www.googleapis.com/auth/androidpublisher" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-gen.go b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-gen.go new file mode 100644 index 0000000000000..3d412c6f89bf1 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/androidpublisher/v1/androidpublisher-gen.go @@ -0,0 +1,252 @@ +// Package androidpublisher provides access to the Google Play Android Developer API. +// +// See https://developers.google.com/android-publisher +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/androidpublisher/v1" +// ... +// androidpublisherService, err := androidpublisher.New(oauthHttpClient) +package androidpublisher + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "androidpublisher:v1" +const apiName = "androidpublisher" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/androidpublisher/v1/applications/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Play Android Developer account + AndroidpublisherScope = "https://www.googleapis.com/auth/androidpublisher" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Purchases = NewPurchasesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Purchases *PurchasesService +} + +func NewPurchasesService(s *Service) *PurchasesService { + rs := &PurchasesService{s: s} + return rs +} + +type PurchasesService struct { + s *Service +} + +type SubscriptionPurchase struct { + // AutoRenewing: Whether the subscription will automatically be renewed + // when it reaches its current expiry time. + AutoRenewing bool `json:"autoRenewing,omitempty"` + + // InitiationTimestampMsec: Time at which the subscription was granted, + // in milliseconds since Epoch. + InitiationTimestampMsec int64 `json:"initiationTimestampMsec,omitempty,string"` + + // Kind: This kind represents a subscriptionPurchase object in the + // androidpublisher service. + Kind string `json:"kind,omitempty"` + + // ValidUntilTimestampMsec: Time at which the subscription will expire, + // in milliseconds since Epoch. + ValidUntilTimestampMsec int64 `json:"validUntilTimestampMsec,omitempty,string"` +} + +// method id "androidpublisher.purchases.cancel": + +type PurchasesCancelCall struct { + s *Service + packageName string + subscriptionId string + token string + opt_ map[string]interface{} +} + +// Cancel: Cancels a user's subscription purchase. The subscription +// remains valid until its expiration time. +func (r *PurchasesService) Cancel(packageName string, subscriptionId string, token string) *PurchasesCancelCall { + c := &PurchasesCancelCall{s: r.s, opt_: make(map[string]interface{})} + c.packageName = packageName + c.subscriptionId = subscriptionId + c.token = token + return c +} + +func (c *PurchasesCancelCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{packageName}", url.QueryEscape(c.packageName), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{token}", url.QueryEscape(c.token), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Cancels a user's subscription purchase. The subscription remains valid until its expiration time.", + // "httpMethod": "POST", + // "id": "androidpublisher.purchases.cancel", + // "parameterOrder": [ + // "packageName", + // "subscriptionId", + // "token" + // ], + // "parameters": { + // "packageName": { + // "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "The purchased subscription ID (for example, 'monthly001').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "token": { + // "description": "The token provided to the user's device when the subscription was purchased.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}/cancel", + // "scopes": [ + // "https://www.googleapis.com/auth/androidpublisher" + // ] + // } + +} + +// method id "androidpublisher.purchases.get": + +type PurchasesGetCall struct { + s *Service + packageName string + subscriptionId string + token string + opt_ map[string]interface{} +} + +// Get: Checks whether a user's subscription purchase is valid and +// returns its expiry time. +func (r *PurchasesService) Get(packageName string, subscriptionId string, token string) *PurchasesGetCall { + c := &PurchasesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.packageName = packageName + c.subscriptionId = subscriptionId + c.token = token + return c +} + +func (c *PurchasesGetCall) Do() (*SubscriptionPurchase, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{packageName}/subscriptions/{subscriptionId}/purchases/{token}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{packageName}", url.QueryEscape(c.packageName), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{token}", url.QueryEscape(c.token), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SubscriptionPurchase) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Checks whether a user's subscription purchase is valid and returns its expiry time.", + // "httpMethod": "GET", + // "id": "androidpublisher.purchases.get", + // "parameterOrder": [ + // "packageName", + // "subscriptionId", + // "token" + // ], + // "parameters": { + // "packageName": { + // "description": "The package name of the application for which this subscription was purchased (for example, 'com.some.thing').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "The purchased subscription ID (for example, 'monthly001').", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "token": { + // "description": "The token provided to the user's device when the subscription was purchased.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{packageName}/subscriptions/{subscriptionId}/purchases/{token}", + // "response": { + // "$ref": "SubscriptionPurchase" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/androidpublisher" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-api.json b/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-api.json new file mode 100644 index 0000000000000..378887c87f1b6 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-api.json @@ -0,0 +1,306 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"5M1WkxnZyJhziV-cW1kdtwscs8E/EnSZa1SHLGZEekBcq4ZvbeJLWQE\"", + "discoveryVersion": "v1", + "id": "appstate:v1", + "name": "appstate", + "canonicalName": "App State", + "version": "v1", + "title": "Google App State API", + "description": "The Google App State API.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/games/services/web/api/states", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/appstate/v1/", + "basePath": "/appstate/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "appstate/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/appstate": { + "description": "View and manage your data for this application" + } + } + } + }, + "schemas": { + "GetResponse": { + "id": "GetResponse", + "type": "object", + "description": "This is a JSON template for an app state resource.", + "properties": { + "currentStateVersion": { + "type": "string", + "description": "The current app state version." + }, + "data": { + "type": "string", + "description": "The requested data." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string appstate#getResponse.", + "default": "appstate#getResponse" + }, + "stateKey": { + "type": "integer", + "description": "The key for the data.", + "format": "int32" + } + } + }, + "ListResponse": { + "id": "ListResponse", + "type": "object", + "description": "This is a JSON template to convert a list-response for app state.", + "properties": { + "items": { + "type": "array", + "description": "The app state data.", + "items": { + "$ref": "GetResponse" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string appstate#listResponse.", + "default": "appstate#listResponse" + }, + "maximumKeyCount": { + "type": "integer", + "description": "The maximum number of keys allowed for this user.", + "format": "int32" + } + } + }, + "UpdateRequest": { + "id": "UpdateRequest", + "type": "object", + "description": "This is a JSON template for a requests which update app state", + "properties": { + "data": { + "type": "string", + "description": "The new app state data that your application is trying to update with." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string appstate#updateRequest.", + "default": "appstate#updateRequest" + } + } + }, + "WriteResult": { + "id": "WriteResult", + "type": "object", + "description": "This is a JSON template for an app state write result.", + "properties": { + "currentStateVersion": { + "type": "string", + "description": "The version of the data for this key on the server." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string appstate#writeResult.", + "default": "appstate#writeResult" + }, + "stateKey": { + "type": "integer", + "description": "The written key.", + "format": "int32" + } + } + } + }, + "resources": { + "states": { + "methods": { + "clear": { + "id": "appstate.states.clear", + "path": "states/{stateKey}/clear", + "httpMethod": "POST", + "description": "Clears (sets to empty) the data for the passed key if and only if the passed version matches the currently stored version. This method results in a conflict error on version mismatch.", + "parameters": { + "currentDataVersion": { + "type": "string", + "description": "The version of the data to be cleared. Version strings are returned by the server.", + "location": "query" + }, + "stateKey": { + "type": "integer", + "description": "The key for the data to be retrieved.", + "required": true, + "format": "int32", + "minimum": "0", + "maximum": "3", + "location": "path" + } + }, + "parameterOrder": [ + "stateKey" + ], + "response": { + "$ref": "WriteResult" + }, + "scopes": [ + "https://www.googleapis.com/auth/appstate" + ] + }, + "delete": { + "id": "appstate.states.delete", + "path": "states/{stateKey}", + "httpMethod": "DELETE", + "description": "Deletes a key and the data associated with it. The key is removed and no longer counts against the key quota. Note that since this method is not safe in the face of concurrent modifications, it should only be used for development and testing purposes. Invoking this method in shipping code can result in data loss and data corruption.", + "parameters": { + "stateKey": { + "type": "integer", + "description": "The key for the data to be retrieved.", + "required": true, + "format": "int32", + "minimum": "0", + "maximum": "3", + "location": "path" + } + }, + "parameterOrder": [ + "stateKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/appstate" + ] + }, + "get": { + "id": "appstate.states.get", + "path": "states/{stateKey}", + "httpMethod": "GET", + "description": "Retrieves the data corresponding to the passed key. If the key does not exist on the server, an HTTP 404 will be returned.", + "parameters": { + "stateKey": { + "type": "integer", + "description": "The key for the data to be retrieved.", + "required": true, + "format": "int32", + "minimum": "0", + "maximum": "3", + "location": "path" + } + }, + "parameterOrder": [ + "stateKey" + ], + "response": { + "$ref": "GetResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/appstate" + ] + }, + "list": { + "id": "appstate.states.list", + "path": "states", + "httpMethod": "GET", + "description": "Lists all the states keys, and optionally the state data.", + "parameters": { + "includeData": { + "type": "boolean", + "description": "Whether to include the full data in addition to the version number", + "default": "false", + "location": "query" + } + }, + "response": { + "$ref": "ListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/appstate" + ] + }, + "update": { + "id": "appstate.states.update", + "path": "states/{stateKey}", + "httpMethod": "PUT", + "description": "Update the data associated with the input key if and only if the passed version matches the currently stored version. This method is safe in the face of concurrent writes. Maximum per-key size is 128KB.", + "parameters": { + "currentStateVersion": { + "type": "string", + "description": "The version of the app state your application is attempting to update. If this does not match the current version, this method will return a conflict error. If there is no data stored on the server for this key, the update will succeed irrespective of the value of this parameter.", + "location": "query" + }, + "stateKey": { + "type": "integer", + "description": "The key for the data to be retrieved.", + "required": true, + "format": "int32", + "minimum": "0", + "maximum": "3", + "location": "path" + } + }, + "parameterOrder": [ + "stateKey" + ], + "request": { + "$ref": "UpdateRequest" + }, + "response": { + "$ref": "WriteResult" + }, + "scopes": [ + "https://www.googleapis.com/auth/appstate" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-gen.go b/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-gen.go new file mode 100644 index 0000000000000..af4494b37bb51 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/appstate/v1/appstate-gen.go @@ -0,0 +1,507 @@ +// Package appstate provides access to the Google App State API. +// +// See https://developers.google.com/games/services/web/api/states +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/appstate/v1" +// ... +// appstateService, err := appstate.New(oauthHttpClient) +package appstate + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "appstate:v1" +const apiName = "appstate" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/appstate/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data for this application + AppstateScope = "https://www.googleapis.com/auth/appstate" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.States = NewStatesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + States *StatesService +} + +func NewStatesService(s *Service) *StatesService { + rs := &StatesService{s: s} + return rs +} + +type StatesService struct { + s *Service +} + +type GetResponse struct { + // CurrentStateVersion: The current app state version. + CurrentStateVersion string `json:"currentStateVersion,omitempty"` + + // Data: The requested data. + Data string `json:"data,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string appstate#getResponse. + Kind string `json:"kind,omitempty"` + + // StateKey: The key for the data. + StateKey int64 `json:"stateKey,omitempty"` +} + +type ListResponse struct { + // Items: The app state data. + Items []*GetResponse `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string appstate#listResponse. + Kind string `json:"kind,omitempty"` + + // MaximumKeyCount: The maximum number of keys allowed for this user. + MaximumKeyCount int64 `json:"maximumKeyCount,omitempty"` +} + +type UpdateRequest struct { + // Data: The new app state data that your application is trying to + // update with. + Data string `json:"data,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string appstate#updateRequest. + Kind string `json:"kind,omitempty"` +} + +type WriteResult struct { + // CurrentStateVersion: The version of the data for this key on the + // server. + CurrentStateVersion string `json:"currentStateVersion,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string appstate#writeResult. + Kind string `json:"kind,omitempty"` + + // StateKey: The written key. + StateKey int64 `json:"stateKey,omitempty"` +} + +// method id "appstate.states.clear": + +type StatesClearCall struct { + s *Service + stateKey int64 + opt_ map[string]interface{} +} + +// Clear: Clears (sets to empty) the data for the passed key if and only +// if the passed version matches the currently stored version. This +// method results in a conflict error on version mismatch. +func (r *StatesService) Clear(stateKey int64) *StatesClearCall { + c := &StatesClearCall{s: r.s, opt_: make(map[string]interface{})} + c.stateKey = stateKey + return c +} + +// CurrentDataVersion sets the optional parameter "currentDataVersion": +// The version of the data to be cleared. Version strings are returned +// by the server. +func (c *StatesClearCall) CurrentDataVersion(currentDataVersion string) *StatesClearCall { + c.opt_["currentDataVersion"] = currentDataVersion + return c +} + +func (c *StatesClearCall) Do() (*WriteResult, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["currentDataVersion"]; ok { + params.Set("currentDataVersion", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}/clear") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{stateKey}", strconv.FormatInt(c.stateKey, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(WriteResult) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Clears (sets to empty) the data for the passed key if and only if the passed version matches the currently stored version. This method results in a conflict error on version mismatch.", + // "httpMethod": "POST", + // "id": "appstate.states.clear", + // "parameterOrder": [ + // "stateKey" + // ], + // "parameters": { + // "currentDataVersion": { + // "description": "The version of the data to be cleared. Version strings are returned by the server.", + // "location": "query", + // "type": "string" + // }, + // "stateKey": { + // "description": "The key for the data to be retrieved.", + // "format": "int32", + // "location": "path", + // "maximum": "3", + // "minimum": "0", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "states/{stateKey}/clear", + // "response": { + // "$ref": "WriteResult" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/appstate" + // ] + // } + +} + +// method id "appstate.states.delete": + +type StatesDeleteCall struct { + s *Service + stateKey int64 + opt_ map[string]interface{} +} + +// Delete: Deletes a key and the data associated with it. The key is +// removed and no longer counts against the key quota. Note that since +// this method is not safe in the face of concurrent modifications, it +// should only be used for development and testing purposes. Invoking +// this method in shipping code can result in data loss and data +// corruption. +func (r *StatesService) Delete(stateKey int64) *StatesDeleteCall { + c := &StatesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.stateKey = stateKey + return c +} + +func (c *StatesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{stateKey}", strconv.FormatInt(c.stateKey, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a key and the data associated with it. The key is removed and no longer counts against the key quota. Note that since this method is not safe in the face of concurrent modifications, it should only be used for development and testing purposes. Invoking this method in shipping code can result in data loss and data corruption.", + // "httpMethod": "DELETE", + // "id": "appstate.states.delete", + // "parameterOrder": [ + // "stateKey" + // ], + // "parameters": { + // "stateKey": { + // "description": "The key for the data to be retrieved.", + // "format": "int32", + // "location": "path", + // "maximum": "3", + // "minimum": "0", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "states/{stateKey}", + // "scopes": [ + // "https://www.googleapis.com/auth/appstate" + // ] + // } + +} + +// method id "appstate.states.get": + +type StatesGetCall struct { + s *Service + stateKey int64 + opt_ map[string]interface{} +} + +// Get: Retrieves the data corresponding to the passed key. If the key +// does not exist on the server, an HTTP 404 will be returned. +func (r *StatesService) Get(stateKey int64) *StatesGetCall { + c := &StatesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.stateKey = stateKey + return c +} + +func (c *StatesGetCall) Do() (*GetResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{stateKey}", strconv.FormatInt(c.stateKey, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(GetResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the data corresponding to the passed key. If the key does not exist on the server, an HTTP 404 will be returned.", + // "httpMethod": "GET", + // "id": "appstate.states.get", + // "parameterOrder": [ + // "stateKey" + // ], + // "parameters": { + // "stateKey": { + // "description": "The key for the data to be retrieved.", + // "format": "int32", + // "location": "path", + // "maximum": "3", + // "minimum": "0", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "states/{stateKey}", + // "response": { + // "$ref": "GetResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/appstate" + // ] + // } + +} + +// method id "appstate.states.list": + +type StatesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all the states keys, and optionally the state data. +func (r *StatesService) List() *StatesListCall { + c := &StatesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// IncludeData sets the optional parameter "includeData": Whether to +// include the full data in addition to the version number +func (c *StatesListCall) IncludeData(includeData bool) *StatesListCall { + c.opt_["includeData"] = includeData + return c +} + +func (c *StatesListCall) Do() (*ListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeData"]; ok { + params.Set("includeData", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "states") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the states keys, and optionally the state data.", + // "httpMethod": "GET", + // "id": "appstate.states.list", + // "parameters": { + // "includeData": { + // "default": "false", + // "description": "Whether to include the full data in addition to the version number", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "states", + // "response": { + // "$ref": "ListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/appstate" + // ] + // } + +} + +// method id "appstate.states.update": + +type StatesUpdateCall struct { + s *Service + stateKey int64 + updaterequest *UpdateRequest + opt_ map[string]interface{} +} + +// Update: Update the data associated with the input key if and only if +// the passed version matches the currently stored version. This method +// is safe in the face of concurrent writes. Maximum per-key size is +// 128KB. +func (r *StatesService) Update(stateKey int64, updaterequest *UpdateRequest) *StatesUpdateCall { + c := &StatesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.stateKey = stateKey + c.updaterequest = updaterequest + return c +} + +// CurrentStateVersion sets the optional parameter +// "currentStateVersion": The version of the app state your application +// is attempting to update. If this does not match the current version, +// this method will return a conflict error. If there is no data stored +// on the server for this key, the update will succeed irrespective of +// the value of this parameter. +func (c *StatesUpdateCall) CurrentStateVersion(currentStateVersion string) *StatesUpdateCall { + c.opt_["currentStateVersion"] = currentStateVersion + return c +} + +func (c *StatesUpdateCall) Do() (*WriteResult, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.updaterequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["currentStateVersion"]; ok { + params.Set("currentStateVersion", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "states/{stateKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{stateKey}", strconv.FormatInt(c.stateKey, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(WriteResult) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update the data associated with the input key if and only if the passed version matches the currently stored version. This method is safe in the face of concurrent writes. Maximum per-key size is 128KB.", + // "httpMethod": "PUT", + // "id": "appstate.states.update", + // "parameterOrder": [ + // "stateKey" + // ], + // "parameters": { + // "currentStateVersion": { + // "description": "The version of the app state your application is attempting to update. If this does not match the current version, this method will return a conflict error. If there is no data stored on the server for this key, the update will succeed irrespective of the value of this parameter.", + // "location": "query", + // "type": "string" + // }, + // "stateKey": { + // "description": "The key for the data to be retrieved.", + // "format": "int32", + // "location": "path", + // "maximum": "3", + // "minimum": "0", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "states/{stateKey}", + // "request": { + // "$ref": "UpdateRequest" + // }, + // "response": { + // "$ref": "WriteResult" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/appstate" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-api.json b/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-api.json new file mode 100644 index 0000000000000..fe976a0cfe65f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-api.json @@ -0,0 +1,287 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/FnodQzLqRh_xHIkICK4PBBoHaLA\"", + "discoveryVersion": "v1", + "id": "audit:v1", + "name": "audit", + "version": "v1", + "title": "Enterprise Audit API", + "description": "Lets you access user activities in your enterprise made through various applications.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/admin-audit/get_started", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/apps/reporting/audit/v1/", + "basePath": "/apps/reporting/audit/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "apps/reporting/audit/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "atom", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Activities": { + "id": "Activities", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "Each record in read response.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Kind of list response this is.", + "default": "audit#activities" + }, + "next": { + "type": "string", + "description": "Next page URL." + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "properties": { + "actor": { + "type": "object", + "description": "User doing the action.", + "properties": { + "applicationId": { + "type": "string", + "description": "ID of application which interacted on behalf of the user.", + "format": "int64" + }, + "callerType": { + "type": "string", + "description": "User or OAuth 2LO request." + }, + "email": { + "type": "string", + "description": "Email address of the user." + }, + "key": { + "type": "string", + "description": "For OAuth 2LO API requests, consumer_key of the requestor." + } + } + }, + "events": { + "type": "array", + "description": "Activity events.", + "items": { + "type": "object", + "properties": { + "eventType": { + "type": "string", + "description": "Type of event." + }, + "name": { + "type": "string", + "description": "Name of event." + }, + "parameters": { + "type": "array", + "description": "Event parameters.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the parameter." + }, + "value": { + "type": "string", + "description": "Value of the parameter." + } + } + } + } + } + } + }, + "id": { + "type": "object", + "description": "Unique identifier for each activity record.", + "properties": { + "applicationId": { + "type": "string", + "description": "Application ID of the source application.", + "format": "int64" + }, + "customerId": { + "type": "string", + "description": "Obfuscated customer ID of the source customer." + }, + "time": { + "type": "string", + "description": "Time of occurrence of the activity.", + "format": "date-time" + }, + "uniqQualifier": { + "type": "string", + "description": "Unique qualifier if multiple events have the same time.", + "format": "int64" + } + } + }, + "ipAddress": { + "type": "string", + "description": "IP Address of the user doing the action." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is.", + "default": "audit#activity" + }, + "ownerDomain": { + "type": "string", + "description": "Domain of source customer." + } + } + } + }, + "resources": { + "activities": { + "methods": { + "list": { + "id": "audit.activities.list", + "path": "{customerId}/{applicationId}", + "httpMethod": "GET", + "description": "Retrieves a list of activities for a specific customer and application.", + "parameters": { + "actorApplicationId": { + "type": "string", + "description": "Application ID of the application which interacted on behalf of the user while performing the event.", + "format": "int64", + "location": "query" + }, + "actorEmail": { + "type": "string", + "description": "Email address of the user who performed the action.", + "location": "query" + }, + "actorIpAddress": { + "type": "string", + "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + "location": "query" + }, + "applicationId": { + "type": "string", + "description": "Application ID of the application on which the event was performed.", + "required": true, + "format": "int64", + "location": "path" + }, + "caller": { + "type": "string", + "description": "Type of the caller.", + "enum": [ + "application_owner", + "customer" + ], + "enumDescriptions": [ + "Caller is an application owner.", + "Caller is a customer." + ], + "location": "query" + }, + "continuationToken": { + "type": "string", + "description": "Next page URL.", + "location": "query" + }, + "customerId": { + "type": "string", + "description": "Represents the customer who is the owner of target object on which action was performed.", + "required": true, + "pattern": "C.+", + "location": "path" + }, + "endTime": { + "type": "string", + "description": "Return events which occured at or before this time.", + "location": "query" + }, + "eventName": { + "type": "string", + "description": "Name of the event being queried.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Number of activity records to be shown in each page.", + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "startTime": { + "type": "string", + "description": "Return events which occured at or after this time.", + "location": "query" + } + }, + "parameterOrder": [ + "customerId", + "applicationId" + ], + "response": { + "$ref": "Activities" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-gen.go b/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-gen.go new file mode 100644 index 0000000000000..f6dd55e24f993 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/audit/v1/audit-gen.go @@ -0,0 +1,367 @@ +// Package audit provides access to the Enterprise Audit API. +// +// See https://developers.google.com/google-apps/admin-audit/get_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/audit/v1" +// ... +// auditService, err := audit.New(oauthHttpClient) +package audit + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "audit:v1" +const apiName = "audit" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/apps/reporting/audit/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Activities = NewActivitiesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Activities *ActivitiesService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +type Activities struct { + // Items: Each record in read response. + Items []*Activity `json:"items,omitempty"` + + // Kind: Kind of list response this is. + Kind string `json:"kind,omitempty"` + + // Next: Next page URL. + Next string `json:"next,omitempty"` +} + +type Activity struct { + // Actor: User doing the action. + Actor *ActivityActor `json:"actor,omitempty"` + + // Events: Activity events. + Events []*ActivityEvents `json:"events,omitempty"` + + // Id: Unique identifier for each activity record. + Id *ActivityId `json:"id,omitempty"` + + // IpAddress: IP Address of the user doing the action. + IpAddress string `json:"ipAddress,omitempty"` + + // Kind: Kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OwnerDomain: Domain of source customer. + OwnerDomain string `json:"ownerDomain,omitempty"` +} + +type ActivityActor struct { + // ApplicationId: ID of application which interacted on behalf of the + // user. + ApplicationId int64 `json:"applicationId,omitempty,string"` + + // CallerType: User or OAuth 2LO request. + CallerType string `json:"callerType,omitempty"` + + // Email: Email address of the user. + Email string `json:"email,omitempty"` + + // Key: For OAuth 2LO API requests, consumer_key of the requestor. + Key string `json:"key,omitempty"` +} + +type ActivityEvents struct { + // EventType: Type of event. + EventType string `json:"eventType,omitempty"` + + // Name: Name of event. + Name string `json:"name,omitempty"` + + // Parameters: Event parameters. + Parameters []*ActivityEventsParameters `json:"parameters,omitempty"` +} + +type ActivityEventsParameters struct { + // Name: Name of the parameter. + Name string `json:"name,omitempty"` + + // Value: Value of the parameter. + Value string `json:"value,omitempty"` +} + +type ActivityId struct { + // ApplicationId: Application ID of the source application. + ApplicationId int64 `json:"applicationId,omitempty,string"` + + // CustomerId: Obfuscated customer ID of the source customer. + CustomerId string `json:"customerId,omitempty"` + + // Time: Time of occurrence of the activity. + Time string `json:"time,omitempty"` + + // UniqQualifier: Unique qualifier if multiple events have the same + // time. + UniqQualifier int64 `json:"uniqQualifier,omitempty,string"` +} + +// method id "audit.activities.list": + +type ActivitiesListCall struct { + s *Service + customerId string + applicationId int64 + opt_ map[string]interface{} +} + +// List: Retrieves a list of activities for a specific customer and +// application. +func (r *ActivitiesService) List(customerId string, applicationId int64) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.applicationId = applicationId + return c +} + +// ActorApplicationId sets the optional parameter "actorApplicationId": +// Application ID of the application which interacted on behalf of the +// user while performing the event. +func (c *ActivitiesListCall) ActorApplicationId(actorApplicationId int64) *ActivitiesListCall { + c.opt_["actorApplicationId"] = actorApplicationId + return c +} + +// ActorEmail sets the optional parameter "actorEmail": Email address of +// the user who performed the action. +func (c *ActivitiesListCall) ActorEmail(actorEmail string) *ActivitiesListCall { + c.opt_["actorEmail"] = actorEmail + return c +} + +// ActorIpAddress sets the optional parameter "actorIpAddress": IP +// Address of host where the event was performed. Supports both IPv4 and +// IPv6 addresses. +func (c *ActivitiesListCall) ActorIpAddress(actorIpAddress string) *ActivitiesListCall { + c.opt_["actorIpAddress"] = actorIpAddress + return c +} + +// Caller sets the optional parameter "caller": Type of the caller. +func (c *ActivitiesListCall) Caller(caller string) *ActivitiesListCall { + c.opt_["caller"] = caller + return c +} + +// ContinuationToken sets the optional parameter "continuationToken": +// Next page URL. +func (c *ActivitiesListCall) ContinuationToken(continuationToken string) *ActivitiesListCall { + c.opt_["continuationToken"] = continuationToken + return c +} + +// EndTime sets the optional parameter "endTime": Return events which +// occured at or before this time. +func (c *ActivitiesListCall) EndTime(endTime string) *ActivitiesListCall { + c.opt_["endTime"] = endTime + return c +} + +// EventName sets the optional parameter "eventName": Name of the event +// being queried. +func (c *ActivitiesListCall) EventName(eventName string) *ActivitiesListCall { + c.opt_["eventName"] = eventName + return c +} + +// MaxResults sets the optional parameter "maxResults": Number of +// activity records to be shown in each page. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartTime sets the optional parameter "startTime": Return events +// which occured at or after this time. +func (c *ActivitiesListCall) StartTime(startTime string) *ActivitiesListCall { + c.opt_["startTime"] = startTime + return c +} + +func (c *ActivitiesListCall) Do() (*Activities, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["actorApplicationId"]; ok { + params.Set("actorApplicationId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["actorEmail"]; ok { + params.Set("actorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["actorIpAddress"]; ok { + params.Set("actorIpAddress", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["caller"]; ok { + params.Set("caller", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["continuationToken"]; ok { + params.Set("continuationToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endTime"]; ok { + params.Set("endTime", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventName"]; ok { + params.Set("eventName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startTime"]; ok { + params.Set("startTime", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{customerId}/{applicationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationId}", strconv.FormatInt(c.applicationId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activities) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of activities for a specific customer and application.", + // "httpMethod": "GET", + // "id": "audit.activities.list", + // "parameterOrder": [ + // "customerId", + // "applicationId" + // ], + // "parameters": { + // "actorApplicationId": { + // "description": "Application ID of the application which interacted on behalf of the user while performing the event.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "actorEmail": { + // "description": "Email address of the user who performed the action.", + // "location": "query", + // "type": "string" + // }, + // "actorIpAddress": { + // "description": "IP Address of host where the event was performed. Supports both IPv4 and IPv6 addresses.", + // "location": "query", + // "type": "string" + // }, + // "applicationId": { + // "description": "Application ID of the application on which the event was performed.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "caller": { + // "description": "Type of the caller.", + // "enum": [ + // "application_owner", + // "customer" + // ], + // "enumDescriptions": [ + // "Caller is an application owner.", + // "Caller is a customer." + // ], + // "location": "query", + // "type": "string" + // }, + // "continuationToken": { + // "description": "Next page URL.", + // "location": "query", + // "type": "string" + // }, + // "customerId": { + // "description": "Represents the customer who is the owner of target object on which action was performed.", + // "location": "path", + // "pattern": "C.+", + // "required": true, + // "type": "string" + // }, + // "endTime": { + // "description": "Return events which occured at or before this time.", + // "location": "query", + // "type": "string" + // }, + // "eventName": { + // "description": "Name of the event being queried.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Number of activity records to be shown in each page.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "startTime": { + // "description": "Return events which occured at or after this time.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{customerId}/{applicationId}", + // "response": { + // "$ref": "Activities" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-api.json b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-api.json new file mode 100644 index 0000000000000..9ca2658c1d24d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-api.json @@ -0,0 +1,2058 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Q_buGY2JsMDrpm6SMTOf_s_Obbo\"", + "discoveryVersion": "v1", + "id": "bigquery:v2", + "name": "bigquery", + "version": "v2", + "title": "BigQuery API", + "description": "A data platform for customers to create, manage, share and query data.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/bigquery/docs/overview", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/bigquery/v2/", + "basePath": "/bigquery/v2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "bigquery/v2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/bigquery": { + "description": "View and manage your data in Google BigQuery" + }, + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + }, + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "Dataset": { + "id": "Dataset", + "type": "object", + "properties": { + "access": { + "type": "array", + "description": "[Optional] An array of objects that define dataset access for one or more entities. You can set this property when inserting or updating a dataset in order to control who is allowed to access the data. If unspecified at dataset creation time, BigQuery adds default dataset access for the following entities: access.specialGroup: projectReaders; access.role: READER; access.specialGroup: projectWriters; access.role: WRITER; access.specialGroup: projectOwners; access.role: OWNER; access.userByEmail: [dataset creator email]; access.role: OWNER;", + "items": { + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "[Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: \"example.com\"." + }, + "groupByEmail": { + "type": "string", + "description": "[Pick one] An email address of a Google Group to grant access to." + }, + "role": { + "type": "string", + "description": "[Required] Describes the rights granted to the user specified by the other member of the access object. The following string values are supported: READER, WRITER, OWNER." + }, + "specialGroup": { + "type": "string", + "description": "[Pick one] A special group to grant access to. Possible values include: projectOwners: Owners of the enclosing project. projectReaders: Readers of the enclosing project. projectWriters: Writers of the enclosing project. allAuthenticatedUsers: All authenticated BigQuery users." + }, + "userByEmail": { + "type": "string", + "description": "[Pick one] An email address of a user to grant access to. For example: fred@example.com." + } + } + } + }, + "creationTime": { + "type": "string", + "description": "[Output-only] The time when this dataset was created, in milliseconds since the epoch.", + "format": "int64" + }, + "datasetReference": { + "$ref": "DatasetReference", + "description": "[Required] A reference that identifies the dataset." + }, + "description": { + "type": "string", + "description": "[Optional] A user-friendly description of the dataset." + }, + "etag": { + "type": "string", + "description": "[Output-only] A hash of the resource." + }, + "friendlyName": { + "type": "string", + "description": "[Optional] A descriptive name for the dataset." + }, + "id": { + "type": "string", + "description": "[Output-only] The fully-qualified unique name of the dataset in the format projectId:datasetId. The dataset name without the project name is given in the datasetId field. When creating a new dataset, leave this field blank, and instead specify the datasetId field." + }, + "kind": { + "type": "string", + "description": "[Output-only] The resource type.", + "default": "bigquery#dataset" + }, + "lastModifiedTime": { + "type": "string", + "description": "[Output-only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.", + "format": "int64" + }, + "selfLink": { + "type": "string", + "description": "[Output-only] A URL that can be used to access the resource again. You can use this URL in Get or Update requests to the resource." + } + } + }, + "DatasetList": { + "id": "DatasetList", + "type": "object", + "properties": { + "datasets": { + "type": "array", + "description": "An array of the dataset resources in the project. Each resource contains basic information. For full information about a particular dataset resource, use the Datasets: get method. This property is omitted when there are no datasets in the project.", + "items": { + "type": "object", + "properties": { + "datasetReference": { + "$ref": "DatasetReference", + "description": "The dataset reference. Use this property to access specific parts of the dataset's ID, such as project ID or dataset ID." + }, + "friendlyName": { + "type": "string", + "description": "A descriptive name for the dataset, if one exists." + }, + "id": { + "type": "string", + "description": "The fully-qualified, unique, opaque ID of the dataset." + }, + "kind": { + "type": "string", + "description": "The resource type. This property always returns the value \"bigquery#dataset\".", + "default": "bigquery#dataset" + } + } + } + }, + "etag": { + "type": "string", + "description": "A hash value of the results page. You can use this property to determine if the page has changed since the last request." + }, + "kind": { + "type": "string", + "description": "The list type. This property always returns the value \"bigquery#datasetList\".", + "default": "bigquery#datasetList" + }, + "nextPageToken": { + "type": "string", + "description": "A token that can be used to request the next results page. This property is omitted on the final results page." + } + } + }, + "DatasetReference": { + "id": "DatasetReference", + "type": "object", + "properties": { + "datasetId": { + "type": "string", + "description": "[Required] A unique ID for this dataset, without the project name.", + "annotations": { + "required": [ + "bigquery.datasets.update" + ] + } + }, + "projectId": { + "type": "string", + "description": "[Optional] The ID of the container project.", + "annotations": { + "required": [ + "bigquery.datasets.update" + ] + } + } + } + }, + "ErrorProto": { + "id": "ErrorProto", + "type": "object", + "properties": { + "debugInfo": { + "type": "string", + "description": "Debugging information. This property is internal to Google and should not be used." + }, + "location": { + "type": "string", + "description": "Specifies where the error occurred, if present." + }, + "message": { + "type": "string", + "description": "A human-readable description of the error." + }, + "reason": { + "type": "string", + "description": "A short error code that summarizes the error." + } + } + }, + "GetQueryResultsResponse": { + "id": "GetQueryResultsResponse", + "type": "object", + "properties": { + "cacheHit": { + "type": "boolean", + "description": "Whether the query result was fetched from the query cache." + }, + "etag": { + "type": "string", + "description": "A hash of this response." + }, + "jobComplete": { + "type": "boolean", + "description": "Whether the query has completed or not. If rows or totalRows are present, this will always be true. If this is false, totalRows will not be available." + }, + "jobReference": { + "$ref": "JobReference", + "description": "Reference to the BigQuery Job that was created to run the query. This field will be present even if the original request timed out, in which case GetQueryResults can be used to read the results once the query has completed. Since this API only returns the first page of results, subsequent pages can be fetched via the same mechanism (GetQueryResults)." + }, + "kind": { + "type": "string", + "description": "The resource type of the response.", + "default": "bigquery#getQueryResultsResponse" + }, + "pageToken": { + "type": "string", + "description": "A token used for paging results." + }, + "rows": { + "type": "array", + "description": "An object with as many results as can be contained within the maximum permitted reply size. To get any additional rows, you can call GetQueryResults and specify the jobReference returned above. Present only when the query completes successfully.", + "items": { + "$ref": "TableRow" + } + }, + "schema": { + "$ref": "TableSchema", + "description": "The schema of the results. Present only when the query completes successfully." + }, + "totalRows": { + "type": "string", + "description": "The total number of rows in the complete query result set, which can be more than the number of rows in this single page of results. Present only when the query completes successfully.", + "format": "uint64" + } + } + }, + "Job": { + "id": "Job", + "type": "object", + "properties": { + "configuration": { + "$ref": "JobConfiguration", + "description": "[Required] Describes the job configuration." + }, + "etag": { + "type": "string", + "description": "[Output-only] A hash of this resource." + }, + "id": { + "type": "string", + "description": "[Output-only] Opaque ID field of the job" + }, + "jobReference": { + "$ref": "JobReference", + "description": "[Optional] Reference describing the unique-per-user name of the job." + }, + "kind": { + "type": "string", + "description": "[Output-only] The type of the resource.", + "default": "bigquery#job" + }, + "selfLink": { + "type": "string", + "description": "[Output-only] A URL that can be used to access this resource again." + }, + "statistics": { + "$ref": "JobStatistics", + "description": "[Output-only] Information about the job, including starting time and ending time of the job." + }, + "status": { + "$ref": "JobStatus", + "description": "[Output-only] The status of this job. Examine this value when polling an asynchronous job to see if the job is complete." + } + } + }, + "JobConfiguration": { + "id": "JobConfiguration", + "type": "object", + "properties": { + "copy": { + "$ref": "JobConfigurationTableCopy", + "description": "[Pick one] Copies a table." + }, + "dryRun": { + "type": "boolean", + "description": "[Optional] If set, don't actually run this job. A valid query will return a mostly empty response with some processing statistics, while an invalid query will return the same error it would if it wasn't a dry run. Behavior of non-query jobs is undefined." + }, + "extract": { + "$ref": "JobConfigurationExtract", + "description": "[Pick one] Configures an extract job." + }, + "link": { + "$ref": "JobConfigurationLink", + "description": "[Pick one] Configures a link job." + }, + "load": { + "$ref": "JobConfigurationLoad", + "description": "[Pick one] Configures a load job." + }, + "query": { + "$ref": "JobConfigurationQuery", + "description": "[Pick one] Configures a query job." + } + } + }, + "JobConfigurationExtract": { + "id": "JobConfigurationExtract", + "type": "object", + "properties": { + "destinationFormat": { + "type": "string", + "description": "[Experimental] Optional and defaults to CSV. Format with which files should be exported. To export to CSV, specify \"CSV\". Tables with nested or repeated fields cannot be exported as CSV. To export to newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\"." + }, + "destinationUri": { + "type": "string", + "description": "[Pick one] DEPRECATED: Use destinationUris instead, passing only one URI as necessary. The fully-qualified Google Cloud Storage URI where the extracted table should be written." + }, + "destinationUris": { + "type": "array", + "description": "[Pick one] A list of fully-qualified Google Cloud Storage URIs where the extracted table should be written.", + "items": { + "type": "string" + } + }, + "fieldDelimiter": { + "type": "string", + "description": "[Optional] Delimiter to use between fields in the exported data. Default is ','" + }, + "printHeader": { + "type": "boolean", + "description": "[Optional] Whether to print out a header row in the results. Default is true." + }, + "sourceTable": { + "$ref": "TableReference", + "description": "[Required] A reference to the table being exported." + } + } + }, + "JobConfigurationLink": { + "id": "JobConfigurationLink", + "type": "object", + "properties": { + "createDisposition": { + "type": "string", + "description": "[Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion." + }, + "destinationTable": { + "$ref": "TableReference", + "description": "[Required] The destination table of the link job." + }, + "sourceUri": { + "type": "array", + "description": "[Required] URI of source table to link.", + "items": { + "type": "string" + } + }, + "writeDisposition": { + "type": "string", + "description": "[Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion." + } + } + }, + "JobConfigurationLoad": { + "id": "JobConfigurationLoad", + "type": "object", + "properties": { + "allowJaggedRows": { + "type": "boolean", + "description": "[Optional] Accept rows that are missing trailing optional columns. The missing values are treated as nulls. Default is false which treats short rows as errors. Only applicable to CSV, ignored for other formats." + }, + "allowQuotedNewlines": { + "type": "boolean", + "description": "Indicates if BigQuery should allow quoted data sections that contain newline characters in a CSV file. The default value is false." + }, + "createDisposition": { + "type": "string", + "description": "[Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion." + }, + "destinationTable": { + "$ref": "TableReference", + "description": "[Required] The destination table to load the data into." + }, + "encoding": { + "type": "string", + "description": "[Optional] The character encoding of the data. The supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. BigQuery decodes the data after the raw, binary data has been split using the values of the quote and fieldDelimiter properties." + }, + "fieldDelimiter": { + "type": "string", + "description": "[Optional] The separator for fields in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. BigQuery also supports the escape sequence \"\\t\" to specify a tab separator. The default value is a comma (',')." + }, + "ignoreUnknownValues": { + "type": "boolean", + "description": "[Optional] Accept rows that contain values that do not match the schema. The unknown values are ignored. Default is false which treats unknown values as errors. For CSV this ignores extra values at the end of a line. For JSON this ignores named values that do not match any column name." + }, + "maxBadRecords": { + "type": "integer", + "description": "[Optional] The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an 'invalid' error is returned in the job result and the job fails. The default value is 0, which requires that all records are valid.", + "format": "int32" + }, + "quote": { + "type": "string", + "description": "[Optional] The value that is used to quote data sections in a CSV file. BigQuery converts the string to ISO-8859-1 encoding, and then uses the first byte of the encoded string to split the data in its raw, binary state. The default value is a double-quote ('\"'). If your data does not contain quoted sections, set the property value to an empty string. If your data contains quoted newline characters, you must also set the allowQuotedNewlines property to true." + }, + "schema": { + "$ref": "TableSchema", + "description": "[Optional] The schema for the destination table. The schema can be omitted if the destination table already exists or if the schema can be inferred from the loaded data." + }, + "schemaInline": { + "type": "string", + "description": "[Deprecated] The inline schema. For CSV schemas, specify as \"Field1:Type1[,Field2:Type2]*\". For example, \"foo:STRING, bar:INTEGER, baz:FLOAT\"." + }, + "schemaInlineFormat": { + "type": "string", + "description": "[Deprecated] The format of the schemaInline property." + }, + "skipLeadingRows": { + "type": "integer", + "description": "[Optional] The number of rows at the top of a CSV file that BigQuery will skip when loading the data. The default value is 0. This property is useful if you have header rows in the file that should be skipped.", + "format": "int32" + }, + "sourceFormat": { + "type": "string", + "description": "[Optional] The format of the data files. For CSV files, specify \"CSV\". For datastore backups, specify \"DATASTORE_BACKUP\". For newline-delimited JSON, specify \"NEWLINE_DELIMITED_JSON\". The default value is CSV." + }, + "sourceUris": { + "type": "array", + "description": "[Required] The fully-qualified URIs that point to your data on Google Cloud Storage.", + "items": { + "type": "string" + } + }, + "writeDisposition": { + "type": "string", + "description": "[Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion." + } + } + }, + "JobConfigurationQuery": { + "id": "JobConfigurationQuery", + "type": "object", + "properties": { + "allowLargeResults": { + "type": "boolean", + "description": "If true, allows the query to produce arbitrarily large result tables at a slight cost in performance. Requires destination_table to be set." + }, + "createDisposition": { + "type": "string", + "description": "[Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion." + }, + "defaultDataset": { + "$ref": "DatasetReference", + "description": "[Optional] Specifies the default dataset to use for unqualified table names in the query." + }, + "destinationTable": { + "$ref": "TableReference", + "description": "[Optional] Describes the table where the query results should be stored. If not present, a new table will be created to store the results." + }, + "preserveNulls": { + "type": "boolean", + "description": "[Deprecated] This property is deprecated." + }, + "priority": { + "type": "string", + "description": "[Optional] Specifies a priority for the query. Possible values include INTERACTIVE and BATCH. The default value is INTERACTIVE." + }, + "query": { + "type": "string", + "description": "[Required] BigQuery SQL query to execute." + }, + "useQueryCache": { + "type": "boolean", + "description": "[Optional] Whether to look for the result in the query cache. The query cache is a best-effort cache that will be flushed whenever tables in the query are modified. Moreover, the query cache is only available when a query does not have a destination table specified." + }, + "writeDisposition": { + "type": "string", + "description": "[Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion." + } + } + }, + "JobConfigurationTableCopy": { + "id": "JobConfigurationTableCopy", + "type": "object", + "properties": { + "createDisposition": { + "type": "string", + "description": "[Optional] Specifies whether the job is allowed to create new tables. The following values are supported: CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the table. CREATE_NEVER: The table must already exist. If it does not, a 'notFound' error is returned in the job result. The default value is CREATE_IF_NEEDED. Creation, truncation and append actions occur as one atomic update upon job completion." + }, + "destinationTable": { + "$ref": "TableReference", + "description": "[Required] The destination table" + }, + "sourceTable": { + "$ref": "TableReference", + "description": "[Required] Source table to copy." + }, + "writeDisposition": { + "type": "string", + "description": "[Optional] Specifies the action that occurs if the destination table already exists. The following values are supported: WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the table data. WRITE_APPEND: If the table already exists, BigQuery appends the data to the table. WRITE_EMPTY: If the table already exists and contains data, a 'duplicate' error is returned in the job result. The default value is WRITE_EMPTY. Each action is atomic and only occurs if BigQuery is able to complete the job successfully. Creation, truncation and append actions occur as one atomic update upon job completion." + } + } + }, + "JobList": { + "id": "JobList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "A hash of this page of results." + }, + "jobs": { + "type": "array", + "description": "List of jobs that were requested.", + "items": { + "type": "object", + "properties": { + "configuration": { + "$ref": "JobConfiguration", + "description": "[Full-projection-only] Specifies the job configuration." + }, + "errorResult": { + "$ref": "ErrorProto", + "description": "A result object that will be present only if the job has failed." + }, + "id": { + "type": "string", + "description": "Unique opaque ID of the job." + }, + "jobReference": { + "$ref": "JobReference", + "description": "Job reference uniquely identifying the job." + }, + "kind": { + "type": "string", + "description": "The resource type.", + "default": "bigquery#job" + }, + "state": { + "type": "string", + "description": "Running state of the job. When the state is DONE, errorResult can be checked to determine whether the job succeeded or failed." + }, + "statistics": { + "$ref": "JobStatistics", + "description": "[Output-only] Information about the job, including starting time and ending time of the job." + }, + "status": { + "$ref": "JobStatus", + "description": "[Full-projection-only] Describes the state of the job." + }, + "user_email": { + "type": "string", + "description": "[Full-projection-only] User who ran the job." + } + } + } + }, + "kind": { + "type": "string", + "description": "The resource type of the response.", + "default": "bigquery#jobList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to request the next page of results." + }, + "totalItems": { + "type": "integer", + "description": "Total number of jobs in this collection.", + "format": "int32" + } + } + }, + "JobReference": { + "id": "JobReference", + "type": "object", + "properties": { + "jobId": { + "type": "string", + "description": "[Required] ID of the job.", + "annotations": { + "required": [ + "bigquery.jobs.getQueryResults" + ] + } + }, + "projectId": { + "type": "string", + "description": "[Required] Project ID being billed for the job.", + "annotations": { + "required": [ + "bigquery.jobs.getQueryResults" + ] + } + } + } + }, + "JobStatistics": { + "id": "JobStatistics", + "type": "object", + "properties": { + "creationTime": { + "type": "string", + "description": "[Output-only] Creation time of this job, in milliseconds since the epoch. This field will be present on all jobs.", + "format": "int64" + }, + "endTime": { + "type": "string", + "description": "[Output-only] End time of this job, in milliseconds since the epoch. This field will be present whenever a job is in the DONE state.", + "format": "int64" + }, + "load": { + "$ref": "JobStatistics3", + "description": "[Output-only] Statistics for a load job." + }, + "query": { + "$ref": "JobStatistics2", + "description": "[Output-only] Statistics for a query job." + }, + "startTime": { + "type": "string", + "description": "[Output-only] Start time of this job, in milliseconds since the epoch. This field will be present when the job transitions from the PENDING state to either RUNNING or DONE.", + "format": "int64" + }, + "totalBytesProcessed": { + "type": "string", + "description": "[Output-only] [Deprecated] Use the bytes processed in the query statistics instead.", + "format": "int64" + } + } + }, + "JobStatistics2": { + "id": "JobStatistics2", + "type": "object", + "properties": { + "cacheHit": { + "type": "boolean", + "description": "[Output-only] Whether the query result was fetched from the query cache." + }, + "totalBytesProcessed": { + "type": "string", + "description": "[Output-only] Total bytes processed for this job.", + "format": "int64" + } + } + }, + "JobStatistics3": { + "id": "JobStatistics3", + "type": "object", + "properties": { + "inputFileBytes": { + "type": "string", + "description": "[Output-only] Number of bytes of source data in a joad job.", + "format": "int64" + }, + "inputFiles": { + "type": "string", + "description": "[Output-only] Number of source files in a load job.", + "format": "int64" + }, + "outputBytes": { + "type": "string", + "description": "[Output-only] Size of the loaded data in bytes. Note that while an import job is in the running state, this value may change.", + "format": "int64" + }, + "outputRows": { + "type": "string", + "description": "[Output-only] Number of rows imported in a load job. Note that while an import job is in the running state, this value may change.", + "format": "int64" + } + } + }, + "JobStatus": { + "id": "JobStatus", + "type": "object", + "properties": { + "errorResult": { + "$ref": "ErrorProto", + "description": "[Output-only] Final error result of the job. If present, indicates that the job has completed and was unsuccessful." + }, + "errors": { + "type": "array", + "description": "[Output-only] All errors encountered during the running of the job. Errors here do not necessarily mean that the job has completed or was unsuccessful.", + "items": { + "$ref": "ErrorProto" + } + }, + "state": { + "type": "string", + "description": "[Output-only] Running state of the job." + } + } + }, + "JsonObject": { + "id": "JsonObject", + "type": "object", + "description": "Represents a single JSON object.", + "additionalProperties": { + "$ref": "JsonValue" + } + }, + "JsonValue": { + "id": "JsonValue", + "type": "any" + }, + "ProjectList": { + "id": "ProjectList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "A hash of the page of results" + }, + "kind": { + "type": "string", + "description": "The type of list.", + "default": "bigquery#projectList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to request the next page of results." + }, + "projects": { + "type": "array", + "description": "Projects to which you have at least READ access.", + "items": { + "type": "object", + "properties": { + "friendlyName": { + "type": "string", + "description": "A descriptive name for this project." + }, + "id": { + "type": "string", + "description": "An opaque ID of this project." + }, + "kind": { + "type": "string", + "description": "The resource type.", + "default": "bigquery#project" + }, + "numericId": { + "type": "string", + "description": "The numeric ID of this project.", + "format": "uint64" + }, + "projectReference": { + "$ref": "ProjectReference", + "description": "A unique reference to this project." + } + } + } + }, + "totalItems": { + "type": "integer", + "description": "The total number of projects in the list.", + "format": "int32" + } + } + }, + "ProjectReference": { + "id": "ProjectReference", + "type": "object", + "properties": { + "projectId": { + "type": "string", + "description": "[Required] ID of the project. Can be either the numeric ID or the assigned ID of the project." + } + } + }, + "QueryRequest": { + "id": "QueryRequest", + "type": "object", + "properties": { + "defaultDataset": { + "$ref": "DatasetReference", + "description": "[Optional] Specifies the default datasetId and projectId to assume for any unqualified table names in the query. If not set, all table names in the query string must be qualified in the format 'datasetId.tableId'." + }, + "dryRun": { + "type": "boolean", + "description": "[Optional] If set, don't actually run the query. A valid query will return an empty response, while an invalid query will return the same error it would if it wasn't a dry run. The default value is false." + }, + "kind": { + "type": "string", + "description": "The resource type of the request.", + "default": "bigquery#queryRequest" + }, + "maxResults": { + "type": "integer", + "description": "[Optional] The maximum number of rows of data to return per page of results. Setting this flag to a small value such as 1000 and then paging through results might improve reliability when the query result set is large. In addition to this limit, responses are also limited to 10 MB. By default, there is no maximum row count, and only the byte limit applies.", + "format": "uint32" + }, + "preserveNulls": { + "type": "boolean", + "description": "[Deprecated] If set to false, maps null values in the query response to the column's default value. Only specify if you have older code that can not handle null values in the query response. The default value is true. This flag is deprecated and will be ignored in a future version of BigQuery." + }, + "query": { + "type": "string", + "description": "[Required] A query string, following the BigQuery query syntax, of the query to execute. Example: \"SELECT count(f1) FROM [myProjectId:myDatasetId.myTableId]\".", + "annotations": { + "required": [ + "bigquery.jobs.query" + ] + } + }, + "timeoutMs": { + "type": "integer", + "description": "[Optional] How long to wait for the query to complete, in milliseconds, before the request times out and returns. Note that this is only a timeout for the request, not the query. If the query takes longer to run than the timeout value, the call returns without any results and with the 'jobComplete' flag set to false. You can call GetQueryResults() to wait for the query to complete and read the results. The default value is 10000 milliseconds (10 seconds).", + "format": "uint32" + }, + "useQueryCache": { + "type": "boolean", + "description": "[Optional] Whether to look for the result in the query cache. The query cache is a best-effort cache that will be flushed whenever tables in the query are modified. The default value is true." + } + } + }, + "QueryResponse": { + "id": "QueryResponse", + "type": "object", + "properties": { + "cacheHit": { + "type": "boolean", + "description": "Whether the query result was fetched from the query cache." + }, + "jobComplete": { + "type": "boolean", + "description": "Whether the query has completed or not. If rows or totalRows are present, this will always be true. If this is false, totalRows will not be available." + }, + "jobReference": { + "$ref": "JobReference", + "description": "Reference to the Job that was created to run the query. This field will be present even if the original request timed out, in which case GetQueryResults can be used to read the results once the query has completed. Since this API only returns the first page of results, subsequent pages can be fetched via the same mechanism (GetQueryResults)." + }, + "kind": { + "type": "string", + "description": "The resource type.", + "default": "bigquery#queryResponse" + }, + "pageToken": { + "type": "string", + "description": "A token used for paging results." + }, + "rows": { + "type": "array", + "description": "An object with as many results as can be contained within the maximum permitted reply size. To get any additional rows, you can call GetQueryResults and specify the jobReference returned above.", + "items": { + "$ref": "TableRow" + } + }, + "schema": { + "$ref": "TableSchema", + "description": "The schema of the results. Present only when the query completes successfully." + }, + "totalBytesProcessed": { + "type": "string", + "description": "The total number of bytes processed for this query. If this query was a dry run, this is the number of bytes that would be processed if the query were run.", + "format": "int64" + }, + "totalRows": { + "type": "string", + "description": "The total number of rows in the complete query result set, which can be more than the number of rows in this single page of results.", + "format": "uint64" + } + } + }, + "Table": { + "id": "Table", + "type": "object", + "properties": { + "creationTime": { + "type": "string", + "description": "[Output-only] The time when this table was created, in milliseconds since the epoch.", + "format": "int64" + }, + "description": { + "type": "string", + "description": "[Optional] A user-friendly description of this table." + }, + "etag": { + "type": "string", + "description": "[Output-only] A hash of this resource." + }, + "expirationTime": { + "type": "string", + "description": "[Optional] The time when this table expires, in milliseconds since the epoch. If not present, the table will persist indefinitely. Expired tables will be deleted and their storage reclaimed.", + "format": "int64" + }, + "friendlyName": { + "type": "string", + "description": "[Optional] A descriptive name for this table." + }, + "id": { + "type": "string", + "description": "[Output-only] An opaque ID uniquely identifying the table." + }, + "kind": { + "type": "string", + "description": "[Output-only] The type of the resource.", + "default": "bigquery#table" + }, + "lastModifiedTime": { + "type": "string", + "description": "[Output-only] The time when this table was last modified, in milliseconds since the epoch.", + "format": "int64" + }, + "numBytes": { + "type": "string", + "description": "[Output-only] The size of the table in bytes.", + "format": "int64" + }, + "numRows": { + "type": "string", + "description": "[Output-only] The number of rows of data in this table.", + "format": "uint64" + }, + "schema": { + "$ref": "TableSchema", + "description": "[Optional] Describes the schema of this table." + }, + "selfLink": { + "type": "string", + "description": "[Output-only] A URL that can be used to access this resource again." + }, + "tableReference": { + "$ref": "TableReference", + "description": "[Required] Reference describing the ID of this table." + }, + "type": { + "type": "string", + "description": "[Output-only] Describes the table type. The following values are supported: TABLE: A normal BigQuery table. VIEW: A virtual table defined by a SQL query. The default value is TABLE." + }, + "view": { + "$ref": "ViewDefinition", + "description": "[Optional] The view definition." + } + } + }, + "TableCell": { + "id": "TableCell", + "type": "object", + "description": "Represents a single cell in the result set. Users of the java client can detect whether their value result is null by calling 'com.google.api.client.util.Data.isNull(cell.getV())'.", + "properties": { + "v": { + "type": "any" + } + } + }, + "TableDataInsertAllRequest": { + "id": "TableDataInsertAllRequest", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "The resource type of the response.", + "default": "bigquery#tableDataInsertAllRequest" + }, + "rows": { + "type": "array", + "description": "The rows to insert.", + "items": { + "type": "object", + "properties": { + "insertId": { + "type": "string", + "description": "[Optional] A unique ID for each row. BigQuery uses this property to detect duplicate insertion requests on a best-effort basis." + }, + "json": { + "$ref": "JsonObject", + "description": "[Required] A JSON object that contains a row of data. The object's properties and values must match the destination table's schema." + } + } + } + } + } + }, + "TableDataInsertAllResponse": { + "id": "TableDataInsertAllResponse", + "type": "object", + "properties": { + "insertErrors": { + "type": "array", + "description": "An array of errors for rows that were not inserted.", + "items": { + "type": "object", + "properties": { + "errors": { + "type": "array", + "description": "Error information for the row indicated by the index property.", + "items": { + "$ref": "ErrorProto" + } + }, + "index": { + "type": "integer", + "description": "The index of the row that error applies to.", + "format": "uint32" + } + } + } + }, + "kind": { + "type": "string", + "description": "The resource type of the response.", + "default": "bigquery#tableDataInsertAllResponse" + } + } + }, + "TableDataList": { + "id": "TableDataList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "A hash of this page of results." + }, + "kind": { + "type": "string", + "description": "The resource type of the response.", + "default": "bigquery#tableDataList" + }, + "pageToken": { + "type": "string", + "description": "A token used for paging results. Providing this token instead of the startIndex parameter can help you retrieve stable results when an underlying table is changing." + }, + "rows": { + "type": "array", + "description": "Rows of results.", + "items": { + "$ref": "TableRow" + } + }, + "totalRows": { + "type": "string", + "description": "The total number of rows in the complete table.", + "format": "int64" + } + } + }, + "TableFieldSchema": { + "id": "TableFieldSchema", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "[Optional] The field description." + }, + "fields": { + "type": "array", + "description": "[Optional] Describes the nested schema fields if the type property is set to RECORD.", + "items": { + "$ref": "TableFieldSchema" + } + }, + "mode": { + "type": "string", + "description": "[Optional] The field mode. Possible values include NULLABLE, REQUIRED and REPEATED. The default value is NULLABLE." + }, + "name": { + "type": "string", + "description": "[Required] The field name." + }, + "type": { + "type": "string", + "description": "[Required] The field data type. Possible values include STRING, INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates that the field contains a nested schema)." + } + } + }, + "TableList": { + "id": "TableList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "A hash of this page of results." + }, + "kind": { + "type": "string", + "description": "The type of list.", + "default": "bigquery#tableList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to request the next page of results." + }, + "tables": { + "type": "array", + "description": "Tables in the requested dataset.", + "items": { + "type": "object", + "properties": { + "friendlyName": { + "type": "string", + "description": "The user-friendly name for this table." + }, + "id": { + "type": "string", + "description": "An opaque ID of the table" + }, + "kind": { + "type": "string", + "description": "The resource type.", + "default": "bigquery#table" + }, + "tableReference": { + "$ref": "TableReference", + "description": "A reference uniquely identifying the table." + }, + "type": { + "type": "string", + "description": "The type of table. Possible values are: TABLE, VIEW." + } + } + } + }, + "totalItems": { + "type": "integer", + "description": "The total number of tables in the dataset.", + "format": "int32" + } + } + }, + "TableReference": { + "id": "TableReference", + "type": "object", + "properties": { + "datasetId": { + "type": "string", + "description": "[Required] ID of the dataset containing the table.", + "annotations": { + "required": [ + "bigquery.tables.update" + ] + } + }, + "projectId": { + "type": "string", + "description": "[Required] ID of the project billed for storage of the table.", + "annotations": { + "required": [ + "bigquery.tables.update" + ] + } + }, + "tableId": { + "type": "string", + "description": "[Required] ID of the table.", + "annotations": { + "required": [ + "bigquery.tables.update" + ] + } + } + } + }, + "TableRow": { + "id": "TableRow", + "type": "object", + "description": "Represents a single row in the result set, consisting of one or more fields.", + "properties": { + "f": { + "type": "array", + "items": { + "$ref": "TableCell" + } + } + } + }, + "TableSchema": { + "id": "TableSchema", + "type": "object", + "properties": { + "fields": { + "type": "array", + "description": "Describes the fields in a table.", + "items": { + "$ref": "TableFieldSchema" + } + } + } + }, + "ViewDefinition": { + "id": "ViewDefinition", + "type": "object", + "properties": { + "query": { + "type": "string", + "description": "[Required] A query that BigQuery executes when the view is referenced." + } + } + } + }, + "resources": { + "datasets": { + "methods": { + "delete": { + "id": "bigquery.datasets.delete", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "DELETE", + "description": "Deletes the dataset specified by the datasetId value. Before you can delete a dataset, you must delete all its tables, either manually or by specifying deleteContents. Immediately after deletion, you can create another dataset with the same name.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of dataset being deleted", + "required": true, + "location": "path" + }, + "deleteContents": { + "type": "boolean", + "description": "If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the dataset being deleted", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "id": "bigquery.datasets.get", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "GET", + "description": "Returns the dataset specified by datasetID.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the requested dataset", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the requested dataset", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "insert": { + "id": "bigquery.datasets.insert", + "path": "projects/{projectId}/datasets", + "httpMethod": "POST", + "description": "Creates a new empty dataset.", + "parameters": { + "projectId": { + "type": "string", + "description": "Project ID of the new dataset", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "id": "bigquery.datasets.list", + "path": "projects/{projectId}/datasets", + "httpMethod": "GET", + "description": "Lists all the datasets in the specified project to which the caller has read access; however, a project owner can list (but not necessarily get) all datasets in his project.", + "parameters": { + "all": { + "type": "boolean", + "description": "Whether to list all datasets, including hidden ones", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, to request the next page of results", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the datasets to be listed", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "response": { + "$ref": "DatasetList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "id": "bigquery.datasets.patch", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "PATCH", + "description": "Updates information in an existing dataset. The update method replaces the entire dataset resource, whereas the patch method only replaces fields that are provided in the submitted dataset resource. This method supports patch semantics.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the dataset being updated", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the dataset being updated", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "update": { + "id": "bigquery.datasets.update", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "PUT", + "description": "Updates information in an existing dataset. The update method replaces the entire dataset resource, whereas the patch method only replaces fields that are provided in the submitted dataset resource.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the dataset being updated", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the dataset being updated", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "jobs": { + "methods": { + "get": { + "id": "bigquery.jobs.get", + "path": "projects/{projectId}/jobs/{jobId}", + "httpMethod": "GET", + "description": "Retrieves the specified job by ID.", + "parameters": { + "jobId": { + "type": "string", + "description": "Job ID of the requested job", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the requested job", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "jobId" + ], + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "getQueryResults": { + "id": "bigquery.jobs.getQueryResults", + "path": "projects/{projectId}/queries/{jobId}", + "httpMethod": "GET", + "description": "Retrieves the results of a query job.", + "parameters": { + "jobId": { + "type": "string", + "description": "Job ID of the query job", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to read", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, to request the next page of results", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the query job", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "string", + "description": "Zero-based index of the starting row", + "format": "uint64", + "location": "query" + }, + "timeoutMs": { + "type": "integer", + "description": "How long to wait for the query to complete, in milliseconds, before returning. Default is to return immediately. If the timeout passes before the job completes, the request will fail with a TIMEOUT error", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "projectId", + "jobId" + ], + "response": { + "$ref": "GetQueryResultsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "insert": { + "id": "bigquery.jobs.insert", + "path": "projects/{projectId}/jobs", + "httpMethod": "POST", + "description": "Starts a new asynchronous job.", + "parameters": { + "projectId": { + "type": "string", + "description": "Project ID of the project that will be billed for the job", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "Job" + }, + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/bigquery/v2/projects/{projectId}/jobs" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/bigquery/v2/projects/{projectId}/jobs" + } + } + } + }, + "list": { + "id": "bigquery.jobs.list", + "path": "projects/{projectId}/jobs", + "httpMethod": "GET", + "description": "Lists all the Jobs in the specified project that were started by the user.", + "parameters": { + "allUsers": { + "type": "boolean", + "description": "Whether to display jobs owned by all users in the project. Default false", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, to request the next page of results", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the jobs to list", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields", + "enum": [ + "full", + "minimal" + ], + "enumDescriptions": [ + "Includes all job data", + "Does not include the job configuration" + ], + "location": "query" + }, + "stateFilter": { + "type": "string", + "description": "Filter for job state", + "enum": [ + "done", + "pending", + "running" + ], + "enumDescriptions": [ + "Finished jobs", + "Pending jobs", + "Running jobs" + ], + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "projectId" + ], + "response": { + "$ref": "JobList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "query": { + "id": "bigquery.jobs.query", + "path": "projects/{projectId}/queries", + "httpMethod": "POST", + "description": "Runs a BigQuery SQL query synchronously and returns query results if the query completes within a specified timeout.", + "parameters": { + "projectId": { + "type": "string", + "description": "Project ID of the project billed for the query", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "QueryRequest" + }, + "response": { + "$ref": "QueryResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "projects": { + "methods": { + "list": { + "id": "bigquery.projects.list", + "path": "projects", + "httpMethod": "GET", + "description": "Lists the projects to which you have at least read access.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, to request the next page of results", + "location": "query" + } + }, + "response": { + "$ref": "ProjectList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "tabledata": { + "methods": { + "insertAll": { + "id": "bigquery.tabledata.insertAll", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll", + "httpMethod": "POST", + "description": "Inserts the supplied rows into the table.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the destination table.", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the destination table.", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "description": "Table ID of the destination table.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "request": { + "$ref": "TableDataInsertAllRequest" + }, + "response": { + "$ref": "TableDataInsertAllResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "id": "bigquery.tabledata.list", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data", + "httpMethod": "GET", + "description": "Retrieves table data from a specified set of rows.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the table to read", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, identifying the result set", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the table to read", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "string", + "description": "Zero-based index of the starting row to read", + "format": "uint64", + "location": "query" + }, + "tableId": { + "type": "string", + "description": "Table ID of the table to read", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "response": { + "$ref": "TableDataList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + }, + "tables": { + "methods": { + "delete": { + "id": "bigquery.tables.delete", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "DELETE", + "description": "Deletes the table specified by tableId from the dataset. If the table contains data, all the data will be deleted.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the table to delete", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the table to delete", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "description": "Table ID of the table to delete", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "id": "bigquery.tables.get", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "GET", + "description": "Gets the specified table resource by table ID. This method does not return the data in the table, it only returns the table resource, which describes the structure of this table.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the requested table", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the requested table", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "description": "Table ID of the requested table", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "insert": { + "id": "bigquery.tables.insert", + "path": "projects/{projectId}/datasets/{datasetId}/tables", + "httpMethod": "POST", + "description": "Creates a new, empty table in the dataset.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the new table", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the new table", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "list": { + "id": "bigquery.tables.list", + "path": "projects/{projectId}/datasets/{datasetId}/tables", + "httpMethod": "GET", + "description": "Lists all tables in the specified dataset.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the tables to list", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token, returned by a previous call, to request the next page of results", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project ID of the tables to list", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "response": { + "$ref": "TableList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "patch": { + "id": "bigquery.tables.patch", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "PATCH", + "description": "Updates information in an existing table. The update method replaces the entire table resource, whereas the patch method only replaces fields that are provided in the submitted table resource. This method supports patch semantics.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the table to update", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the table to update", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "description": "Table ID of the table to update", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "update": { + "id": "bigquery.tables.update", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "PUT", + "description": "Updates information in an existing table. The update method replaces the entire table resource, whereas the patch method only replaces fields that are provided in the submitted table resource.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset ID of the table to update", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project ID of the table to update", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "description": "Table ID of the table to update", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery", + "https://www.googleapis.com/auth/cloud-platform" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-gen.go b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-gen.go new file mode 100644 index 0000000000000..9e15158bf6520 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2/bigquery-gen.go @@ -0,0 +1,3023 @@ +// Package bigquery provides access to the BigQuery API. +// +// See https://developers.google.com/bigquery/docs/overview +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/bigquery/v2" +// ... +// bigqueryService, err := bigquery.New(oauthHttpClient) +package bigquery + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "bigquery:v2" +const apiName = "bigquery" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/bigquery/v2/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data in Google BigQuery + BigqueryScope = "https://www.googleapis.com/auth/bigquery" + + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" + + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Datasets = NewDatasetsService(s) + s.Jobs = NewJobsService(s) + s.Projects = NewProjectsService(s) + s.Tabledata = NewTabledataService(s) + s.Tables = NewTablesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Datasets *DatasetsService + + Jobs *JobsService + + Projects *ProjectsService + + Tabledata *TabledataService + + Tables *TablesService +} + +func NewDatasetsService(s *Service) *DatasetsService { + rs := &DatasetsService{s: s} + return rs +} + +type DatasetsService struct { + s *Service +} + +func NewJobsService(s *Service) *JobsService { + rs := &JobsService{s: s} + return rs +} + +type JobsService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewTabledataService(s *Service) *TabledataService { + rs := &TabledataService{s: s} + return rs +} + +type TabledataService struct { + s *Service +} + +func NewTablesService(s *Service) *TablesService { + rs := &TablesService{s: s} + return rs +} + +type TablesService struct { + s *Service +} + +type Dataset struct { + // Access: [Optional] An array of objects that define dataset access for + // one or more entities. You can set this property when inserting or + // updating a dataset in order to control who is allowed to access the + // data. If unspecified at dataset creation time, BigQuery adds default + // dataset access for the following entities: access.specialGroup: + // projectReaders; access.role: READER; access.specialGroup: + // projectWriters; access.role: WRITER; access.specialGroup: + // projectOwners; access.role: OWNER; access.userByEmail: [dataset + // creator email]; access.role: OWNER; + Access []*DatasetAccess `json:"access,omitempty"` + + // CreationTime: [Output-only] The time when this dataset was created, + // in milliseconds since the epoch. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // DatasetReference: [Required] A reference that identifies the dataset. + DatasetReference *DatasetReference `json:"datasetReference,omitempty"` + + // Description: [Optional] A user-friendly description of the dataset. + Description string `json:"description,omitempty"` + + // Etag: [Output-only] A hash of the resource. + Etag string `json:"etag,omitempty"` + + // FriendlyName: [Optional] A descriptive name for the dataset. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: [Output-only] The fully-qualified unique name of the dataset in + // the format projectId:datasetId. The dataset name without the project + // name is given in the datasetId field. When creating a new dataset, + // leave this field blank, and instead specify the datasetId field. + Id string `json:"id,omitempty"` + + // Kind: [Output-only] The resource type. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: [Output-only] The date when this dataset or any of + // its tables was last modified, in milliseconds since the epoch. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // SelfLink: [Output-only] A URL that can be used to access the resource + // again. You can use this URL in Get or Update requests to the + // resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type DatasetAccess struct { + // Domain: [Pick one] A domain to grant access to. Any users signed in + // with the domain specified will be granted the specified access. + // Example: "example.com". + Domain string `json:"domain,omitempty"` + + // GroupByEmail: [Pick one] An email address of a Google Group to grant + // access to. + GroupByEmail string `json:"groupByEmail,omitempty"` + + // Role: [Required] Describes the rights granted to the user specified + // by the other member of the access object. The following string values + // are supported: READER, WRITER, OWNER. + Role string `json:"role,omitempty"` + + // SpecialGroup: [Pick one] A special group to grant access to. Possible + // values include: projectOwners: Owners of the enclosing project. + // projectReaders: Readers of the enclosing project. projectWriters: + // Writers of the enclosing project. allAuthenticatedUsers: All + // authenticated BigQuery users. + SpecialGroup string `json:"specialGroup,omitempty"` + + // UserByEmail: [Pick one] An email address of a user to grant access + // to. For example: fred@example.com. + UserByEmail string `json:"userByEmail,omitempty"` +} + +type DatasetList struct { + // Datasets: An array of the dataset resources in the project. Each + // resource contains basic information. For full information about a + // particular dataset resource, use the Datasets: get method. This + // property is omitted when there are no datasets in the project. + Datasets []*DatasetListDatasets `json:"datasets,omitempty"` + + // Etag: A hash value of the results page. You can use this property to + // determine if the page has changed since the last request. + Etag string `json:"etag,omitempty"` + + // Kind: The list type. This property always returns the value + // "bigquery#datasetList". + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token that can be used to request the next results + // page. This property is omitted on the final results page. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DatasetListDatasets struct { + // DatasetReference: The dataset reference. Use this property to access + // specific parts of the dataset's ID, such as project ID or dataset ID. + DatasetReference *DatasetReference `json:"datasetReference,omitempty"` + + // FriendlyName: A descriptive name for the dataset, if one exists. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: The fully-qualified, unique, opaque ID of the dataset. + Id string `json:"id,omitempty"` + + // Kind: The resource type. This property always returns the value + // "bigquery#dataset". + Kind string `json:"kind,omitempty"` +} + +type DatasetReference struct { + // DatasetId: [Required] A unique ID for this dataset, without the + // project name. + DatasetId string `json:"datasetId,omitempty"` + + // ProjectId: [Optional] The ID of the container project. + ProjectId string `json:"projectId,omitempty"` +} + +type ErrorProto struct { + // DebugInfo: Debugging information. This property is internal to Google + // and should not be used. + DebugInfo string `json:"debugInfo,omitempty"` + + // Location: Specifies where the error occurred, if present. + Location string `json:"location,omitempty"` + + // Message: A human-readable description of the error. + Message string `json:"message,omitempty"` + + // Reason: A short error code that summarizes the error. + Reason string `json:"reason,omitempty"` +} + +type GetQueryResultsResponse struct { + // CacheHit: Whether the query result was fetched from the query cache. + CacheHit bool `json:"cacheHit,omitempty"` + + // Etag: A hash of this response. + Etag string `json:"etag,omitempty"` + + // JobComplete: Whether the query has completed or not. If rows or + // totalRows are present, this will always be true. If this is false, + // totalRows will not be available. + JobComplete bool `json:"jobComplete,omitempty"` + + // JobReference: Reference to the BigQuery Job that was created to run + // the query. This field will be present even if the original request + // timed out, in which case GetQueryResults can be used to read the + // results once the query has completed. Since this API only returns the + // first page of results, subsequent pages can be fetched via the same + // mechanism (GetQueryResults). + JobReference *JobReference `json:"jobReference,omitempty"` + + // Kind: The resource type of the response. + Kind string `json:"kind,omitempty"` + + // PageToken: A token used for paging results. + PageToken string `json:"pageToken,omitempty"` + + // Rows: An object with as many results as can be contained within the + // maximum permitted reply size. To get any additional rows, you can + // call GetQueryResults and specify the jobReference returned above. + // Present only when the query completes successfully. + Rows []*TableRow `json:"rows,omitempty"` + + // Schema: The schema of the results. Present only when the query + // completes successfully. + Schema *TableSchema `json:"schema,omitempty"` + + // TotalRows: The total number of rows in the complete query result set, + // which can be more than the number of rows in this single page of + // results. Present only when the query completes successfully. + TotalRows uint64 `json:"totalRows,omitempty,string"` +} + +type Job struct { + // Configuration: [Required] Describes the job configuration. + Configuration *JobConfiguration `json:"configuration,omitempty"` + + // Etag: [Output-only] A hash of this resource. + Etag string `json:"etag,omitempty"` + + // Id: [Output-only] Opaque ID field of the job + Id string `json:"id,omitempty"` + + // JobReference: [Optional] Reference describing the unique-per-user + // name of the job. + JobReference *JobReference `json:"jobReference,omitempty"` + + // Kind: [Output-only] The type of the resource. + Kind string `json:"kind,omitempty"` + + // SelfLink: [Output-only] A URL that can be used to access this + // resource again. + SelfLink string `json:"selfLink,omitempty"` + + // Statistics: [Output-only] Information about the job, including + // starting time and ending time of the job. + Statistics *JobStatistics `json:"statistics,omitempty"` + + // Status: [Output-only] The status of this job. Examine this value when + // polling an asynchronous job to see if the job is complete. + Status *JobStatus `json:"status,omitempty"` +} + +type JobConfiguration struct { + // Copy: [Pick one] Copies a table. + Copy *JobConfigurationTableCopy `json:"copy,omitempty"` + + // DryRun: [Optional] If set, don't actually run this job. A valid query + // will return a mostly empty response with some processing statistics, + // while an invalid query will return the same error it would if it + // wasn't a dry run. Behavior of non-query jobs is undefined. + DryRun bool `json:"dryRun,omitempty"` + + // Extract: [Pick one] Configures an extract job. + Extract *JobConfigurationExtract `json:"extract,omitempty"` + + // Link: [Pick one] Configures a link job. + Link *JobConfigurationLink `json:"link,omitempty"` + + // Load: [Pick one] Configures a load job. + Load *JobConfigurationLoad `json:"load,omitempty"` + + // Query: [Pick one] Configures a query job. + Query *JobConfigurationQuery `json:"query,omitempty"` +} + +type JobConfigurationExtract struct { + // DestinationFormat: [Experimental] Optional and defaults to CSV. + // Format with which files should be exported. To export to CSV, specify + // "CSV". Tables with nested or repeated fields cannot be exported as + // CSV. To export to newline-delimited JSON, specify + // "NEWLINE_DELIMITED_JSON". + DestinationFormat string `json:"destinationFormat,omitempty"` + + // DestinationUri: [Pick one] DEPRECATED: Use destinationUris instead, + // passing only one URI as necessary. The fully-qualified Google Cloud + // Storage URI where the extracted table should be written. + DestinationUri string `json:"destinationUri,omitempty"` + + // DestinationUris: [Pick one] A list of fully-qualified Google Cloud + // Storage URIs where the extracted table should be written. + DestinationUris []string `json:"destinationUris,omitempty"` + + // FieldDelimiter: [Optional] Delimiter to use between fields in the + // exported data. Default is ',' + FieldDelimiter string `json:"fieldDelimiter,omitempty"` + + // PrintHeader: [Optional] Whether to print out a header row in the + // results. Default is true. + PrintHeader bool `json:"printHeader,omitempty"` + + // SourceTable: [Required] A reference to the table being exported. + SourceTable *TableReference `json:"sourceTable,omitempty"` +} + +type JobConfigurationLink struct { + // CreateDisposition: [Optional] Specifies whether the job is allowed to + // create new tables. The following values are supported: + // CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the + // table. CREATE_NEVER: The table must already exist. If it does not, a + // 'notFound' error is returned in the job result. The default value is + // CREATE_IF_NEEDED. Creation, truncation and append actions occur as + // one atomic update upon job completion. + CreateDisposition string `json:"createDisposition,omitempty"` + + // DestinationTable: [Required] The destination table of the link job. + DestinationTable *TableReference `json:"destinationTable,omitempty"` + + // SourceUri: [Required] URI of source table to link. + SourceUri []string `json:"sourceUri,omitempty"` + + // WriteDisposition: [Optional] Specifies the action that occurs if the + // destination table already exists. The following values are supported: + // WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the + // table data. WRITE_APPEND: If the table already exists, BigQuery + // appends the data to the table. WRITE_EMPTY: If the table already + // exists and contains data, a 'duplicate' error is returned in the job + // result. The default value is WRITE_EMPTY. Each action is atomic and + // only occurs if BigQuery is able to complete the job successfully. + // Creation, truncation and append actions occur as one atomic update + // upon job completion. + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type JobConfigurationLoad struct { + // AllowJaggedRows: [Optional] Accept rows that are missing trailing + // optional columns. The missing values are treated as nulls. Default is + // false which treats short rows as errors. Only applicable to CSV, + // ignored for other formats. + AllowJaggedRows bool `json:"allowJaggedRows,omitempty"` + + // AllowQuotedNewlines: Indicates if BigQuery should allow quoted data + // sections that contain newline characters in a CSV file. The default + // value is false. + AllowQuotedNewlines bool `json:"allowQuotedNewlines,omitempty"` + + // CreateDisposition: [Optional] Specifies whether the job is allowed to + // create new tables. The following values are supported: + // CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the + // table. CREATE_NEVER: The table must already exist. If it does not, a + // 'notFound' error is returned in the job result. The default value is + // CREATE_IF_NEEDED. Creation, truncation and append actions occur as + // one atomic update upon job completion. + CreateDisposition string `json:"createDisposition,omitempty"` + + // DestinationTable: [Required] The destination table to load the data + // into. + DestinationTable *TableReference `json:"destinationTable,omitempty"` + + // Encoding: [Optional] The character encoding of the data. The + // supported values are UTF-8 or ISO-8859-1. The default value is UTF-8. + // BigQuery decodes the data after the raw, binary data has been split + // using the values of the quote and fieldDelimiter properties. + Encoding string `json:"encoding,omitempty"` + + // FieldDelimiter: [Optional] The separator for fields in a CSV file. + // BigQuery converts the string to ISO-8859-1 encoding, and then uses + // the first byte of the encoded string to split the data in its raw, + // binary state. BigQuery also supports the escape sequence "\t" to + // specify a tab separator. The default value is a comma (','). + FieldDelimiter string `json:"fieldDelimiter,omitempty"` + + // IgnoreUnknownValues: [Optional] Accept rows that contain values that + // do not match the schema. The unknown values are ignored. Default is + // false which treats unknown values as errors. For CSV this ignores + // extra values at the end of a line. For JSON this ignores named values + // that do not match any column name. + IgnoreUnknownValues bool `json:"ignoreUnknownValues,omitempty"` + + // MaxBadRecords: [Optional] The maximum number of bad records that + // BigQuery can ignore when running the job. If the number of bad + // records exceeds this value, an 'invalid' error is returned in the job + // result and the job fails. The default value is 0, which requires that + // all records are valid. + MaxBadRecords int64 `json:"maxBadRecords,omitempty"` + + // Quote: [Optional] The value that is used to quote data sections in a + // CSV file. BigQuery converts the string to ISO-8859-1 encoding, and + // then uses the first byte of the encoded string to split the data in + // its raw, binary state. The default value is a double-quote ('"'). If + // your data does not contain quoted sections, set the property value to + // an empty string. If your data contains quoted newline characters, you + // must also set the allowQuotedNewlines property to true. + Quote string `json:"quote,omitempty"` + + // Schema: [Optional] The schema for the destination table. The schema + // can be omitted if the destination table already exists or if the + // schema can be inferred from the loaded data. + Schema *TableSchema `json:"schema,omitempty"` + + // SchemaInline: [Deprecated] The inline schema. For CSV schemas, + // specify as "Field1:Type1[,Field2:Type2]*". For example, "foo:STRING, + // bar:INTEGER, baz:FLOAT". + SchemaInline string `json:"schemaInline,omitempty"` + + // SchemaInlineFormat: [Deprecated] The format of the schemaInline + // property. + SchemaInlineFormat string `json:"schemaInlineFormat,omitempty"` + + // SkipLeadingRows: [Optional] The number of rows at the top of a CSV + // file that BigQuery will skip when loading the data. The default value + // is 0. This property is useful if you have header rows in the file + // that should be skipped. + SkipLeadingRows int64 `json:"skipLeadingRows,omitempty"` + + // SourceFormat: [Optional] The format of the data files. For CSV files, + // specify "CSV". For datastore backups, specify "DATASTORE_BACKUP". For + // newline-delimited JSON, specify "NEWLINE_DELIMITED_JSON". The default + // value is CSV. + SourceFormat string `json:"sourceFormat,omitempty"` + + // SourceUris: [Required] The fully-qualified URIs that point to your + // data on Google Cloud Storage. + SourceUris []string `json:"sourceUris,omitempty"` + + // WriteDisposition: [Optional] Specifies the action that occurs if the + // destination table already exists. The following values are supported: + // WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the + // table data. WRITE_APPEND: If the table already exists, BigQuery + // appends the data to the table. WRITE_EMPTY: If the table already + // exists and contains data, a 'duplicate' error is returned in the job + // result. The default value is WRITE_EMPTY. Each action is atomic and + // only occurs if BigQuery is able to complete the job successfully. + // Creation, truncation and append actions occur as one atomic update + // upon job completion. + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type JobConfigurationQuery struct { + // AllowLargeResults: If true, allows the query to produce arbitrarily + // large result tables at a slight cost in performance. Requires + // destination_table to be set. + AllowLargeResults bool `json:"allowLargeResults,omitempty"` + + // CreateDisposition: [Optional] Specifies whether the job is allowed to + // create new tables. The following values are supported: + // CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the + // table. CREATE_NEVER: The table must already exist. If it does not, a + // 'notFound' error is returned in the job result. The default value is + // CREATE_IF_NEEDED. Creation, truncation and append actions occur as + // one atomic update upon job completion. + CreateDisposition string `json:"createDisposition,omitempty"` + + // DefaultDataset: [Optional] Specifies the default dataset to use for + // unqualified table names in the query. + DefaultDataset *DatasetReference `json:"defaultDataset,omitempty"` + + // DestinationTable: [Optional] Describes the table where the query + // results should be stored. If not present, a new table will be created + // to store the results. + DestinationTable *TableReference `json:"destinationTable,omitempty"` + + // PreserveNulls: [Deprecated] This property is deprecated. + PreserveNulls bool `json:"preserveNulls,omitempty"` + + // Priority: [Optional] Specifies a priority for the query. Possible + // values include INTERACTIVE and BATCH. The default value is + // INTERACTIVE. + Priority string `json:"priority,omitempty"` + + // Query: [Required] BigQuery SQL query to execute. + Query string `json:"query,omitempty"` + + // UseQueryCache: [Optional] Whether to look for the result in the query + // cache. The query cache is a best-effort cache that will be flushed + // whenever tables in the query are modified. Moreover, the query cache + // is only available when a query does not have a destination table + // specified. + UseQueryCache bool `json:"useQueryCache,omitempty"` + + // WriteDisposition: [Optional] Specifies the action that occurs if the + // destination table already exists. The following values are supported: + // WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the + // table data. WRITE_APPEND: If the table already exists, BigQuery + // appends the data to the table. WRITE_EMPTY: If the table already + // exists and contains data, a 'duplicate' error is returned in the job + // result. The default value is WRITE_EMPTY. Each action is atomic and + // only occurs if BigQuery is able to complete the job successfully. + // Creation, truncation and append actions occur as one atomic update + // upon job completion. + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type JobConfigurationTableCopy struct { + // CreateDisposition: [Optional] Specifies whether the job is allowed to + // create new tables. The following values are supported: + // CREATE_IF_NEEDED: If the table does not exist, BigQuery creates the + // table. CREATE_NEVER: The table must already exist. If it does not, a + // 'notFound' error is returned in the job result. The default value is + // CREATE_IF_NEEDED. Creation, truncation and append actions occur as + // one atomic update upon job completion. + CreateDisposition string `json:"createDisposition,omitempty"` + + // DestinationTable: [Required] The destination table + DestinationTable *TableReference `json:"destinationTable,omitempty"` + + // SourceTable: [Required] Source table to copy. + SourceTable *TableReference `json:"sourceTable,omitempty"` + + // WriteDisposition: [Optional] Specifies the action that occurs if the + // destination table already exists. The following values are supported: + // WRITE_TRUNCATE: If the table already exists, BigQuery overwrites the + // table data. WRITE_APPEND: If the table already exists, BigQuery + // appends the data to the table. WRITE_EMPTY: If the table already + // exists and contains data, a 'duplicate' error is returned in the job + // result. The default value is WRITE_EMPTY. Each action is atomic and + // only occurs if BigQuery is able to complete the job successfully. + // Creation, truncation and append actions occur as one atomic update + // upon job completion. + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type JobList struct { + // Etag: A hash of this page of results. + Etag string `json:"etag,omitempty"` + + // Jobs: List of jobs that were requested. + Jobs []*JobListJobs `json:"jobs,omitempty"` + + // Kind: The resource type of the response. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to request the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: Total number of jobs in this collection. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type JobListJobs struct { + // Configuration: [Full-projection-only] Specifies the job + // configuration. + Configuration *JobConfiguration `json:"configuration,omitempty"` + + // ErrorResult: A result object that will be present only if the job has + // failed. + ErrorResult *ErrorProto `json:"errorResult,omitempty"` + + // Id: Unique opaque ID of the job. + Id string `json:"id,omitempty"` + + // JobReference: Job reference uniquely identifying the job. + JobReference *JobReference `json:"jobReference,omitempty"` + + // Kind: The resource type. + Kind string `json:"kind,omitempty"` + + // State: Running state of the job. When the state is DONE, errorResult + // can be checked to determine whether the job succeeded or failed. + State string `json:"state,omitempty"` + + // Statistics: [Output-only] Information about the job, including + // starting time and ending time of the job. + Statistics *JobStatistics `json:"statistics,omitempty"` + + // Status: [Full-projection-only] Describes the state of the job. + Status *JobStatus `json:"status,omitempty"` + + // User_email: [Full-projection-only] User who ran the job. + User_email string `json:"user_email,omitempty"` +} + +type JobReference struct { + // JobId: [Required] ID of the job. + JobId string `json:"jobId,omitempty"` + + // ProjectId: [Required] Project ID being billed for the job. + ProjectId string `json:"projectId,omitempty"` +} + +type JobStatistics struct { + // CreationTime: [Output-only] Creation time of this job, in + // milliseconds since the epoch. This field will be present on all jobs. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // EndTime: [Output-only] End time of this job, in milliseconds since + // the epoch. This field will be present whenever a job is in the DONE + // state. + EndTime int64 `json:"endTime,omitempty,string"` + + // Load: [Output-only] Statistics for a load job. + Load *JobStatistics3 `json:"load,omitempty"` + + // Query: [Output-only] Statistics for a query job. + Query *JobStatistics2 `json:"query,omitempty"` + + // StartTime: [Output-only] Start time of this job, in milliseconds + // since the epoch. This field will be present when the job transitions + // from the PENDING state to either RUNNING or DONE. + StartTime int64 `json:"startTime,omitempty,string"` + + // TotalBytesProcessed: [Output-only] [Deprecated] Use the bytes + // processed in the query statistics instead. + TotalBytesProcessed int64 `json:"totalBytesProcessed,omitempty,string"` +} + +type JobStatistics2 struct { + // CacheHit: [Output-only] Whether the query result was fetched from the + // query cache. + CacheHit bool `json:"cacheHit,omitempty"` + + // TotalBytesProcessed: [Output-only] Total bytes processed for this + // job. + TotalBytesProcessed int64 `json:"totalBytesProcessed,omitempty,string"` +} + +type JobStatistics3 struct { + // InputFileBytes: [Output-only] Number of bytes of source data in a + // joad job. + InputFileBytes int64 `json:"inputFileBytes,omitempty,string"` + + // InputFiles: [Output-only] Number of source files in a load job. + InputFiles int64 `json:"inputFiles,omitempty,string"` + + // OutputBytes: [Output-only] Size of the loaded data in bytes. Note + // that while an import job is in the running state, this value may + // change. + OutputBytes int64 `json:"outputBytes,omitempty,string"` + + // OutputRows: [Output-only] Number of rows imported in a load job. Note + // that while an import job is in the running state, this value may + // change. + OutputRows int64 `json:"outputRows,omitempty,string"` +} + +type JobStatus struct { + // ErrorResult: [Output-only] Final error result of the job. If present, + // indicates that the job has completed and was unsuccessful. + ErrorResult *ErrorProto `json:"errorResult,omitempty"` + + // Errors: [Output-only] All errors encountered during the running of + // the job. Errors here do not necessarily mean that the job has + // completed or was unsuccessful. + Errors []*ErrorProto `json:"errors,omitempty"` + + // State: [Output-only] Running state of the job. + State string `json:"state,omitempty"` +} + +type JsonObject struct { +} + +type ProjectList struct { + // Etag: A hash of the page of results + Etag string `json:"etag,omitempty"` + + // Kind: The type of list. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to request the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Projects: Projects to which you have at least READ access. + Projects []*ProjectListProjects `json:"projects,omitempty"` + + // TotalItems: The total number of projects in the list. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ProjectListProjects struct { + // FriendlyName: A descriptive name for this project. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: An opaque ID of this project. + Id string `json:"id,omitempty"` + + // Kind: The resource type. + Kind string `json:"kind,omitempty"` + + // NumericId: The numeric ID of this project. + NumericId uint64 `json:"numericId,omitempty,string"` + + // ProjectReference: A unique reference to this project. + ProjectReference *ProjectReference `json:"projectReference,omitempty"` +} + +type ProjectReference struct { + // ProjectId: [Required] ID of the project. Can be either the numeric ID + // or the assigned ID of the project. + ProjectId string `json:"projectId,omitempty"` +} + +type QueryRequest struct { + // DefaultDataset: [Optional] Specifies the default datasetId and + // projectId to assume for any unqualified table names in the query. If + // not set, all table names in the query string must be qualified in the + // format 'datasetId.tableId'. + DefaultDataset *DatasetReference `json:"defaultDataset,omitempty"` + + // DryRun: [Optional] If set, don't actually run the query. A valid + // query will return an empty response, while an invalid query will + // return the same error it would if it wasn't a dry run. The default + // value is false. + DryRun bool `json:"dryRun,omitempty"` + + // Kind: The resource type of the request. + Kind string `json:"kind,omitempty"` + + // MaxResults: [Optional] The maximum number of rows of data to return + // per page of results. Setting this flag to a small value such as 1000 + // and then paging through results might improve reliability when the + // query result set is large. In addition to this limit, responses are + // also limited to 10 MB. By default, there is no maximum row count, and + // only the byte limit applies. + MaxResults int64 `json:"maxResults,omitempty"` + + // PreserveNulls: [Deprecated] If set to false, maps null values in the + // query response to the column's default value. Only specify if you + // have older code that can not handle null values in the query + // response. The default value is true. This flag is deprecated and will + // be ignored in a future version of BigQuery. + PreserveNulls bool `json:"preserveNulls,omitempty"` + + // Query: [Required] A query string, following the BigQuery query + // syntax, of the query to execute. Example: "SELECT count(f1) FROM + // [myProjectId:myDatasetId.myTableId]". + Query string `json:"query,omitempty"` + + // TimeoutMs: [Optional] How long to wait for the query to complete, in + // milliseconds, before the request times out and returns. Note that + // this is only a timeout for the request, not the query. If the query + // takes longer to run than the timeout value, the call returns without + // any results and with the 'jobComplete' flag set to false. You can + // call GetQueryResults() to wait for the query to complete and read the + // results. The default value is 10000 milliseconds (10 seconds). + TimeoutMs int64 `json:"timeoutMs,omitempty"` + + // UseQueryCache: [Optional] Whether to look for the result in the query + // cache. The query cache is a best-effort cache that will be flushed + // whenever tables in the query are modified. The default value is true. + UseQueryCache bool `json:"useQueryCache,omitempty"` +} + +type QueryResponse struct { + // CacheHit: Whether the query result was fetched from the query cache. + CacheHit bool `json:"cacheHit,omitempty"` + + // JobComplete: Whether the query has completed or not. If rows or + // totalRows are present, this will always be true. If this is false, + // totalRows will not be available. + JobComplete bool `json:"jobComplete,omitempty"` + + // JobReference: Reference to the Job that was created to run the query. + // This field will be present even if the original request timed out, in + // which case GetQueryResults can be used to read the results once the + // query has completed. Since this API only returns the first page of + // results, subsequent pages can be fetched via the same mechanism + // (GetQueryResults). + JobReference *JobReference `json:"jobReference,omitempty"` + + // Kind: The resource type. + Kind string `json:"kind,omitempty"` + + // PageToken: A token used for paging results. + PageToken string `json:"pageToken,omitempty"` + + // Rows: An object with as many results as can be contained within the + // maximum permitted reply size. To get any additional rows, you can + // call GetQueryResults and specify the jobReference returned above. + Rows []*TableRow `json:"rows,omitempty"` + + // Schema: The schema of the results. Present only when the query + // completes successfully. + Schema *TableSchema `json:"schema,omitempty"` + + // TotalBytesProcessed: The total number of bytes processed for this + // query. If this query was a dry run, this is the number of bytes that + // would be processed if the query were run. + TotalBytesProcessed int64 `json:"totalBytesProcessed,omitempty,string"` + + // TotalRows: The total number of rows in the complete query result set, + // which can be more than the number of rows in this single page of + // results. + TotalRows uint64 `json:"totalRows,omitempty,string"` +} + +type Table struct { + // CreationTime: [Output-only] The time when this table was created, in + // milliseconds since the epoch. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // Description: [Optional] A user-friendly description of this table. + Description string `json:"description,omitempty"` + + // Etag: [Output-only] A hash of this resource. + Etag string `json:"etag,omitempty"` + + // ExpirationTime: [Optional] The time when this table expires, in + // milliseconds since the epoch. If not present, the table will persist + // indefinitely. Expired tables will be deleted and their storage + // reclaimed. + ExpirationTime int64 `json:"expirationTime,omitempty,string"` + + // FriendlyName: [Optional] A descriptive name for this table. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: [Output-only] An opaque ID uniquely identifying the table. + Id string `json:"id,omitempty"` + + // Kind: [Output-only] The type of the resource. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: [Output-only] The time when this table was last + // modified, in milliseconds since the epoch. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // NumBytes: [Output-only] The size of the table in bytes. + NumBytes int64 `json:"numBytes,omitempty,string"` + + // NumRows: [Output-only] The number of rows of data in this table. + NumRows uint64 `json:"numRows,omitempty,string"` + + // Schema: [Optional] Describes the schema of this table. + Schema *TableSchema `json:"schema,omitempty"` + + // SelfLink: [Output-only] A URL that can be used to access this + // resource again. + SelfLink string `json:"selfLink,omitempty"` + + // TableReference: [Required] Reference describing the ID of this table. + TableReference *TableReference `json:"tableReference,omitempty"` + + // Type: [Output-only] Describes the table type. The following values + // are supported: TABLE: A normal BigQuery table. VIEW: A virtual table + // defined by a SQL query. The default value is TABLE. + Type string `json:"type,omitempty"` + + // View: [Optional] The view definition. + View *ViewDefinition `json:"view,omitempty"` +} + +type TableCell struct { + V interface{} `json:"v,omitempty"` +} + +type TableDataInsertAllRequest struct { + // Kind: The resource type of the response. + Kind string `json:"kind,omitempty"` + + // Rows: The rows to insert. + Rows []*TableDataInsertAllRequestRows `json:"rows,omitempty"` +} + +type TableDataInsertAllRequestRows struct { + // InsertId: [Optional] A unique ID for each row. BigQuery uses this + // property to detect duplicate insertion requests on a best-effort + // basis. + InsertId string `json:"insertId,omitempty"` + + // Json: [Required] A JSON object that contains a row of data. The + // object's properties and values must match the destination table's + // schema. + Json *JsonObject `json:"json,omitempty"` +} + +type TableDataInsertAllResponse struct { + // InsertErrors: An array of errors for rows that were not inserted. + InsertErrors []*TableDataInsertAllResponseInsertErrors `json:"insertErrors,omitempty"` + + // Kind: The resource type of the response. + Kind string `json:"kind,omitempty"` +} + +type TableDataInsertAllResponseInsertErrors struct { + // Errors: Error information for the row indicated by the index + // property. + Errors []*ErrorProto `json:"errors,omitempty"` + + // Index: The index of the row that error applies to. + Index int64 `json:"index,omitempty"` +} + +type TableDataList struct { + // Etag: A hash of this page of results. + Etag string `json:"etag,omitempty"` + + // Kind: The resource type of the response. + Kind string `json:"kind,omitempty"` + + // PageToken: A token used for paging results. Providing this token + // instead of the startIndex parameter can help you retrieve stable + // results when an underlying table is changing. + PageToken string `json:"pageToken,omitempty"` + + // Rows: Rows of results. + Rows []*TableRow `json:"rows,omitempty"` + + // TotalRows: The total number of rows in the complete table. + TotalRows int64 `json:"totalRows,omitempty,string"` +} + +type TableFieldSchema struct { + // Description: [Optional] The field description. + Description string `json:"description,omitempty"` + + // Fields: [Optional] Describes the nested schema fields if the type + // property is set to RECORD. + Fields []*TableFieldSchema `json:"fields,omitempty"` + + // Mode: [Optional] The field mode. Possible values include NULLABLE, + // REQUIRED and REPEATED. The default value is NULLABLE. + Mode string `json:"mode,omitempty"` + + // Name: [Required] The field name. + Name string `json:"name,omitempty"` + + // Type: [Required] The field data type. Possible values include STRING, + // INTEGER, FLOAT, BOOLEAN, TIMESTAMP or RECORD (where RECORD indicates + // that the field contains a nested schema). + Type string `json:"type,omitempty"` +} + +type TableList struct { + // Etag: A hash of this page of results. + Etag string `json:"etag,omitempty"` + + // Kind: The type of list. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to request the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Tables: Tables in the requested dataset. + Tables []*TableListTables `json:"tables,omitempty"` + + // TotalItems: The total number of tables in the dataset. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type TableListTables struct { + // FriendlyName: The user-friendly name for this table. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: An opaque ID of the table + Id string `json:"id,omitempty"` + + // Kind: The resource type. + Kind string `json:"kind,omitempty"` + + // TableReference: A reference uniquely identifying the table. + TableReference *TableReference `json:"tableReference,omitempty"` + + // Type: The type of table. Possible values are: TABLE, VIEW. + Type string `json:"type,omitempty"` +} + +type TableReference struct { + // DatasetId: [Required] ID of the dataset containing the table. + DatasetId string `json:"datasetId,omitempty"` + + // ProjectId: [Required] ID of the project billed for storage of the + // table. + ProjectId string `json:"projectId,omitempty"` + + // TableId: [Required] ID of the table. + TableId string `json:"tableId,omitempty"` +} + +type TableRow struct { + F []*TableCell `json:"f,omitempty"` +} + +type TableSchema struct { + // Fields: Describes the fields in a table. + Fields []*TableFieldSchema `json:"fields,omitempty"` +} + +type ViewDefinition struct { + // Query: [Required] A query that BigQuery executes when the view is + // referenced. + Query string `json:"query,omitempty"` +} + +// method id "bigquery.datasets.delete": + +type DatasetsDeleteCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// Delete: Deletes the dataset specified by the datasetId value. Before +// you can delete a dataset, you must delete all its tables, either +// manually or by specifying deleteContents. Immediately after deletion, +// you can create another dataset with the same name. +func (r *DatasetsService) Delete(projectId string, datasetId string) *DatasetsDeleteCall { + c := &DatasetsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +// DeleteContents sets the optional parameter "deleteContents": If True, +// delete all the tables in the dataset. If False and the dataset +// contains tables, the request will fail. Default is False +func (c *DatasetsDeleteCall) DeleteContents(deleteContents bool) *DatasetsDeleteCall { + c.opt_["deleteContents"] = deleteContents + return c +} + +func (c *DatasetsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["deleteContents"]; ok { + params.Set("deleteContents", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the dataset specified by the datasetId value. Before you can delete a dataset, you must delete all its tables, either manually or by specifying deleteContents. Immediately after deletion, you can create another dataset with the same name.", + // "httpMethod": "DELETE", + // "id": "bigquery.datasets.delete", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of dataset being deleted", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deleteContents": { + // "description": "If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False", + // "location": "query", + // "type": "boolean" + // }, + // "projectId": { + // "description": "Project ID of the dataset being deleted", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.datasets.get": + +type DatasetsGetCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// Get: Returns the dataset specified by datasetID. +func (r *DatasetsService) Get(projectId string, datasetId string) *DatasetsGetCall { + c := &DatasetsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +func (c *DatasetsGetCall) Do() (*Dataset, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the dataset specified by datasetID.", + // "httpMethod": "GET", + // "id": "bigquery.datasets.get", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the requested dataset", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the requested dataset", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.datasets.insert": + +type DatasetsInsertCall struct { + s *Service + projectId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Insert: Creates a new empty dataset. +func (r *DatasetsService) Insert(projectId string, dataset *Dataset) *DatasetsInsertCall { + c := &DatasetsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.dataset = dataset + return c +} + +func (c *DatasetsInsertCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new empty dataset.", + // "httpMethod": "POST", + // "id": "bigquery.datasets.insert", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "Project ID of the new dataset", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.datasets.list": + +type DatasetsListCall struct { + s *Service + projectId string + opt_ map[string]interface{} +} + +// List: Lists all the datasets in the specified project to which the +// caller has read access; however, a project owner can list (but not +// necessarily get) all datasets in his project. +func (r *DatasetsService) List(projectId string) *DatasetsListCall { + c := &DatasetsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + return c +} + +// All sets the optional parameter "all": Whether to list all datasets, +// including hidden ones +func (c *DatasetsListCall) All(all bool) *DatasetsListCall { + c.opt_["all"] = all + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of results to return +func (c *DatasetsListCall) MaxResults(maxResults int64) *DatasetsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, to request the next page of results +func (c *DatasetsListCall) PageToken(pageToken string) *DatasetsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DatasetsListCall) Do() (*DatasetList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["all"]; ok { + params.Set("all", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DatasetList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the datasets in the specified project to which the caller has read access; however, a project owner can list (but not necessarily get) all datasets in his project.", + // "httpMethod": "GET", + // "id": "bigquery.datasets.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "all": { + // "description": "Whether to list all datasets, including hidden ones", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, to request the next page of results", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the datasets to be listed", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets", + // "response": { + // "$ref": "DatasetList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.datasets.patch": + +type DatasetsPatchCall struct { + s *Service + projectId string + datasetId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Patch: Updates information in an existing dataset. The update method +// replaces the entire dataset resource, whereas the patch method only +// replaces fields that are provided in the submitted dataset resource. +// This method supports patch semantics. +func (r *DatasetsService) Patch(projectId string, datasetId string, dataset *Dataset) *DatasetsPatchCall { + c := &DatasetsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.dataset = dataset + return c +} + +func (c *DatasetsPatchCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing dataset. The update method replaces the entire dataset resource, whereas the patch method only replaces fields that are provided in the submitted dataset resource. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "bigquery.datasets.patch", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the dataset being updated", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the dataset being updated", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.datasets.update": + +type DatasetsUpdateCall struct { + s *Service + projectId string + datasetId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Update: Updates information in an existing dataset. The update method +// replaces the entire dataset resource, whereas the patch method only +// replaces fields that are provided in the submitted dataset resource. +func (r *DatasetsService) Update(projectId string, datasetId string, dataset *Dataset) *DatasetsUpdateCall { + c := &DatasetsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.dataset = dataset + return c +} + +func (c *DatasetsUpdateCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing dataset. The update method replaces the entire dataset resource, whereas the patch method only replaces fields that are provided in the submitted dataset resource.", + // "httpMethod": "PUT", + // "id": "bigquery.datasets.update", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the dataset being updated", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the dataset being updated", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.jobs.get": + +type JobsGetCall struct { + s *Service + projectId string + jobId string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified job by ID. +func (r *JobsService) Get(projectId string, jobId string) *JobsGetCall { + c := &JobsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.jobId = jobId + return c +} + +func (c *JobsGetCall) Do() (*Job, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/jobs/{jobId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", url.QueryEscape(c.jobId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified job by ID.", + // "httpMethod": "GET", + // "id": "bigquery.jobs.get", + // "parameterOrder": [ + // "projectId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "description": "Job ID of the requested job", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the requested job", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs/{jobId}", + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.jobs.getQueryResults": + +type JobsGetQueryResultsCall struct { + s *Service + projectId string + jobId string + opt_ map[string]interface{} +} + +// GetQueryResults: Retrieves the results of a query job. +func (r *JobsService) GetQueryResults(projectId string, jobId string) *JobsGetQueryResultsCall { + c := &JobsGetQueryResultsCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.jobId = jobId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to read +func (c *JobsGetQueryResultsCall) MaxResults(maxResults int64) *JobsGetQueryResultsCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, to request the next page of results +func (c *JobsGetQueryResultsCall) PageToken(pageToken string) *JobsGetQueryResultsCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartIndex sets the optional parameter "startIndex": Zero-based index +// of the starting row +func (c *JobsGetQueryResultsCall) StartIndex(startIndex uint64) *JobsGetQueryResultsCall { + c.opt_["startIndex"] = startIndex + return c +} + +// TimeoutMs sets the optional parameter "timeoutMs": How long to wait +// for the query to complete, in milliseconds, before returning. Default +// is to return immediately. If the timeout passes before the job +// completes, the request will fail with a TIMEOUT error +func (c *JobsGetQueryResultsCall) TimeoutMs(timeoutMs int64) *JobsGetQueryResultsCall { + c.opt_["timeoutMs"] = timeoutMs + return c +} + +func (c *JobsGetQueryResultsCall) Do() (*GetQueryResultsResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeoutMs"]; ok { + params.Set("timeoutMs", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/queries/{jobId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", url.QueryEscape(c.jobId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(GetQueryResultsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the results of a query job.", + // "httpMethod": "GET", + // "id": "bigquery.jobs.getQueryResults", + // "parameterOrder": [ + // "projectId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "description": "Job ID of the query job", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to read", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, to request the next page of results", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the query job", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Zero-based index of the starting row", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "timeoutMs": { + // "description": "How long to wait for the query to complete, in milliseconds, before returning. Default is to return immediately. If the timeout passes before the job completes, the request will fail with a TIMEOUT error", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "projects/{projectId}/queries/{jobId}", + // "response": { + // "$ref": "GetQueryResultsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.jobs.insert": + +type JobsInsertCall struct { + s *Service + projectId string + job *Job + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Starts a new asynchronous job. +func (r *JobsService) Insert(projectId string, job *Job) *JobsInsertCall { + c := &JobsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.job = job + return c +} +func (c *JobsInsertCall) Media(r io.Reader) *JobsInsertCall { + c.media_ = r + return c +} + +func (c *JobsInsertCall) Do() (*Job, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.job) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/jobs") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts a new asynchronous job.", + // "httpMethod": "POST", + // "id": "bigquery.jobs.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/bigquery/v2/projects/{projectId}/jobs" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/bigquery/v2/projects/{projectId}/jobs" + // } + // } + // }, + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "Project ID of the project that will be billed for the job", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs", + // "request": { + // "$ref": "Job" + // }, + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "bigquery.jobs.list": + +type JobsListCall struct { + s *Service + projectId string + opt_ map[string]interface{} +} + +// List: Lists all the Jobs in the specified project that were started +// by the user. +func (r *JobsService) List(projectId string) *JobsListCall { + c := &JobsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + return c +} + +// AllUsers sets the optional parameter "allUsers": Whether to display +// jobs owned by all users in the project. Default false +func (c *JobsListCall) AllUsers(allUsers bool) *JobsListCall { + c.opt_["allUsers"] = allUsers + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *JobsListCall) MaxResults(maxResults int64) *JobsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, to request the next page of results +func (c *JobsListCall) PageToken(pageToken string) *JobsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields +func (c *JobsListCall) Projection(projection string) *JobsListCall { + c.opt_["projection"] = projection + return c +} + +// StateFilter sets the optional parameter "stateFilter": Filter for job +// state +func (c *JobsListCall) StateFilter(stateFilter string) *JobsListCall { + c.opt_["stateFilter"] = stateFilter + return c +} + +func (c *JobsListCall) Do() (*JobList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["allUsers"]; ok { + params.Set("allUsers", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["stateFilter"]; ok { + params.Set("stateFilter", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/jobs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(JobList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the Jobs in the specified project that were started by the user.", + // "httpMethod": "GET", + // "id": "bigquery.jobs.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "allUsers": { + // "description": "Whether to display jobs owned by all users in the project. Default false", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, to request the next page of results", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the jobs to list", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields", + // "enum": [ + // "full", + // "minimal" + // ], + // "enumDescriptions": [ + // "Includes all job data", + // "Does not include the job configuration" + // ], + // "location": "query", + // "type": "string" + // }, + // "stateFilter": { + // "description": "Filter for job state", + // "enum": [ + // "done", + // "pending", + // "running" + // ], + // "enumDescriptions": [ + // "Finished jobs", + // "Pending jobs", + // "Running jobs" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs", + // "response": { + // "$ref": "JobList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.jobs.query": + +type JobsQueryCall struct { + s *Service + projectId string + queryrequest *QueryRequest + opt_ map[string]interface{} +} + +// Query: Runs a BigQuery SQL query synchronously and returns query +// results if the query completes within a specified timeout. +func (r *JobsService) Query(projectId string, queryrequest *QueryRequest) *JobsQueryCall { + c := &JobsQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.queryrequest = queryrequest + return c +} + +func (c *JobsQueryCall) Do() (*QueryResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.queryrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/queries") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(QueryResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a BigQuery SQL query synchronously and returns query results if the query completes within a specified timeout.", + // "httpMethod": "POST", + // "id": "bigquery.jobs.query", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "Project ID of the project billed for the query", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/queries", + // "request": { + // "$ref": "QueryRequest" + // }, + // "response": { + // "$ref": "QueryResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.projects.list": + +type ProjectsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists the projects to which you have at least read access. +func (r *ProjectsService) List() *ProjectsListCall { + c := &ProjectsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *ProjectsListCall) MaxResults(maxResults int64) *ProjectsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, to request the next page of results +func (c *ProjectsListCall) PageToken(pageToken string) *ProjectsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ProjectsListCall) Do() (*ProjectList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ProjectList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the projects to which you have at least read access.", + // "httpMethod": "GET", + // "id": "bigquery.projects.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, to request the next page of results", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "projects", + // "response": { + // "$ref": "ProjectList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tabledata.insertAll": + +type TabledataInsertAllCall struct { + s *Service + projectId string + datasetId string + tableId string + tabledatainsertallrequest *TableDataInsertAllRequest + opt_ map[string]interface{} +} + +// InsertAll: Inserts the supplied rows into the table. +func (r *TabledataService) InsertAll(projectId string, datasetId string, tableId string, tabledatainsertallrequest *TableDataInsertAllRequest) *TabledataInsertAllCall { + c := &TabledataInsertAllCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + c.tabledatainsertallrequest = tabledatainsertallrequest + return c +} + +func (c *TabledataInsertAllCall) Do() (*TableDataInsertAllResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tabledatainsertallrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TableDataInsertAllResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts the supplied rows into the table.", + // "httpMethod": "POST", + // "id": "bigquery.tabledata.insertAll", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the destination table.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the destination table.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the destination table.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/insertAll", + // "request": { + // "$ref": "TableDataInsertAllRequest" + // }, + // "response": { + // "$ref": "TableDataInsertAllResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tabledata.list": + +type TabledataListCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// List: Retrieves table data from a specified set of rows. +func (r *TabledataService) List(projectId string, datasetId string, tableId string) *TabledataListCall { + c := &TabledataListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *TabledataListCall) MaxResults(maxResults int64) *TabledataListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, identifying the result set +func (c *TabledataListCall) PageToken(pageToken string) *TabledataListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartIndex sets the optional parameter "startIndex": Zero-based index +// of the starting row to read +func (c *TabledataListCall) StartIndex(startIndex uint64) *TabledataListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *TabledataListCall) Do() (*TableDataList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TableDataList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves table data from a specified set of rows.", + // "httpMethod": "GET", + // "id": "bigquery.tabledata.list", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the table to read", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, identifying the result set", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the table to read", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "description": "Zero-based index of the starting row to read", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the table to read", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data", + // "response": { + // "$ref": "TableDataList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.delete": + +type TablesDeleteCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// Delete: Deletes the table specified by tableId from the dataset. If +// the table contains data, all the data will be deleted. +func (r *TablesService) Delete(projectId string, datasetId string, tableId string) *TablesDeleteCall { + c := &TablesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +func (c *TablesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the table specified by tableId from the dataset. If the table contains data, all the data will be deleted.", + // "httpMethod": "DELETE", + // "id": "bigquery.tables.delete", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the table to delete", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the table to delete", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the table to delete", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.get": + +type TablesGetCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// Get: Gets the specified table resource by table ID. This method does +// not return the data in the table, it only returns the table resource, +// which describes the structure of this table. +func (r *TablesService) Get(projectId string, datasetId string, tableId string) *TablesGetCall { + c := &TablesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +func (c *TablesGetCall) Do() (*Table, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the specified table resource by table ID. This method does not return the data in the table, it only returns the table resource, which describes the structure of this table.", + // "httpMethod": "GET", + // "id": "bigquery.tables.get", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the requested table", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the requested table", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the requested table", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.insert": + +type TablesInsertCall struct { + s *Service + projectId string + datasetId string + table *Table + opt_ map[string]interface{} +} + +// Insert: Creates a new, empty table in the dataset. +func (r *TablesService) Insert(projectId string, datasetId string, table *Table) *TablesInsertCall { + c := &TablesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.table = table + return c +} + +func (c *TablesInsertCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new, empty table in the dataset.", + // "httpMethod": "POST", + // "id": "bigquery.tables.insert", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the new table", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the new table", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.list": + +type TablesListCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// List: Lists all tables in the specified dataset. +func (r *TablesService) List(projectId string, datasetId string) *TablesListCall { + c := &TablesListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *TablesListCall) MaxResults(maxResults int64) *TablesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token, +// returned by a previous call, to request the next page of results +func (c *TablesListCall) PageToken(pageToken string) *TablesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TablesListCall) Do() (*TableList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TableList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all tables in the specified dataset.", + // "httpMethod": "GET", + // "id": "bigquery.tables.list", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the tables to list", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token, returned by a previous call, to request the next page of results", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the tables to list", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables", + // "response": { + // "$ref": "TableList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.patch": + +type TablesPatchCall struct { + s *Service + projectId string + datasetId string + tableId string + table *Table + opt_ map[string]interface{} +} + +// Patch: Updates information in an existing table. The update method +// replaces the entire table resource, whereas the patch method only +// replaces fields that are provided in the submitted table resource. +// This method supports patch semantics. +func (r *TablesService) Patch(projectId string, datasetId string, tableId string, table *Table) *TablesPatchCall { + c := &TablesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + c.table = table + return c +} + +func (c *TablesPatchCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing table. The update method replaces the entire table resource, whereas the patch method only replaces fields that are provided in the submitted table resource. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "bigquery.tables.patch", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "bigquery.tables.update": + +type TablesUpdateCall struct { + s *Service + projectId string + datasetId string + tableId string + table *Table + opt_ map[string]interface{} +} + +// Update: Updates information in an existing table. The update method +// replaces the entire table resource, whereas the patch method only +// replaces fields that are provided in the submitted table resource. +func (r *TablesService) Update(projectId string, datasetId string, tableId string, table *Table) *TablesUpdateCall { + c := &TablesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + c.table = table + return c +} + +func (c *TablesUpdateCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{projectId}", url.QueryEscape(c.projectId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing table. The update method replaces the entire table resource, whereas the patch method only replaces fields that are provided in the submitted table resource.", + // "httpMethod": "PUT", + // "id": "bigquery.tables.update", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "description": "Table ID of the table to update", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery", + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-api.json b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-api.json new file mode 100644 index 0000000000000..a8ede46af53a1 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-api.json @@ -0,0 +1,1466 @@ +{ + "kind": "discovery#restDescription", + "discoveryVersion": "v1", + "id": "bigquery:v2beta1", + "name": "bigquery", + "version": "v2beta1", + "revision": "20120507", + "title": "BigQuery API", + "description": "A data platform for customers to create, manage, share and query data.", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://code.google.com/apis/bigquery/docs/v2/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/bigquery/v2beta1/", + "basePath": "/bigquery/v2beta1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "bigquery/v2beta1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/bigquery": { + "description": "View and manage your data in Google BigQuery" + } + } + } + }, + "schemas": { + "Bigqueryfield": { + "id": "Bigqueryfield", + "type": "object", + "properties": { + "fields": { + "type": "array", + "items": { + "$ref": "Bigqueryfield" + } + }, + "mode": { + "type": "string" + }, + "name": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "Bigqueryschema": { + "id": "Bigqueryschema", + "type": "object", + "properties": { + "fields": { + "type": "array", + "items": { + "$ref": "Bigqueryfield" + } + } + } + }, + "Dataset": { + "id": "Dataset", + "type": "object", + "properties": { + "access": { + "type": "array", + "description": "[Optional] Describes users' rights on the dataset. You can assign the same role to multiple users, and assign multiple roles to the same user.\nDefault values assigned to a new dataset are as follows: OWNER - Project owners, dataset creator READ - Project readers WRITE - Project writers\nSee ACLs and Rights for a description of these rights. If you specify any of these roles when creating a dataset, the assigned roles will overwrite the defaults listed above.\nTo revoke rights to a dataset, call datasets.update() and omit the names of anyone whose rights you wish to revoke. However, every dataset must have at least one entity granted OWNER role.\nEach access object can have only one of the following members: userByEmail, groupByEmail, domain, or allAuthenticatedUsers.", + "items": { + "type": "object", + "properties": { + "allAuthenticatedUsers": { + "type": "string", + "description": "[Pick one] If True, any authenticated user is granted the assigned role." + }, + "domain": { + "type": "string", + "description": "[Pick one] A domain to grant access to. Any users signed in with the domain specified will be granted the specified access. Example: \"example.com\"." + }, + "groupByEmail": { + "type": "string", + "description": "[Pick one] A fully-qualified email address of a mailing list to grant access to. This must be either a Google Groups mailing list (ends in @googlegroups.com) or a group managed by an enterprise version of Google Groups." + }, + "role": { + "type": "string", + "description": "[Required] Describes the rights granted to the user specified by the other member of the access object. The following string values are supported: READ - User can call any list() or get() method on any collection or resource. WRITE - User can call any method on any collection except for datasets, on which they can call list() and get(). OWNER - User can call any method. The dataset creator is granted this role by default." + }, + "specialGroup": { + "type": "string", + "description": "[Pick one] A special group to grant access to. The valid values are: projectOwners: Owners of the enclosing project. projectReaders: Readers of the enclosing project. projectWriters: Writers of the enclosing project." + }, + "userByEmail": { + "type": "string", + "description": "[Pick one] A fully qualified email address of a user to grant access to. For example: fred@example.com." + } + } + } + }, + "creationTime": { + "type": "string", + "description": "[Output only] The date when this dataset was created, in milliseconds since the epoch.", + "format": "int64" + }, + "datasetId": { + "type": "string", + "description": "[Deprecated -- overlaps with datasetRef] A unique ID for this dataset. Must a string of 1-1024 characters satisfying the regular expression [A-Za-z0-9_]." + }, + "datasetReference": { + "$ref": "Datasetreference", + "description": "[Required] Reference identifying dataset." + }, + "description": { + "type": "string", + "description": "[Optional] An arbitrary string description for the dataset. This might be shown in BigQuery UI for browsing the dataset." + }, + "friendlyName": { + "type": "string", + "description": "[Optional] A descriptive name for this dataset, which might be shown in any BigQuery user interfaces for browsing the dataset. Use datasetId for making API calls." + }, + "id": { + "type": "string", + "description": "[Output only] The fully-qualified unique name of this dataset in the format projectId:datasetId. The dataset name without the project name is given in the datasetId field. When creating a new dataset, leave this field blank, and instead specify the datasetId field." + }, + "kind": { + "type": "string", + "description": "[Output only] The resource type.", + "default": "bigquery#dataset" + }, + "lastModifiedTime": { + "type": "string", + "description": "[Output only] The date when this dataset or any of its tables was last modified, in milliseconds since the epoch.", + "format": "int64" + }, + "projectId": { + "type": "string", + "description": "[Deprecated -- overlaps with datasetRef]." + }, + "selfLink": { + "type": "string", + "description": "[Output only] An URL that can be used to access this resource again. You can use this URL in Get or Update requests to this resource. Not used as an input to helix." + } + } + }, + "DatasetList": { + "id": "DatasetList", + "type": "object", + "properties": { + "datasets": { + "type": "array", + "description": "An array of one or more summarized dataset resources. Absent when there are no datasets in the specified project.", + "items": { + "type": "object", + "properties": { + "datasetId": { + "type": "string", + "description": "[Deprecated] A unique ID for this dataset; this is the id values without the project name." + }, + "datasetReference": { + "$ref": "Datasetreference", + "description": "Reference identifying dataset." + }, + "friendlyName": { + "type": "string", + "description": "A descriptive name for this dataset, if one exists." + }, + "id": { + "type": "string", + "description": "The fully-qualified unique name of this dataset in the format projectId:datasetId." + }, + "projectId": { + "type": "string", + "description": "[Deprecated] The ID of the container project." + } + } + } + }, + "etag": { + "type": "string", + "description": "A hash of this page of results. See Paging Through Results in the developer's guide." + }, + "kind": { + "type": "string", + "description": "The resource type.", + "default": "bigquery#datasetList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to request the next page of results. Present only when there is more than one page of results.* See Paging Through Results in the developer's guide." + } + } + }, + "Datasetreference": { + "id": "Datasetreference", + "type": "object", + "properties": { + "datasetId": { + "type": "string", + "description": "[Required] A unique ID for this dataset, without the project name." + }, + "projectId": { + "type": "string", + "description": "[Optional] The ID of the container project." + } + } + }, + "ErrorProto": { + "id": "ErrorProto", + "type": "object", + "properties": { + "arguments": { + "type": "array", + "items": { + "type": "string" + } + }, + "code": { + "type": "string" + }, + "debugInfo": { + "type": "string" + }, + "domain": { + "type": "string" + }, + "errorMessage": { + "type": "string" + }, + "location": { + "type": "string" + }, + "locationType": { + "type": "string" + } + } + }, + "Job": { + "id": "Job", + "type": "object", + "properties": { + "configuration": { + "$ref": "Jobconfiguration" + }, + "id": { + "type": "string" + }, + "jobId": { + "type": "string" + }, + "jobReference": { + "$ref": "Jobreference" + }, + "kind": { + "type": "string", + "default": "bigquery#job" + }, + "projectId": { + "type": "string" + }, + "selfLink": { + "type": "string" + }, + "statistics": { + "$ref": "Jobstatistics" + }, + "status": { + "$ref": "Jobstatus" + } + } + }, + "JobList": { + "id": "JobList", + "type": "object", + "properties": { + "etag": { + "type": "string" + }, + "jobs": { + "type": "array", + "items": { + "type": "object", + "properties": { + "configuration": { + "$ref": "Jobconfiguration" + }, + "endTime": { + "type": "string", + "format": "int64" + }, + "errorResult": { + "$ref": "ErrorProto" + }, + "id": { + "type": "string" + }, + "jobId": { + "type": "string" + }, + "jobReference": { + "$ref": "Jobreference" + }, + "projectId": { + "type": "string" + }, + "startTime": { + "type": "string", + "format": "int64" + }, + "state": { + "type": "string" + }, + "statistics": { + "$ref": "Jobstatistics" + }, + "status": { + "$ref": "Jobstatus" + } + } + } + }, + "kind": { + "type": "string", + "default": "bigquery#jobList" + }, + "nextPageToken": { + "type": "string" + }, + "totalItems": { + "type": "integer", + "format": "int32" + } + } + }, + "JobQueryRequest": { + "id": "JobQueryRequest", + "type": "object", + "properties": { + "defaultDataset": { + "$ref": "Datasetreference", + "description": "[Optional] Specifies the default datasetId and projectId to assume for any unqualified table names in the query. If not set, all table names in the query string must be fully-qualified in the format projectId:datasetId.tableid." + }, + "destinationTable": { + "$ref": "Tablereference", + "description": "[Optional] Specifies the table the query results should be written to. The table will be created if it does not exist." + }, + "kind": { + "type": "string", + "default": "bigquery#jobQueryRequest" + }, + "maxResults": { + "type": "integer", + "description": "[Optional] The maximum number of results to return per page of results. If the response list exceeds the maximum response size for a single response, you will have to page through the results. Default is to return the maximum response size.", + "format": "uint32" + }, + "query": { + "type": "string", + "description": "[Required] A query string, following the BigQuery query syntax of the query to execute. Table names should be qualified by dataset name in the format projectId:datasetId.tableId unless you specify the defaultDataset value. If the table is in the same project as the job, you can omit the project ID. Example: SELECT f1 FROM myProjectId:myDatasetId.myTableId." + } + } + }, + "JobStopResponse": { + "id": "JobStopResponse", + "type": "object", + "properties": { + "job": { + "type": "any" + }, + "kind": { + "type": "string", + "default": "bigquery#jobStopResponse" + } + } + }, + "Jobconfiguration": { + "id": "Jobconfiguration", + "type": "object", + "properties": { + "extract": { + "$ref": "Jobconfigurationextract" + }, + "link": { + "$ref": "Jobconfigurationlink" + }, + "load": { + "$ref": "Jobconfigurationload" + }, + "properties": { + "$ref": "Jobconfigurationproperties" + }, + "query": { + "$ref": "Jobconfigurationquery" + } + } + }, + "Jobconfigurationextract": { + "id": "Jobconfigurationextract", + "type": "object", + "properties": { + "destinationUri": { + "type": "string" + }, + "sourceTable": { + "$ref": "Tablereference" + } + } + }, + "Jobconfigurationlink": { + "id": "Jobconfigurationlink", + "type": "object", + "properties": { + "createDisposition": { + "type": "string" + }, + "destinationTable": { + "$ref": "Tablereference" + }, + "sourceUri": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "Jobconfigurationload": { + "id": "Jobconfigurationload", + "type": "object", + "properties": { + "createDisposition": { + "type": "string" + }, + "destinationTable": { + "$ref": "Tablereference" + }, + "fieldDelimiter": { + "type": "string" + }, + "schema": { + "$ref": "Bigqueryschema" + }, + "skipLeadingRows": { + "type": "integer", + "format": "int32" + }, + "sourceUris": { + "type": "array", + "items": { + "type": "string" + } + }, + "writeDisposition": { + "type": "string" + } + } + }, + "Jobconfigurationproperties": { + "id": "Jobconfigurationproperties", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, + "Jobconfigurationquery": { + "id": "Jobconfigurationquery", + "type": "object", + "properties": { + "createDisposition": { + "type": "string" + }, + "defaultDataset": { + "$ref": "Datasetreference" + }, + "destinationTable": { + "$ref": "Tablereference" + }, + "query": { + "type": "string" + }, + "writeDisposition": { + "type": "string" + } + } + }, + "Jobreference": { + "id": "Jobreference", + "type": "object", + "properties": { + "jobId": { + "type": "string" + }, + "projectId": { + "type": "string" + } + } + }, + "Jobstatistics": { + "id": "Jobstatistics", + "type": "object", + "properties": { + "endTime": { + "type": "string", + "format": "int64" + }, + "startTime": { + "type": "string", + "format": "int64" + } + } + }, + "Jobstatus": { + "id": "Jobstatus", + "type": "object", + "properties": { + "errorResult": { + "$ref": "ErrorProto" + }, + "errors": { + "type": "array", + "items": { + "$ref": "ErrorProto" + } + }, + "state": { + "type": "string" + } + } + }, + "ProjectList": { + "id": "ProjectList", + "type": "object", + "properties": { + "etag": { + "type": "string" + }, + "kind": { + "type": "string", + "default": "bigquery#projectList" + }, + "nextPageToken": { + "type": "string" + }, + "projects": { + "type": "array", + "items": { + "type": "object", + "properties": { + "friendlyName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "projectReference": { + "$ref": "Projectreference" + } + } + } + }, + "totalItems": { + "type": "integer", + "format": "int32" + } + } + }, + "Projectreference": { + "id": "Projectreference", + "type": "object", + "properties": { + "projectId": { + "type": "string" + } + } + }, + "QueryResults": { + "id": "QueryResults", + "type": "object", + "properties": { + "job": { + "$ref": "Job" + }, + "kind": { + "type": "string", + "default": "bigquery#queryResults" + }, + "rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "f": { + "type": "array", + "items": { + "type": "object", + "properties": { + "v": { + "type": "any" + } + } + } + } + } + } + }, + "schema": { + "$ref": "Bigqueryschema" + }, + "totalRows": { + "type": "string", + "format": "uint64" + } + } + }, + "Table": { + "id": "Table", + "type": "object", + "properties": { + "creationTime": { + "type": "string", + "format": "int64" + }, + "datasetId": { + "type": "string" + }, + "description": { + "type": "string" + }, + "friendlyName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "kind": { + "type": "string", + "default": "bigquery#table" + }, + "lastModifiedTime": { + "type": "string", + "format": "int64" + }, + "projectId": { + "type": "string" + }, + "schema": { + "$ref": "Bigqueryschema" + }, + "selfLink": { + "type": "string" + }, + "tableId": { + "type": "string" + }, + "tableReference": { + "$ref": "Tablereference" + } + } + }, + "TableDataList": { + "id": "TableDataList", + "type": "object", + "properties": { + "kind": { + "type": "string", + "default": "bigquery#tableDataList" + }, + "rows": { + "type": "array", + "items": { + "type": "object", + "properties": { + "f": { + "type": "array", + "items": { + "type": "object", + "properties": { + "v": { + "type": "any" + } + } + } + } + } + } + }, + "totalRows": { + "type": "string", + "format": "int64" + } + } + }, + "TableList": { + "id": "TableList", + "type": "object", + "properties": { + "etag": { + "type": "string" + }, + "kind": { + "type": "string", + "default": "bigquery#tableList" + }, + "nextPageToken": { + "type": "string" + }, + "tables": { + "type": "array", + "items": { + "type": "object", + "properties": { + "datasetId": { + "type": "string" + }, + "friendlyName": { + "type": "string" + }, + "id": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "tableId": { + "type": "string" + }, + "tableReference": { + "$ref": "Tablereference" + } + } + } + }, + "totalItems": { + "type": "integer", + "format": "int32" + } + } + }, + "Tablereference": { + "id": "Tablereference", + "type": "object", + "properties": { + "datasetId": { + "type": "string" + }, + "projectId": { + "type": "string" + }, + "tableId": { + "type": "string" + } + } + } + }, + "resources": { + "datasets": { + "methods": { + "delete": { + "id": "bigquery.datasets.delete", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "DELETE", + "description": "Deletes the dataset specified by datasetId value. Before you can delete a dataset, you must delete all its tables, either manually or by specifying deleteContents. Immediately after deletion, you can create another dataset with the same name.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset identifier of dataset being deleted.", + "required": true, + "location": "path" + }, + "deleteContents": { + "type": "boolean", + "description": "[Optional] If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project identifier of dataset being deleted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "get": { + "id": "bigquery.datasets.get", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "GET", + "description": "Returns the dataset specified by datasetID.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset identifier of the dataset requested.", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project identifier containing dataset requested.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "insert": { + "id": "bigquery.datasets.insert", + "path": "projects/{projectId}/datasets", + "httpMethod": "POST", + "description": "Creates a new empty dataset.", + "parameters": { + "projectId": { + "type": "string", + "description": "Project identifier that will contain dataset being created.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "list": { + "id": "bigquery.datasets.list", + "path": "projects/{projectId}/datasets", + "httpMethod": "GET", + "description": "Lists all the datasets in the specified project to which the caller has read access; however, a project owner can list (but not necessarily get) all datasets in his project.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "[Optional] The maximum number of rows to return. If not specified, it will return up to the maximum amount of data that will fit in a reply.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "[Optional] A page token used when requesting a specific page in a set of paged results.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "Project identifier containing datasets to be listed.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "response": { + "$ref": "DatasetList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "patch": { + "id": "bigquery.datasets.patch", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "PATCH", + "description": "Updates information in an existing dataset, specified by datasetId. Properties not included in the submitted resource will not be changed. If you include the access property without any values assigned, the request will fail as you must specify at least one owner for a dataset. This method supports patch semantics.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset identifier containing dataset being updated.", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project identifier containing dataset being updated.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "update": { + "id": "bigquery.datasets.update", + "path": "projects/{projectId}/datasets/{datasetId}", + "httpMethod": "PUT", + "description": "Updates information in an existing dataset, specified by datasetId. Properties not included in the submitted resource will not be changed. If you include the access property without any values assigned, the request will fail as you must specify at least one owner for a dataset.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Dataset identifier containing dataset being updated.", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "description": "Project identifier containing dataset being updated.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Dataset" + }, + "response": { + "$ref": "Dataset" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + } + } + }, + "jobs": { + "methods": { + "get": { + "id": "bigquery.jobs.get", + "path": "projects/{projectId}/jobs/{jobId}", + "httpMethod": "GET", + "parameters": { + "jobId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "jobId" + ], + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "insert": { + "id": "bigquery.jobs.insert", + "path": "projects/{projectId}/jobs", + "httpMethod": "POST", + "parameters": { + "projectId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "Job" + }, + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ], + "mediaUpload": { + "accept": [ + "application/octet-stream" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/bigquery/v2beta1/projects/{projectId}/jobs" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/bigquery/v2beta1/projects/{projectId}/jobs" + } + } + } + }, + "list": { + "id": "bigquery.jobs.list", + "path": "projects/{projectId}/jobs", + "httpMethod": "GET", + "parameters": { + "allUsers": { + "type": "boolean", + "description": "Whether to display jobs owned by all users in the project", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "location": "query" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "full", + "minimal" + ], + "enumDescriptions": [ + "Includes all job data.", + "Does not include the job configuration." + ], + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "start index for paginated results", + "format": "uint32", + "location": "query" + }, + "stateFilter": { + "type": "string", + "description": "filter for job state", + "enum": [ + "done", + "pending", + "running" + ], + "enumDescriptions": [ + "finished jobs", + "pending jobs", + "running jobs" + ], + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "projectId" + ], + "response": { + "$ref": "JobList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "query": { + "id": "bigquery.jobs.query", + "path": "projects/{projectId}/queries", + "httpMethod": "POST", + "parameters": { + "projectId": { + "type": "string", + "description": "project name billed for the query", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId" + ], + "request": { + "$ref": "JobQueryRequest" + }, + "response": { + "$ref": "QueryResults" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "stop": { + "id": "bigquery.jobs.stop", + "path": "project/{projectId}/jobs/{jobId}/stop", + "httpMethod": "POST", + "parameters": { + "jobId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "jobId" + ], + "response": { + "$ref": "JobStopResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + } + } + }, + "projects": { + "methods": { + "list": { + "id": "bigquery.projects.list", + "path": "projects", + "httpMethod": "GET", + "parameters": { + "maxResults": { + "type": "integer", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "location": "query" + } + }, + "response": { + "$ref": "ProjectList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + } + } + }, + "tabledata": { + "methods": { + "list": { + "id": "bigquery.tabledata.list", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data", + "httpMethod": "GET", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "format": "uint32", + "location": "query" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "startIndex": { + "type": "string", + "format": "uint64", + "location": "query" + }, + "tableId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "response": { + "$ref": "TableDataList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + } + } + }, + "tables": { + "methods": { + "delete": { + "id": "bigquery.tables.delete", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "DELETE", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "get": { + "id": "bigquery.tables.get", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "GET", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "insert": { + "id": "bigquery.tables.insert", + "path": "projects/{projectId}/datasets/{datasetId}/tables", + "httpMethod": "POST", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "list": { + "id": "bigquery.tables.list", + "path": "projects/{projectId}/datasets/{datasetId}/tables", + "httpMethod": "GET", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "location": "query" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId" + ], + "response": { + "$ref": "TableList" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "patch": { + "id": "bigquery.tables.patch", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "PATCH", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + }, + "update": { + "id": "bigquery.tables.update", + "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + "httpMethod": "PUT", + "parameters": { + "datasetId": { + "type": "string", + "required": true, + "location": "path" + }, + "projectId": { + "type": "string", + "required": true, + "location": "path" + }, + "tableId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "projectId", + "datasetId", + "tableId" + ], + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/bigquery" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-gen.go b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-gen.go new file mode 100644 index 0000000000000..8431456534b91 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/bigquery/v2beta1/bigquery-gen.go @@ -0,0 +1,2223 @@ +// Package bigquery provides access to the BigQuery API. +// +// See https://code.google.com/apis/bigquery/docs/v2/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/bigquery/v2beta1" +// ... +// bigqueryService, err := bigquery.New(oauthHttpClient) +package bigquery + +import ( + "bytes" + "fmt" + "net/http" + "io" + "encoding/json" + "errors" + "strings" + "strconv" + "net/url" + "code.google.com/p/google-api-go-client/googleapi" +) + +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New + +const apiId = "bigquery:v2beta1" +const apiName = "bigquery" +const apiVersion = "v2beta1" +const basePath = "https://www.googleapis.com/bigquery/v2beta1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data in Google BigQuery + BigqueryScope = "https://www.googleapis.com/auth/bigquery" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Datasets = &DatasetsService{s: s} + s.Jobs = &JobsService{s: s} + s.Projects = &ProjectsService{s: s} + s.Tabledata = &TabledataService{s: s} + s.Tables = &TablesService{s: s} + return s, nil +} + +type Service struct { + client *http.Client + + Datasets *DatasetsService + + Jobs *JobsService + + Projects *ProjectsService + + Tabledata *TabledataService + + Tables *TablesService +} + +type DatasetsService struct { + s *Service +} + +type JobsService struct { + s *Service +} + +type ProjectsService struct { + s *Service +} + +type TabledataService struct { + s *Service +} + +type TablesService struct { + s *Service +} + +type Bigqueryfield struct { + Fields []*Bigqueryfield `json:"fields,omitempty"` + + Mode string `json:"mode,omitempty"` + + Name string `json:"name,omitempty"` + + Type string `json:"type,omitempty"` +} + +type Bigqueryschema struct { + Fields []*Bigqueryfield `json:"fields,omitempty"` +} + +type Dataset struct { + // Access: [Optional] Describes users' rights on the dataset. You can + // assign the same role to multiple users, and assign multiple roles to + // the same user. + // Default values assigned to a new dataset are as + // follows: OWNER - Project owners, dataset creator READ - Project + // readers WRITE - Project writers + // See ACLs and Rights for a description + // of these rights. If you specify any of these roles when creating a + // dataset, the assigned roles will overwrite the defaults listed + // above. + // To revoke rights to a dataset, call datasets.update() and omit + // the names of anyone whose rights you wish to revoke. However, every + // dataset must have at least one entity granted OWNER role. + // Each access + // object can have only one of the following members: userByEmail, + // groupByEmail, domain, or allAuthenticatedUsers. + Access []*DatasetAccess `json:"access,omitempty"` + + // CreationTime: [Output only] The date when this dataset was created, + // in milliseconds since the epoch. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // DatasetId: [Deprecated -- overlaps with datasetRef] A unique ID for + // this dataset. Must a string of 1-1024 characters satisfying the + // regular expression [A-Za-z0-9_]. + DatasetId string `json:"datasetId,omitempty"` + + // DatasetReference: [Required] Reference identifying dataset. + DatasetReference *Datasetreference `json:"datasetReference,omitempty"` + + // Description: [Optional] An arbitrary string description for the + // dataset. This might be shown in BigQuery UI for browsing the dataset. + Description string `json:"description,omitempty"` + + // FriendlyName: [Optional] A descriptive name for this dataset, which + // might be shown in any BigQuery user interfaces for browsing the + // dataset. Use datasetId for making API calls. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: [Output only] The fully-qualified unique name of this dataset in + // the format projectId:datasetId. The dataset name without the project + // name is given in the datasetId field. When creating a new dataset, + // leave this field blank, and instead specify the datasetId field. + Id string `json:"id,omitempty"` + + // Kind: [Output only] The resource type. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: [Output only] The date when this dataset or any of + // its tables was last modified, in milliseconds since the epoch. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // ProjectId: [Deprecated -- overlaps with datasetRef]. + ProjectId string `json:"projectId,omitempty"` + + // SelfLink: [Output only] An URL that can be used to access this + // resource again. You can use this URL in Get or Update requests to + // this resource. Not used as an input to helix. + SelfLink string `json:"selfLink,omitempty"` +} + +type DatasetAccess struct { + // AllAuthenticatedUsers: [Pick one] If True, any authenticated user is + // granted the assigned role. + AllAuthenticatedUsers string `json:"allAuthenticatedUsers,omitempty"` + + // Domain: [Pick one] A domain to grant access to. Any users signed in + // with the domain specified will be granted the specified access. + // Example: "example.com". + Domain string `json:"domain,omitempty"` + + // GroupByEmail: [Pick one] A fully-qualified email address of a mailing + // list to grant access to. This must be either a Google Groups mailing + // list (ends in @googlegroups.com) or a group managed by an enterprise + // version of Google Groups. + GroupByEmail string `json:"groupByEmail,omitempty"` + + // Role: [Required] Describes the rights granted to the user specified + // by the other member of the access object. The following string values + // are supported: READ - User can call any list() or get() method on any + // collection or resource. WRITE - User can call any method on any + // collection except for datasets, on which they can call list() and + // get(). OWNER - User can call any method. The dataset creator is + // granted this role by default. + Role string `json:"role,omitempty"` + + // SpecialGroup: [Pick one] A special group to grant access to. The + // valid values are: projectOwners: Owners of the enclosing project. + // projectReaders: Readers of the enclosing project. projectWriters: + // Writers of the enclosing project. + SpecialGroup string `json:"specialGroup,omitempty"` + + // UserByEmail: [Pick one] A fully qualified email address of a user to + // grant access to. For example: fred@example.com. + UserByEmail string `json:"userByEmail,omitempty"` +} + +type DatasetList struct { + // Datasets: An array of one or more summarized dataset resources. + // Absent when there are no datasets in the specified project. + Datasets []*DatasetListDatasets `json:"datasets,omitempty"` + + // Etag: A hash of this page of results. See Paging Through Results in + // the developer's guide. + Etag string `json:"etag,omitempty"` + + // Kind: The resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to request the next page of results. Present + // only when there is more than one page of results.* See Paging Through + // Results in the developer's guide. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DatasetListDatasets struct { + // DatasetId: [Deprecated] A unique ID for this dataset; this is the id + // values without the project name. + DatasetId string `json:"datasetId,omitempty"` + + // DatasetReference: Reference identifying dataset. + DatasetReference *Datasetreference `json:"datasetReference,omitempty"` + + // FriendlyName: A descriptive name for this dataset, if one exists. + FriendlyName string `json:"friendlyName,omitempty"` + + // Id: The fully-qualified unique name of this dataset in the format + // projectId:datasetId. + Id string `json:"id,omitempty"` + + // ProjectId: [Deprecated] The ID of the container project. + ProjectId string `json:"projectId,omitempty"` +} + +type Datasetreference struct { + // DatasetId: [Required] A unique ID for this dataset, without the + // project name. + DatasetId string `json:"datasetId,omitempty"` + + // ProjectId: [Optional] The ID of the container project. + ProjectId string `json:"projectId,omitempty"` +} + +type ErrorProto struct { + Arguments []string `json:"arguments,omitempty"` + + Code string `json:"code,omitempty"` + + DebugInfo string `json:"debugInfo,omitempty"` + + Domain string `json:"domain,omitempty"` + + ErrorMessage string `json:"errorMessage,omitempty"` + + Location string `json:"location,omitempty"` + + LocationType string `json:"locationType,omitempty"` +} + +type Job struct { + Configuration *Jobconfiguration `json:"configuration,omitempty"` + + Id string `json:"id,omitempty"` + + JobId string `json:"jobId,omitempty"` + + JobReference *Jobreference `json:"jobReference,omitempty"` + + Kind string `json:"kind,omitempty"` + + ProjectId string `json:"projectId,omitempty"` + + SelfLink string `json:"selfLink,omitempty"` + + Statistics *Jobstatistics `json:"statistics,omitempty"` + + Status *Jobstatus `json:"status,omitempty"` +} + +type JobList struct { + Etag string `json:"etag,omitempty"` + + Jobs []*JobListJobs `json:"jobs,omitempty"` + + Kind string `json:"kind,omitempty"` + + NextPageToken string `json:"nextPageToken,omitempty"` + + TotalItems int64 `json:"totalItems,omitempty"` +} + +type JobListJobs struct { + Configuration *Jobconfiguration `json:"configuration,omitempty"` + + EndTime int64 `json:"endTime,omitempty,string"` + + ErrorResult *ErrorProto `json:"errorResult,omitempty"` + + Id string `json:"id,omitempty"` + + JobId string `json:"jobId,omitempty"` + + JobReference *Jobreference `json:"jobReference,omitempty"` + + ProjectId string `json:"projectId,omitempty"` + + StartTime int64 `json:"startTime,omitempty,string"` + + State string `json:"state,omitempty"` + + Statistics *Jobstatistics `json:"statistics,omitempty"` + + Status *Jobstatus `json:"status,omitempty"` +} + +type JobQueryRequest struct { + // DefaultDataset: [Optional] Specifies the default datasetId and + // projectId to assume for any unqualified table names in the query. If + // not set, all table names in the query string must be fully-qualified + // in the format projectId:datasetId.tableid. + DefaultDataset *Datasetreference `json:"defaultDataset,omitempty"` + + // DestinationTable: [Optional] Specifies the table the query results + // should be written to. The table will be created if it does not exist. + DestinationTable *Tablereference `json:"destinationTable,omitempty"` + + Kind string `json:"kind,omitempty"` + + // MaxResults: [Optional] The maximum number of results to return per + // page of results. If the response list exceeds the maximum response + // size for a single response, you will have to page through the + // results. Default is to return the maximum response size. + MaxResults int64 `json:"maxResults,omitempty"` + + // Query: [Required] A query string, following the BigQuery query syntax + // of the query to execute. Table names should be qualified by dataset + // name in the format projectId:datasetId.tableId unless you specify the + // defaultDataset value. If the table is in the same project as the job, + // you can omit the project ID. Example: SELECT f1 FROM + // myProjectId:myDatasetId.myTableId. + Query string `json:"query,omitempty"` +} + +type JobStopResponse struct { + Job interface{} `json:"job,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type Jobconfiguration struct { + Extract *Jobconfigurationextract `json:"extract,omitempty"` + + Link *Jobconfigurationlink `json:"link,omitempty"` + + Load *Jobconfigurationload `json:"load,omitempty"` + + Properties *Jobconfigurationproperties `json:"properties,omitempty"` + + Query *Jobconfigurationquery `json:"query,omitempty"` +} + +type Jobconfigurationextract struct { + DestinationUri string `json:"destinationUri,omitempty"` + + SourceTable *Tablereference `json:"sourceTable,omitempty"` +} + +type Jobconfigurationlink struct { + CreateDisposition string `json:"createDisposition,omitempty"` + + DestinationTable *Tablereference `json:"destinationTable,omitempty"` + + SourceUri []string `json:"sourceUri,omitempty"` +} + +type Jobconfigurationload struct { + CreateDisposition string `json:"createDisposition,omitempty"` + + DestinationTable *Tablereference `json:"destinationTable,omitempty"` + + FieldDelimiter string `json:"fieldDelimiter,omitempty"` + + Schema *Bigqueryschema `json:"schema,omitempty"` + + SkipLeadingRows int64 `json:"skipLeadingRows,omitempty"` + + SourceUris []string `json:"sourceUris,omitempty"` + + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type Jobconfigurationproperties struct { +} + +type Jobconfigurationquery struct { + CreateDisposition string `json:"createDisposition,omitempty"` + + DefaultDataset *Datasetreference `json:"defaultDataset,omitempty"` + + DestinationTable *Tablereference `json:"destinationTable,omitempty"` + + Query string `json:"query,omitempty"` + + WriteDisposition string `json:"writeDisposition,omitempty"` +} + +type Jobreference struct { + JobId string `json:"jobId,omitempty"` + + ProjectId string `json:"projectId,omitempty"` +} + +type Jobstatistics struct { + EndTime int64 `json:"endTime,omitempty,string"` + + StartTime int64 `json:"startTime,omitempty,string"` +} + +type Jobstatus struct { + ErrorResult *ErrorProto `json:"errorResult,omitempty"` + + Errors []*ErrorProto `json:"errors,omitempty"` + + State string `json:"state,omitempty"` +} + +type ProjectList struct { + Etag string `json:"etag,omitempty"` + + Kind string `json:"kind,omitempty"` + + NextPageToken string `json:"nextPageToken,omitempty"` + + Projects []*ProjectListProjects `json:"projects,omitempty"` + + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ProjectListProjects struct { + FriendlyName string `json:"friendlyName,omitempty"` + + Id string `json:"id,omitempty"` + + ProjectReference *Projectreference `json:"projectReference,omitempty"` +} + +type Projectreference struct { + ProjectId string `json:"projectId,omitempty"` +} + +type QueryResults struct { + Job *Job `json:"job,omitempty"` + + Kind string `json:"kind,omitempty"` + + Rows []*QueryResultsRows `json:"rows,omitempty"` + + Schema *Bigqueryschema `json:"schema,omitempty"` + + TotalRows uint64 `json:"totalRows,omitempty,string"` +} + +type QueryResultsRows struct { + F []*QueryResultsRowsF `json:"f,omitempty"` +} + +type QueryResultsRowsF struct { + V interface{} `json:"v,omitempty"` +} + +type Table struct { + CreationTime int64 `json:"creationTime,omitempty,string"` + + DatasetId string `json:"datasetId,omitempty"` + + Description string `json:"description,omitempty"` + + FriendlyName string `json:"friendlyName,omitempty"` + + Id string `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + ProjectId string `json:"projectId,omitempty"` + + Schema *Bigqueryschema `json:"schema,omitempty"` + + SelfLink string `json:"selfLink,omitempty"` + + TableId string `json:"tableId,omitempty"` + + TableReference *Tablereference `json:"tableReference,omitempty"` +} + +type TableDataList struct { + Kind string `json:"kind,omitempty"` + + Rows []*TableDataListRows `json:"rows,omitempty"` + + TotalRows int64 `json:"totalRows,omitempty,string"` +} + +type TableDataListRows struct { + F []*TableDataListRowsF `json:"f,omitempty"` +} + +type TableDataListRowsF struct { + V interface{} `json:"v,omitempty"` +} + +type TableList struct { + Etag string `json:"etag,omitempty"` + + Kind string `json:"kind,omitempty"` + + NextPageToken string `json:"nextPageToken,omitempty"` + + Tables []*TableListTables `json:"tables,omitempty"` + + TotalItems int64 `json:"totalItems,omitempty"` +} + +type TableListTables struct { + DatasetId string `json:"datasetId,omitempty"` + + FriendlyName string `json:"friendlyName,omitempty"` + + Id string `json:"id,omitempty"` + + ProjectId string `json:"projectId,omitempty"` + + TableId string `json:"tableId,omitempty"` + + TableReference *Tablereference `json:"tableReference,omitempty"` +} + +type Tablereference struct { + DatasetId string `json:"datasetId,omitempty"` + + ProjectId string `json:"projectId,omitempty"` + + TableId string `json:"tableId,omitempty"` +} + +// method id "bigquery.datasets.delete": + +type DatasetsDeleteCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// Delete: Deletes the dataset specified by datasetId value. Before you +// can delete a dataset, you must delete all its tables, either manually +// or by specifying deleteContents. Immediately after deletion, you can +// create another dataset with the same name. +func (r *DatasetsService) Delete(projectId string, datasetId string) *DatasetsDeleteCall { + c := &DatasetsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +// DeleteContents sets the optional parameter "deleteContents": +// [Optional] If True, delete all the tables in the dataset. If False +// and the dataset contains tables, the request will fail. Default is +// False. +func (c *DatasetsDeleteCall) DeleteContents(deleteContents bool) *DatasetsDeleteCall { + c.opt_["deleteContents"] = deleteContents + return c +} + +func (c *DatasetsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["deleteContents"]; ok { + params.Set("deleteContents", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the dataset specified by datasetId value. Before you can delete a dataset, you must delete all its tables, either manually or by specifying deleteContents. Immediately after deletion, you can create another dataset with the same name.", + // "httpMethod": "DELETE", + // "id": "bigquery.datasets.delete", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset identifier of dataset being deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deleteContents": { + // "description": "[Optional] If True, delete all the tables in the dataset. If False and the dataset contains tables, the request will fail. Default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "projectId": { + // "description": "Project identifier of dataset being deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.datasets.get": + +type DatasetsGetCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// Get: Returns the dataset specified by datasetID. +func (r *DatasetsService) Get(projectId string, datasetId string) *DatasetsGetCall { + c := &DatasetsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +func (c *DatasetsGetCall) Do() (*Dataset, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the dataset specified by datasetID.", + // "httpMethod": "GET", + // "id": "bigquery.datasets.get", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset identifier of the dataset requested.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project identifier containing dataset requested.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.datasets.insert": + +type DatasetsInsertCall struct { + s *Service + projectId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Insert: Creates a new empty dataset. +func (r *DatasetsService) Insert(projectId string, dataset *Dataset) *DatasetsInsertCall { + c := &DatasetsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.dataset = dataset + return c +} + +func (c *DatasetsInsertCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new empty dataset.", + // "httpMethod": "POST", + // "id": "bigquery.datasets.insert", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "Project identifier that will contain dataset being created.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.datasets.list": + +type DatasetsListCall struct { + s *Service + projectId string + opt_ map[string]interface{} +} + +// List: Lists all the datasets in the specified project to which the +// caller has read access; however, a project owner can list (but not +// necessarily get) all datasets in his project. +func (r *DatasetsService) List(projectId string) *DatasetsListCall { + c := &DatasetsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + return c +} + +// MaxResults sets the optional parameter "maxResults": [Optional] The +// maximum number of rows to return. If not specified, it will return up +// to the maximum amount of data that will fit in a reply. +func (c *DatasetsListCall) MaxResults(maxResults int64) *DatasetsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": [Optional] A page +// token used when requesting a specific page in a set of paged results. +func (c *DatasetsListCall) PageToken(pageToken string) *DatasetsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DatasetsListCall) Do() (*DatasetList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DatasetList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the datasets in the specified project to which the caller has read access; however, a project owner can list (but not necessarily get) all datasets in his project.", + // "httpMethod": "GET", + // "id": "bigquery.datasets.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "maxResults": { + // "description": "[Optional] The maximum number of rows to return. If not specified, it will return up to the maximum amount of data that will fit in a reply.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "[Optional] A page token used when requesting a specific page in a set of paged results.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "Project identifier containing datasets to be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets", + // "response": { + // "$ref": "DatasetList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.datasets.patch": + +type DatasetsPatchCall struct { + s *Service + projectId string + datasetId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Patch: Updates information in an existing dataset, specified by +// datasetId. Properties not included in the submitted resource will not +// be changed. If you include the access property without any values +// assigned, the request will fail as you must specify at least one +// owner for a dataset. This method supports patch semantics. +func (r *DatasetsService) Patch(projectId string, datasetId string, dataset *Dataset) *DatasetsPatchCall { + c := &DatasetsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.dataset = dataset + return c +} + +func (c *DatasetsPatchCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing dataset, specified by datasetId. Properties not included in the submitted resource will not be changed. If you include the access property without any values assigned, the request will fail as you must specify at least one owner for a dataset. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "bigquery.datasets.patch", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset identifier containing dataset being updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project identifier containing dataset being updated.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.datasets.update": + +type DatasetsUpdateCall struct { + s *Service + projectId string + datasetId string + dataset *Dataset + opt_ map[string]interface{} +} + +// Update: Updates information in an existing dataset, specified by +// datasetId. Properties not included in the submitted resource will not +// be changed. If you include the access property without any values +// assigned, the request will fail as you must specify at least one +// owner for a dataset. +func (r *DatasetsService) Update(projectId string, datasetId string, dataset *Dataset) *DatasetsUpdateCall { + c := &DatasetsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.dataset = dataset + return c +} + +func (c *DatasetsUpdateCall) Do() (*Dataset, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dataset) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Dataset) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates information in an existing dataset, specified by datasetId. Properties not included in the submitted resource will not be changed. If you include the access property without any values assigned, the request will fail as you must specify at least one owner for a dataset.", + // "httpMethod": "PUT", + // "id": "bigquery.datasets.update", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Dataset identifier containing dataset being updated.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "description": "Project identifier containing dataset being updated.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}", + // "request": { + // "$ref": "Dataset" + // }, + // "response": { + // "$ref": "Dataset" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.jobs.get": + +type JobsGetCall struct { + s *Service + projectId string + jobId string + opt_ map[string]interface{} +} + +// Get: +func (r *JobsService) Get(projectId string, jobId string) *JobsGetCall { + c := &JobsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.jobId = jobId + return c +} + +func (c *JobsGetCall) Do() (*Job, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/jobs/{jobId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{jobId}", cleanPathString(c.jobId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.jobs.get", + // "parameterOrder": [ + // "projectId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs/{jobId}", + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.jobs.insert": + +type JobsInsertCall struct { + s *Service + projectId string + job *Job + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: +func (r *JobsService) Insert(projectId string, job *Job) *JobsInsertCall { + c := &JobsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.job = job + return c +} +func (c *JobsInsertCall) Media(r io.Reader) *JobsInsertCall { + c.media_ = r + return c +} + +func (c *JobsInsertCall) Do() (*Job, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.job) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/jobs") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "bigquery.jobs.insert", + // "mediaUpload": { + // "accept": [ + // "application/octet-stream" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/bigquery/v2beta1/projects/{projectId}/jobs" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/bigquery/v2beta1/projects/{projectId}/jobs" + // } + // } + // }, + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs", + // "request": { + // "$ref": "Job" + // }, + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.jobs.list": + +type JobsListCall struct { + s *Service + projectId string + opt_ map[string]interface{} +} + +// List: +func (r *JobsService) List(projectId string) *JobsListCall { + c := &JobsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + return c +} + +// AllUsers sets the optional parameter "allUsers": Whether to display +// jobs owned by all users in the project +func (c *JobsListCall) AllUsers(allUsers bool) *JobsListCall { + c.opt_["allUsers"] = allUsers + return c +} + +// MaxResults sets the optional parameter "maxResults": maximum number +// of results to return +func (c *JobsListCall) MaxResults(maxResults int64) *JobsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": +func (c *JobsListCall) PageToken(pageToken string) *JobsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *JobsListCall) Projection(projection string) *JobsListCall { + c.opt_["projection"] = projection + return c +} + +// StartIndex sets the optional parameter "startIndex": start index for +// paginated results +func (c *JobsListCall) StartIndex(startIndex int64) *JobsListCall { + c.opt_["startIndex"] = startIndex + return c +} + +// StateFilter sets the optional parameter "stateFilter": filter for job +// state +func (c *JobsListCall) StateFilter(stateFilter string) *JobsListCall { + c.opt_["stateFilter"] = stateFilter + return c +} + +func (c *JobsListCall) Do() (*JobList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["allUsers"]; ok { + params.Set("allUsers", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["stateFilter"]; ok { + params.Set("stateFilter", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/jobs") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(JobList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.jobs.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "allUsers": { + // "description": "Whether to display jobs owned by all users in the project", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "full", + // "minimal" + // ], + // "enumDescriptions": [ + // "Includes all job data.", + // "Does not include the job configuration." + // ], + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "start index for paginated results", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "stateFilter": { + // "description": "filter for job state", + // "enum": [ + // "done", + // "pending", + // "running" + // ], + // "enumDescriptions": [ + // "finished jobs", + // "pending jobs", + // "running jobs" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/jobs", + // "response": { + // "$ref": "JobList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.jobs.query": + +type JobsQueryCall struct { + s *Service + projectId string + jobqueryrequest *JobQueryRequest + opt_ map[string]interface{} +} + +// Query: +func (r *JobsService) Query(projectId string, jobqueryrequest *JobQueryRequest) *JobsQueryCall { + c := &JobsQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.jobqueryrequest = jobqueryrequest + return c +} + +func (c *JobsQueryCall) Do() (*QueryResults, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.jobqueryrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/queries") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(QueryResults) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "bigquery.jobs.query", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "projectId": { + // "description": "project name billed for the query", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/queries", + // "request": { + // "$ref": "JobQueryRequest" + // }, + // "response": { + // "$ref": "QueryResults" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.jobs.stop": + +type JobsStopCall struct { + s *Service + projectId string + jobId string + opt_ map[string]interface{} +} + +// Stop: +func (r *JobsService) Stop(projectId string, jobId string) *JobsStopCall { + c := &JobsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.jobId = jobId + return c +} + +func (c *JobsStopCall) Do() (*JobStopResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "project/{projectId}/jobs/{jobId}/stop") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{jobId}", cleanPathString(c.jobId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(JobStopResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "bigquery.jobs.stop", + // "parameterOrder": [ + // "projectId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "project/{projectId}/jobs/{jobId}/stop", + // "response": { + // "$ref": "JobStopResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.projects.list": + +type ProjectsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: +func (r *ProjectsService) List() *ProjectsListCall { + c := &ProjectsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": +func (c *ProjectsListCall) MaxResults(maxResults int64) *ProjectsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": +func (c *ProjectsListCall) PageToken(pageToken string) *ProjectsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ProjectsListCall) Do() (*ProjectList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ProjectList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.projects.list", + // "parameters": { + // "maxResults": { + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "projects", + // "response": { + // "$ref": "ProjectList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tabledata.list": + +type TabledataListCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// List: +func (r *TabledataService) List(projectId string, datasetId string, tableId string) *TabledataListCall { + c := &TabledataListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +// MaxResults sets the optional parameter "maxResults": +func (c *TabledataListCall) MaxResults(maxResults int64) *TabledataListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// StartIndex sets the optional parameter "startIndex": +func (c *TabledataListCall) StartIndex(startIndex uint64) *TabledataListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *TabledataListCall) Do() (*TableDataList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls = strings.Replace(urls, "{tableId}", cleanPathString(c.tableId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TableDataList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.tabledata.list", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startIndex": { + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "tableId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}/data", + // "response": { + // "$ref": "TableDataList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.delete": + +type TablesDeleteCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// Delete: +func (r *TablesService) Delete(projectId string, datasetId string, tableId string) *TablesDeleteCall { + c := &TablesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +func (c *TablesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls = strings.Replace(urls, "{tableId}", cleanPathString(c.tableId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "httpMethod": "DELETE", + // "id": "bigquery.tables.delete", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.get": + +type TablesGetCall struct { + s *Service + projectId string + datasetId string + tableId string + opt_ map[string]interface{} +} + +// Get: +func (r *TablesService) Get(projectId string, datasetId string, tableId string) *TablesGetCall { + c := &TablesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + return c +} + +func (c *TablesGetCall) Do() (*Table, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls = strings.Replace(urls, "{tableId}", cleanPathString(c.tableId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.tables.get", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.insert": + +type TablesInsertCall struct { + s *Service + projectId string + datasetId string + table *Table + opt_ map[string]interface{} +} + +// Insert: +func (r *TablesService) Insert(projectId string, datasetId string, table *Table) *TablesInsertCall { + c := &TablesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.table = table + return c +} + +func (c *TablesInsertCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "bigquery.tables.insert", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.list": + +type TablesListCall struct { + s *Service + projectId string + datasetId string + opt_ map[string]interface{} +} + +// List: +func (r *TablesService) List(projectId string, datasetId string) *TablesListCall { + c := &TablesListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + return c +} + +// MaxResults sets the optional parameter "maxResults": +func (c *TablesListCall) MaxResults(maxResults int64) *TablesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": +func (c *TablesListCall) PageToken(pageToken string) *TablesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TablesListCall) Do() (*TableList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TableList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "bigquery.tables.list", + // "parameterOrder": [ + // "projectId", + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables", + // "response": { + // "$ref": "TableList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.patch": + +type TablesPatchCall struct { + s *Service + projectId string + datasetId string + tableId string + table *Table + opt_ map[string]interface{} +} + +// Patch: +func (r *TablesService) Patch(projectId string, datasetId string, tableId string, table *Table) *TablesPatchCall { + c := &TablesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + c.table = table + return c +} + +func (c *TablesPatchCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls = strings.Replace(urls, "{tableId}", cleanPathString(c.tableId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "PATCH", + // "id": "bigquery.tables.patch", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +// method id "bigquery.tables.update": + +type TablesUpdateCall struct { + s *Service + projectId string + datasetId string + tableId string + table *Table + opt_ map[string]interface{} +} + +// Update: +func (r *TablesService) Update(projectId string, datasetId string, tableId string, table *Table) *TablesUpdateCall { + c := &TablesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + c.datasetId = datasetId + c.tableId = tableId + c.table = table + return c +} + +func (c *TablesUpdateCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/bigquery/v2beta1/", "projects/{projectId}/datasets/{datasetId}/tables/{tableId}") + urls = strings.Replace(urls, "{projectId}", cleanPathString(c.projectId), 1) + urls = strings.Replace(urls, "{datasetId}", cleanPathString(c.datasetId), 1) + urls = strings.Replace(urls, "{tableId}", cleanPathString(c.tableId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "PUT", + // "id": "bigquery.tables.update", + // "parameterOrder": [ + // "projectId", + // "datasetId", + // "tableId" + // ], + // "parameters": { + // "datasetId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projectId": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tableId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{projectId}/datasets/{datasetId}/tables/{tableId}", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/bigquery" + // ] + // } + +} + +func cleanPathString(s string) string { + return strings.Map(func(r rune) rune { + if r >= 0x30 && r <= 0x7a { + return r + } + return -1 + }, s) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-api.json b/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-api.json new file mode 100644 index 0000000000000..1a1359412d87a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-api.json @@ -0,0 +1,922 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/7OUX8PWQu-_Ueqls9RjxxnFExMI\"", + "discoveryVersion": "v1", + "id": "blogger:v2", + "name": "blogger", + "version": "v2", + "title": "Blogger API", + "description": "API for access to the data within Blogger.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/blogger-16.png", + "x32": "http://www.google.com/images/icons/product/blogger-32.png" + }, + "documentationLink": "https://developers.google.com/blogger/docs/2.0/json/getting_started", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/blogger/v2/", + "basePath": "/blogger/v2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "blogger/v2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/blogger": { + "description": "Manage your Blogger account" + } + } + } + }, + "schemas": { + "Blog": { + "id": "Blog", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The description of this blog. This is displayed underneath the title." + }, + "id": { + "type": "string", + "description": "The identifier for this resource.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#blog", + "default": "blogger#blog" + }, + "locale": { + "type": "object", + "description": "The locale this Blog is set to.", + "properties": { + "country": { + "type": "string", + "description": "The country this blog's locale is set to." + }, + "language": { + "type": "string", + "description": "The language this blog is authored in." + }, + "variant": { + "type": "string", + "description": "The language variant this blog is authored in." + } + } + }, + "name": { + "type": "string", + "description": "The name of this blog. This is displayed as the title." + }, + "pages": { + "type": "object", + "description": "The container of pages in this blog.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the container for pages in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of pages in this blog.", + "format": "int32" + } + } + }, + "posts": { + "type": "object", + "description": "The container of posts in this blog.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the container for posts in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of posts in this blog.", + "format": "int32" + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this blog was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this blog was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this blog is published." + } + } + }, + "BlogList": { + "id": "BlogList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Blogs this user has Authorship or Admin rights over.", + "items": { + "$ref": "Blog" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogList", + "default": "blogger#blogList" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Comment creator." + }, + "image": { + "type": "object", + "description": "The comment creator's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The comment creator's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Comment creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this comment.", + "format": "int64" + } + } + }, + "content": { + "type": "string", + "description": "The actual content of the comment. May include HTML markup." + }, + "id": { + "type": "string", + "description": "The identifier for this resource.", + "format": "int64" + }, + "inReplyTo": { + "type": "object", + "description": "Data about the comment this is in reply to.", + "properties": { + "id": { + "type": "string", + "description": "The identified of the parent of this comment.", + "format": "int64" + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#comment", + "default": "blogger#comment" + }, + "post": { + "type": "object", + "description": "Data about the post containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the post containing this comment.", + "format": "int64" + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this comment was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this comment was last updated.", + "format": "date-time" + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for a Post.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#commentList", + "default": "blogger#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "prevPageToken": { + "type": "string", + "description": "Pagination token to fetch the previous page, if one exists." + } + } + }, + "Page": { + "id": "Page", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Page.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Page creator." + }, + "image": { + "type": "object", + "description": "The page author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The page author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Page creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Page.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this page.", + "format": "int64" + } + } + }, + "content": { + "type": "string", + "description": "The body content of this Page, in HTML." + }, + "id": { + "type": "string", + "description": "The identifier for this resource.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#page", + "default": "blogger#page" + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Page was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "title": { + "type": "string", + "description": "The title of this entity. This is the name displayed in the Admin user interface." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Page was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL that this Page is displayed at." + } + } + }, + "PageList": { + "id": "PageList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Pages for a Blog.", + "items": { + "$ref": "Page" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#pageList", + "default": "blogger#pageList" + } + } + }, + "Post": { + "id": "Post", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Post.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Post creator." + }, + "image": { + "type": "object", + "description": "The Post author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The Post author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Post creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Post.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the Blog that contains this Post.", + "format": "int64" + } + } + }, + "content": { + "type": "string", + "description": "The content of the Post. May contain HTML markup." + }, + "id": { + "type": "string", + "description": "The identifier of this Post.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#post", + "default": "blogger#post" + }, + "labels": { + "type": "array", + "description": "The list of labels this Post was tagged with.", + "items": { + "type": "string" + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Post was published.", + "format": "date-time" + }, + "replies": { + "type": "object", + "description": "The container of comments on this Post.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the comments on this post." + }, + "totalItems": { + "type": "string", + "description": "The count of comments on this post.", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "title": { + "type": "string", + "description": "The title of the Post." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Post was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this Post is displayed." + } + } + }, + "PostList": { + "id": "PostList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "prevPageToken": { + "type": "string", + "description": "Pagination token to fetch the previous page, if one exists." + } + } + }, + "User": { + "id": "User", + "type": "object", + "properties": { + "about": { + "type": "string", + "description": "Profile summary information." + }, + "blogs": { + "type": "object", + "description": "The container of blogs for this user.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the Blogs for this user." + } + } + }, + "created": { + "type": "string", + "description": "The timestamp of when this profile was created, in seconds since epoch.", + "format": "date-time" + }, + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier for this User." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#user", + "default": "blogger#user" + }, + "locale": { + "type": "object", + "description": "This user's locale", + "properties": { + "country": { + "type": "string", + "description": "The user's country setting." + }, + "language": { + "type": "string", + "description": "The user's language setting." + }, + "variant": { + "type": "string", + "description": "The user's language variant setting." + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "url": { + "type": "string", + "description": "The user's profile page." + } + } + } + }, + "resources": { + "blogs": { + "methods": { + "get": { + "id": "blogger.blogs.get", + "path": "blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "comments": { + "methods": { + "get": { + "id": "blogger.comments.get", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets one comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to containing the comment.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.comments.list", + "path": "blogs/{blogId}/posts/{postId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a blog, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pages": { + "methods": { + "get": { + "id": "blogger.pages.get", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "GET", + "description": "Gets one blog page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog containing the page.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the page to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.pages.list", + "path": "blogs/{blogId}/pages", + "httpMethod": "GET", + "description": "Retrieves pages for a blog, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch pages from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether to retrieve the Page bodies.", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "posts": { + "methods": { + "get": { + "id": "blogger.posts.get", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Get a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the post", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.posts.list", + "path": "blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "users": { + "methods": { + "get": { + "id": "blogger.users.get", + "path": "users/{userId}", + "httpMethod": "GET", + "description": "Gets one user by id.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + }, + "resources": { + "blogs": { + "methods": { + "list": { + "id": "blogger.users.blogs.list", + "path": "users/{userId}/blogs", + "httpMethod": "GET", + "description": "Retrieves a list of blogs, possibly filtered.", + "parameters": { + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "BlogList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-gen.go b/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-gen.go new file mode 100644 index 0000000000000..da91e8027d5b4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/blogger/v2/blogger-gen.go @@ -0,0 +1,1247 @@ +// Package blogger provides access to the Blogger API. +// +// See https://developers.google.com/blogger/docs/2.0/json/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/blogger/v2" +// ... +// bloggerService, err := blogger.New(oauthHttpClient) +package blogger + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "blogger:v2" +const apiName = "blogger" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/blogger/v2/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Blogger account + BloggerScope = "https://www.googleapis.com/auth/blogger" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Blogs = NewBlogsService(s) + s.Comments = NewCommentsService(s) + s.Pages = NewPagesService(s) + s.Posts = NewPostsService(s) + s.Users = NewUsersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Blogs *BlogsService + + Comments *CommentsService + + Pages *PagesService + + Posts *PostsService + + Users *UsersService +} + +func NewBlogsService(s *Service) *BlogsService { + rs := &BlogsService{s: s} + return rs +} + +type BlogsService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewPagesService(s *Service) *PagesService { + rs := &PagesService{s: s} + return rs +} + +type PagesService struct { + s *Service +} + +func NewPostsService(s *Service) *PostsService { + rs := &PostsService{s: s} + return rs +} + +type PostsService struct { + s *Service +} + +func NewUsersService(s *Service) *UsersService { + rs := &UsersService{s: s} + rs.Blogs = NewUsersBlogsService(s) + return rs +} + +type UsersService struct { + s *Service + + Blogs *UsersBlogsService +} + +func NewUsersBlogsService(s *Service) *UsersBlogsService { + rs := &UsersBlogsService{s: s} + return rs +} + +type UsersBlogsService struct { + s *Service +} + +type Blog struct { + // Description: The description of this blog. This is displayed + // underneath the title. + Description string `json:"description,omitempty"` + + // Id: The identifier for this resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of this entry. Always blogger#blog + Kind string `json:"kind,omitempty"` + + // Locale: The locale this Blog is set to. + Locale *BlogLocale `json:"locale,omitempty"` + + // Name: The name of this blog. This is displayed as the title. + Name string `json:"name,omitempty"` + + // Pages: The container of pages in this blog. + Pages *BlogPages `json:"pages,omitempty"` + + // Posts: The container of posts in this blog. + Posts *BlogPosts `json:"posts,omitempty"` + + // Published: RFC 3339 date-time when this blog was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: RFC 3339 date-time when this blog was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this blog is published. + Url string `json:"url,omitempty"` +} + +type BlogLocale struct { + // Country: The country this blog's locale is set to. + Country string `json:"country,omitempty"` + + // Language: The language this blog is authored in. + Language string `json:"language,omitempty"` + + // Variant: The language variant this blog is authored in. + Variant string `json:"variant,omitempty"` +} + +type BlogPages struct { + // SelfLink: The URL of the container for pages in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of pages in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogPosts struct { + // SelfLink: The URL of the container for posts in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of posts in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogList struct { + // Items: The list of Blogs this user has Authorship or Admin rights + // over. + Items []*Blog `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogList + Kind string `json:"kind,omitempty"` +} + +type Comment struct { + // Author: The author of this Comment. + Author *CommentAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this comment. + Blog *CommentBlog `json:"blog,omitempty"` + + // Content: The actual content of the comment. May include HTML markup. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id int64 `json:"id,omitempty,string"` + + // InReplyTo: Data about the comment this is in reply to. + InReplyTo *CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: The kind of this entry. Always blogger#comment + Kind string `json:"kind,omitempty"` + + // Post: Data about the post containing this comment. + Post *CommentPost `json:"post,omitempty"` + + // Published: RFC 3339 date-time when this comment was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: RFC 3339 date-time when this comment was last updated. + Updated string `json:"updated,omitempty"` +} + +type CommentAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Comment creator. + Id string `json:"id,omitempty"` + + // Image: The comment creator's avatar. + Image *CommentAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Comment creator's Profile page. + Url string `json:"url,omitempty"` +} + +type CommentAuthorImage struct { + // Url: The comment creator's avatar URL. + Url string `json:"url,omitempty"` +} + +type CommentBlog struct { + // Id: The identifier of the blog containing this comment. + Id int64 `json:"id,omitempty,string"` +} + +type CommentInReplyTo struct { + // Id: The identified of the parent of this comment. + Id int64 `json:"id,omitempty,string"` +} + +type CommentPost struct { + // Id: The identifier of the post containing this comment. + Id int64 `json:"id,omitempty,string"` +} + +type CommentList struct { + // Items: The List of Comments for a Post. + Items []*Comment `json:"items,omitempty"` + + // Kind: The kind of this entry. Always blogger#commentList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: Pagination token to fetch the previous page, if one + // exists. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type Page struct { + // Author: The author of this Page. + Author *PageAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Page. + Blog *PageBlog `json:"blog,omitempty"` + + // Content: The body content of this Page, in HTML. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of this entity. Always blogger#page + Kind string `json:"kind,omitempty"` + + // Published: RFC 3339 date-time when this Page was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this entity. This is the name displayed in the + // Admin user interface. + Title string `json:"title,omitempty"` + + // Updated: RFC 3339 date-time when this Page was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL that this Page is displayed at. + Url string `json:"url,omitempty"` +} + +type PageAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Page creator. + Id string `json:"id,omitempty"` + + // Image: The page author's avatar. + Image *PageAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Page creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PageAuthorImage struct { + // Url: The page author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PageBlog struct { + // Id: The identifier of the blog containing this page. + Id int64 `json:"id,omitempty,string"` +} + +type PageList struct { + // Items: The list of Pages for a Blog. + Items []*Page `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#pageList + Kind string `json:"kind,omitempty"` +} + +type Post struct { + // Author: The author of this Post. + Author *PostAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Post. + Blog *PostBlog `json:"blog,omitempty"` + + // Content: The content of the Post. May contain HTML markup. + Content string `json:"content,omitempty"` + + // Id: The identifier of this Post. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of this entity. Always blogger#post + Kind string `json:"kind,omitempty"` + + // Labels: The list of labels this Post was tagged with. + Labels []string `json:"labels,omitempty"` + + // Published: RFC 3339 date-time when this Post was published. + Published string `json:"published,omitempty"` + + // Replies: The container of comments on this Post. + Replies *PostReplies `json:"replies,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of the Post. + Title string `json:"title,omitempty"` + + // Updated: RFC 3339 date-time when this Post was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this Post is displayed. + Url string `json:"url,omitempty"` +} + +type PostAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Post creator. + Id string `json:"id,omitempty"` + + // Image: The Post author's avatar. + Image *PostAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Post creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PostAuthorImage struct { + // Url: The Post author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PostBlog struct { + // Id: The identifier of the Blog that contains this Post. + Id int64 `json:"id,omitempty,string"` +} + +type PostReplies struct { + // SelfLink: The URL of the comments on this post. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of comments on this post. + TotalItems int64 `json:"totalItems,omitempty,string"` +} + +type PostList struct { + // Items: The list of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: Pagination token to fetch the previous page, if one + // exists. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type User struct { + // About: Profile summary information. + About string `json:"about,omitempty"` + + // Blogs: The container of blogs for this user. + Blogs *UserBlogs `json:"blogs,omitempty"` + + // Created: The timestamp of when this profile was created, in seconds + // since epoch. + Created string `json:"created,omitempty"` + + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier for this User. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#user + Kind string `json:"kind,omitempty"` + + // Locale: This user's locale + Locale *UserLocale `json:"locale,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Url: The user's profile page. + Url string `json:"url,omitempty"` +} + +type UserBlogs struct { + // SelfLink: The URL of the Blogs for this user. + SelfLink string `json:"selfLink,omitempty"` +} + +type UserLocale struct { + // Country: The user's country setting. + Country string `json:"country,omitempty"` + + // Language: The user's language setting. + Language string `json:"language,omitempty"` + + // Variant: The user's language variant setting. + Variant string `json:"variant,omitempty"` +} + +// method id "blogger.blogs.get": + +type BlogsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog by id. +func (r *BlogsService) Get(blogId string) *BlogsGetCall { + c := &BlogsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +func (c *BlogsGetCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog by id.", + // "httpMethod": "GET", + // "id": "blogger.blogs.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.get": + +type CommentsGetCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Get: Gets one comment by id. +func (r *CommentsService) Get(blogId string, postId string, commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one comment by id.", + // "httpMethod": "GET", + // "id": "blogger.comments.get", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to containing the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.list": + +type CommentsListCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// List: Retrieves the comments for a blog, possibly filtered. +func (r *CommentsService) List(blogId string, postId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListCall) FetchBodies(fetchBodies bool) *CommentsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) StartDate(startDate string) *CommentsListCall { + c.opt_["startDate"] = startDate + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a blog, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.list", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.get": + +type PagesGetCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Get: Gets one blog page by id. +func (r *PagesService) Get(blogId string, pageId string) *PagesGetCall { + c := &PagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +func (c *PagesGetCall) Do() (*Page, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog page by id.", + // "httpMethod": "GET", + // "id": "blogger.pages.get", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog containing the page.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the page to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.list": + +type PagesListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves pages for a blog, possibly filtered. +func (r *PagesService) List(blogId string) *PagesListCall { + c := &PagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether to +// retrieve the Page bodies. +func (c *PagesListCall) FetchBodies(fetchBodies bool) *PagesListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +func (c *PagesListCall) Do() (*PageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves pages for a blog, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.pages.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch pages from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether to retrieve the Page bodies.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "response": { + // "$ref": "PageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.get": + +type PostsGetCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Get a post by id. +func (r *PostsService) Get(blogId string, postId string) *PostsGetCall { + c := &PostsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsGetCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a post by id.", + // "httpMethod": "GET", + // "id": "blogger.posts.get", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the post", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.list": + +type PostsListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of posts, possibly filtered. +func (r *PostsService) List(blogId string) *PostsListCall { + c := &PostsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included. +func (c *PostsListCall) FetchBodies(fetchBodies bool) *PostsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostsListCall) MaxResults(maxResults int64) *PostsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostsListCall) PageToken(pageToken string) *PostsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) StartDate(startDate string) *PostsListCall { + c.opt_["startDate"] = startDate + return c +} + +func (c *PostsListCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.posts.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of posts is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.users.get": + +type UsersGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Gets one user by id. +func (r *UsersService) Get(userId string) *UsersGetCall { + c := &UsersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *UsersGetCall) Do() (*User, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user by id.", + // "httpMethod": "GET", + // "id": "blogger.users.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}", + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.users.blogs.list": + +type UsersBlogsListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of blogs, possibly filtered. +func (r *UsersBlogsService) List(userId string) *UsersBlogsListCall { + c := &UsersBlogsListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *UsersBlogsListCall) Do() (*BlogList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of blogs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.users.blogs.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs", + // "response": { + // "$ref": "BlogList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-api.json b/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-api.json new file mode 100644 index 0000000000000..97a0de69c831d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-api.json @@ -0,0 +1,2347 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/TO0nvlGiFkC4eBcMUbWL9BiW0xc\"", + "discoveryVersion": "v1", + "id": "blogger:v3", + "name": "blogger", + "version": "v3", + "title": "Blogger API", + "description": "API for access to the data within Blogger.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/blogger-16.png", + "x32": "http://www.google.com/images/icons/product/blogger-32.png" + }, + "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/blogger/v3/", + "basePath": "/blogger/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "blogger/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/blogger": { + "description": "Manage your Blogger account" + }, + "https://www.googleapis.com/auth/blogger.readonly": { + "description": "View your Blogger account" + } + } + } + }, + "schemas": { + "Blog": { + "id": "Blog", + "type": "object", + "properties": { + "customMetaData": { + "type": "string", + "description": "The JSON custom meta-data for the Blog" + }, + "description": { + "type": "string", + "description": "The description of this blog. This is displayed underneath the title." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#blog", + "default": "blogger#blog" + }, + "locale": { + "type": "object", + "description": "The locale this Blog is set to.", + "properties": { + "country": { + "type": "string", + "description": "The country this blog's locale is set to." + }, + "language": { + "type": "string", + "description": "The language this blog is authored in." + }, + "variant": { + "type": "string", + "description": "The language variant this blog is authored in." + } + } + }, + "name": { + "type": "string", + "description": "The name of this blog. This is displayed as the title." + }, + "pages": { + "type": "object", + "description": "The container of pages in this blog.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the container for pages in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of pages in this blog.", + "format": "int32" + } + } + }, + "posts": { + "type": "object", + "description": "The container of posts in this blog.", + "properties": { + "items": { + "type": "array", + "description": "The List of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the container for posts in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of posts in this blog.", + "format": "int32" + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this blog was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this blog was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this blog is published." + } + } + }, + "BlogList": { + "id": "BlogList", + "type": "object", + "properties": { + "blogUserInfos": { + "type": "array", + "description": "Admin level list of blog per-user information", + "items": { + "$ref": "BlogUserInfo" + } + }, + "items": { + "type": "array", + "description": "The list of Blogs this user has Authorship or Admin rights over.", + "items": { + "$ref": "Blog" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogList", + "default": "blogger#blogList" + } + } + }, + "BlogPerUserInfo": { + "id": "BlogPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog resource" + }, + "hasAdminAccess": { + "type": "boolean", + "description": "True if the user has Admin level access to the blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogPerUserInfo", + "default": "blogger#blogPerUserInfo" + }, + "photosAlbumKey": { + "type": "string", + "description": "The Photo Album Key for the user when adding photos to the blog" + }, + "role": { + "type": "string", + "description": "Access permissions that the user has for the blog (ADMIN, AUTHOR, or READER)." + }, + "userId": { + "type": "string", + "description": "ID of the User" + } + } + }, + "BlogUserInfo": { + "id": "BlogUserInfo", + "type": "object", + "properties": { + "blog": { + "$ref": "Blog", + "description": "The Blog resource." + }, + "blog_user_info": { + "$ref": "BlogPerUserInfo", + "description": "Information about a User for the Blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogUserInfo", + "default": "blogger#blogUserInfo" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Comment creator." + }, + "image": { + "type": "object", + "description": "The comment creator's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The comment creator's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Comment creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this comment." + } + } + }, + "content": { + "type": "string", + "description": "The actual content of the comment. May include HTML markup." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "inReplyTo": { + "type": "object", + "description": "Data about the comment this is in reply to.", + "properties": { + "id": { + "type": "string", + "description": "The identified of the parent of this comment." + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#comment", + "default": "blogger#comment" + }, + "post": { + "type": "object", + "description": "Data about the post containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the post containing this comment." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this comment was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the comment (only populated for admin users)" + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this comment was last updated.", + "format": "date-time" + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for a Post.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#commentList", + "default": "blogger#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "prevPageToken": { + "type": "string", + "description": "Pagination token to fetch the previous page, if one exists." + } + } + }, + "Page": { + "id": "Page", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Page.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Page creator." + }, + "image": { + "type": "object", + "description": "The page author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The page author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Page creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Page.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this page." + } + } + }, + "content": { + "type": "string", + "description": "The body content of this Page, in HTML." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#page", + "default": "blogger#page" + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Page was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the page for admin resources (either LIVE or DRAFT)." + }, + "title": { + "type": "string", + "description": "The title of this entity. This is the name displayed in the Admin user interface." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Page was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL that this Page is displayed at." + } + } + }, + "PageList": { + "id": "PageList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Pages for a Blog.", + "items": { + "$ref": "Page" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#pageList", + "default": "blogger#pageList" + } + } + }, + "Pageviews": { + "id": "Pageviews", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "Blog Id", + "format": "int64" + }, + "counts": { + "type": "array", + "description": "The container of posts in this blog.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Count of page views for the given time range", + "format": "int64" + }, + "timeRange": { + "type": "string", + "description": "Time range the given count applies to" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#page_views", + "default": "blogger#page_views" + } + } + }, + "Post": { + "id": "Post", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Post.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Post creator." + }, + "image": { + "type": "object", + "description": "The Post author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The Post author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Post creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Post.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the Blog that contains this Post." + } + } + }, + "content": { + "type": "string", + "description": "The content of the Post. May contain HTML markup." + }, + "customMetaData": { + "type": "string", + "description": "The JSON meta-data for the Post." + }, + "id": { + "type": "string", + "description": "The identifier of this Post." + }, + "images": { + "type": "array", + "description": "Display image for the Post.", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#post", + "default": "blogger#post" + }, + "labels": { + "type": "array", + "description": "The list of labels this Post was tagged with.", + "items": { + "type": "string" + } + }, + "location": { + "type": "object", + "description": "The location for geotagged posts.", + "properties": { + "lat": { + "type": "number", + "description": "Location's latitude.", + "format": "double" + }, + "lng": { + "type": "number", + "description": "Location's longitude.", + "format": "double" + }, + "name": { + "type": "string", + "description": "Location name." + }, + "span": { + "type": "string", + "description": "Location's viewport span. Can be used when rendering a map preview." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Post was published.", + "format": "date-time" + }, + "replies": { + "type": "object", + "description": "The container of comments on this Post.", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for this Post.", + "items": { + "$ref": "Comment" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the comments on this post." + }, + "totalItems": { + "type": "string", + "description": "The count of comments on this post.", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "Status of the post. Only set for admin-level requests" + }, + "title": { + "type": "string", + "description": "The title of the Post." + }, + "titleLink": { + "type": "string", + "description": "The title link URL, similar to atom's related link." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Post was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this Post is displayed." + } + } + }, + "PostList": { + "id": "PostList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "PostPerUserInfo": { + "id": "PostPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog that the post resource belongs to." + }, + "hasEditAccess": { + "type": "boolean", + "description": "True if the user has Author level access to the post." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postPerUserInfo", + "default": "blogger#postPerUserInfo" + }, + "postId": { + "type": "string", + "description": "ID of the Post resource." + }, + "userId": { + "type": "string", + "description": "ID of the User." + } + } + }, + "PostUserInfo": { + "id": "PostUserInfo", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postUserInfo", + "default": "blogger#postUserInfo" + }, + "post": { + "$ref": "Post", + "description": "The Post resource." + }, + "post_user_info": { + "$ref": "PostPerUserInfo", + "description": "Information about a User for the Post." + } + } + }, + "PostUserInfosList": { + "id": "PostUserInfosList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts with User information for the post, for this Blog.", + "items": { + "$ref": "PostUserInfo" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postUserInfosList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "User": { + "id": "User", + "type": "object", + "properties": { + "about": { + "type": "string", + "description": "Profile summary information." + }, + "blogs": { + "type": "object", + "description": "The container of blogs for this user.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the Blogs for this user." + } + } + }, + "created": { + "type": "string", + "description": "The timestamp of when this profile was created, in seconds since epoch.", + "format": "date-time" + }, + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier for this User." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#user", + "default": "blogger#user" + }, + "locale": { + "type": "object", + "description": "This user's locale", + "properties": { + "country": { + "type": "string", + "description": "The user's country setting." + }, + "language": { + "type": "string", + "description": "The user's language setting." + }, + "variant": { + "type": "string", + "description": "The user's language variant setting." + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "url": { + "type": "string", + "description": "The user's profile page." + } + } + } + }, + "resources": { + "blogUserInfos": { + "methods": { + "get": { + "id": "blogger.blogUserInfos.get", + "path": "users/{userId}/blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog and user info pair by blogId and userId.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "BlogUserInfo" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "blogs": { + "methods": { + "get": { + "id": "blogger.blogs.get", + "path": "blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByUrl": { + "id": "blogger.blogs.getByUrl", + "path": "blogs/byurl", + "httpMethod": "GET", + "description": "Retrieve a Blog by URL.", + "parameters": { + "url": { + "type": "string", + "description": "The URL of the blog to retrieve.", + "required": true, + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "url" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByUser": { + "id": "blogger.blogs.listByUser", + "path": "users/{userId}/blogs", + "httpMethod": "GET", + "description": "Retrieves a list of blogs, possibly filtered.", + "parameters": { + "fetchUserInfo": { + "type": "boolean", + "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + "location": "query" + }, + "role": { + "type": "string", + "description": "User access types for blogs to include in the results, e.g. AUTHOR will return blogs where the user has author level access. If no roles are specified, defaults to ADMIN and AUTHOR roles.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin role - User has Admin level access.", + "Author role - User has Author level access.", + "Reader role - User has Reader level access." + ], + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "BlogList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "comments": { + "methods": { + "approve": { + "id": "blogger.comments.approve", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + "httpMethod": "POST", + "description": "Marks a comment as not spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as not spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "delete": { + "id": "blogger.comments.delete", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Delete a comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.comments.get", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets one comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to containing the comment.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "description": "Access level for the requested comment (default: READER). Note that some comments will require elevated permissions, for example comments where the parent posts which is in a draft state, or comments that are pending moderation.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.comments.list", + "path": "blogs/{blogId}/posts/{postId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a post, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "status": { + "type": "string", + "enum": [ + "emptied", + "live", + "pending", + "spam" + ], + "enumDescriptions": [ + "Comments that have had their content removed", + "Comments that are publicly visible", + "Comments that are awaiting administrator approval", + "Comments marked as spam by the administrator" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByBlog": { + "id": "blogger.comments.listByBlog", + "path": "blogs/{blogId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "markAsSpam": { + "id": "blogger.comments.markAsSpam", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + "httpMethod": "POST", + "description": "Marks a comment as spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "removeContent": { + "id": "blogger.comments.removeContent", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + "httpMethod": "POST", + "description": "Removes the content of a comment.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete content from.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pageViews": { + "methods": { + "get": { + "id": "blogger.pageViews.get", + "path": "blogs/{blogId}/pageviews", + "httpMethod": "GET", + "description": "Retrieve pageview stats for a Blog.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "range": { + "type": "string", + "enum": [ + "30DAYS", + "7DAYS", + "all" + ], + "enumDescriptions": [ + "Page view counts from the last thirty days.", + "Page view counts from the last seven days.", + "Total page view counts from all time." + ], + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Pageviews" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pages": { + "methods": { + "delete": { + "id": "blogger.pages.delete", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "DELETE", + "description": "Delete a page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.pages.get", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "GET", + "description": "Gets one blog page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog containing the page.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the page to get.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.pages.insert", + "path": "blogs/{blogId}/pages", + "httpMethod": "POST", + "description": "Add a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the page to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.pages.list", + "path": "blogs/{blogId}/pages", + "httpMethod": "GET", + "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch pages from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether to retrieve the Page bodies.", + "location": "query" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "live" + ], + "enumDescriptions": [ + "Draft (unpublished) Pages", + "Pages that are publicly visible" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.pages.patch", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PATCH", + "description": "Update a page. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "update": { + "id": "blogger.pages.update", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PUT", + "description": "Update a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "postUserInfos": { + "methods": { + "get": { + "id": "blogger.postUserInfos.get", + "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Gets one post and user info pair, by post id and user id. The post user info contains per-user information about the post, such as access rights, specific to the user.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post to get.", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId", + "postId" + ], + "response": { + "$ref": "PostUserInfo" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.postUserInfos.list", + "path": "users/{userId}/blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of post and post user info pairs, possibly filtered. The post user info contains per-user information about the post, such as access rights, specific to the user.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included. Default is false.", + "default": "false", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort order applied to search results. Default is published.", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "status": { + "type": "string", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft posts", + "Published posts", + "Posts that are scheduled to publish in future." + ], + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "PostUserInfosList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "posts": { + "methods": { + "delete": { + "id": "blogger.posts.delete", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "DELETE", + "description": "Delete a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.posts.get", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Get a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "fetchBody": { + "type": "boolean", + "description": "Whether the body content of the post is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included (default: false).", + "location": "query" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByPath": { + "id": "blogger.posts.getByPath", + "path": "blogs/{blogId}/posts/bypath", + "httpMethod": "GET", + "description": "Retrieve a Post by Path.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "path": { + "type": "string", + "description": "Path of the Post to retrieve.", + "required": true, + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "path" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.posts.insert", + "path": "blogs/{blogId}/posts", + "httpMethod": "POST", + "description": "Add a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the post to.", + "required": true, + "location": "path" + }, + "fetchBody": { + "type": "boolean", + "description": "Whether the body content of the post is included with the result (default: true).", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + "location": "query" + }, + "isDraft": { + "type": "boolean", + "description": "Whether to create the post as a draft (default: false).", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.posts.list", + "path": "blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included.", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "status": { + "type": "string", + "description": "Statuses to include in the results.", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft (non-published) posts.", + "Published posts", + "Posts that are scheduled to publish in the future." + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "description": "Access level with which to view the returned result. Note that some fields require escalated access.", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.posts.patch", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PATCH", + "description": "Update a post. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "fetchBody": { + "type": "boolean", + "description": "Whether the body content of the post is included with the result (default: true).", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + "location": "query" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to retrieve with the returned post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + }, + "publish": { + "type": "boolean", + "description": "Whether a publish action should be performed when the post is updated (default: false).", + "location": "query" + }, + "revert": { + "type": "boolean", + "description": "Whether a revert action should be performed when the post is updated (default: false).", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "publish": { + "id": "blogger.posts.publish", + "path": "blogs/{blogId}/posts/{postId}/publish", + "httpMethod": "POST", + "description": "Publish a draft post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + }, + "publishDate": { + "type": "string", + "description": "The date and time to schedule the publishing of the Blog.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "revert": { + "id": "blogger.posts.revert", + "path": "blogs/{blogId}/posts/{postId}/revert", + "httpMethod": "POST", + "description": "Revert a published or scheduled post to draft state.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "search": { + "id": "blogger.posts.search", + "path": "blogs/{blogId}/posts/search", + "httpMethod": "GET", + "description": "Search for a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query terms to search this blog for matching posts.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "q" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "update": { + "id": "blogger.posts.update", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PUT", + "description": "Update a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "fetchBody": { + "type": "boolean", + "description": "Whether the body content of the post is included with the result (default: true).", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + "location": "query" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to retrieve with the returned post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + }, + "publish": { + "type": "boolean", + "description": "Whether a publish action should be performed when the post is updated (default: false).", + "location": "query" + }, + "revert": { + "type": "boolean", + "description": "Whether a revert action should be performed when the post is updated (default: false).", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "users": { + "methods": { + "get": { + "id": "blogger.users.get", + "path": "users/{userId}", + "httpMethod": "GET", + "description": "Gets one user by id.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-gen.go b/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-gen.go new file mode 100644 index 0000000000000..34dc61631522e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/blogger/v3/blogger-gen.go @@ -0,0 +1,4216 @@ +// Package blogger provides access to the Blogger API. +// +// See https://developers.google.com/blogger/docs/3.0/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/blogger/v3" +// ... +// bloggerService, err := blogger.New(oauthHttpClient) +package blogger + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "blogger:v3" +const apiName = "blogger" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/blogger/v3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Blogger account + BloggerScope = "https://www.googleapis.com/auth/blogger" + + // View your Blogger account + BloggerReadonlyScope = "https://www.googleapis.com/auth/blogger.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BlogUserInfos = NewBlogUserInfosService(s) + s.Blogs = NewBlogsService(s) + s.Comments = NewCommentsService(s) + s.PageViews = NewPageViewsService(s) + s.Pages = NewPagesService(s) + s.PostUserInfos = NewPostUserInfosService(s) + s.Posts = NewPostsService(s) + s.Users = NewUsersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BlogUserInfos *BlogUserInfosService + + Blogs *BlogsService + + Comments *CommentsService + + PageViews *PageViewsService + + Pages *PagesService + + PostUserInfos *PostUserInfosService + + Posts *PostsService + + Users *UsersService +} + +func NewBlogUserInfosService(s *Service) *BlogUserInfosService { + rs := &BlogUserInfosService{s: s} + return rs +} + +type BlogUserInfosService struct { + s *Service +} + +func NewBlogsService(s *Service) *BlogsService { + rs := &BlogsService{s: s} + return rs +} + +type BlogsService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewPageViewsService(s *Service) *PageViewsService { + rs := &PageViewsService{s: s} + return rs +} + +type PageViewsService struct { + s *Service +} + +func NewPagesService(s *Service) *PagesService { + rs := &PagesService{s: s} + return rs +} + +type PagesService struct { + s *Service +} + +func NewPostUserInfosService(s *Service) *PostUserInfosService { + rs := &PostUserInfosService{s: s} + return rs +} + +type PostUserInfosService struct { + s *Service +} + +func NewPostsService(s *Service) *PostsService { + rs := &PostsService{s: s} + return rs +} + +type PostsService struct { + s *Service +} + +func NewUsersService(s *Service) *UsersService { + rs := &UsersService{s: s} + return rs +} + +type UsersService struct { + s *Service +} + +type Blog struct { + // CustomMetaData: The JSON custom meta-data for the Blog + CustomMetaData string `json:"customMetaData,omitempty"` + + // Description: The description of this blog. This is displayed + // underneath the title. + Description string `json:"description,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entry. Always blogger#blog + Kind string `json:"kind,omitempty"` + + // Locale: The locale this Blog is set to. + Locale *BlogLocale `json:"locale,omitempty"` + + // Name: The name of this blog. This is displayed as the title. + Name string `json:"name,omitempty"` + + // Pages: The container of pages in this blog. + Pages *BlogPages `json:"pages,omitempty"` + + // Posts: The container of posts in this blog. + Posts *BlogPosts `json:"posts,omitempty"` + + // Published: RFC 3339 date-time when this blog was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: RFC 3339 date-time when this blog was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this blog is published. + Url string `json:"url,omitempty"` +} + +type BlogLocale struct { + // Country: The country this blog's locale is set to. + Country string `json:"country,omitempty"` + + // Language: The language this blog is authored in. + Language string `json:"language,omitempty"` + + // Variant: The language variant this blog is authored in. + Variant string `json:"variant,omitempty"` +} + +type BlogPages struct { + // SelfLink: The URL of the container for pages in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of pages in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogPosts struct { + // Items: The List of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // SelfLink: The URL of the container for posts in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of posts in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogList struct { + // BlogUserInfos: Admin level list of blog per-user information + BlogUserInfos []*BlogUserInfo `json:"blogUserInfos,omitempty"` + + // Items: The list of Blogs this user has Authorship or Admin rights + // over. + Items []*Blog `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogList + Kind string `json:"kind,omitempty"` +} + +type BlogPerUserInfo struct { + // BlogId: ID of the Blog resource + BlogId string `json:"blogId,omitempty"` + + // HasAdminAccess: True if the user has Admin level access to the blog. + HasAdminAccess bool `json:"hasAdminAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogPerUserInfo + Kind string `json:"kind,omitempty"` + + // PhotosAlbumKey: The Photo Album Key for the user when adding photos + // to the blog + PhotosAlbumKey string `json:"photosAlbumKey,omitempty"` + + // Role: Access permissions that the user has for the blog (ADMIN, + // AUTHOR, or READER). + Role string `json:"role,omitempty"` + + // UserId: ID of the User + UserId string `json:"userId,omitempty"` +} + +type BlogUserInfo struct { + // Blog: The Blog resource. + Blog *Blog `json:"blog,omitempty"` + + // Blog_user_info: Information about a User for the Blog. + Blog_user_info *BlogPerUserInfo `json:"blog_user_info,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogUserInfo + Kind string `json:"kind,omitempty"` +} + +type Comment struct { + // Author: The author of this Comment. + Author *CommentAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this comment. + Blog *CommentBlog `json:"blog,omitempty"` + + // Content: The actual content of the comment. May include HTML markup. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // InReplyTo: Data about the comment this is in reply to. + InReplyTo *CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: The kind of this entry. Always blogger#comment + Kind string `json:"kind,omitempty"` + + // Post: Data about the post containing this comment. + Post *CommentPost `json:"post,omitempty"` + + // Published: RFC 3339 date-time when this comment was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the comment (only populated for admin users) + Status string `json:"status,omitempty"` + + // Updated: RFC 3339 date-time when this comment was last updated. + Updated string `json:"updated,omitempty"` +} + +type CommentAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Comment creator. + Id string `json:"id,omitempty"` + + // Image: The comment creator's avatar. + Image *CommentAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Comment creator's Profile page. + Url string `json:"url,omitempty"` +} + +type CommentAuthorImage struct { + // Url: The comment creator's avatar URL. + Url string `json:"url,omitempty"` +} + +type CommentBlog struct { + // Id: The identifier of the blog containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The identified of the parent of this comment. + Id string `json:"id,omitempty"` +} + +type CommentPost struct { + // Id: The identifier of the post containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentList struct { + // Items: The List of Comments for a Post. + Items []*Comment `json:"items,omitempty"` + + // Kind: The kind of this entry. Always blogger#commentList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: Pagination token to fetch the previous page, if one + // exists. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type Page struct { + // Author: The author of this Page. + Author *PageAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Page. + Blog *PageBlog `json:"blog,omitempty"` + + // Content: The body content of this Page, in HTML. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#page + Kind string `json:"kind,omitempty"` + + // Published: RFC 3339 date-time when this Page was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the page for admin resources (either LIVE or + // DRAFT). + Status string `json:"status,omitempty"` + + // Title: The title of this entity. This is the name displayed in the + // Admin user interface. + Title string `json:"title,omitempty"` + + // Updated: RFC 3339 date-time when this Page was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL that this Page is displayed at. + Url string `json:"url,omitempty"` +} + +type PageAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Page creator. + Id string `json:"id,omitempty"` + + // Image: The page author's avatar. + Image *PageAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Page creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PageAuthorImage struct { + // Url: The page author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PageBlog struct { + // Id: The identifier of the blog containing this page. + Id string `json:"id,omitempty"` +} + +type PageList struct { + // Items: The list of Pages for a Blog. + Items []*Page `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#pageList + Kind string `json:"kind,omitempty"` +} + +type Pageviews struct { + // BlogId: Blog Id + BlogId int64 `json:"blogId,omitempty,string"` + + // Counts: The container of posts in this blog. + Counts []*PageviewsCounts `json:"counts,omitempty"` + + // Kind: The kind of this entry. Always blogger#page_views + Kind string `json:"kind,omitempty"` +} + +type PageviewsCounts struct { + // Count: Count of page views for the given time range + Count int64 `json:"count,omitempty,string"` + + // TimeRange: Time range the given count applies to + TimeRange string `json:"timeRange,omitempty"` +} + +type Post struct { + // Author: The author of this Post. + Author *PostAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Post. + Blog *PostBlog `json:"blog,omitempty"` + + // Content: The content of the Post. May contain HTML markup. + Content string `json:"content,omitempty"` + + // CustomMetaData: The JSON meta-data for the Post. + CustomMetaData string `json:"customMetaData,omitempty"` + + // Id: The identifier of this Post. + Id string `json:"id,omitempty"` + + // Images: Display image for the Post. + Images []*PostImages `json:"images,omitempty"` + + // Kind: The kind of this entity. Always blogger#post + Kind string `json:"kind,omitempty"` + + // Labels: The list of labels this Post was tagged with. + Labels []string `json:"labels,omitempty"` + + // Location: The location for geotagged posts. + Location *PostLocation `json:"location,omitempty"` + + // Published: RFC 3339 date-time when this Post was published. + Published string `json:"published,omitempty"` + + // Replies: The container of comments on this Post. + Replies *PostReplies `json:"replies,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the post. Only set for admin-level requests + Status string `json:"status,omitempty"` + + // Title: The title of the Post. + Title string `json:"title,omitempty"` + + // TitleLink: The title link URL, similar to atom's related link. + TitleLink string `json:"titleLink,omitempty"` + + // Updated: RFC 3339 date-time when this Post was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this Post is displayed. + Url string `json:"url,omitempty"` +} + +type PostAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Post creator. + Id string `json:"id,omitempty"` + + // Image: The Post author's avatar. + Image *PostAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Post creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PostAuthorImage struct { + // Url: The Post author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PostBlog struct { + // Id: The identifier of the Blog that contains this Post. + Id string `json:"id,omitempty"` +} + +type PostImages struct { + Url string `json:"url,omitempty"` +} + +type PostLocation struct { + // Lat: Location's latitude. + Lat float64 `json:"lat,omitempty"` + + // Lng: Location's longitude. + Lng float64 `json:"lng,omitempty"` + + // Name: Location name. + Name string `json:"name,omitempty"` + + // Span: Location's viewport span. Can be used when rendering a map + // preview. + Span string `json:"span,omitempty"` +} + +type PostReplies struct { + // Items: The List of Comments for this Post. + Items []*Comment `json:"items,omitempty"` + + // SelfLink: The URL of the comments on this post. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of comments on this post. + TotalItems int64 `json:"totalItems,omitempty,string"` +} + +type PostList struct { + // Items: The list of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type PostPerUserInfo struct { + // BlogId: ID of the Blog that the post resource belongs to. + BlogId string `json:"blogId,omitempty"` + + // HasEditAccess: True if the user has Author level access to the post. + HasEditAccess bool `json:"hasEditAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#postPerUserInfo + Kind string `json:"kind,omitempty"` + + // PostId: ID of the Post resource. + PostId string `json:"postId,omitempty"` + + // UserId: ID of the User. + UserId string `json:"userId,omitempty"` +} + +type PostUserInfo struct { + // Kind: The kind of this entity. Always blogger#postUserInfo + Kind string `json:"kind,omitempty"` + + // Post: The Post resource. + Post *Post `json:"post,omitempty"` + + // Post_user_info: Information about a User for the Post. + Post_user_info *PostPerUserInfo `json:"post_user_info,omitempty"` +} + +type PostUserInfosList struct { + // Items: The list of Posts with User information for the post, for this + // Blog. + Items []*PostUserInfo `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type User struct { + // About: Profile summary information. + About string `json:"about,omitempty"` + + // Blogs: The container of blogs for this user. + Blogs *UserBlogs `json:"blogs,omitempty"` + + // Created: The timestamp of when this profile was created, in seconds + // since epoch. + Created string `json:"created,omitempty"` + + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier for this User. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#user + Kind string `json:"kind,omitempty"` + + // Locale: This user's locale + Locale *UserLocale `json:"locale,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Url: The user's profile page. + Url string `json:"url,omitempty"` +} + +type UserBlogs struct { + // SelfLink: The URL of the Blogs for this user. + SelfLink string `json:"selfLink,omitempty"` +} + +type UserLocale struct { + // Country: The user's country setting. + Country string `json:"country,omitempty"` + + // Language: The user's language setting. + Language string `json:"language,omitempty"` + + // Variant: The user's language variant setting. + Variant string `json:"variant,omitempty"` +} + +// method id "blogger.blogUserInfos.get": + +type BlogUserInfosGetCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog and user info pair by blogId and userId. +func (r *BlogUserInfosService) Get(userId string, blogId string) *BlogUserInfosGetCall { + c := &BlogUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogUserInfosGetCall) MaxPosts(maxPosts int64) *BlogUserInfosGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +func (c *BlogUserInfosGetCall) Do() (*BlogUserInfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogUserInfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog and user info pair by blogId and userId.", + // "httpMethod": "GET", + // "id": "blogger.blogUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}", + // "response": { + // "$ref": "BlogUserInfo" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.get": + +type BlogsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog by id. +func (r *BlogsService) Get(blogId string) *BlogsGetCall { + c := &BlogsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogsGetCall) MaxPosts(maxPosts int64) *BlogsGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the blogs. Note that some fields require elevated access. +func (c *BlogsGetCall) View(view string) *BlogsGetCall { + c.opt_["view"] = view + return c +} + +func (c *BlogsGetCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog by id.", + // "httpMethod": "GET", + // "id": "blogger.blogs.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "view": { + // "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.getByUrl": + +type BlogsGetByUrlCall struct { + s *Service + url string + opt_ map[string]interface{} +} + +// GetByUrl: Retrieve a Blog by URL. +func (r *BlogsService) GetByUrl(url string) *BlogsGetByUrlCall { + c := &BlogsGetByUrlCall{s: r.s, opt_: make(map[string]interface{})} + c.url = url + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the blogs. Note that some fields require elevated access. +func (c *BlogsGetByUrlCall) View(view string) *BlogsGetByUrlCall { + c.opt_["view"] = view + return c +} + +func (c *BlogsGetByUrlCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("url", fmt.Sprintf("%v", c.url)) + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/byurl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Blog by URL.", + // "httpMethod": "GET", + // "id": "blogger.blogs.getByUrl", + // "parameterOrder": [ + // "url" + // ], + // "parameters": { + // "url": { + // "description": "The URL of the blog to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/byurl", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.listByUser": + +type BlogsListByUserCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// ListByUser: Retrieves a list of blogs, possibly filtered. +func (r *BlogsService) ListByUser(userId string) *BlogsListByUserCall { + c := &BlogsListByUserCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// FetchUserInfo sets the optional parameter "fetchUserInfo": Whether +// the response is a list of blogs with per-user information instead of +// just blogs. +func (c *BlogsListByUserCall) FetchUserInfo(fetchUserInfo bool) *BlogsListByUserCall { + c.opt_["fetchUserInfo"] = fetchUserInfo + return c +} + +// Role sets the optional parameter "role": User access types for blogs +// to include in the results, e.g. AUTHOR will return blogs where the +// user has author level access. If no roles are specified, defaults to +// ADMIN and AUTHOR roles. +func (c *BlogsListByUserCall) Role(role string) *BlogsListByUserCall { + c.opt_["role"] = role + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the blogs. Note that some fields require elevated access. +func (c *BlogsListByUserCall) View(view string) *BlogsListByUserCall { + c.opt_["view"] = view + return c +} + +func (c *BlogsListByUserCall) Do() (*BlogList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchUserInfo"]; ok { + params.Set("fetchUserInfo", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["role"]; ok { + params.Set("role", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of blogs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.blogs.listByUser", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "fetchUserInfo": { + // "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + // "location": "query", + // "type": "boolean" + // }, + // "role": { + // "description": "User access types for blogs to include in the results, e.g. AUTHOR will return blogs where the user has author level access. If no roles are specified, defaults to ADMIN and AUTHOR roles.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin role - User has Admin level access.", + // "Author role - User has Author level access.", + // "Reader role - User has Reader level access." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the blogs. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs", + // "response": { + // "$ref": "BlogList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.approve": + +type CommentsApproveCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Approve: Marks a comment as not spam. +func (r *CommentsService) Approve(blogId string, postId string, commentId string) *CommentsApproveCall { + c := &CommentsApproveCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsApproveCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as not spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.approve", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as not spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.delete": + +type CommentsDeleteCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Delete: Delete a comment by id. +func (r *CommentsService) Delete(blogId string, postId string, commentId string) *CommentsDeleteCall { + c := &CommentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a comment by id.", + // "httpMethod": "DELETE", + // "id": "blogger.comments.delete", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.get": + +type CommentsGetCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Get: Gets one comment by id. +func (r *CommentsService) Get(blogId string, postId string, commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +// View sets the optional parameter "view": Access level for the +// requested comment (default: READER). Note that some comments will +// require elevated permissions, for example comments where the parent +// posts which is in a draft state, or comments that are pending +// moderation. +func (c *CommentsGetCall) View(view string) *CommentsGetCall { + c.opt_["view"] = view + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one comment by id.", + // "httpMethod": "GET", + // "id": "blogger.comments.get", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to containing the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level for the requested comment (default: READER). Note that some comments will require elevated permissions, for example comments where the parent posts which is in a draft state, or comments that are pending moderation.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.list": + +type CommentsListCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// List: Retrieves the comments for a post, possibly filtered. +func (r *CommentsService) List(blogId string, postId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) EndDate(endDate string) *CommentsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListCall) FetchBodies(fetchBodies bool) *CommentsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) StartDate(startDate string) *CommentsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Status sets the optional parameter "status": +func (c *CommentsListCall) Status(status string) *CommentsListCall { + c.opt_["status"] = status + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require elevated +// access. +func (c *CommentsListCall) View(view string) *CommentsListCall { + c.opt_["view"] = view + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a post, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.list", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "status": { + // "enum": [ + // "emptied", + // "live", + // "pending", + // "spam" + // ], + // "enumDescriptions": [ + // "Comments that have had their content removed", + // "Comments that are publicly visible", + // "Comments that are awaiting administrator approval", + // "Comments marked as spam by the administrator" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.listByBlog": + +type CommentsListByBlogCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// ListByBlog: Retrieves the comments for a blog, across all posts, +// possibly filtered. +func (r *CommentsService) ListByBlog(blogId string) *CommentsListByBlogCall { + c := &CommentsListByBlogCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) EndDate(endDate string) *CommentsListByBlogCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListByBlogCall) FetchBodies(fetchBodies bool) *CommentsListByBlogCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListByBlogCall) MaxResults(maxResults int64) *CommentsListByBlogCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListByBlogCall) PageToken(pageToken string) *CommentsListByBlogCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) StartDate(startDate string) *CommentsListByBlogCall { + c.opt_["startDate"] = startDate + return c +} + +func (c *CommentsListByBlogCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.listByBlog", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.markAsSpam": + +type CommentsMarkAsSpamCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// MarkAsSpam: Marks a comment as spam. +func (r *CommentsService) MarkAsSpam(blogId string, postId string, commentId string) *CommentsMarkAsSpamCall { + c := &CommentsMarkAsSpamCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsMarkAsSpamCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.markAsSpam", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.removeContent": + +type CommentsRemoveContentCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// RemoveContent: Removes the content of a comment. +func (r *CommentsService) RemoveContent(blogId string, postId string, commentId string) *CommentsRemoveContentCall { + c := &CommentsRemoveContentCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsRemoveContentCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes the content of a comment.", + // "httpMethod": "POST", + // "id": "blogger.comments.removeContent", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete content from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pageViews.get": + +type PageViewsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Retrieve pageview stats for a Blog. +func (r *PageViewsService) Get(blogId string) *PageViewsGetCall { + c := &PageViewsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// Range sets the optional parameter "range": +func (c *PageViewsGetCall) Range(range_ string) *PageViewsGetCall { + c.opt_["range"] = range_ + return c +} + +func (c *PageViewsGetCall) Do() (*Pageviews, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["range"]; ok { + params.Set("range", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pageviews") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Pageviews) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve pageview stats for a Blog.", + // "httpMethod": "GET", + // "id": "blogger.pageViews.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "range": { + // "enum": [ + // "30DAYS", + // "7DAYS", + // "all" + // ], + // "enumDescriptions": [ + // "Page view counts from the last thirty days.", + // "Page view counts from the last seven days.", + // "Total page view counts from all time." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pageviews", + // "response": { + // "$ref": "Pageviews" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.delete": + +type PagesDeleteCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Delete: Delete a page by id. +func (r *PagesService) Delete(blogId string, pageId string) *PagesDeleteCall { + c := &PagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +func (c *PagesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a page by id.", + // "httpMethod": "DELETE", + // "id": "blogger.pages.delete", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.get": + +type PagesGetCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Get: Gets one blog page by id. +func (r *PagesService) Get(blogId string, pageId string) *PagesGetCall { + c := &PagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +// View sets the optional parameter "view": +func (c *PagesGetCall) View(view string) *PagesGetCall { + c.opt_["view"] = view + return c +} + +func (c *PagesGetCall) Do() (*Page, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog page by id.", + // "httpMethod": "GET", + // "id": "blogger.pages.get", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog containing the page.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the page to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.insert": + +type PagesInsertCall struct { + s *Service + blogId string + page *Page + opt_ map[string]interface{} +} + +// Insert: Add a page. +func (r *PagesService) Insert(blogId string, page *Page) *PagesInsertCall { + c := &PagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.page = page + return c +} + +func (c *PagesInsertCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a page.", + // "httpMethod": "POST", + // "id": "blogger.pages.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the page to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.list": + +type PagesListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves the pages for a blog, optionally including non-LIVE +// statuses. +func (r *PagesService) List(blogId string) *PagesListCall { + c := &PagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether to +// retrieve the Page bodies. +func (c *PagesListCall) FetchBodies(fetchBodies bool) *PagesListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Status sets the optional parameter "status": +func (c *PagesListCall) Status(status string) *PagesListCall { + c.opt_["status"] = status + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require elevated +// access. +func (c *PagesListCall) View(view string) *PagesListCall { + c.opt_["view"] = view + return c +} + +func (c *PagesListCall) Do() (*PageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + // "httpMethod": "GET", + // "id": "blogger.pages.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch pages from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether to retrieve the Page bodies.", + // "location": "query", + // "type": "boolean" + // }, + // "status": { + // "enum": [ + // "draft", + // "live" + // ], + // "enumDescriptions": [ + // "Draft (unpublished) Pages", + // "Pages that are publicly visible" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "response": { + // "$ref": "PageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.patch": + +type PagesPatchCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Patch: Update a page. This method supports patch semantics. +func (r *PagesService) Patch(blogId string, pageId string, page *Page) *PagesPatchCall { + c := &PagesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesPatchCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.pages.patch", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.update": + +type PagesUpdateCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Update: Update a page. +func (r *PagesService) Update(blogId string, pageId string, page *Page) *PagesUpdateCall { + c := &PagesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesUpdateCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page.", + // "httpMethod": "PUT", + // "id": "blogger.pages.update", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.postUserInfos.get": + +type PostUserInfosGetCall struct { + s *Service + userId string + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Gets one post and user info pair, by post id and user id. The +// post user info contains per-user information about the post, such as +// access rights, specific to the user. +func (r *PostUserInfosService) Get(userId string, blogId string, postId string) *PostUserInfosGetCall { + c := &PostUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + c.postId = postId + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostUserInfosGetCall) MaxComments(maxComments int64) *PostUserInfosGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +func (c *PostUserInfosGetCall) Do() (*PostUserInfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one post and user info pair, by post id and user id. The post user info contains per-user information about the post, such as access rights, specific to the user.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "PostUserInfo" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.postUserInfos.list": + +type PostUserInfosListCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of post and post user info pairs, possibly +// filtered. The post user info contains per-user information about the +// post, such as access rights, specific to the user. +func (r *PostUserInfosService) List(userId string, blogId string) *PostUserInfosListCall { + c := &PostUserInfosListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) EndDate(endDate string) *PostUserInfosListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included. Default is false. +func (c *PostUserInfosListCall) FetchBodies(fetchBodies bool) *PostUserInfosListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostUserInfosListCall) Labels(labels string) *PostUserInfosListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostUserInfosListCall) MaxResults(maxResults int64) *PostUserInfosListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort order applied to +// search results. Default is published. +func (c *PostUserInfosListCall) OrderBy(orderBy string) *PostUserInfosListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostUserInfosListCall) PageToken(pageToken string) *PostUserInfosListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) StartDate(startDate string) *PostUserInfosListCall { + c.opt_["startDate"] = startDate + return c +} + +// Status sets the optional parameter "status": +func (c *PostUserInfosListCall) Status(status string) *PostUserInfosListCall { + c.opt_["status"] = status + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require elevated +// access. +func (c *PostUserInfosListCall) View(view string) *PostUserInfosListCall { + c.opt_["view"] = view + return c +} + +func (c *PostUserInfosListCall) Do() (*PostUserInfosList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfosList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of post and post user info pairs, possibly filtered. The post user info contains per-user information about the post, such as access rights, specific to the user.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.list", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "default": "false", + // "description": "Whether the body content of posts is included. Default is false.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort order applied to search results. Default is published.", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "status": { + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft posts", + // "Published posts", + // "Posts that are scheduled to publish in future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts", + // "response": { + // "$ref": "PostUserInfosList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.delete": + +type PostsDeleteCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Delete: Delete a post by id. +func (r *PostsService) Delete(blogId string, postId string) *PostsDeleteCall { + c := &PostsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a post by id.", + // "httpMethod": "DELETE", + // "id": "blogger.posts.delete", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.get": + +type PostsGetCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Get a post by id. +func (r *PostsService) Get(blogId string, postId string) *PostsGetCall { + c := &PostsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// FetchBody sets the optional parameter "fetchBody": Whether the body +// content of the post is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsGetCall) FetchBody(fetchBody bool) *PostsGetCall { + c.opt_["fetchBody"] = fetchBody + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included (default: false). +func (c *PostsGetCall) FetchImages(fetchImages bool) *PostsGetCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetCall) MaxComments(maxComments int64) *PostsGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require elevated +// access. +func (c *PostsGetCall) View(view string) *PostsGetCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBody"]; ok { + params.Set("fetchBody", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a post by id.", + // "httpMethod": "GET", + // "id": "blogger.posts.get", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBody": { + // "default": "true", + // "description": "Whether the body content of the post is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.getByPath": + +type PostsGetByPathCall struct { + s *Service + blogId string + path string + opt_ map[string]interface{} +} + +// GetByPath: Retrieve a Post by Path. +func (r *PostsService) GetByPath(blogId string, path string) *PostsGetByPathCall { + c := &PostsGetByPathCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.path = path + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetByPathCall) MaxComments(maxComments int64) *PostsGetByPathCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require elevated +// access. +func (c *PostsGetByPathCall) View(view string) *PostsGetByPathCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetByPathCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("path", fmt.Sprintf("%v", c.path)) + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/bypath") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Post by Path.", + // "httpMethod": "GET", + // "id": "blogger.posts.getByPath", + // "parameterOrder": [ + // "blogId", + // "path" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "path": { + // "description": "Path of the Post to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require elevated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/bypath", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.insert": + +type PostsInsertCall struct { + s *Service + blogId string + post *Post + opt_ map[string]interface{} +} + +// Insert: Add a post. +func (r *PostsService) Insert(blogId string, post *Post) *PostsInsertCall { + c := &PostsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.post = post + return c +} + +// FetchBody sets the optional parameter "fetchBody": Whether the body +// content of the post is included with the result (default: true). +func (c *PostsInsertCall) FetchBody(fetchBody bool) *PostsInsertCall { + c.opt_["fetchBody"] = fetchBody + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included in the returned result +// (default: false). +func (c *PostsInsertCall) FetchImages(fetchImages bool) *PostsInsertCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// IsDraft sets the optional parameter "isDraft": Whether to create the +// post as a draft (default: false). +func (c *PostsInsertCall) IsDraft(isDraft bool) *PostsInsertCall { + c.opt_["isDraft"] = isDraft + return c +} + +func (c *PostsInsertCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBody"]; ok { + params.Set("fetchBody", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["isDraft"]; ok { + params.Set("isDraft", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a post.", + // "httpMethod": "POST", + // "id": "blogger.posts.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the post to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBody": { + // "default": "true", + // "description": "Whether the body content of the post is included with the result (default: true).", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "isDraft": { + // "description": "Whether to create the post as a draft (default: false).", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.list": + +type PostsListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of posts, possibly filtered. +func (r *PostsService) List(blogId string) *PostsListCall { + c := &PostsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) EndDate(endDate string) *PostsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsListCall) FetchBodies(fetchBodies bool) *PostsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included. +func (c *PostsListCall) FetchImages(fetchImages bool) *PostsListCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostsListCall) Labels(labels string) *PostsListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostsListCall) MaxResults(maxResults int64) *PostsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsListCall) OrderBy(orderBy string) *PostsListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostsListCall) PageToken(pageToken string) *PostsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) StartDate(startDate string) *PostsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Status sets the optional parameter "status": Statuses to include in +// the results. +func (c *PostsListCall) Status(status string) *PostsListCall { + c.opt_["status"] = status + return c +} + +// View sets the optional parameter "view": Access level with which to +// view the returned result. Note that some fields require escalated +// access. +func (c *PostsListCall) View(view string) *PostsListCall { + c.opt_["view"] = view + return c +} + +func (c *PostsListCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.posts.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "status": { + // "description": "Statuses to include in the results.", + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft (non-published) posts.", + // "Published posts", + // "Posts that are scheduled to publish in the future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "description": "Access level with which to view the returned result. Note that some fields require escalated access.", + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.patch": + +type PostsPatchCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Patch: Update a post. This method supports patch semantics. +func (r *PostsService) Patch(blogId string, postId string, post *Post) *PostsPatchCall { + c := &PostsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +// FetchBody sets the optional parameter "fetchBody": Whether the body +// content of the post is included with the result (default: true). +func (c *PostsPatchCall) FetchBody(fetchBody bool) *PostsPatchCall { + c.opt_["fetchBody"] = fetchBody + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included in the returned result +// (default: false). +func (c *PostsPatchCall) FetchImages(fetchImages bool) *PostsPatchCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to retrieve with the returned post. +func (c *PostsPatchCall) MaxComments(maxComments int64) *PostsPatchCall { + c.opt_["maxComments"] = maxComments + return c +} + +// Publish sets the optional parameter "publish": Whether a publish +// action should be performed when the post is updated (default: false). +func (c *PostsPatchCall) Publish(publish bool) *PostsPatchCall { + c.opt_["publish"] = publish + return c +} + +// Revert sets the optional parameter "revert": Whether a revert action +// should be performed when the post is updated (default: false). +func (c *PostsPatchCall) Revert(revert bool) *PostsPatchCall { + c.opt_["revert"] = revert + return c +} + +func (c *PostsPatchCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBody"]; ok { + params.Set("fetchBody", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["publish"]; ok { + params.Set("publish", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["revert"]; ok { + params.Set("revert", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.posts.patch", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBody": { + // "default": "true", + // "description": "Whether the body content of the post is included with the result (default: true).", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "maxComments": { + // "description": "Maximum number of comments to retrieve with the returned post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "publish": { + // "description": "Whether a publish action should be performed when the post is updated (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "revert": { + // "description": "Whether a revert action should be performed when the post is updated (default: false).", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.publish": + +type PostsPublishCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Publish: Publish a draft post. +func (r *PostsService) Publish(blogId string, postId string) *PostsPublishCall { + c := &PostsPublishCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// PublishDate sets the optional parameter "publishDate": The date and +// time to schedule the publishing of the Blog. +func (c *PostsPublishCall) PublishDate(publishDate string) *PostsPublishCall { + c.opt_["publishDate"] = publishDate + return c +} + +func (c *PostsPublishCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["publishDate"]; ok { + params.Set("publishDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/publish") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Publish a draft post.", + // "httpMethod": "POST", + // "id": "blogger.posts.publish", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "publishDate": { + // "description": "The date and time to schedule the publishing of the Blog.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/publish", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.revert": + +type PostsRevertCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Revert: Revert a published or scheduled post to draft state. +func (r *PostsService) Revert(blogId string, postId string) *PostsRevertCall { + c := &PostsRevertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsRevertCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/revert") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Revert a published or scheduled post to draft state.", + // "httpMethod": "POST", + // "id": "blogger.posts.revert", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/revert", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.search": + +type PostsSearchCall struct { + s *Service + blogId string + q string + opt_ map[string]interface{} +} + +// Search: Search for a post. +func (r *PostsService) Search(blogId string, q string) *PostsSearchCall { + c := &PostsSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.q = q + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsSearchCall) FetchBodies(fetchBodies bool) *PostsSearchCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsSearchCall) OrderBy(orderBy string) *PostsSearchCall { + c.opt_["orderBy"] = orderBy + return c +} + +func (c *PostsSearchCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("q", fmt.Sprintf("%v", c.q)) + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Search for a post.", + // "httpMethod": "GET", + // "id": "blogger.posts.search", + // "parameterOrder": [ + // "blogId", + // "q" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query terms to search this blog for matching posts.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/search", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.update": + +type PostsUpdateCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Update: Update a post. +func (r *PostsService) Update(blogId string, postId string, post *Post) *PostsUpdateCall { + c := &PostsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +// FetchBody sets the optional parameter "fetchBody": Whether the body +// content of the post is included with the result (default: true). +func (c *PostsUpdateCall) FetchBody(fetchBody bool) *PostsUpdateCall { + c.opt_["fetchBody"] = fetchBody + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included in the returned result +// (default: false). +func (c *PostsUpdateCall) FetchImages(fetchImages bool) *PostsUpdateCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to retrieve with the returned post. +func (c *PostsUpdateCall) MaxComments(maxComments int64) *PostsUpdateCall { + c.opt_["maxComments"] = maxComments + return c +} + +// Publish sets the optional parameter "publish": Whether a publish +// action should be performed when the post is updated (default: false). +func (c *PostsUpdateCall) Publish(publish bool) *PostsUpdateCall { + c.opt_["publish"] = publish + return c +} + +// Revert sets the optional parameter "revert": Whether a revert action +// should be performed when the post is updated (default: false). +func (c *PostsUpdateCall) Revert(revert bool) *PostsUpdateCall { + c.opt_["revert"] = revert + return c +} + +func (c *PostsUpdateCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBody"]; ok { + params.Set("fetchBody", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["publish"]; ok { + params.Set("publish", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["revert"]; ok { + params.Set("revert", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post.", + // "httpMethod": "PUT", + // "id": "blogger.posts.update", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBody": { + // "default": "true", + // "description": "Whether the body content of the post is included with the result (default: true).", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included in the returned result (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "maxComments": { + // "description": "Maximum number of comments to retrieve with the returned post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "publish": { + // "description": "Whether a publish action should be performed when the post is updated (default: false).", + // "location": "query", + // "type": "boolean" + // }, + // "revert": { + // "description": "Whether a revert action should be performed when the post is updated (default: false).", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.users.get": + +type UsersGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Gets one user by id. +func (r *UsersService) Get(userId string) *UsersGetCall { + c := &UsersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *UsersGetCall) Do() (*User, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user by id.", + // "httpMethod": "GET", + // "id": "blogger.users.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}", + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-api.json b/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-api.json new file mode 100644 index 0000000000000..97285d4bbc274 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-api.json @@ -0,0 +1,3623 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/XBSlG6TmG-jHEwOVRN7HZMHldrk\"", + "discoveryVersion": "v1", + "id": "books:v1", + "name": "books", + "version": "v1", + "title": "Books API", + "description": "Lets you search for books and manage your Google Books library.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/ebooks-16.png", + "x32": "http://www.google.com/images/icons/product/ebooks-32.png" + }, + "documentationLink": "https://developers.google.com/books/docs/v1/getting_started", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/books/v1/", + "basePath": "/books/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "books/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/books": { + "description": "Manage your books" + } + } + } + }, + "schemas": { + "Annotation": { + "id": "Annotation", + "type": "object", + "properties": { + "afterSelectedText": { + "type": "string", + "description": "Anchor text after excerpt. For requests, if the user bookmarked a screen that has no flowing text on it, then this field should be empty." + }, + "beforeSelectedText": { + "type": "string", + "description": "Anchor text before excerpt. For requests, if the user bookmarked a screen that has no flowing text on it, then this field should be empty." + }, + "clientVersionRanges": { + "type": "object", + "description": "Selection ranges sent from the client.", + "properties": { + "cfiRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in CFI format for this annotation sent by client." + }, + "contentVersion": { + "type": "string", + "description": "Content version the client sent in." + }, + "gbImageRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB image format for this annotation sent by client." + }, + "gbTextRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB text format for this annotation sent by client." + }, + "imageCfiRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in image CFI format for this annotation sent by client." + } + } + }, + "created": { + "type": "string", + "description": "Timestamp for the created time of this annotation.", + "format": "date-time" + }, + "currentVersionRanges": { + "type": "object", + "description": "Selection ranges for the most recent content version.", + "properties": { + "cfiRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in CFI format for this annotation for version above." + }, + "contentVersion": { + "type": "string", + "description": "Content version applicable to ranges below." + }, + "gbImageRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB image format for this annotation for version above." + }, + "gbTextRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB text format for this annotation for version above." + }, + "imageCfiRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in image CFI format for this annotation for version above." + } + } + }, + "data": { + "type": "string", + "description": "User-created data for this annotation." + }, + "deleted": { + "type": "boolean", + "description": "Indicates that this annotation is deleted." + }, + "highlightStyle": { + "type": "string", + "description": "The highlight style for this annotation." + }, + "id": { + "type": "string", + "description": "Id of this annotation, in the form of a GUID." + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#annotation" + }, + "layerId": { + "type": "string", + "description": "The layer this annotation is for." + }, + "layerSummary": { + "type": "object", + "properties": { + "allowedCharacterCount": { + "type": "integer", + "description": "Maximum allowed characters on this layer, especially for the \"copy\" layer.", + "format": "int32" + }, + "limitType": { + "type": "string", + "description": "Type of limitation on this layer. \"limited\" or \"unlimited\" for the \"copy\" layer." + }, + "remainingCharacterCount": { + "type": "integer", + "description": "Remaining allowed characters on this layer, especially for the \"copy\" layer.", + "format": "int32" + } + } + }, + "pageIds": { + "type": "array", + "description": "Pages that this annotation spans.", + "items": { + "type": "string" + } + }, + "selectedText": { + "type": "string", + "description": "Excerpt from the volume." + }, + "selfLink": { + "type": "string", + "description": "URL to this resource." + }, + "updated": { + "type": "string", + "description": "Timestamp for the last time this annotation was modified.", + "format": "date-time" + }, + "volumeId": { + "type": "string", + "description": "The volume that this annotation belongs to." + } + } + }, + "Annotationdata": { + "id": "Annotationdata", + "type": "object", + "properties": { + "annotationType": { + "type": "string", + "description": "The type of annotation this data is for." + }, + "data": { + "type": "any" + }, + "encoded_data": { + "type": "string", + "description": "Base64 encoded data for this annotation data.", + "format": "byte" + }, + "id": { + "type": "string", + "description": "Unique id for this annotation data." + }, + "kind": { + "type": "string", + "description": "Resource Type", + "default": "books#annotationdata" + }, + "layerId": { + "type": "string", + "description": "The Layer id for this data. *" + }, + "selfLink": { + "type": "string", + "description": "URL for this resource. *" + }, + "updated": { + "type": "string", + "description": "Timestamp for the last time this data was updated. (RFC 3339 UTC date-time format).", + "format": "date-time" + }, + "volumeId": { + "type": "string", + "description": "The volume id for this data. *" + } + } + }, + "Annotations": { + "id": "Annotations", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of annotations.", + "items": { + "$ref": "Annotation" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#annotations" + }, + "nextPageToken": { + "type": "string", + "description": "Token to pass in for pagination for the next page. This will not be present if this request does not have more results." + }, + "totalItems": { + "type": "integer", + "description": "Total number of annotations found. This may be greater than the number of notes returned in this response if results have been paginated.", + "format": "int32" + } + } + }, + "AnnotationsSummary": { + "id": "AnnotationsSummary", + "type": "object", + "properties": { + "kind": { + "type": "string", + "default": "books#annotationsSummary" + }, + "layers": { + "type": "array", + "items": { + "type": "object", + "properties": { + "allowedCharacterCount": { + "type": "integer", + "format": "int32" + }, + "layerId": { + "type": "string" + }, + "limitType": { + "type": "string" + }, + "remainingCharacterCount": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time" + } + } + } + } + } + }, + "Annotationsdata": { + "id": "Annotationsdata", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of Annotation Data.", + "items": { + "$ref": "Annotationdata" + } + }, + "kind": { + "type": "string", + "description": "Resource type", + "default": "books#annotationsdata" + }, + "nextPageToken": { + "type": "string", + "description": "Token to pass in for pagination for the next page. This will not be present if this request does not have more results." + }, + "totalItems": { + "type": "integer", + "description": "The total number of volume annotations found.", + "format": "int32" + } + } + }, + "BooksAnnotationsRange": { + "id": "BooksAnnotationsRange", + "type": "object", + "properties": { + "endOffset": { + "type": "string", + "description": "The offset from the ending position." + }, + "endPosition": { + "type": "string", + "description": "The ending position for the range." + }, + "startOffset": { + "type": "string", + "description": "The offset from the starting position." + }, + "startPosition": { + "type": "string", + "description": "The starting position for the range." + } + } + }, + "BooksCloudloadingResource": { + "id": "BooksCloudloadingResource", + "type": "object", + "properties": { + "author": { + "type": "string" + }, + "processingState": { + "type": "string" + }, + "title": { + "type": "string" + }, + "volumeId": { + "type": "string" + } + } + }, + "BooksVolumesRecommendedRateResponse": { + "id": "BooksVolumesRecommendedRateResponse", + "type": "object", + "properties": { + "consistency_token": { + "type": "string" + } + } + }, + "Bookshelf": { + "id": "Bookshelf", + "type": "object", + "properties": { + "access": { + "type": "string", + "description": "Whether this bookshelf is PUBLIC or PRIVATE." + }, + "created": { + "type": "string", + "description": "Created time for this bookshelf (formatted UTC timestamp with millisecond resolution).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "Description of this bookshelf." + }, + "id": { + "type": "integer", + "description": "Id of this bookshelf, only unique by user.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Resource type for bookshelf metadata.", + "default": "books#bookshelf" + }, + "selfLink": { + "type": "string", + "description": "URL to this resource." + }, + "title": { + "type": "string", + "description": "Title of this bookshelf." + }, + "updated": { + "type": "string", + "description": "Last modified time of this bookshelf (formatted UTC timestamp with millisecond resolution).", + "format": "date-time" + }, + "volumeCount": { + "type": "integer", + "description": "Number of volumes in this bookshelf.", + "format": "int32" + }, + "volumesLastUpdated": { + "type": "string", + "description": "Last time a volume was added or removed from this bookshelf (formatted UTC timestamp with millisecond resolution).", + "format": "date-time" + } + } + }, + "Bookshelves": { + "id": "Bookshelves", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of bookshelves.", + "items": { + "$ref": "Bookshelf" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#bookshelves" + } + } + }, + "ConcurrentAccessRestriction": { + "id": "ConcurrentAccessRestriction", + "type": "object", + "properties": { + "deviceAllowed": { + "type": "boolean", + "description": "Whether access is granted for this (user, device, volume)." + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#concurrentAccessRestriction" + }, + "maxConcurrentDevices": { + "type": "integer", + "description": "The maximum number of concurrent access licenses for this volume.", + "format": "int32" + }, + "message": { + "type": "string", + "description": "Error/warning message." + }, + "nonce": { + "type": "string", + "description": "Client nonce for verification. Download access and client-validation only." + }, + "reasonCode": { + "type": "string", + "description": "Error/warning reason code." + }, + "restricted": { + "type": "boolean", + "description": "Whether this volume has any concurrent access restrictions." + }, + "signature": { + "type": "string", + "description": "Response signature." + }, + "source": { + "type": "string", + "description": "Client app identifier for verification. Download access and client-validation only." + }, + "timeWindowSeconds": { + "type": "integer", + "description": "Time in seconds for license auto-expiration.", + "format": "int32" + }, + "volumeId": { + "type": "string", + "description": "Identifies the volume for which this entry applies." + } + } + }, + "Dictlayerdata": { + "id": "Dictlayerdata", + "type": "object", + "properties": { + "common": { + "type": "object", + "properties": { + "title": { + "type": "string", + "description": "The display title and localized canonical name to use when searching for this entity on Google search." + } + } + }, + "dict": { + "type": "object", + "properties": { + "source": { + "type": "object", + "description": "The source, url and attribution for this dictionary data.", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "words": { + "type": "array", + "items": { + "type": "object", + "properties": { + "derivatives": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "text": { + "type": "string" + } + } + } + }, + "examples": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "text": { + "type": "string" + } + } + } + }, + "senses": { + "type": "array", + "items": { + "type": "object", + "properties": { + "conjugations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "definitions": { + "type": "array", + "items": { + "type": "object", + "properties": { + "definition": { + "type": "string" + }, + "examples": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "text": { + "type": "string" + } + } + } + } + } + } + }, + "partOfSpeech": { + "type": "string" + }, + "pronunciation": { + "type": "string" + }, + "pronunciationUrl": { + "type": "string" + }, + "source": { + "type": "object", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "syllabification": { + "type": "string" + }, + "synonyms": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": { + "type": "object", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + }, + "text": { + "type": "string" + } + } + } + } + } + } + }, + "source": { + "type": "object", + "description": "The words with different meanings but not related words, e.g. \"go\" (game) and \"go\" (verb).", + "properties": { + "attribution": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + } + } + } + } + }, + "kind": { + "type": "string", + "default": "books#dictlayerdata" + } + } + }, + "DownloadAccessRestriction": { + "id": "DownloadAccessRestriction", + "type": "object", + "properties": { + "deviceAllowed": { + "type": "boolean", + "description": "If restricted, whether access is granted for this (user, device, volume)." + }, + "downloadsAcquired": { + "type": "integer", + "description": "If restricted, the number of content download licenses already acquired (including the requesting client, if licensed).", + "format": "int32" + }, + "justAcquired": { + "type": "boolean", + "description": "If deviceAllowed, whether access was just acquired with this request." + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#downloadAccessRestriction" + }, + "maxDownloadDevices": { + "type": "integer", + "description": "If restricted, the maximum number of content download licenses for this volume.", + "format": "int32" + }, + "message": { + "type": "string", + "description": "Error/warning message." + }, + "nonce": { + "type": "string", + "description": "Client nonce for verification. Download access and client-validation only." + }, + "reasonCode": { + "type": "string", + "description": "Error/warning reason code. Additional codes may be added in the future. 0 OK 100 ACCESS_DENIED_PUBLISHER_LIMIT 101 ACCESS_DENIED_LIMIT 200 WARNING_USED_LAST_ACCESS" + }, + "restricted": { + "type": "boolean", + "description": "Whether this volume has any download access restrictions." + }, + "signature": { + "type": "string", + "description": "Response signature." + }, + "source": { + "type": "string", + "description": "Client app identifier for verification. Download access and client-validation only." + }, + "volumeId": { + "type": "string", + "description": "Identifies the volume for which this entry applies." + } + } + }, + "DownloadAccesses": { + "id": "DownloadAccesses", + "type": "object", + "properties": { + "downloadAccessList": { + "type": "array", + "description": "A list of download access responses.", + "items": { + "$ref": "DownloadAccessRestriction" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#downloadAccesses" + } + } + }, + "Geolayerdata": { + "id": "Geolayerdata", + "type": "object", + "properties": { + "common": { + "type": "object", + "properties": { + "lang": { + "type": "string", + "description": "The language of the information url and description." + }, + "previewImageUrl": { + "type": "string", + "description": "The URL for the preview image information." + }, + "snippet": { + "type": "string", + "description": "The description for this location." + }, + "snippetUrl": { + "type": "string", + "description": "The URL for information for this location. Ex: wikipedia link." + }, + "title": { + "type": "string", + "description": "The display title and localized canonical name to use when searching for this entity on Google search." + } + } + }, + "geo": { + "type": "object", + "properties": { + "boundary": { + "type": "array", + "description": "The boundary of the location as a set of loops containing pairs of latitude, longitude coordinates.", + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "latitude": { + "type": "integer", + "format": "uint32" + }, + "longitude": { + "type": "integer", + "format": "uint32" + } + } + } + } + }, + "cachePolicy": { + "type": "string", + "description": "The cache policy active for this data. EX: UNRESTRICTED, RESTRICTED, NEVER" + }, + "countryCode": { + "type": "string", + "description": "The country code of the location." + }, + "latitude": { + "type": "number", + "description": "The latitude of the location.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude of the location.", + "format": "double" + }, + "mapType": { + "type": "string", + "description": "The type of map that should be used for this location. EX: HYBRID, ROADMAP, SATELLITE, TERRAIN" + }, + "viewport": { + "type": "object", + "description": "The viewport for showing this location. This is a latitude, longitude rectangle.", + "properties": { + "hi": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + } + } + }, + "lo": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "longitude": { + "type": "number", + "format": "double" + } + } + } + } + }, + "zoom": { + "type": "integer", + "description": "The Zoom level to use for the map. Zoom levels between 0 (the lowest zoom level, in which the entire world can be seen on one map) to 21+ (down to individual buildings). See: https://developers.google.com/maps/documentation/staticmaps/#Zoomlevels", + "format": "int32" + } + } + }, + "kind": { + "type": "string", + "default": "books#geolayerdata" + } + } + }, + "Layersummaries": { + "id": "Layersummaries", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of layer summary items.", + "items": { + "$ref": "Layersummary" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#layersummaries" + }, + "totalItems": { + "type": "integer", + "description": "The total number of layer summaries found.", + "format": "int32" + } + } + }, + "Layersummary": { + "id": "Layersummary", + "type": "object", + "properties": { + "annotationCount": { + "type": "integer", + "description": "The number of annotations for this layer.", + "format": "int32" + }, + "annotationTypes": { + "type": "array", + "description": "The list of annotation types contained for this layer.", + "items": { + "type": "string" + } + }, + "annotationsDataLink": { + "type": "string", + "description": "Link to get data for this annotation." + }, + "annotationsLink": { + "type": "string", + "description": "The link to get the annotations for this layer." + }, + "contentVersion": { + "type": "string", + "description": "The content version this resource is for." + }, + "dataCount": { + "type": "integer", + "description": "The number of data items for this layer.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique id of this layer summary." + }, + "kind": { + "type": "string", + "description": "Resource Type", + "default": "books#layersummary" + }, + "layerId": { + "type": "string", + "description": "The layer id for this summary." + }, + "selfLink": { + "type": "string", + "description": "URL to this resource." + }, + "updated": { + "type": "string", + "description": "Timestamp for the last time an item in this layer was updated. (RFC 3339 UTC date-time format).", + "format": "date-time" + }, + "volumeAnnotationsVersion": { + "type": "string", + "description": "The current version of this layer's volume annotations. Note that this version applies only to the data in the books.layers.volumeAnnotations.* responses. The actual annotation data is versioned separately." + }, + "volumeId": { + "type": "string", + "description": "The volume id this resource is for." + } + } + }, + "ReadingPosition": { + "id": "ReadingPosition", + "type": "object", + "properties": { + "epubCfiPosition": { + "type": "string", + "description": "Position in an EPUB as a CFI." + }, + "gbImagePosition": { + "type": "string", + "description": "Position in a volume for image-based content." + }, + "gbTextPosition": { + "type": "string", + "description": "Position in a volume for text-based content." + }, + "kind": { + "type": "string", + "description": "Resource type for a reading position.", + "default": "books#readingPosition" + }, + "pdfPosition": { + "type": "string", + "description": "Position in a PDF file." + }, + "updated": { + "type": "string", + "description": "Timestamp when this reading position was last updated (formatted UTC timestamp with millisecond resolution).", + "format": "date-time" + }, + "volumeId": { + "type": "string", + "description": "Volume id associated with this reading position." + } + } + }, + "RequestAccess": { + "id": "RequestAccess", + "type": "object", + "properties": { + "concurrentAccess": { + "$ref": "ConcurrentAccessRestriction", + "description": "A concurrent access response." + }, + "downloadAccess": { + "$ref": "DownloadAccessRestriction", + "description": "A download access response." + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#requestAccess" + } + } + }, + "Review": { + "id": "Review", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "Author of this review.", + "properties": { + "displayName": { + "type": "string", + "description": "Name of this person." + } + } + }, + "content": { + "type": "string", + "description": "Review text." + }, + "date": { + "type": "string", + "description": "Date of this review." + }, + "fullTextUrl": { + "type": "string", + "description": "URL for the full review text, for reviews gathered from the web." + }, + "kind": { + "type": "string", + "description": "Resource type for a review.", + "default": "books#review" + }, + "rating": { + "type": "string", + "description": "Star rating for this review. Possible values are ONE, TWO, THREE, FOUR, FIVE or NOT_RATED." + }, + "source": { + "type": "object", + "description": "Information regarding the source of this review, when the review is not from a Google Books user.", + "properties": { + "description": { + "type": "string", + "description": "Name of the source." + }, + "extraDescription": { + "type": "string", + "description": "Extra text about the source of the review." + }, + "url": { + "type": "string", + "description": "URL of the source of the review." + } + } + }, + "title": { + "type": "string", + "description": "Title for this review." + }, + "type": { + "type": "string", + "description": "Source type for this review. Possible values are EDITORIAL, WEB_USER or GOOGLE_USER." + }, + "volumeId": { + "type": "string", + "description": "Volume that this review is for." + } + } + }, + "Volume": { + "id": "Volume", + "type": "object", + "properties": { + "accessInfo": { + "type": "object", + "description": "Any information about a volume related to reading or obtaining that volume text. This information can depend on country (books may be public domain in one country but not in another, e.g.).", + "properties": { + "accessViewStatus": { + "type": "string", + "description": "Combines the access and viewability of this volume into a single status field for this user. Values can be FULL_PURCHASED, FULL_PUBLIC_DOMAIN, SAMPLE or NONE. (In LITE projection.)" + }, + "country": { + "type": "string", + "description": "The two-letter ISO_3166-1 country code for which this access information is valid. (In LITE projection.)" + }, + "downloadAccess": { + "$ref": "DownloadAccessRestriction", + "description": "Information about a volume's download license access restrictions." + }, + "driveImportedContentLink": { + "type": "string", + "description": "URL to the Google Drive viewer if this volume is uploaded by the user by selecting the file from Google Drive." + }, + "embeddable": { + "type": "boolean", + "description": "Whether this volume can be embedded in a viewport using the Embedded Viewer API." + }, + "epub": { + "type": "object", + "description": "Information about epub content. (In LITE projection.)", + "properties": { + "acsTokenLink": { + "type": "string", + "description": "URL to retrieve ACS token for epub download. (In LITE projection.)" + }, + "downloadLink": { + "type": "string", + "description": "URL to download epub. (In LITE projection.)" + }, + "isAvailable": { + "type": "boolean", + "description": "Is a flowing text epub available either as public domain or for purchase. (In LITE projection.)" + } + } + }, + "explicitOfflineLicenseManagement": { + "type": "boolean", + "description": "Whether this volume requires that the client explicitly request offline download license rather than have it done automatically when loading the content, if the client supports it." + }, + "pdf": { + "type": "object", + "description": "Information about pdf content. (In LITE projection.)", + "properties": { + "acsTokenLink": { + "type": "string", + "description": "URL to retrieve ACS token for pdf download. (In LITE projection.)" + }, + "downloadLink": { + "type": "string", + "description": "URL to download pdf. (In LITE projection.)" + }, + "isAvailable": { + "type": "boolean", + "description": "Is a scanned image pdf available either as public domain or for purchase. (In LITE projection.)" + } + } + }, + "publicDomain": { + "type": "boolean", + "description": "Whether or not this book is public domain in the country listed above." + }, + "quoteSharingAllowed": { + "type": "boolean", + "description": "Whether quote sharing is allowed for this volume." + }, + "textToSpeechPermission": { + "type": "string", + "description": "Whether text-to-speech is permitted for this volume. Values can be ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or NOT_ALLOWED." + }, + "viewOrderUrl": { + "type": "string", + "description": "For ordered but not yet processed orders, we give a URL that can be used to go to the appropriate Google Wallet page." + }, + "viewability": { + "type": "string", + "description": "The read access of a volume. Possible values are PARTIAL, ALL_PAGES, NO_PAGES or UNKNOWN. This value depends on the country listed above. A value of PARTIAL means that the publisher has allowed some portion of the volume to be viewed publicly, without purchase. This can apply to eBooks as well as non-eBooks. Public domain books will always have a value of ALL_PAGES." + }, + "webReaderLink": { + "type": "string", + "description": "URL to read this volume on the Google Books site. Link will not allow users to read non-viewable volumes." + } + } + }, + "etag": { + "type": "string", + "description": "Opaque identifier for a specific version of a volume resource. (In LITE projection)" + }, + "id": { + "type": "string", + "description": "Unique identifier for a volume. (In LITE projection.)" + }, + "kind": { + "type": "string", + "description": "Resource type for a volume. (In LITE projection.)", + "default": "books#volume" + }, + "layerInfo": { + "type": "object", + "description": "What layers exist in this volume and high level information about them.", + "properties": { + "layers": { + "type": "array", + "description": "A layer should appear here if and only if the layer exists for this book.", + "items": { + "type": "object", + "properties": { + "layerId": { + "type": "string", + "description": "The layer id of this layer (e.g. \"geo\")." + }, + "volumeAnnotationsVersion": { + "type": "string", + "description": "The current version of this layer's volume annotations. Note that this version applies only to the data in the books.layers.volumeAnnotations.* responses. The actual annotation data is versioned separately." + } + } + } + } + } + }, + "recommendedInfo": { + "type": "object", + "description": "Recommendation related information for this volume.", + "properties": { + "explanation": { + "type": "string", + "description": "A text explaining why this volume is recommended." + } + } + }, + "saleInfo": { + "type": "object", + "description": "Any information about a volume related to the eBookstore and/or purchaseability. This information can depend on the country where the request originates from (i.e. books may not be for sale in certain countries).", + "properties": { + "buyLink": { + "type": "string", + "description": "URL to purchase this volume on the Google Books site. (In LITE projection)" + }, + "country": { + "type": "string", + "description": "The two-letter ISO_3166-1 country code for which this sale information is valid. (In LITE projection.)" + }, + "isEbook": { + "type": "boolean", + "description": "Whether or not this volume is an eBook (can be added to the My eBooks shelf)." + }, + "listPrice": { + "type": "object", + "description": "Suggested retail price. (In LITE projection.)", + "properties": { + "amount": { + "type": "number", + "description": "Amount in the currency listed below. (In LITE projection.)", + "format": "double" + }, + "currencyCode": { + "type": "string", + "description": "An ISO 4217, three-letter currency code. (In LITE projection.)" + } + } + }, + "offers": { + "type": "array", + "description": "Offers available for this volume (sales and rentals).", + "items": { + "type": "object", + "properties": { + "finskyOfferType": { + "type": "integer", + "description": "The finsky offer type (e.g., PURCHASE=0 RENTAL=3)", + "format": "int32" + }, + "listPrice": { + "type": "object", + "description": "Offer list (=undiscounted) price in Micros.", + "properties": { + "amountInMicros": { + "type": "number", + "format": "double" + }, + "currencyCode": { + "type": "string" + } + } + }, + "rentalDuration": { + "type": "object", + "description": "The rental duration (for rental offers only).", + "properties": { + "count": { + "type": "number", + "format": "double" + }, + "unit": { + "type": "string" + } + } + }, + "retailPrice": { + "type": "object", + "description": "Offer retail (=discounted) price in Micros", + "properties": { + "amountInMicros": { + "type": "number", + "format": "double" + }, + "currencyCode": { + "type": "string" + } + } + } + } + } + }, + "onSaleDate": { + "type": "string", + "description": "The date on which this book is available for sale.", + "format": "date-time" + }, + "retailPrice": { + "type": "object", + "description": "The actual selling price of the book. This is the same as the suggested retail or list price unless there are offers or discounts on this volume. (In LITE projection.)", + "properties": { + "amount": { + "type": "number", + "description": "Amount in the currency listed below. (In LITE projection.)", + "format": "double" + }, + "currencyCode": { + "type": "string", + "description": "An ISO 4217, three-letter currency code. (In LITE projection.)" + } + } + }, + "saleability": { + "type": "string", + "description": "Whether or not this book is available for sale or offered for free in the Google eBookstore for the country listed above. Possible values are FOR_SALE, FOR_RENTAL_ONLY, FOR_SALE_AND_RENTAL, FREE, NOT_FOR_SALE, or FOR_PREORDER." + } + } + }, + "searchInfo": { + "type": "object", + "description": "Search result information related to this volume.", + "properties": { + "textSnippet": { + "type": "string", + "description": "A text snippet containing the search query." + } + } + }, + "selfLink": { + "type": "string", + "description": "URL to this resource. (In LITE projection.)" + }, + "userInfo": { + "type": "object", + "description": "User specific information related to this volume. (e.g. page this user last read or whether they purchased this book)", + "properties": { + "copy": { + "type": "object", + "description": "Copy/Paste accounting information.", + "properties": { + "allowedCharacterCount": { + "type": "integer", + "format": "int32" + }, + "limitType": { + "type": "string" + }, + "remainingCharacterCount": { + "type": "integer", + "format": "int32" + }, + "updated": { + "type": "string", + "format": "date-time" + } + } + }, + "isInMyBooks": { + "type": "boolean", + "description": "Whether or not this volume is currently in \"my books.\"" + }, + "isPreordered": { + "type": "boolean", + "description": "Whether or not this volume was pre-ordered by the authenticated user making the request. (In LITE projection.)" + }, + "isPurchased": { + "type": "boolean", + "description": "Whether or not this volume was purchased by the authenticated user making the request. (In LITE projection.)" + }, + "isUploaded": { + "type": "boolean", + "description": "Whether or not this volume was user uploaded." + }, + "readingPosition": { + "$ref": "ReadingPosition", + "description": "The user's current reading position in the volume, if one is available. (In LITE projection.)" + }, + "rentalPeriod": { + "type": "object", + "description": "Period during this book is/was a valid rental.", + "properties": { + "endUtcSec": { + "type": "string", + "format": "int64" + }, + "startUtcSec": { + "type": "string", + "format": "int64" + } + } + }, + "rentalState": { + "type": "string", + "description": "Whether this book is an active or an expired rental." + }, + "review": { + "$ref": "Review", + "description": "This user's review of this volume, if one exists." + }, + "updated": { + "type": "string", + "description": "Timestamp when this volume was last modified by a user action, such as a reading position update, volume purchase or writing a review. (RFC 3339 UTC date-time format).", + "format": "date-time" + }, + "userUploadedVolumeInfo": { + "type": "object", + "properties": { + "processingState": { + "type": "string" + } + } + } + } + }, + "volumeInfo": { + "type": "object", + "description": "General volume information.", + "properties": { + "authors": { + "type": "array", + "description": "The names of the authors and/or editors for this volume. (In LITE projection)", + "items": { + "type": "string" + } + }, + "averageRating": { + "type": "number", + "description": "The mean review rating for this volume. (min = 1.0, max = 5.0)", + "format": "double" + }, + "canonicalVolumeLink": { + "type": "string", + "description": "Canonical URL for a volume. (In LITE projection.)" + }, + "categories": { + "type": "array", + "description": "A list of subject categories, such as \"Fiction\", \"Suspense\", etc.", + "items": { + "type": "string" + } + }, + "contentVersion": { + "type": "string", + "description": "An identifier for the version of the volume content (text & images). (In LITE projection)" + }, + "description": { + "type": "string", + "description": "A synopsis of the volume. The text of the description is formatted in HTML and includes simple formatting elements, such as b, i, and br tags. (In LITE projection.)" + }, + "dimensions": { + "type": "object", + "description": "Physical dimensions of this volume.", + "properties": { + "height": { + "type": "string", + "description": "Height or length of this volume (in cm)." + }, + "thickness": { + "type": "string", + "description": "Thickness of this volume (in cm)." + }, + "width": { + "type": "string", + "description": "Width of this volume (in cm)." + } + } + }, + "imageLinks": { + "type": "object", + "description": "A list of image links for all the sizes that are available. (In LITE projection.)", + "properties": { + "extraLarge": { + "type": "string", + "description": "Image link for extra large size (width of ~1280 pixels). (In LITE projection)" + }, + "large": { + "type": "string", + "description": "Image link for large size (width of ~800 pixels). (In LITE projection)" + }, + "medium": { + "type": "string", + "description": "Image link for medium size (width of ~575 pixels). (In LITE projection)" + }, + "small": { + "type": "string", + "description": "Image link for small size (width of ~300 pixels). (In LITE projection)" + }, + "smallThumbnail": { + "type": "string", + "description": "Image link for small thumbnail size (width of ~80 pixels). (In LITE projection)" + }, + "thumbnail": { + "type": "string", + "description": "Image link for thumbnail size (width of ~128 pixels). (In LITE projection)" + } + } + }, + "industryIdentifiers": { + "type": "array", + "description": "Industry standard identifiers for this volume.", + "items": { + "type": "object", + "properties": { + "identifier": { + "type": "string", + "description": "Industry specific volume identifier." + }, + "type": { + "type": "string", + "description": "Identifier type. Possible values are ISBN_10, ISBN_13, ISSN and OTHER." + } + } + } + }, + "infoLink": { + "type": "string", + "description": "URL to view information about this volume on the Google Books site. (In LITE projection)" + }, + "language": { + "type": "string", + "description": "Best language for this volume (based on content). It is the two-letter ISO 639-1 code such as 'fr', 'en', etc." + }, + "mainCategory": { + "type": "string", + "description": "The main category to which this volume belongs. It will be the category from the categories list returned below that has the highest weight." + }, + "pageCount": { + "type": "integer", + "description": "Total number of pages as per publisher metadata.", + "format": "int32" + }, + "previewLink": { + "type": "string", + "description": "URL to preview this volume on the Google Books site." + }, + "printType": { + "type": "string", + "description": "Type of publication of this volume. Possible values are BOOK or MAGAZINE." + }, + "printedPageCount": { + "type": "integer", + "description": "Total number of printed pages in generated pdf representation.", + "format": "int32" + }, + "publishedDate": { + "type": "string", + "description": "Date of publication. (In LITE projection.)" + }, + "publisher": { + "type": "string", + "description": "Publisher of this volume. (In LITE projection.)" + }, + "ratingsCount": { + "type": "integer", + "description": "The number of review ratings for this volume.", + "format": "int32" + }, + "subtitle": { + "type": "string", + "description": "Volume subtitle. (In LITE projection.)" + }, + "title": { + "type": "string", + "description": "Volume title. (In LITE projection.)" + } + } + } + } + }, + "Volumeannotation": { + "id": "Volumeannotation", + "type": "object", + "properties": { + "annotationDataId": { + "type": "string", + "description": "The annotation data id for this volume annotation." + }, + "annotationDataLink": { + "type": "string", + "description": "Link to get data for this annotation." + }, + "annotationType": { + "type": "string", + "description": "The type of annotation this is." + }, + "contentRanges": { + "type": "object", + "description": "The content ranges to identify the selected text.", + "properties": { + "cfiRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in CFI format for this annotation for version above." + }, + "contentVersion": { + "type": "string", + "description": "Content version applicable to ranges below." + }, + "gbImageRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB image format for this annotation for version above." + }, + "gbTextRange": { + "$ref": "BooksAnnotationsRange", + "description": "Range in GB text format for this annotation for version above." + } + } + }, + "data": { + "type": "string", + "description": "Data for this annotation." + }, + "deleted": { + "type": "boolean", + "description": "Indicates that this annotation is deleted." + }, + "id": { + "type": "string", + "description": "Unique id of this volume annotation." + }, + "kind": { + "type": "string", + "description": "Resource Type", + "default": "books#volumeannotation" + }, + "layerId": { + "type": "string", + "description": "The Layer this annotation is for." + }, + "pageIds": { + "type": "array", + "description": "Pages the annotation spans.", + "items": { + "type": "string" + } + }, + "selectedText": { + "type": "string", + "description": "Excerpt from the volume." + }, + "selfLink": { + "type": "string", + "description": "URL to this resource." + }, + "updated": { + "type": "string", + "description": "Timestamp for the last time this anntoation was updated. (RFC 3339 UTC date-time format).", + "format": "date-time" + }, + "volumeId": { + "type": "string", + "description": "The Volume this annotation is for." + } + } + }, + "Volumeannotations": { + "id": "Volumeannotations", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of volume annotations.", + "items": { + "$ref": "Volumeannotation" + } + }, + "kind": { + "type": "string", + "description": "Resource type", + "default": "books#volumeannotations" + }, + "nextPageToken": { + "type": "string", + "description": "Token to pass in for pagination for the next page. This will not be present if this request does not have more results." + }, + "totalItems": { + "type": "integer", + "description": "The total number of volume annotations found.", + "format": "int32" + }, + "version": { + "type": "string", + "description": "The version string for all of the volume annotations in this layer (not just the ones in this response). Note: the version string doesn't apply to the annotation data, just the information in this response (e.g. the location of annotations in the book)." + } + } + }, + "Volumes": { + "id": "Volumes", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of volumes.", + "items": { + "$ref": "Volume" + } + }, + "kind": { + "type": "string", + "description": "Resource type.", + "default": "books#volumes" + }, + "totalItems": { + "type": "integer", + "description": "Total number of volumes found. This might be greater than the number of volumes returned in this response if results have been paginated.", + "format": "int32" + } + } + } + }, + "resources": { + "bookshelves": { + "methods": { + "get": { + "id": "books.bookshelves.get", + "path": "users/{userId}/bookshelves/{shelf}", + "httpMethod": "GET", + "description": "Retrieves metadata for a specific bookshelf for the specified user.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf to retrieve.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of user for whom to retrieve bookshelves.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "shelf" + ], + "response": { + "$ref": "Bookshelf" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.bookshelves.list", + "path": "users/{userId}/bookshelves", + "httpMethod": "GET", + "description": "Retrieves a list of public bookshelves for the specified user.", + "parameters": { + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of user for whom to retrieve bookshelves.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "Bookshelves" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + }, + "resources": { + "volumes": { + "methods": { + "list": { + "id": "books.bookshelves.volumes.list", + "path": "users/{userId}/bookshelves/{shelf}/volumes", + "httpMethod": "GET", + "description": "Retrieves volumes in a specific bookshelf for the specified user.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "shelf": { + "type": "string", + "description": "ID of bookshelf to retrieve volumes.", + "required": true, + "location": "path" + }, + "showPreorders": { + "type": "boolean", + "description": "Set to true to show pre-ordered books. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first element to return (starts at 0)", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of user for whom to retrieve bookshelf volumes.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "shelf" + ], + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + } + } + }, + "cloudloading": { + "methods": { + "addBook": { + "id": "books.cloudloading.addBook", + "path": "cloudloading/addBook", + "httpMethod": "POST", + "description": "", + "parameters": { + "drive_document_id": { + "type": "string", + "description": "A drive document id. The upload_client_token must not be set.", + "location": "query" + }, + "mime_type": { + "type": "string", + "description": "The document MIME type. It can be set only if the drive_document_id is set.", + "location": "query" + }, + "name": { + "type": "string", + "description": "The document name. It can be set only if the drive_document_id is set.", + "location": "query" + }, + "upload_client_token": { + "type": "string", + "location": "query" + } + }, + "response": { + "$ref": "BooksCloudloadingResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "deleteBook": { + "id": "books.cloudloading.deleteBook", + "path": "cloudloading/deleteBook", + "httpMethod": "POST", + "description": "Remove the book and its contents", + "parameters": { + "volumeId": { + "type": "string", + "description": "The id of the book to be removed.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "volumeId" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "updateBook": { + "id": "books.cloudloading.updateBook", + "path": "cloudloading/updateBook", + "httpMethod": "POST", + "description": "", + "request": { + "$ref": "BooksCloudloadingResource" + }, + "response": { + "$ref": "BooksCloudloadingResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "layers": { + "methods": { + "get": { + "id": "books.layers.get", + "path": "volumes/{volumeId}/layersummary/{summaryId}", + "httpMethod": "GET", + "description": "Gets the layer summary for a volume.", + "parameters": { + "contentVersion": { + "type": "string", + "description": "The content version for the requested volume.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "summaryId": { + "type": "string", + "description": "The ID for the layer to get the summary for.", + "required": true, + "location": "path" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve layers for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId", + "summaryId" + ], + "response": { + "$ref": "Layersummary" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.layers.list", + "path": "volumes/{volumeId}/layersummary", + "httpMethod": "GET", + "description": "List the layer summaries for a volume.", + "parameters": { + "contentVersion": { + "type": "string", + "description": "The content version for the requested volume.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous page.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve layers for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId" + ], + "response": { + "$ref": "Layersummaries" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + }, + "resources": { + "annotationData": { + "methods": { + "get": { + "id": "books.layers.annotationData.get", + "path": "volumes/{volumeId}/layers/{layerId}/data/{annotationDataId}", + "httpMethod": "GET", + "description": "Gets the annotation data.", + "parameters": { + "allowWebDefinitions": { + "type": "boolean", + "description": "For the dictionary layer. Whether or not to allow web definitions.", + "location": "query" + }, + "annotationDataId": { + "type": "string", + "description": "The ID of the annotation data to retrieve.", + "required": true, + "location": "path" + }, + "contentVersion": { + "type": "string", + "description": "The content version for the volume you are trying to retrieve.", + "required": true, + "location": "query" + }, + "h": { + "type": "integer", + "description": "The requested pixel height for any images. If height is provided width must also be provided.", + "format": "int32", + "location": "query" + }, + "layerId": { + "type": "string", + "description": "The ID for the layer to get the annotations.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + "location": "query" + }, + "scale": { + "type": "integer", + "description": "The requested scale for the image.", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve annotations for.", + "required": true, + "location": "path" + }, + "w": { + "type": "integer", + "description": "The requested pixel width for any images. If width is provided height must also be provided.", + "format": "int32", + "location": "query" + } + }, + "parameterOrder": [ + "volumeId", + "layerId", + "annotationDataId", + "contentVersion" + ], + "response": { + "$ref": "Annotationdata" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.layers.annotationData.list", + "path": "volumes/{volumeId}/layers/{layerId}/data", + "httpMethod": "GET", + "description": "Gets the annotation data for a volume and layer.", + "parameters": { + "annotationDataId": { + "type": "string", + "description": "The list of Annotation Data Ids to retrieve. Pagination is ignored if this is set.", + "repeated": true, + "location": "query" + }, + "contentVersion": { + "type": "string", + "description": "The content version for the requested volume.", + "required": true, + "location": "query" + }, + "h": { + "type": "integer", + "description": "The requested pixel height for any images. If height is provided width must also be provided.", + "format": "int32", + "location": "query" + }, + "layerId": { + "type": "string", + "description": "The ID for the layer to get the annotation data.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous page.", + "location": "query" + }, + "scale": { + "type": "integer", + "description": "The requested scale for the image.", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "updatedMax": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve annotation data for.", + "required": true, + "location": "path" + }, + "w": { + "type": "integer", + "description": "The requested pixel width for any images. If width is provided height must also be provided.", + "format": "int32", + "location": "query" + } + }, + "parameterOrder": [ + "volumeId", + "layerId", + "contentVersion" + ], + "response": { + "$ref": "Annotationsdata" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "volumeAnnotations": { + "methods": { + "get": { + "id": "books.layers.volumeAnnotations.get", + "path": "volumes/{volumeId}/layers/{layerId}/annotations/{annotationId}", + "httpMethod": "GET", + "description": "Gets the volume annotation.", + "parameters": { + "annotationId": { + "type": "string", + "description": "The ID of the volume annotation to retrieve.", + "required": true, + "location": "path" + }, + "layerId": { + "type": "string", + "description": "The ID for the layer to get the annotations.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve annotations for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId", + "layerId", + "annotationId" + ], + "response": { + "$ref": "Volumeannotation" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.layers.volumeAnnotations.list", + "path": "volumes/{volumeId}/layers/{layerId}", + "httpMethod": "GET", + "description": "Gets the volume annotations for a volume and layer.", + "parameters": { + "contentVersion": { + "type": "string", + "description": "The content version for the requested volume.", + "required": true, + "location": "query" + }, + "endOffset": { + "type": "string", + "description": "The end offset to end retrieving data from.", + "location": "query" + }, + "endPosition": { + "type": "string", + "description": "The end position to end retrieving data from.", + "location": "query" + }, + "layerId": { + "type": "string", + "description": "The ID for the layer to get the annotations.", + "required": true, + "location": "path" + }, + "locale": { + "type": "string", + "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous page.", + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Set to true to return deleted annotations. updatedMin must be in the request to use this. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startOffset": { + "type": "string", + "description": "The start offset to start retrieving data from.", + "location": "query" + }, + "startPosition": { + "type": "string", + "description": "The start position to start retrieving data from.", + "location": "query" + }, + "updatedMax": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + "location": "query" + }, + "volumeAnnotationsVersion": { + "type": "string", + "description": "The version of the volume annotations that you are requesting.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to retrieve annotations for.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId", + "layerId", + "contentVersion" + ], + "response": { + "$ref": "Volumeannotations" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + } + } + }, + "myconfig": { + "methods": { + "releaseDownloadAccess": { + "id": "books.myconfig.releaseDownloadAccess", + "path": "myconfig/releaseDownloadAccess", + "httpMethod": "POST", + "description": "Release downloaded content access restriction.", + "parameters": { + "cpksver": { + "type": "string", + "description": "The device/version ID from which to release the restriction.", + "required": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeIds": { + "type": "string", + "description": "The volume(s) to release restrictions for.", + "required": true, + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "volumeIds", + "cpksver" + ], + "response": { + "$ref": "DownloadAccesses" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "requestAccess": { + "id": "books.myconfig.requestAccess", + "path": "myconfig/requestAccess", + "httpMethod": "POST", + "description": "Request concurrent and download access restrictions.", + "parameters": { + "cpksver": { + "type": "string", + "description": "The device/version ID from which to request the restrictions.", + "required": true, + "location": "query" + }, + "licenseTypes": { + "type": "string", + "description": "The type of access license to request. If not specified, the default is BOTH.", + "enum": [ + "BOTH", + "CONCURRENT", + "DOWNLOAD" + ], + "enumDescriptions": [ + "Both concurrent and download licenses.", + "Concurrent access license.", + "Offline download access license." + ], + "location": "query" + }, + "locale": { + "type": "string", + "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + "location": "query" + }, + "nonce": { + "type": "string", + "description": "The client nonce value.", + "required": true, + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "required": true, + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to request concurrent/download restrictions for.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "source", + "volumeId", + "nonce", + "cpksver" + ], + "response": { + "$ref": "RequestAccess" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "syncVolumeLicenses": { + "id": "books.myconfig.syncVolumeLicenses", + "path": "myconfig/syncVolumeLicenses", + "httpMethod": "POST", + "description": "Request downloaded content access for specified volumes on the My eBooks shelf.", + "parameters": { + "cpksver": { + "type": "string", + "description": "The device/version ID from which to release the restriction.", + "required": true, + "location": "query" + }, + "features": { + "type": "string", + "description": "List of features supported by the client, i.e., 'RENTALS'", + "enum": [ + "RENTALS" + ], + "enumDescriptions": [ + "Client supports rentals." + ], + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + "location": "query" + }, + "nonce": { + "type": "string", + "description": "The client nonce value.", + "required": true, + "location": "query" + }, + "showPreorders": { + "type": "boolean", + "description": "Set to true to show pre-ordered books. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "required": true, + "location": "query" + }, + "volumeIds": { + "type": "string", + "description": "The volume(s) to request download restrictions for.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "source", + "nonce", + "cpksver" + ], + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "mylibrary": { + "resources": { + "annotations": { + "methods": { + "delete": { + "id": "books.mylibrary.annotations.delete", + "path": "mylibrary/annotations/{annotationId}", + "httpMethod": "DELETE", + "description": "Deletes an annotation.", + "parameters": { + "annotationId": { + "type": "string", + "description": "The ID for the annotation to delete.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "parameterOrder": [ + "annotationId" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "get": { + "id": "books.mylibrary.annotations.get", + "path": "mylibrary/annotations/{annotationId}", + "httpMethod": "GET", + "description": "Gets an annotation by its ID.", + "parameters": { + "annotationId": { + "type": "string", + "description": "The ID for the annotation to retrieve.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "parameterOrder": [ + "annotationId" + ], + "response": { + "$ref": "Annotation" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "insert": { + "id": "books.mylibrary.annotations.insert", + "path": "mylibrary/annotations", + "httpMethod": "POST", + "description": "Inserts a new annotation.", + "parameters": { + "showOnlySummaryInResponse": { + "type": "boolean", + "description": "Requests that only the summary of the specified layer be provided in the response.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "request": { + "$ref": "Annotation" + }, + "response": { + "$ref": "Annotation" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.mylibrary.annotations.list", + "path": "mylibrary/annotations", + "httpMethod": "GET", + "description": "Retrieves a list of annotations, possibly filtered.", + "parameters": { + "contentVersion": { + "type": "string", + "description": "The content version for the requested volume.", + "location": "query" + }, + "layerId": { + "type": "string", + "description": "The layer ID to limit annotation by.", + "location": "query" + }, + "layerIds": { + "type": "string", + "description": "The layer ID(s) to limit annotation by.", + "repeated": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "maximum": "40", + "location": "query" + }, + "pageIds": { + "type": "string", + "description": "The page ID(s) for the volume that is being queried.", + "repeated": true, + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous page.", + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Set to true to return deleted annotations. updatedMin must be in the request to use this. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "updatedMax": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The volume to restrict annotations to.", + "location": "query" + } + }, + "response": { + "$ref": "Annotations" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "summary": { + "id": "books.mylibrary.annotations.summary", + "path": "mylibrary/annotations/summary", + "httpMethod": "POST", + "description": "Gets the summary of specified layers.", + "parameters": { + "layerIds": { + "type": "string", + "description": "Array of layer IDs to get the summary for.", + "required": true, + "repeated": true, + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "Volume id to get the summary for.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "layerIds", + "volumeId" + ], + "response": { + "$ref": "AnnotationsSummary" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "update": { + "id": "books.mylibrary.annotations.update", + "path": "mylibrary/annotations/{annotationId}", + "httpMethod": "PUT", + "description": "Updates an existing annotation.", + "parameters": { + "annotationId": { + "type": "string", + "description": "The ID for the annotation to update.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "parameterOrder": [ + "annotationId" + ], + "request": { + "$ref": "Annotation" + }, + "response": { + "$ref": "Annotation" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "bookshelves": { + "methods": { + "addVolume": { + "id": "books.mylibrary.bookshelves.addVolume", + "path": "mylibrary/bookshelves/{shelf}/addVolume", + "httpMethod": "POST", + "description": "Adds a volume to a bookshelf.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf to which to add a volume.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume to add.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "shelf", + "volumeId" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "clearVolumes": { + "id": "books.mylibrary.bookshelves.clearVolumes", + "path": "mylibrary/bookshelves/{shelf}/clearVolumes", + "httpMethod": "POST", + "description": "Clears all volumes from a bookshelf.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf from which to remove a volume.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "parameterOrder": [ + "shelf" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "get": { + "id": "books.mylibrary.bookshelves.get", + "path": "mylibrary/bookshelves/{shelf}", + "httpMethod": "GET", + "description": "Retrieves metadata for a specific bookshelf belonging to the authenticated user.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf to retrieve.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "parameterOrder": [ + "shelf" + ], + "response": { + "$ref": "Bookshelf" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.mylibrary.bookshelves.list", + "path": "mylibrary/bookshelves", + "httpMethod": "GET", + "description": "Retrieves a list of bookshelves belonging to the authenticated user.", + "parameters": { + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "response": { + "$ref": "Bookshelves" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "moveVolume": { + "id": "books.mylibrary.bookshelves.moveVolume", + "path": "mylibrary/bookshelves/{shelf}/moveVolume", + "httpMethod": "POST", + "description": "Moves a volume within a bookshelf.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf with the volume.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume to move.", + "required": true, + "location": "query" + }, + "volumePosition": { + "type": "integer", + "description": "Position on shelf to move the item (0 puts the item before the current first item, 1 puts it between the first and the second and so on.)", + "required": true, + "format": "int32", + "location": "query" + } + }, + "parameterOrder": [ + "shelf", + "volumeId", + "volumePosition" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "removeVolume": { + "id": "books.mylibrary.bookshelves.removeVolume", + "path": "mylibrary/bookshelves/{shelf}/removeVolume", + "httpMethod": "POST", + "description": "Removes a volume from a bookshelf.", + "parameters": { + "shelf": { + "type": "string", + "description": "ID of bookshelf from which to remove a volume.", + "required": true, + "location": "path" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume to remove.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "shelf", + "volumeId" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + }, + "resources": { + "volumes": { + "methods": { + "list": { + "id": "books.mylibrary.bookshelves.volumes.list", + "path": "mylibrary/bookshelves/{shelf}/volumes", + "httpMethod": "GET", + "description": "Gets volume information for volumes on a bookshelf.", + "parameters": { + "country": { + "type": "string", + "description": "ISO-3166-1 code to override the IP-based location.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "full", + "lite" + ], + "enumDescriptions": [ + "Includes all volume data.", + "Includes a subset of fields in volumeInfo and accessInfo." + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Full-text search query string in this bookshelf.", + "location": "query" + }, + "shelf": { + "type": "string", + "description": "The bookshelf ID or name retrieve volumes for.", + "required": true, + "location": "path" + }, + "showPreorders": { + "type": "boolean", + "description": "Set to true to show pre-ordered books. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first element to return (starts at 0)", + "format": "uint32", + "minimum": "0", + "location": "query" + } + }, + "parameterOrder": [ + "shelf" + ], + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + } + } + }, + "readingpositions": { + "methods": { + "get": { + "id": "books.mylibrary.readingpositions.get", + "path": "mylibrary/readingpositions/{volumeId}", + "httpMethod": "GET", + "description": "Retrieves my reading position information for a volume.", + "parameters": { + "contentVersion": { + "type": "string", + "description": "Volume content version for which this reading position is requested.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume for which to retrieve a reading position.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId" + ], + "response": { + "$ref": "ReadingPosition" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "setPosition": { + "id": "books.mylibrary.readingpositions.setPosition", + "path": "mylibrary/readingpositions/{volumeId}/setPosition", + "httpMethod": "POST", + "description": "Sets my reading position information for a volume.", + "parameters": { + "action": { + "type": "string", + "description": "Action that caused this reading position to be set.", + "enum": [ + "bookmark", + "chapter", + "next-page", + "prev-page", + "scroll", + "search" + ], + "enumDescriptions": [ + "User chose bookmark within volume.", + "User selected chapter from list.", + "Next page event.", + "Previous page event.", + "User navigated to page.", + "User chose search results within volume." + ], + "location": "query" + }, + "contentVersion": { + "type": "string", + "description": "Volume content version for which this reading position applies.", + "location": "query" + }, + "deviceCookie": { + "type": "string", + "description": "Random persistent device cookie optional on set position.", + "location": "query" + }, + "position": { + "type": "string", + "description": "Position string for the new volume reading position.", + "required": true, + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "timestamp": { + "type": "string", + "description": "RFC 3339 UTC format timestamp associated with this reading position.", + "required": true, + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume for which to update the reading position.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId", + "timestamp", + "position" + ], + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + } + } + }, + "volumes": { + "methods": { + "get": { + "id": "books.volumes.get", + "path": "volumes/{volumeId}", + "httpMethod": "GET", + "description": "Gets volume information for a single volume.", + "parameters": { + "country": { + "type": "string", + "description": "ISO-3166-1 code to override the IP-based location.", + "location": "query" + }, + "partner": { + "type": "string", + "description": "Brand results for partner ID.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "full", + "lite" + ], + "enumDescriptions": [ + "Includes all volume data.", + "Includes a subset of fields in volumeInfo and accessInfo." + ], + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of volume to retrieve.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId" + ], + "response": { + "$ref": "Volume" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "list": { + "id": "books.volumes.list", + "path": "volumes", + "httpMethod": "GET", + "description": "Performs a book search.", + "parameters": { + "download": { + "type": "string", + "description": "Restrict to volumes by download availability.", + "enum": [ + "epub" + ], + "enumDescriptions": [ + "All volumes with epub." + ], + "location": "query" + }, + "filter": { + "type": "string", + "description": "Filter search results.", + "enum": [ + "ebooks", + "free-ebooks", + "full", + "paid-ebooks", + "partial" + ], + "enumDescriptions": [ + "All Google eBooks.", + "Google eBook with full volume text viewability.", + "Public can view entire volume text.", + "Google eBook with a price.", + "Public able to see parts of text." + ], + "location": "query" + }, + "langRestrict": { + "type": "string", + "description": "Restrict results to books with this language code.", + "location": "query" + }, + "libraryRestrict": { + "type": "string", + "description": "Restrict search to this user's library.", + "enum": [ + "my-library", + "no-restrict" + ], + "enumDescriptions": [ + "Restrict to the user's library, any shelf.", + "Do not restrict based on user's library." + ], + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "minimum": "0", + "maximum": "40", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results.", + "enum": [ + "newest", + "relevance" + ], + "enumDescriptions": [ + "Most recently published.", + "Relevance to search terms." + ], + "location": "query" + }, + "partner": { + "type": "string", + "description": "Restrict and brand results for partner ID.", + "location": "query" + }, + "printType": { + "type": "string", + "description": "Restrict to books or magazines.", + "enum": [ + "all", + "books", + "magazines" + ], + "enumDescriptions": [ + "All volume content types.", + "Just books.", + "Just magazines." + ], + "location": "query" + }, + "projection": { + "type": "string", + "description": "Restrict information returned to a set of selected fields.", + "enum": [ + "full", + "lite" + ], + "enumDescriptions": [ + "Includes all volume data.", + "Includes a subset of fields in volumeInfo and accessInfo." + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Full-text search query string.", + "required": true, + "location": "query" + }, + "showPreorders": { + "type": "boolean", + "description": "Set to true to show books available for preorder. Defaults to false.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first result to return (starts at 0)", + "format": "uint32", + "minimum": "0", + "location": "query" + } + }, + "parameterOrder": [ + "q" + ], + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + }, + "resources": { + "associated": { + "methods": { + "list": { + "id": "books.volumes.associated.list", + "path": "volumes/{volumeId}/associated", + "httpMethod": "GET", + "description": "Return a list of associated books.", + "parameters": { + "association": { + "type": "string", + "description": "Association type.", + "enum": [ + "end-of-sample", + "end-of-volume" + ], + "enumDescriptions": [ + "Recommendations for display end-of-sample.", + "Recommendations for display end-of-volume." + ], + "location": "query" + }, + "locale": { + "type": "string", + "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of the source volume.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "volumeId" + ], + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "mybooks": { + "methods": { + "list": { + "id": "books.volumes.mybooks.list", + "path": "volumes/mybooks", + "httpMethod": "GET", + "description": "Return a list of books in My Library.", + "parameters": { + "acquireMethod": { + "type": "string", + "description": "How the book was aquired", + "enum": [ + "PREORDERED", + "PREVIOUSLY_RENTED", + "PUBLIC_DOMAIN", + "PURCHASED", + "RENTED", + "SAMPLE", + "UPLOADED" + ], + "enumDescriptions": [ + "Preordered books (not yet available)", + "User-rented books past their expiration time", + "Public domain books", + "Purchased books", + "User-rented books", + "Sample books", + "User uploaded books" + ], + "repeated": true, + "location": "query" + }, + "locale": { + "type": "string", + "description": "ISO-639-1 language and ISO-3166-1 country code. Ex:'en_US'. Used for generating recommendations.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "processingState": { + "type": "string", + "description": "The processing state of the user uploaded volumes to be returned. Applicable only if the UPLOADED is specified in the acquireMethod.", + "enum": [ + "COMPLETED_FAILED", + "COMPLETED_SUCCESS", + "RUNNING" + ], + "enumDescriptions": [ + "The volume processing hase failed.", + "The volume processing was completed.", + "The volume processing is not completed." + ], + "repeated": true, + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first result to return (starts at 0)", + "format": "uint32", + "minimum": "0", + "location": "query" + } + }, + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "recommended": { + "methods": { + "list": { + "id": "books.volumes.recommended.list", + "path": "volumes/recommended", + "httpMethod": "GET", + "description": "Return a list of recommended books for the current user.", + "parameters": { + "locale": { + "type": "string", + "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + } + }, + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + }, + "rate": { + "id": "books.volumes.recommended.rate", + "path": "volumes/recommended/rate", + "httpMethod": "POST", + "description": "Rate a recommended book for the current user.", + "parameters": { + "locale": { + "type": "string", + "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + "location": "query" + }, + "rating": { + "type": "string", + "description": "Rating to be given to the volume.", + "required": true, + "enum": [ + "HAVE_IT", + "NOT_INTERESTED" + ], + "enumDescriptions": [ + "Rating indicating a dismissal due to ownership.", + "Rating indicating a negative dismissal of a volume." + ], + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "ID of the source volume.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "rating", + "volumeId" + ], + "response": { + "$ref": "BooksVolumesRecommendedRateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + }, + "useruploaded": { + "methods": { + "list": { + "id": "books.volumes.useruploaded.list", + "path": "volumes/useruploaded", + "httpMethod": "GET", + "description": "Return a list of books uploaded by the current user.", + "parameters": { + "locale": { + "type": "string", + "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "minimum": "0", + "maximum": "40", + "location": "query" + }, + "processingState": { + "type": "string", + "description": "The processing state of the user uploaded volumes to be returned.", + "enum": [ + "COMPLETED_FAILED", + "COMPLETED_SUCCESS", + "RUNNING" + ], + "enumDescriptions": [ + "The volume processing hase failed.", + "The volume processing was completed.", + "The volume processing is not completed." + ], + "repeated": true, + "location": "query" + }, + "source": { + "type": "string", + "description": "String to identify the originator of this request.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index of the first result to return (starts at 0)", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "volumeId": { + "type": "string", + "description": "The ids of the volumes to be returned. If not specified all that match the processingState are returned.", + "repeated": true, + "location": "query" + } + }, + "response": { + "$ref": "Volumes" + }, + "scopes": [ + "https://www.googleapis.com/auth/books" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-gen.go b/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-gen.go new file mode 100644 index 0000000000000..ca2fa7ec28b64 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/books/v1/books-gen.go @@ -0,0 +1,6116 @@ +// Package books provides access to the Books API. +// +// See https://developers.google.com/books/docs/v1/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/books/v1" +// ... +// booksService, err := books.New(oauthHttpClient) +package books + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "books:v1" +const apiName = "books" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/books/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your books + BooksScope = "https://www.googleapis.com/auth/books" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Bookshelves = NewBookshelvesService(s) + s.Cloudloading = NewCloudloadingService(s) + s.Layers = NewLayersService(s) + s.Myconfig = NewMyconfigService(s) + s.Mylibrary = NewMylibraryService(s) + s.Volumes = NewVolumesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Bookshelves *BookshelvesService + + Cloudloading *CloudloadingService + + Layers *LayersService + + Myconfig *MyconfigService + + Mylibrary *MylibraryService + + Volumes *VolumesService +} + +func NewBookshelvesService(s *Service) *BookshelvesService { + rs := &BookshelvesService{s: s} + rs.Volumes = NewBookshelvesVolumesService(s) + return rs +} + +type BookshelvesService struct { + s *Service + + Volumes *BookshelvesVolumesService +} + +func NewBookshelvesVolumesService(s *Service) *BookshelvesVolumesService { + rs := &BookshelvesVolumesService{s: s} + return rs +} + +type BookshelvesVolumesService struct { + s *Service +} + +func NewCloudloadingService(s *Service) *CloudloadingService { + rs := &CloudloadingService{s: s} + return rs +} + +type CloudloadingService struct { + s *Service +} + +func NewLayersService(s *Service) *LayersService { + rs := &LayersService{s: s} + rs.AnnotationData = NewLayersAnnotationDataService(s) + rs.VolumeAnnotations = NewLayersVolumeAnnotationsService(s) + return rs +} + +type LayersService struct { + s *Service + + AnnotationData *LayersAnnotationDataService + + VolumeAnnotations *LayersVolumeAnnotationsService +} + +func NewLayersAnnotationDataService(s *Service) *LayersAnnotationDataService { + rs := &LayersAnnotationDataService{s: s} + return rs +} + +type LayersAnnotationDataService struct { + s *Service +} + +func NewLayersVolumeAnnotationsService(s *Service) *LayersVolumeAnnotationsService { + rs := &LayersVolumeAnnotationsService{s: s} + return rs +} + +type LayersVolumeAnnotationsService struct { + s *Service +} + +func NewMyconfigService(s *Service) *MyconfigService { + rs := &MyconfigService{s: s} + return rs +} + +type MyconfigService struct { + s *Service +} + +func NewMylibraryService(s *Service) *MylibraryService { + rs := &MylibraryService{s: s} + rs.Annotations = NewMylibraryAnnotationsService(s) + rs.Bookshelves = NewMylibraryBookshelvesService(s) + rs.Readingpositions = NewMylibraryReadingpositionsService(s) + return rs +} + +type MylibraryService struct { + s *Service + + Annotations *MylibraryAnnotationsService + + Bookshelves *MylibraryBookshelvesService + + Readingpositions *MylibraryReadingpositionsService +} + +func NewMylibraryAnnotationsService(s *Service) *MylibraryAnnotationsService { + rs := &MylibraryAnnotationsService{s: s} + return rs +} + +type MylibraryAnnotationsService struct { + s *Service +} + +func NewMylibraryBookshelvesService(s *Service) *MylibraryBookshelvesService { + rs := &MylibraryBookshelvesService{s: s} + rs.Volumes = NewMylibraryBookshelvesVolumesService(s) + return rs +} + +type MylibraryBookshelvesService struct { + s *Service + + Volumes *MylibraryBookshelvesVolumesService +} + +func NewMylibraryBookshelvesVolumesService(s *Service) *MylibraryBookshelvesVolumesService { + rs := &MylibraryBookshelvesVolumesService{s: s} + return rs +} + +type MylibraryBookshelvesVolumesService struct { + s *Service +} + +func NewMylibraryReadingpositionsService(s *Service) *MylibraryReadingpositionsService { + rs := &MylibraryReadingpositionsService{s: s} + return rs +} + +type MylibraryReadingpositionsService struct { + s *Service +} + +func NewVolumesService(s *Service) *VolumesService { + rs := &VolumesService{s: s} + rs.Associated = NewVolumesAssociatedService(s) + rs.Mybooks = NewVolumesMybooksService(s) + rs.Recommended = NewVolumesRecommendedService(s) + rs.Useruploaded = NewVolumesUseruploadedService(s) + return rs +} + +type VolumesService struct { + s *Service + + Associated *VolumesAssociatedService + + Mybooks *VolumesMybooksService + + Recommended *VolumesRecommendedService + + Useruploaded *VolumesUseruploadedService +} + +func NewVolumesAssociatedService(s *Service) *VolumesAssociatedService { + rs := &VolumesAssociatedService{s: s} + return rs +} + +type VolumesAssociatedService struct { + s *Service +} + +func NewVolumesMybooksService(s *Service) *VolumesMybooksService { + rs := &VolumesMybooksService{s: s} + return rs +} + +type VolumesMybooksService struct { + s *Service +} + +func NewVolumesRecommendedService(s *Service) *VolumesRecommendedService { + rs := &VolumesRecommendedService{s: s} + return rs +} + +type VolumesRecommendedService struct { + s *Service +} + +func NewVolumesUseruploadedService(s *Service) *VolumesUseruploadedService { + rs := &VolumesUseruploadedService{s: s} + return rs +} + +type VolumesUseruploadedService struct { + s *Service +} + +type Annotation struct { + // AfterSelectedText: Anchor text after excerpt. For requests, if the + // user bookmarked a screen that has no flowing text on it, then this + // field should be empty. + AfterSelectedText string `json:"afterSelectedText,omitempty"` + + // BeforeSelectedText: Anchor text before excerpt. For requests, if the + // user bookmarked a screen that has no flowing text on it, then this + // field should be empty. + BeforeSelectedText string `json:"beforeSelectedText,omitempty"` + + // ClientVersionRanges: Selection ranges sent from the client. + ClientVersionRanges *AnnotationClientVersionRanges `json:"clientVersionRanges,omitempty"` + + // Created: Timestamp for the created time of this annotation. + Created string `json:"created,omitempty"` + + // CurrentVersionRanges: Selection ranges for the most recent content + // version. + CurrentVersionRanges *AnnotationCurrentVersionRanges `json:"currentVersionRanges,omitempty"` + + // Data: User-created data for this annotation. + Data string `json:"data,omitempty"` + + // Deleted: Indicates that this annotation is deleted. + Deleted bool `json:"deleted,omitempty"` + + // HighlightStyle: The highlight style for this annotation. + HighlightStyle string `json:"highlightStyle,omitempty"` + + // Id: Id of this annotation, in the form of a GUID. + Id string `json:"id,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // LayerId: The layer this annotation is for. + LayerId string `json:"layerId,omitempty"` + + LayerSummary *AnnotationLayerSummary `json:"layerSummary,omitempty"` + + // PageIds: Pages that this annotation spans. + PageIds []string `json:"pageIds,omitempty"` + + // SelectedText: Excerpt from the volume. + SelectedText string `json:"selectedText,omitempty"` + + // SelfLink: URL to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Timestamp for the last time this annotation was modified. + Updated string `json:"updated,omitempty"` + + // VolumeId: The volume that this annotation belongs to. + VolumeId string `json:"volumeId,omitempty"` +} + +type AnnotationClientVersionRanges struct { + // CfiRange: Range in CFI format for this annotation sent by client. + CfiRange *BooksAnnotationsRange `json:"cfiRange,omitempty"` + + // ContentVersion: Content version the client sent in. + ContentVersion string `json:"contentVersion,omitempty"` + + // GbImageRange: Range in GB image format for this annotation sent by + // client. + GbImageRange *BooksAnnotationsRange `json:"gbImageRange,omitempty"` + + // GbTextRange: Range in GB text format for this annotation sent by + // client. + GbTextRange *BooksAnnotationsRange `json:"gbTextRange,omitempty"` + + // ImageCfiRange: Range in image CFI format for this annotation sent by + // client. + ImageCfiRange *BooksAnnotationsRange `json:"imageCfiRange,omitempty"` +} + +type AnnotationCurrentVersionRanges struct { + // CfiRange: Range in CFI format for this annotation for version above. + CfiRange *BooksAnnotationsRange `json:"cfiRange,omitempty"` + + // ContentVersion: Content version applicable to ranges below. + ContentVersion string `json:"contentVersion,omitempty"` + + // GbImageRange: Range in GB image format for this annotation for + // version above. + GbImageRange *BooksAnnotationsRange `json:"gbImageRange,omitempty"` + + // GbTextRange: Range in GB text format for this annotation for version + // above. + GbTextRange *BooksAnnotationsRange `json:"gbTextRange,omitempty"` + + // ImageCfiRange: Range in image CFI format for this annotation for + // version above. + ImageCfiRange *BooksAnnotationsRange `json:"imageCfiRange,omitempty"` +} + +type AnnotationLayerSummary struct { + // AllowedCharacterCount: Maximum allowed characters on this layer, + // especially for the "copy" layer. + AllowedCharacterCount int64 `json:"allowedCharacterCount,omitempty"` + + // LimitType: Type of limitation on this layer. "limited" or "unlimited" + // for the "copy" layer. + LimitType string `json:"limitType,omitempty"` + + // RemainingCharacterCount: Remaining allowed characters on this layer, + // especially for the "copy" layer. + RemainingCharacterCount int64 `json:"remainingCharacterCount,omitempty"` +} + +type Annotationdata struct { + // AnnotationType: The type of annotation this data is for. + AnnotationType string `json:"annotationType,omitempty"` + + Data interface{} `json:"data,omitempty"` + + // Encoded_data: Base64 encoded data for this annotation data. + Encoded_data string `json:"encoded_data,omitempty"` + + // Id: Unique id for this annotation data. + Id string `json:"id,omitempty"` + + // Kind: Resource Type + Kind string `json:"kind,omitempty"` + + // LayerId: The Layer id for this data. * + LayerId string `json:"layerId,omitempty"` + + // SelfLink: URL for this resource. * + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Timestamp for the last time this data was updated. (RFC 3339 + // UTC date-time format). + Updated string `json:"updated,omitempty"` + + // VolumeId: The volume id for this data. * + VolumeId string `json:"volumeId,omitempty"` +} + +type Annotations struct { + // Items: A list of annotations. + Items []*Annotation `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token to pass in for pagination for the next page. + // This will not be present if this request does not have more results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: Total number of annotations found. This may be greater + // than the number of notes returned in this response if results have + // been paginated. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type AnnotationsSummary struct { + Kind string `json:"kind,omitempty"` + + Layers []*AnnotationsSummaryLayers `json:"layers,omitempty"` +} + +type AnnotationsSummaryLayers struct { + AllowedCharacterCount int64 `json:"allowedCharacterCount,omitempty"` + + LayerId string `json:"layerId,omitempty"` + + LimitType string `json:"limitType,omitempty"` + + RemainingCharacterCount int64 `json:"remainingCharacterCount,omitempty"` + + Updated string `json:"updated,omitempty"` +} + +type Annotationsdata struct { + // Items: A list of Annotation Data. + Items []*Annotationdata `json:"items,omitempty"` + + // Kind: Resource type + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token to pass in for pagination for the next page. + // This will not be present if this request does not have more results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: The total number of volume annotations found. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BooksAnnotationsRange struct { + // EndOffset: The offset from the ending position. + EndOffset string `json:"endOffset,omitempty"` + + // EndPosition: The ending position for the range. + EndPosition string `json:"endPosition,omitempty"` + + // StartOffset: The offset from the starting position. + StartOffset string `json:"startOffset,omitempty"` + + // StartPosition: The starting position for the range. + StartPosition string `json:"startPosition,omitempty"` +} + +type BooksCloudloadingResource struct { + Author string `json:"author,omitempty"` + + ProcessingState string `json:"processingState,omitempty"` + + Title string `json:"title,omitempty"` + + VolumeId string `json:"volumeId,omitempty"` +} + +type BooksVolumesRecommendedRateResponse struct { + Consistency_token string `json:"consistency_token,omitempty"` +} + +type Bookshelf struct { + // Access: Whether this bookshelf is PUBLIC or PRIVATE. + Access string `json:"access,omitempty"` + + // Created: Created time for this bookshelf (formatted UTC timestamp + // with millisecond resolution). + Created string `json:"created,omitempty"` + + // Description: Description of this bookshelf. + Description string `json:"description,omitempty"` + + // Id: Id of this bookshelf, only unique by user. + Id int64 `json:"id,omitempty"` + + // Kind: Resource type for bookshelf metadata. + Kind string `json:"kind,omitempty"` + + // SelfLink: URL to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: Title of this bookshelf. + Title string `json:"title,omitempty"` + + // Updated: Last modified time of this bookshelf (formatted UTC + // timestamp with millisecond resolution). + Updated string `json:"updated,omitempty"` + + // VolumeCount: Number of volumes in this bookshelf. + VolumeCount int64 `json:"volumeCount,omitempty"` + + // VolumesLastUpdated: Last time a volume was added or removed from this + // bookshelf (formatted UTC timestamp with millisecond resolution). + VolumesLastUpdated string `json:"volumesLastUpdated,omitempty"` +} + +type Bookshelves struct { + // Items: A list of bookshelves. + Items []*Bookshelf `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type ConcurrentAccessRestriction struct { + // DeviceAllowed: Whether access is granted for this (user, device, + // volume). + DeviceAllowed bool `json:"deviceAllowed,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaxConcurrentDevices: The maximum number of concurrent access + // licenses for this volume. + MaxConcurrentDevices int64 `json:"maxConcurrentDevices,omitempty"` + + // Message: Error/warning message. + Message string `json:"message,omitempty"` + + // Nonce: Client nonce for verification. Download access and + // client-validation only. + Nonce string `json:"nonce,omitempty"` + + // ReasonCode: Error/warning reason code. + ReasonCode string `json:"reasonCode,omitempty"` + + // Restricted: Whether this volume has any concurrent access + // restrictions. + Restricted bool `json:"restricted,omitempty"` + + // Signature: Response signature. + Signature string `json:"signature,omitempty"` + + // Source: Client app identifier for verification. Download access and + // client-validation only. + Source string `json:"source,omitempty"` + + // TimeWindowSeconds: Time in seconds for license auto-expiration. + TimeWindowSeconds int64 `json:"timeWindowSeconds,omitempty"` + + // VolumeId: Identifies the volume for which this entry applies. + VolumeId string `json:"volumeId,omitempty"` +} + +type Dictlayerdata struct { + Common *DictlayerdataCommon `json:"common,omitempty"` + + Dict *DictlayerdataDict `json:"dict,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type DictlayerdataCommon struct { + // Title: The display title and localized canonical name to use when + // searching for this entity on Google search. + Title string `json:"title,omitempty"` +} + +type DictlayerdataDict struct { + // Source: The source, url and attribution for this dictionary data. + Source *DictlayerdataDictSource `json:"source,omitempty"` + + Words []*DictlayerdataDictWords `json:"words,omitempty"` +} + +type DictlayerdataDictSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWords struct { + Derivatives []*DictlayerdataDictWordsDerivatives `json:"derivatives,omitempty"` + + Examples []*DictlayerdataDictWordsExamples `json:"examples,omitempty"` + + Senses []*DictlayerdataDictWordsSenses `json:"senses,omitempty"` + + // Source: The words with different meanings but not related words, e.g. + // "go" (game) and "go" (verb). + Source *DictlayerdataDictWordsSource `json:"source,omitempty"` +} + +type DictlayerdataDictWordsDerivatives struct { + Source *DictlayerdataDictWordsDerivativesSource `json:"source,omitempty"` + + Text string `json:"text,omitempty"` +} + +type DictlayerdataDictWordsDerivativesSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWordsExamples struct { + Source *DictlayerdataDictWordsExamplesSource `json:"source,omitempty"` + + Text string `json:"text,omitempty"` +} + +type DictlayerdataDictWordsExamplesSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWordsSenses struct { + Conjugations []*DictlayerdataDictWordsSensesConjugations `json:"conjugations,omitempty"` + + Definitions []*DictlayerdataDictWordsSensesDefinitions `json:"definitions,omitempty"` + + PartOfSpeech string `json:"partOfSpeech,omitempty"` + + Pronunciation string `json:"pronunciation,omitempty"` + + PronunciationUrl string `json:"pronunciationUrl,omitempty"` + + Source *DictlayerdataDictWordsSensesSource `json:"source,omitempty"` + + Syllabification string `json:"syllabification,omitempty"` + + Synonyms []*DictlayerdataDictWordsSensesSynonyms `json:"synonyms,omitempty"` +} + +type DictlayerdataDictWordsSensesConjugations struct { + Type string `json:"type,omitempty"` + + Value string `json:"value,omitempty"` +} + +type DictlayerdataDictWordsSensesDefinitions struct { + Definition string `json:"definition,omitempty"` + + Examples []*DictlayerdataDictWordsSensesDefinitionsExamples `json:"examples,omitempty"` +} + +type DictlayerdataDictWordsSensesDefinitionsExamples struct { + Source *DictlayerdataDictWordsSensesDefinitionsExamplesSource `json:"source,omitempty"` + + Text string `json:"text,omitempty"` +} + +type DictlayerdataDictWordsSensesDefinitionsExamplesSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWordsSensesSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWordsSensesSynonyms struct { + Source *DictlayerdataDictWordsSensesSynonymsSource `json:"source,omitempty"` + + Text string `json:"text,omitempty"` +} + +type DictlayerdataDictWordsSensesSynonymsSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DictlayerdataDictWordsSource struct { + Attribution string `json:"attribution,omitempty"` + + Url string `json:"url,omitempty"` +} + +type DownloadAccessRestriction struct { + // DeviceAllowed: If restricted, whether access is granted for this + // (user, device, volume). + DeviceAllowed bool `json:"deviceAllowed,omitempty"` + + // DownloadsAcquired: If restricted, the number of content download + // licenses already acquired (including the requesting client, if + // licensed). + DownloadsAcquired int64 `json:"downloadsAcquired,omitempty"` + + // JustAcquired: If deviceAllowed, whether access was just acquired with + // this request. + JustAcquired bool `json:"justAcquired,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // MaxDownloadDevices: If restricted, the maximum number of content + // download licenses for this volume. + MaxDownloadDevices int64 `json:"maxDownloadDevices,omitempty"` + + // Message: Error/warning message. + Message string `json:"message,omitempty"` + + // Nonce: Client nonce for verification. Download access and + // client-validation only. + Nonce string `json:"nonce,omitempty"` + + // ReasonCode: Error/warning reason code. Additional codes may be added + // in the future. 0 OK 100 ACCESS_DENIED_PUBLISHER_LIMIT 101 + // ACCESS_DENIED_LIMIT 200 WARNING_USED_LAST_ACCESS + ReasonCode string `json:"reasonCode,omitempty"` + + // Restricted: Whether this volume has any download access restrictions. + Restricted bool `json:"restricted,omitempty"` + + // Signature: Response signature. + Signature string `json:"signature,omitempty"` + + // Source: Client app identifier for verification. Download access and + // client-validation only. + Source string `json:"source,omitempty"` + + // VolumeId: Identifies the volume for which this entry applies. + VolumeId string `json:"volumeId,omitempty"` +} + +type DownloadAccesses struct { + // DownloadAccessList: A list of download access responses. + DownloadAccessList []*DownloadAccessRestriction `json:"downloadAccessList,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Geolayerdata struct { + Common *GeolayerdataCommon `json:"common,omitempty"` + + Geo *GeolayerdataGeo `json:"geo,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type GeolayerdataCommon struct { + // Lang: The language of the information url and description. + Lang string `json:"lang,omitempty"` + + // PreviewImageUrl: The URL for the preview image information. + PreviewImageUrl string `json:"previewImageUrl,omitempty"` + + // Snippet: The description for this location. + Snippet string `json:"snippet,omitempty"` + + // SnippetUrl: The URL for information for this location. Ex: wikipedia + // link. + SnippetUrl string `json:"snippetUrl,omitempty"` + + // Title: The display title and localized canonical name to use when + // searching for this entity on Google search. + Title string `json:"title,omitempty"` +} + +type GeolayerdataGeo struct { + // Boundary: The boundary of the location as a set of loops containing + // pairs of latitude, longitude coordinates. + Boundary [][]*GeolayerdataGeoBoundaryItem `json:"boundary,omitempty"` + + // CachePolicy: The cache policy active for this data. EX: UNRESTRICTED, + // RESTRICTED, NEVER + CachePolicy string `json:"cachePolicy,omitempty"` + + // CountryCode: The country code of the location. + CountryCode string `json:"countryCode,omitempty"` + + // Latitude: The latitude of the location. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude of the location. + Longitude float64 `json:"longitude,omitempty"` + + // MapType: The type of map that should be used for this location. EX: + // HYBRID, ROADMAP, SATELLITE, TERRAIN + MapType string `json:"mapType,omitempty"` + + // Viewport: The viewport for showing this location. This is a latitude, + // longitude rectangle. + Viewport *GeolayerdataGeoViewport `json:"viewport,omitempty"` + + // Zoom: The Zoom level to use for the map. Zoom levels between 0 (the + // lowest zoom level, in which the entire world can be seen on one map) + // to 21+ (down to individual buildings). See: + // https://developers.google.com/maps/documentation/staticmaps/#Zoomlevel + // s + Zoom int64 `json:"zoom,omitempty"` +} + +type GeolayerdataGeoBoundaryItem struct { + Latitude int64 `json:"latitude,omitempty"` + + Longitude int64 `json:"longitude,omitempty"` +} + +type GeolayerdataGeoViewport struct { + Hi *GeolayerdataGeoViewportHi `json:"hi,omitempty"` + + Lo *GeolayerdataGeoViewportLo `json:"lo,omitempty"` +} + +type GeolayerdataGeoViewportHi struct { + Latitude float64 `json:"latitude,omitempty"` + + Longitude float64 `json:"longitude,omitempty"` +} + +type GeolayerdataGeoViewportLo struct { + Latitude float64 `json:"latitude,omitempty"` + + Longitude float64 `json:"longitude,omitempty"` +} + +type Layersummaries struct { + // Items: A list of layer summary items. + Items []*Layersummary `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // TotalItems: The total number of layer summaries found. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Layersummary struct { + // AnnotationCount: The number of annotations for this layer. + AnnotationCount int64 `json:"annotationCount,omitempty"` + + // AnnotationTypes: The list of annotation types contained for this + // layer. + AnnotationTypes []string `json:"annotationTypes,omitempty"` + + // AnnotationsDataLink: Link to get data for this annotation. + AnnotationsDataLink string `json:"annotationsDataLink,omitempty"` + + // AnnotationsLink: The link to get the annotations for this layer. + AnnotationsLink string `json:"annotationsLink,omitempty"` + + // ContentVersion: The content version this resource is for. + ContentVersion string `json:"contentVersion,omitempty"` + + // DataCount: The number of data items for this layer. + DataCount int64 `json:"dataCount,omitempty"` + + // Id: Unique id of this layer summary. + Id string `json:"id,omitempty"` + + // Kind: Resource Type + Kind string `json:"kind,omitempty"` + + // LayerId: The layer id for this summary. + LayerId string `json:"layerId,omitempty"` + + // SelfLink: URL to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Timestamp for the last time an item in this layer was + // updated. (RFC 3339 UTC date-time format). + Updated string `json:"updated,omitempty"` + + // VolumeAnnotationsVersion: The current version of this layer's volume + // annotations. Note that this version applies only to the data in the + // books.layers.volumeAnnotations.* responses. The actual annotation + // data is versioned separately. + VolumeAnnotationsVersion string `json:"volumeAnnotationsVersion,omitempty"` + + // VolumeId: The volume id this resource is for. + VolumeId string `json:"volumeId,omitempty"` +} + +type ReadingPosition struct { + // EpubCfiPosition: Position in an EPUB as a CFI. + EpubCfiPosition string `json:"epubCfiPosition,omitempty"` + + // GbImagePosition: Position in a volume for image-based content. + GbImagePosition string `json:"gbImagePosition,omitempty"` + + // GbTextPosition: Position in a volume for text-based content. + GbTextPosition string `json:"gbTextPosition,omitempty"` + + // Kind: Resource type for a reading position. + Kind string `json:"kind,omitempty"` + + // PdfPosition: Position in a PDF file. + PdfPosition string `json:"pdfPosition,omitempty"` + + // Updated: Timestamp when this reading position was last updated + // (formatted UTC timestamp with millisecond resolution). + Updated string `json:"updated,omitempty"` + + // VolumeId: Volume id associated with this reading position. + VolumeId string `json:"volumeId,omitempty"` +} + +type RequestAccess struct { + // ConcurrentAccess: A concurrent access response. + ConcurrentAccess *ConcurrentAccessRestriction `json:"concurrentAccess,omitempty"` + + // DownloadAccess: A download access response. + DownloadAccess *DownloadAccessRestriction `json:"downloadAccess,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` +} + +type Review struct { + // Author: Author of this review. + Author *ReviewAuthor `json:"author,omitempty"` + + // Content: Review text. + Content string `json:"content,omitempty"` + + // Date: Date of this review. + Date string `json:"date,omitempty"` + + // FullTextUrl: URL for the full review text, for reviews gathered from + // the web. + FullTextUrl string `json:"fullTextUrl,omitempty"` + + // Kind: Resource type for a review. + Kind string `json:"kind,omitempty"` + + // Rating: Star rating for this review. Possible values are ONE, TWO, + // THREE, FOUR, FIVE or NOT_RATED. + Rating string `json:"rating,omitempty"` + + // Source: Information regarding the source of this review, when the + // review is not from a Google Books user. + Source *ReviewSource `json:"source,omitempty"` + + // Title: Title for this review. + Title string `json:"title,omitempty"` + + // Type: Source type for this review. Possible values are EDITORIAL, + // WEB_USER or GOOGLE_USER. + Type string `json:"type,omitempty"` + + // VolumeId: Volume that this review is for. + VolumeId string `json:"volumeId,omitempty"` +} + +type ReviewAuthor struct { + // DisplayName: Name of this person. + DisplayName string `json:"displayName,omitempty"` +} + +type ReviewSource struct { + // Description: Name of the source. + Description string `json:"description,omitempty"` + + // ExtraDescription: Extra text about the source of the review. + ExtraDescription string `json:"extraDescription,omitempty"` + + // Url: URL of the source of the review. + Url string `json:"url,omitempty"` +} + +type Volume struct { + // AccessInfo: Any information about a volume related to reading or + // obtaining that volume text. This information can depend on country + // (books may be public domain in one country but not in another, e.g.). + AccessInfo *VolumeAccessInfo `json:"accessInfo,omitempty"` + + // Etag: Opaque identifier for a specific version of a volume resource. + // (In LITE projection) + Etag string `json:"etag,omitempty"` + + // Id: Unique identifier for a volume. (In LITE projection.) + Id string `json:"id,omitempty"` + + // Kind: Resource type for a volume. (In LITE projection.) + Kind string `json:"kind,omitempty"` + + // LayerInfo: What layers exist in this volume and high level + // information about them. + LayerInfo *VolumeLayerInfo `json:"layerInfo,omitempty"` + + // RecommendedInfo: Recommendation related information for this volume. + RecommendedInfo *VolumeRecommendedInfo `json:"recommendedInfo,omitempty"` + + // SaleInfo: Any information about a volume related to the eBookstore + // and/or purchaseability. This information can depend on the country + // where the request originates from (i.e. books may not be for sale in + // certain countries). + SaleInfo *VolumeSaleInfo `json:"saleInfo,omitempty"` + + // SearchInfo: Search result information related to this volume. + SearchInfo *VolumeSearchInfo `json:"searchInfo,omitempty"` + + // SelfLink: URL to this resource. (In LITE projection.) + SelfLink string `json:"selfLink,omitempty"` + + // UserInfo: User specific information related to this volume. (e.g. + // page this user last read or whether they purchased this book) + UserInfo *VolumeUserInfo `json:"userInfo,omitempty"` + + // VolumeInfo: General volume information. + VolumeInfo *VolumeVolumeInfo `json:"volumeInfo,omitempty"` +} + +type VolumeAccessInfo struct { + // AccessViewStatus: Combines the access and viewability of this volume + // into a single status field for this user. Values can be + // FULL_PURCHASED, FULL_PUBLIC_DOMAIN, SAMPLE or NONE. (In LITE + // projection.) + AccessViewStatus string `json:"accessViewStatus,omitempty"` + + // Country: The two-letter ISO_3166-1 country code for which this access + // information is valid. (In LITE projection.) + Country string `json:"country,omitempty"` + + // DownloadAccess: Information about a volume's download license access + // restrictions. + DownloadAccess *DownloadAccessRestriction `json:"downloadAccess,omitempty"` + + // DriveImportedContentLink: URL to the Google Drive viewer if this + // volume is uploaded by the user by selecting the file from Google + // Drive. + DriveImportedContentLink string `json:"driveImportedContentLink,omitempty"` + + // Embeddable: Whether this volume can be embedded in a viewport using + // the Embedded Viewer API. + Embeddable bool `json:"embeddable,omitempty"` + + // Epub: Information about epub content. (In LITE projection.) + Epub *VolumeAccessInfoEpub `json:"epub,omitempty"` + + // ExplicitOfflineLicenseManagement: Whether this volume requires that + // the client explicitly request offline download license rather than + // have it done automatically when loading the content, if the client + // supports it. + ExplicitOfflineLicenseManagement bool `json:"explicitOfflineLicenseManagement,omitempty"` + + // Pdf: Information about pdf content. (In LITE projection.) + Pdf *VolumeAccessInfoPdf `json:"pdf,omitempty"` + + // PublicDomain: Whether or not this book is public domain in the + // country listed above. + PublicDomain bool `json:"publicDomain,omitempty"` + + // QuoteSharingAllowed: Whether quote sharing is allowed for this + // volume. + QuoteSharingAllowed bool `json:"quoteSharingAllowed,omitempty"` + + // TextToSpeechPermission: Whether text-to-speech is permitted for this + // volume. Values can be ALLOWED, ALLOWED_FOR_ACCESSIBILITY, or + // NOT_ALLOWED. + TextToSpeechPermission string `json:"textToSpeechPermission,omitempty"` + + // ViewOrderUrl: For ordered but not yet processed orders, we give a URL + // that can be used to go to the appropriate Google Wallet page. + ViewOrderUrl string `json:"viewOrderUrl,omitempty"` + + // Viewability: The read access of a volume. Possible values are + // PARTIAL, ALL_PAGES, NO_PAGES or UNKNOWN. This value depends on the + // country listed above. A value of PARTIAL means that the publisher has + // allowed some portion of the volume to be viewed publicly, without + // purchase. This can apply to eBooks as well as non-eBooks. Public + // domain books will always have a value of ALL_PAGES. + Viewability string `json:"viewability,omitempty"` + + // WebReaderLink: URL to read this volume on the Google Books site. Link + // will not allow users to read non-viewable volumes. + WebReaderLink string `json:"webReaderLink,omitempty"` +} + +type VolumeAccessInfoEpub struct { + // AcsTokenLink: URL to retrieve ACS token for epub download. (In LITE + // projection.) + AcsTokenLink string `json:"acsTokenLink,omitempty"` + + // DownloadLink: URL to download epub. (In LITE projection.) + DownloadLink string `json:"downloadLink,omitempty"` + + // IsAvailable: Is a flowing text epub available either as public domain + // or for purchase. (In LITE projection.) + IsAvailable bool `json:"isAvailable,omitempty"` +} + +type VolumeAccessInfoPdf struct { + // AcsTokenLink: URL to retrieve ACS token for pdf download. (In LITE + // projection.) + AcsTokenLink string `json:"acsTokenLink,omitempty"` + + // DownloadLink: URL to download pdf. (In LITE projection.) + DownloadLink string `json:"downloadLink,omitempty"` + + // IsAvailable: Is a scanned image pdf available either as public domain + // or for purchase. (In LITE projection.) + IsAvailable bool `json:"isAvailable,omitempty"` +} + +type VolumeLayerInfo struct { + // Layers: A layer should appear here if and only if the layer exists + // for this book. + Layers []*VolumeLayerInfoLayers `json:"layers,omitempty"` +} + +type VolumeLayerInfoLayers struct { + // LayerId: The layer id of this layer (e.g. "geo"). + LayerId string `json:"layerId,omitempty"` + + // VolumeAnnotationsVersion: The current version of this layer's volume + // annotations. Note that this version applies only to the data in the + // books.layers.volumeAnnotations.* responses. The actual annotation + // data is versioned separately. + VolumeAnnotationsVersion string `json:"volumeAnnotationsVersion,omitempty"` +} + +type VolumeRecommendedInfo struct { + // Explanation: A text explaining why this volume is recommended. + Explanation string `json:"explanation,omitempty"` +} + +type VolumeSaleInfo struct { + // BuyLink: URL to purchase this volume on the Google Books site. (In + // LITE projection) + BuyLink string `json:"buyLink,omitempty"` + + // Country: The two-letter ISO_3166-1 country code for which this sale + // information is valid. (In LITE projection.) + Country string `json:"country,omitempty"` + + // IsEbook: Whether or not this volume is an eBook (can be added to the + // My eBooks shelf). + IsEbook bool `json:"isEbook,omitempty"` + + // ListPrice: Suggested retail price. (In LITE projection.) + ListPrice *VolumeSaleInfoListPrice `json:"listPrice,omitempty"` + + // Offers: Offers available for this volume (sales and rentals). + Offers []*VolumeSaleInfoOffers `json:"offers,omitempty"` + + // OnSaleDate: The date on which this book is available for sale. + OnSaleDate string `json:"onSaleDate,omitempty"` + + // RetailPrice: The actual selling price of the book. This is the same + // as the suggested retail or list price unless there are offers or + // discounts on this volume. (In LITE projection.) + RetailPrice *VolumeSaleInfoRetailPrice `json:"retailPrice,omitempty"` + + // Saleability: Whether or not this book is available for sale or + // offered for free in the Google eBookstore for the country listed + // above. Possible values are FOR_SALE, FOR_RENTAL_ONLY, + // FOR_SALE_AND_RENTAL, FREE, NOT_FOR_SALE, or FOR_PREORDER. + Saleability string `json:"saleability,omitempty"` +} + +type VolumeSaleInfoListPrice struct { + // Amount: Amount in the currency listed below. (In LITE projection.) + Amount float64 `json:"amount,omitempty"` + + // CurrencyCode: An ISO 4217, three-letter currency code. (In LITE + // projection.) + CurrencyCode string `json:"currencyCode,omitempty"` +} + +type VolumeSaleInfoOffers struct { + // FinskyOfferType: The finsky offer type (e.g., PURCHASE=0 RENTAL=3) + FinskyOfferType int64 `json:"finskyOfferType,omitempty"` + + // ListPrice: Offer list (=undiscounted) price in Micros. + ListPrice *VolumeSaleInfoOffersListPrice `json:"listPrice,omitempty"` + + // RentalDuration: The rental duration (for rental offers only). + RentalDuration *VolumeSaleInfoOffersRentalDuration `json:"rentalDuration,omitempty"` + + // RetailPrice: Offer retail (=discounted) price in Micros + RetailPrice *VolumeSaleInfoOffersRetailPrice `json:"retailPrice,omitempty"` +} + +type VolumeSaleInfoOffersListPrice struct { + AmountInMicros float64 `json:"amountInMicros,omitempty"` + + CurrencyCode string `json:"currencyCode,omitempty"` +} + +type VolumeSaleInfoOffersRentalDuration struct { + Count float64 `json:"count,omitempty"` + + Unit string `json:"unit,omitempty"` +} + +type VolumeSaleInfoOffersRetailPrice struct { + AmountInMicros float64 `json:"amountInMicros,omitempty"` + + CurrencyCode string `json:"currencyCode,omitempty"` +} + +type VolumeSaleInfoRetailPrice struct { + // Amount: Amount in the currency listed below. (In LITE projection.) + Amount float64 `json:"amount,omitempty"` + + // CurrencyCode: An ISO 4217, three-letter currency code. (In LITE + // projection.) + CurrencyCode string `json:"currencyCode,omitempty"` +} + +type VolumeSearchInfo struct { + // TextSnippet: A text snippet containing the search query. + TextSnippet string `json:"textSnippet,omitempty"` +} + +type VolumeUserInfo struct { + // Copy: Copy/Paste accounting information. + Copy *VolumeUserInfoCopy `json:"copy,omitempty"` + + // IsInMyBooks: Whether or not this volume is currently in "my books." + IsInMyBooks bool `json:"isInMyBooks,omitempty"` + + // IsPreordered: Whether or not this volume was pre-ordered by the + // authenticated user making the request. (In LITE projection.) + IsPreordered bool `json:"isPreordered,omitempty"` + + // IsPurchased: Whether or not this volume was purchased by the + // authenticated user making the request. (In LITE projection.) + IsPurchased bool `json:"isPurchased,omitempty"` + + // IsUploaded: Whether or not this volume was user uploaded. + IsUploaded bool `json:"isUploaded,omitempty"` + + // ReadingPosition: The user's current reading position in the volume, + // if one is available. (In LITE projection.) + ReadingPosition *ReadingPosition `json:"readingPosition,omitempty"` + + // RentalPeriod: Period during this book is/was a valid rental. + RentalPeriod *VolumeUserInfoRentalPeriod `json:"rentalPeriod,omitempty"` + + // RentalState: Whether this book is an active or an expired rental. + RentalState string `json:"rentalState,omitempty"` + + // Review: This user's review of this volume, if one exists. + Review *Review `json:"review,omitempty"` + + // Updated: Timestamp when this volume was last modified by a user + // action, such as a reading position update, volume purchase or writing + // a review. (RFC 3339 UTC date-time format). + Updated string `json:"updated,omitempty"` + + UserUploadedVolumeInfo *VolumeUserInfoUserUploadedVolumeInfo `json:"userUploadedVolumeInfo,omitempty"` +} + +type VolumeUserInfoCopy struct { + AllowedCharacterCount int64 `json:"allowedCharacterCount,omitempty"` + + LimitType string `json:"limitType,omitempty"` + + RemainingCharacterCount int64 `json:"remainingCharacterCount,omitempty"` + + Updated string `json:"updated,omitempty"` +} + +type VolumeUserInfoRentalPeriod struct { + EndUtcSec int64 `json:"endUtcSec,omitempty,string"` + + StartUtcSec int64 `json:"startUtcSec,omitempty,string"` +} + +type VolumeUserInfoUserUploadedVolumeInfo struct { + ProcessingState string `json:"processingState,omitempty"` +} + +type VolumeVolumeInfo struct { + // Authors: The names of the authors and/or editors for this volume. (In + // LITE projection) + Authors []string `json:"authors,omitempty"` + + // AverageRating: The mean review rating for this volume. (min = 1.0, + // max = 5.0) + AverageRating float64 `json:"averageRating,omitempty"` + + // CanonicalVolumeLink: Canonical URL for a volume. (In LITE + // projection.) + CanonicalVolumeLink string `json:"canonicalVolumeLink,omitempty"` + + // Categories: A list of subject categories, such as "Fiction", + // "Suspense", etc. + Categories []string `json:"categories,omitempty"` + + // ContentVersion: An identifier for the version of the volume content + // (text & images). (In LITE projection) + ContentVersion string `json:"contentVersion,omitempty"` + + // Description: A synopsis of the volume. The text of the description is + // formatted in HTML and includes simple formatting elements, such as b, + // i, and br tags. (In LITE projection.) + Description string `json:"description,omitempty"` + + // Dimensions: Physical dimensions of this volume. + Dimensions *VolumeVolumeInfoDimensions `json:"dimensions,omitempty"` + + // ImageLinks: A list of image links for all the sizes that are + // available. (In LITE projection.) + ImageLinks *VolumeVolumeInfoImageLinks `json:"imageLinks,omitempty"` + + // IndustryIdentifiers: Industry standard identifiers for this volume. + IndustryIdentifiers []*VolumeVolumeInfoIndustryIdentifiers `json:"industryIdentifiers,omitempty"` + + // InfoLink: URL to view information about this volume on the Google + // Books site. (In LITE projection) + InfoLink string `json:"infoLink,omitempty"` + + // Language: Best language for this volume (based on content). It is the + // two-letter ISO 639-1 code such as 'fr', 'en', etc. + Language string `json:"language,omitempty"` + + // MainCategory: The main category to which this volume belongs. It will + // be the category from the categories list returned below that has the + // highest weight. + MainCategory string `json:"mainCategory,omitempty"` + + // PageCount: Total number of pages as per publisher metadata. + PageCount int64 `json:"pageCount,omitempty"` + + // PreviewLink: URL to preview this volume on the Google Books site. + PreviewLink string `json:"previewLink,omitempty"` + + // PrintType: Type of publication of this volume. Possible values are + // BOOK or MAGAZINE. + PrintType string `json:"printType,omitempty"` + + // PrintedPageCount: Total number of printed pages in generated pdf + // representation. + PrintedPageCount int64 `json:"printedPageCount,omitempty"` + + // PublishedDate: Date of publication. (In LITE projection.) + PublishedDate string `json:"publishedDate,omitempty"` + + // Publisher: Publisher of this volume. (In LITE projection.) + Publisher string `json:"publisher,omitempty"` + + // RatingsCount: The number of review ratings for this volume. + RatingsCount int64 `json:"ratingsCount,omitempty"` + + // Subtitle: Volume subtitle. (In LITE projection.) + Subtitle string `json:"subtitle,omitempty"` + + // Title: Volume title. (In LITE projection.) + Title string `json:"title,omitempty"` +} + +type VolumeVolumeInfoDimensions struct { + // Height: Height or length of this volume (in cm). + Height string `json:"height,omitempty"` + + // Thickness: Thickness of this volume (in cm). + Thickness string `json:"thickness,omitempty"` + + // Width: Width of this volume (in cm). + Width string `json:"width,omitempty"` +} + +type VolumeVolumeInfoImageLinks struct { + // ExtraLarge: Image link for extra large size (width of ~1280 pixels). + // (In LITE projection) + ExtraLarge string `json:"extraLarge,omitempty"` + + // Large: Image link for large size (width of ~800 pixels). (In LITE + // projection) + Large string `json:"large,omitempty"` + + // Medium: Image link for medium size (width of ~575 pixels). (In LITE + // projection) + Medium string `json:"medium,omitempty"` + + // Small: Image link for small size (width of ~300 pixels). (In LITE + // projection) + Small string `json:"small,omitempty"` + + // SmallThumbnail: Image link for small thumbnail size (width of ~80 + // pixels). (In LITE projection) + SmallThumbnail string `json:"smallThumbnail,omitempty"` + + // Thumbnail: Image link for thumbnail size (width of ~128 pixels). (In + // LITE projection) + Thumbnail string `json:"thumbnail,omitempty"` +} + +type VolumeVolumeInfoIndustryIdentifiers struct { + // Identifier: Industry specific volume identifier. + Identifier string `json:"identifier,omitempty"` + + // Type: Identifier type. Possible values are ISBN_10, ISBN_13, ISSN and + // OTHER. + Type string `json:"type,omitempty"` +} + +type Volumeannotation struct { + // AnnotationDataId: The annotation data id for this volume annotation. + AnnotationDataId string `json:"annotationDataId,omitempty"` + + // AnnotationDataLink: Link to get data for this annotation. + AnnotationDataLink string `json:"annotationDataLink,omitempty"` + + // AnnotationType: The type of annotation this is. + AnnotationType string `json:"annotationType,omitempty"` + + // ContentRanges: The content ranges to identify the selected text. + ContentRanges *VolumeannotationContentRanges `json:"contentRanges,omitempty"` + + // Data: Data for this annotation. + Data string `json:"data,omitempty"` + + // Deleted: Indicates that this annotation is deleted. + Deleted bool `json:"deleted,omitempty"` + + // Id: Unique id of this volume annotation. + Id string `json:"id,omitempty"` + + // Kind: Resource Type + Kind string `json:"kind,omitempty"` + + // LayerId: The Layer this annotation is for. + LayerId string `json:"layerId,omitempty"` + + // PageIds: Pages the annotation spans. + PageIds []string `json:"pageIds,omitempty"` + + // SelectedText: Excerpt from the volume. + SelectedText string `json:"selectedText,omitempty"` + + // SelfLink: URL to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: Timestamp for the last time this anntoation was updated. + // (RFC 3339 UTC date-time format). + Updated string `json:"updated,omitempty"` + + // VolumeId: The Volume this annotation is for. + VolumeId string `json:"volumeId,omitempty"` +} + +type VolumeannotationContentRanges struct { + // CfiRange: Range in CFI format for this annotation for version above. + CfiRange *BooksAnnotationsRange `json:"cfiRange,omitempty"` + + // ContentVersion: Content version applicable to ranges below. + ContentVersion string `json:"contentVersion,omitempty"` + + // GbImageRange: Range in GB image format for this annotation for + // version above. + GbImageRange *BooksAnnotationsRange `json:"gbImageRange,omitempty"` + + // GbTextRange: Range in GB text format for this annotation for version + // above. + GbTextRange *BooksAnnotationsRange `json:"gbTextRange,omitempty"` +} + +type Volumeannotations struct { + // Items: A list of volume annotations. + Items []*Volumeannotation `json:"items,omitempty"` + + // Kind: Resource type + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token to pass in for pagination for the next page. + // This will not be present if this request does not have more results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: The total number of volume annotations found. + TotalItems int64 `json:"totalItems,omitempty"` + + // Version: The version string for all of the volume annotations in this + // layer (not just the ones in this response). Note: the version string + // doesn't apply to the annotation data, just the information in this + // response (e.g. the location of annotations in the book). + Version string `json:"version,omitempty"` +} + +type Volumes struct { + // Items: A list of volumes. + Items []*Volume `json:"items,omitempty"` + + // Kind: Resource type. + Kind string `json:"kind,omitempty"` + + // TotalItems: Total number of volumes found. This might be greater than + // the number of volumes returned in this response if results have been + // paginated. + TotalItems int64 `json:"totalItems,omitempty"` +} + +// method id "books.bookshelves.get": + +type BookshelvesGetCall struct { + s *Service + userId string + shelf string + opt_ map[string]interface{} +} + +// Get: Retrieves metadata for a specific bookshelf for the specified +// user. +func (r *BookshelvesService) Get(userId string, shelf string) *BookshelvesGetCall { + c := &BookshelvesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.shelf = shelf + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *BookshelvesGetCall) Source(source string) *BookshelvesGetCall { + c.opt_["source"] = source + return c +} + +func (c *BookshelvesGetCall) Do() (*Bookshelf, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/bookshelves/{shelf}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bookshelf) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves metadata for a specific bookshelf for the specified user.", + // "httpMethod": "GET", + // "id": "books.bookshelves.get", + // "parameterOrder": [ + // "userId", + // "shelf" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "ID of user for whom to retrieve bookshelves.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/bookshelves/{shelf}", + // "response": { + // "$ref": "Bookshelf" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.bookshelves.list": + +type BookshelvesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of public bookshelves for the specified user. +func (r *BookshelvesService) List(userId string) *BookshelvesListCall { + c := &BookshelvesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *BookshelvesListCall) Source(source string) *BookshelvesListCall { + c.opt_["source"] = source + return c +} + +func (c *BookshelvesListCall) Do() (*Bookshelves, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/bookshelves") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bookshelves) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of public bookshelves for the specified user.", + // "httpMethod": "GET", + // "id": "books.bookshelves.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "ID of user for whom to retrieve bookshelves.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/bookshelves", + // "response": { + // "$ref": "Bookshelves" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.bookshelves.volumes.list": + +type BookshelvesVolumesListCall struct { + s *Service + userId string + shelf string + opt_ map[string]interface{} +} + +// List: Retrieves volumes in a specific bookshelf for the specified +// user. +func (r *BookshelvesVolumesService) List(userId string, shelf string) *BookshelvesVolumesListCall { + c := &BookshelvesVolumesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.shelf = shelf + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *BookshelvesVolumesListCall) MaxResults(maxResults int64) *BookshelvesVolumesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ShowPreorders sets the optional parameter "showPreorders": Set to +// true to show pre-ordered books. Defaults to false. +func (c *BookshelvesVolumesListCall) ShowPreorders(showPreorders bool) *BookshelvesVolumesListCall { + c.opt_["showPreorders"] = showPreorders + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *BookshelvesVolumesListCall) Source(source string) *BookshelvesVolumesListCall { + c.opt_["source"] = source + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first element to return (starts at 0) +func (c *BookshelvesVolumesListCall) StartIndex(startIndex int64) *BookshelvesVolumesListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *BookshelvesVolumesListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showPreorders"]; ok { + params.Set("showPreorders", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/bookshelves/{shelf}/volumes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves volumes in a specific bookshelf for the specified user.", + // "httpMethod": "GET", + // "id": "books.bookshelves.volumes.list", + // "parameterOrder": [ + // "userId", + // "shelf" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "shelf": { + // "description": "ID of bookshelf to retrieve volumes.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "showPreorders": { + // "description": "Set to true to show pre-ordered books. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first element to return (starts at 0)", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "userId": { + // "description": "ID of user for whom to retrieve bookshelf volumes.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/bookshelves/{shelf}/volumes", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.cloudloading.addBook": + +type CloudloadingAddBookCall struct { + s *Service + opt_ map[string]interface{} +} + +// AddBook: +func (r *CloudloadingService) AddBook() *CloudloadingAddBookCall { + c := &CloudloadingAddBookCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Drive_document_id sets the optional parameter "drive_document_id": A +// drive document id. The upload_client_token must not be set. +func (c *CloudloadingAddBookCall) Drive_document_id(drive_document_id string) *CloudloadingAddBookCall { + c.opt_["drive_document_id"] = drive_document_id + return c +} + +// Mime_type sets the optional parameter "mime_type": The document MIME +// type. It can be set only if the drive_document_id is set. +func (c *CloudloadingAddBookCall) Mime_type(mime_type string) *CloudloadingAddBookCall { + c.opt_["mime_type"] = mime_type + return c +} + +// Name sets the optional parameter "name": The document name. It can be +// set only if the drive_document_id is set. +func (c *CloudloadingAddBookCall) Name(name string) *CloudloadingAddBookCall { + c.opt_["name"] = name + return c +} + +// Upload_client_token sets the optional parameter +// "upload_client_token": +func (c *CloudloadingAddBookCall) Upload_client_token(upload_client_token string) *CloudloadingAddBookCall { + c.opt_["upload_client_token"] = upload_client_token + return c +} + +func (c *CloudloadingAddBookCall) Do() (*BooksCloudloadingResource, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["drive_document_id"]; ok { + params.Set("drive_document_id", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mime_type"]; ok { + params.Set("mime_type", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["upload_client_token"]; ok { + params.Set("upload_client_token", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "cloudloading/addBook") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BooksCloudloadingResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "", + // "httpMethod": "POST", + // "id": "books.cloudloading.addBook", + // "parameters": { + // "drive_document_id": { + // "description": "A drive document id. The upload_client_token must not be set.", + // "location": "query", + // "type": "string" + // }, + // "mime_type": { + // "description": "The document MIME type. It can be set only if the drive_document_id is set.", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "The document name. It can be set only if the drive_document_id is set.", + // "location": "query", + // "type": "string" + // }, + // "upload_client_token": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "cloudloading/addBook", + // "response": { + // "$ref": "BooksCloudloadingResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.cloudloading.deleteBook": + +type CloudloadingDeleteBookCall struct { + s *Service + volumeId string + opt_ map[string]interface{} +} + +// DeleteBook: Remove the book and its contents +func (r *CloudloadingService) DeleteBook(volumeId string) *CloudloadingDeleteBookCall { + c := &CloudloadingDeleteBookCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + return c +} + +func (c *CloudloadingDeleteBookCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + urls := googleapi.ResolveRelative(c.s.BasePath, "cloudloading/deleteBook") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove the book and its contents", + // "httpMethod": "POST", + // "id": "books.cloudloading.deleteBook", + // "parameterOrder": [ + // "volumeId" + // ], + // "parameters": { + // "volumeId": { + // "description": "The id of the book to be removed.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "cloudloading/deleteBook", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.cloudloading.updateBook": + +type CloudloadingUpdateBookCall struct { + s *Service + bookscloudloadingresource *BooksCloudloadingResource + opt_ map[string]interface{} +} + +// UpdateBook: +func (r *CloudloadingService) UpdateBook(bookscloudloadingresource *BooksCloudloadingResource) *CloudloadingUpdateBookCall { + c := &CloudloadingUpdateBookCall{s: r.s, opt_: make(map[string]interface{})} + c.bookscloudloadingresource = bookscloudloadingresource + return c +} + +func (c *CloudloadingUpdateBookCall) Do() (*BooksCloudloadingResource, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bookscloudloadingresource) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "cloudloading/updateBook") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BooksCloudloadingResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "", + // "httpMethod": "POST", + // "id": "books.cloudloading.updateBook", + // "path": "cloudloading/updateBook", + // "request": { + // "$ref": "BooksCloudloadingResource" + // }, + // "response": { + // "$ref": "BooksCloudloadingResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.get": + +type LayersGetCall struct { + s *Service + volumeId string + summaryId string + opt_ map[string]interface{} +} + +// Get: Gets the layer summary for a volume. +func (r *LayersService) Get(volumeId string, summaryId string) *LayersGetCall { + c := &LayersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.summaryId = summaryId + return c +} + +// ContentVersion sets the optional parameter "contentVersion": The +// content version for the requested volume. +func (c *LayersGetCall) ContentVersion(contentVersion string) *LayersGetCall { + c.opt_["contentVersion"] = contentVersion + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersGetCall) Source(source string) *LayersGetCall { + c.opt_["source"] = source + return c +} + +func (c *LayersGetCall) Do() (*Layersummary, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["contentVersion"]; ok { + params.Set("contentVersion", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layersummary/{summaryId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{summaryId}", url.QueryEscape(c.summaryId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Layersummary) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the layer summary for a volume.", + // "httpMethod": "GET", + // "id": "books.layers.get", + // "parameterOrder": [ + // "volumeId", + // "summaryId" + // ], + // "parameters": { + // "contentVersion": { + // "description": "The content version for the requested volume.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "summaryId": { + // "description": "The ID for the layer to get the summary for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve layers for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}/layersummary/{summaryId}", + // "response": { + // "$ref": "Layersummary" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.list": + +type LayersListCall struct { + s *Service + volumeId string + opt_ map[string]interface{} +} + +// List: List the layer summaries for a volume. +func (r *LayersService) List(volumeId string) *LayersListCall { + c := &LayersListCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + return c +} + +// ContentVersion sets the optional parameter "contentVersion": The +// content version for the requested volume. +func (c *LayersListCall) ContentVersion(contentVersion string) *LayersListCall { + c.opt_["contentVersion"] = contentVersion + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *LayersListCall) MaxResults(maxResults int64) *LayersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous page. +func (c *LayersListCall) PageToken(pageToken string) *LayersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersListCall) Source(source string) *LayersListCall { + c.opt_["source"] = source + return c +} + +func (c *LayersListCall) Do() (*Layersummaries, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["contentVersion"]; ok { + params.Set("contentVersion", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layersummary") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Layersummaries) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the layer summaries for a volume.", + // "httpMethod": "GET", + // "id": "books.layers.list", + // "parameterOrder": [ + // "volumeId" + // ], + // "parameters": { + // "contentVersion": { + // "description": "The content version for the requested volume.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "200", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous page.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve layers for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}/layersummary", + // "response": { + // "$ref": "Layersummaries" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.annotationData.get": + +type LayersAnnotationDataGetCall struct { + s *Service + volumeId string + layerId string + annotationDataId string + contentVersion string + opt_ map[string]interface{} +} + +// Get: Gets the annotation data. +func (r *LayersAnnotationDataService) Get(volumeId string, layerId string, annotationDataId string, contentVersion string) *LayersAnnotationDataGetCall { + c := &LayersAnnotationDataGetCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.layerId = layerId + c.annotationDataId = annotationDataId + c.contentVersion = contentVersion + return c +} + +// AllowWebDefinitions sets the optional parameter +// "allowWebDefinitions": For the dictionary layer. Whether or not to +// allow web definitions. +func (c *LayersAnnotationDataGetCall) AllowWebDefinitions(allowWebDefinitions bool) *LayersAnnotationDataGetCall { + c.opt_["allowWebDefinitions"] = allowWebDefinitions + return c +} + +// H sets the optional parameter "h": The requested pixel height for any +// images. If height is provided width must also be provided. +func (c *LayersAnnotationDataGetCall) H(h int64) *LayersAnnotationDataGetCall { + c.opt_["h"] = h + return c +} + +// Locale sets the optional parameter "locale": The locale information +// for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: +// 'en_US'. +func (c *LayersAnnotationDataGetCall) Locale(locale string) *LayersAnnotationDataGetCall { + c.opt_["locale"] = locale + return c +} + +// Scale sets the optional parameter "scale": The requested scale for +// the image. +func (c *LayersAnnotationDataGetCall) Scale(scale int64) *LayersAnnotationDataGetCall { + c.opt_["scale"] = scale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersAnnotationDataGetCall) Source(source string) *LayersAnnotationDataGetCall { + c.opt_["source"] = source + return c +} + +// W sets the optional parameter "w": The requested pixel width for any +// images. If width is provided height must also be provided. +func (c *LayersAnnotationDataGetCall) W(w int64) *LayersAnnotationDataGetCall { + c.opt_["w"] = w + return c +} + +func (c *LayersAnnotationDataGetCall) Do() (*Annotationdata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("contentVersion", fmt.Sprintf("%v", c.contentVersion)) + if v, ok := c.opt_["allowWebDefinitions"]; ok { + params.Set("allowWebDefinitions", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["h"]; ok { + params.Set("h", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scale"]; ok { + params.Set("scale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["w"]; ok { + params.Set("w", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layers/{layerId}/data/{annotationDataId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{layerId}", url.QueryEscape(c.layerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{annotationDataId}", url.QueryEscape(c.annotationDataId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotationdata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the annotation data.", + // "httpMethod": "GET", + // "id": "books.layers.annotationData.get", + // "parameterOrder": [ + // "volumeId", + // "layerId", + // "annotationDataId", + // "contentVersion" + // ], + // "parameters": { + // "allowWebDefinitions": { + // "description": "For the dictionary layer. Whether or not to allow web definitions.", + // "location": "query", + // "type": "boolean" + // }, + // "annotationDataId": { + // "description": "The ID of the annotation data to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "contentVersion": { + // "description": "The content version for the volume you are trying to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "h": { + // "description": "The requested pixel height for any images. If height is provided width must also be provided.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "layerId": { + // "description": "The ID for the layer to get the annotations.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + // "location": "query", + // "type": "string" + // }, + // "scale": { + // "description": "The requested scale for the image.", + // "format": "int32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve annotations for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "w": { + // "description": "The requested pixel width for any images. If width is provided height must also be provided.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "volumes/{volumeId}/layers/{layerId}/data/{annotationDataId}", + // "response": { + // "$ref": "Annotationdata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.annotationData.list": + +type LayersAnnotationDataListCall struct { + s *Service + volumeId string + layerId string + contentVersion string + opt_ map[string]interface{} +} + +// List: Gets the annotation data for a volume and layer. +func (r *LayersAnnotationDataService) List(volumeId string, layerId string, contentVersion string) *LayersAnnotationDataListCall { + c := &LayersAnnotationDataListCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.layerId = layerId + c.contentVersion = contentVersion + return c +} + +// AnnotationDataId sets the optional parameter "annotationDataId": The +// list of Annotation Data Ids to retrieve. Pagination is ignored if +// this is set. +func (c *LayersAnnotationDataListCall) AnnotationDataId(annotationDataId string) *LayersAnnotationDataListCall { + c.opt_["annotationDataId"] = annotationDataId + return c +} + +// H sets the optional parameter "h": The requested pixel height for any +// images. If height is provided width must also be provided. +func (c *LayersAnnotationDataListCall) H(h int64) *LayersAnnotationDataListCall { + c.opt_["h"] = h + return c +} + +// Locale sets the optional parameter "locale": The locale information +// for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: +// 'en_US'. +func (c *LayersAnnotationDataListCall) Locale(locale string) *LayersAnnotationDataListCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *LayersAnnotationDataListCall) MaxResults(maxResults int64) *LayersAnnotationDataListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous page. +func (c *LayersAnnotationDataListCall) PageToken(pageToken string) *LayersAnnotationDataListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Scale sets the optional parameter "scale": The requested scale for +// the image. +func (c *LayersAnnotationDataListCall) Scale(scale int64) *LayersAnnotationDataListCall { + c.opt_["scale"] = scale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersAnnotationDataListCall) Source(source string) *LayersAnnotationDataListCall { + c.opt_["source"] = source + return c +} + +// UpdatedMax sets the optional parameter "updatedMax": RFC 3339 +// timestamp to restrict to items updated prior to this timestamp +// (exclusive). +func (c *LayersAnnotationDataListCall) UpdatedMax(updatedMax string) *LayersAnnotationDataListCall { + c.opt_["updatedMax"] = updatedMax + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": RFC 3339 +// timestamp to restrict to items updated since this timestamp +// (inclusive). +func (c *LayersAnnotationDataListCall) UpdatedMin(updatedMin string) *LayersAnnotationDataListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +// W sets the optional parameter "w": The requested pixel width for any +// images. If width is provided height must also be provided. +func (c *LayersAnnotationDataListCall) W(w int64) *LayersAnnotationDataListCall { + c.opt_["w"] = w + return c +} + +func (c *LayersAnnotationDataListCall) Do() (*Annotationsdata, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("contentVersion", fmt.Sprintf("%v", c.contentVersion)) + if v, ok := c.opt_["annotationDataId"]; ok { + params.Set("annotationDataId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["h"]; ok { + params.Set("h", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scale"]; ok { + params.Set("scale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMax"]; ok { + params.Set("updatedMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["w"]; ok { + params.Set("w", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layers/{layerId}/data") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{layerId}", url.QueryEscape(c.layerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotationsdata) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the annotation data for a volume and layer.", + // "httpMethod": "GET", + // "id": "books.layers.annotationData.list", + // "parameterOrder": [ + // "volumeId", + // "layerId", + // "contentVersion" + // ], + // "parameters": { + // "annotationDataId": { + // "description": "The list of Annotation Data Ids to retrieve. Pagination is ignored if this is set.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "contentVersion": { + // "description": "The content version for the requested volume.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "h": { + // "description": "The requested pixel height for any images. If height is provided width must also be provided.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "layerId": { + // "description": "The ID for the layer to get the annotation data.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "200", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous page.", + // "location": "query", + // "type": "string" + // }, + // "scale": { + // "description": "The requested scale for the image.", + // "format": "int32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "updatedMax": { + // "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve annotation data for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "w": { + // "description": "The requested pixel width for any images. If width is provided height must also be provided.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "volumes/{volumeId}/layers/{layerId}/data", + // "response": { + // "$ref": "Annotationsdata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.volumeAnnotations.get": + +type LayersVolumeAnnotationsGetCall struct { + s *Service + volumeId string + layerId string + annotationId string + opt_ map[string]interface{} +} + +// Get: Gets the volume annotation. +func (r *LayersVolumeAnnotationsService) Get(volumeId string, layerId string, annotationId string) *LayersVolumeAnnotationsGetCall { + c := &LayersVolumeAnnotationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.layerId = layerId + c.annotationId = annotationId + return c +} + +// Locale sets the optional parameter "locale": The locale information +// for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: +// 'en_US'. +func (c *LayersVolumeAnnotationsGetCall) Locale(locale string) *LayersVolumeAnnotationsGetCall { + c.opt_["locale"] = locale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersVolumeAnnotationsGetCall) Source(source string) *LayersVolumeAnnotationsGetCall { + c.opt_["source"] = source + return c +} + +func (c *LayersVolumeAnnotationsGetCall) Do() (*Volumeannotation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layers/{layerId}/annotations/{annotationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{layerId}", url.QueryEscape(c.layerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{annotationId}", url.QueryEscape(c.annotationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumeannotation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the volume annotation.", + // "httpMethod": "GET", + // "id": "books.layers.volumeAnnotations.get", + // "parameterOrder": [ + // "volumeId", + // "layerId", + // "annotationId" + // ], + // "parameters": { + // "annotationId": { + // "description": "The ID of the volume annotation to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "layerId": { + // "description": "The ID for the layer to get the annotations.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve annotations for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}/layers/{layerId}/annotations/{annotationId}", + // "response": { + // "$ref": "Volumeannotation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.layers.volumeAnnotations.list": + +type LayersVolumeAnnotationsListCall struct { + s *Service + volumeId string + layerId string + contentVersion string + opt_ map[string]interface{} +} + +// List: Gets the volume annotations for a volume and layer. +func (r *LayersVolumeAnnotationsService) List(volumeId string, layerId string, contentVersion string) *LayersVolumeAnnotationsListCall { + c := &LayersVolumeAnnotationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.layerId = layerId + c.contentVersion = contentVersion + return c +} + +// EndOffset sets the optional parameter "endOffset": The end offset to +// end retrieving data from. +func (c *LayersVolumeAnnotationsListCall) EndOffset(endOffset string) *LayersVolumeAnnotationsListCall { + c.opt_["endOffset"] = endOffset + return c +} + +// EndPosition sets the optional parameter "endPosition": The end +// position to end retrieving data from. +func (c *LayersVolumeAnnotationsListCall) EndPosition(endPosition string) *LayersVolumeAnnotationsListCall { + c.opt_["endPosition"] = endPosition + return c +} + +// Locale sets the optional parameter "locale": The locale information +// for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: +// 'en_US'. +func (c *LayersVolumeAnnotationsListCall) Locale(locale string) *LayersVolumeAnnotationsListCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *LayersVolumeAnnotationsListCall) MaxResults(maxResults int64) *LayersVolumeAnnotationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous page. +func (c *LayersVolumeAnnotationsListCall) PageToken(pageToken string) *LayersVolumeAnnotationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Set to true to +// return deleted annotations. updatedMin must be in the request to use +// this. Defaults to false. +func (c *LayersVolumeAnnotationsListCall) ShowDeleted(showDeleted bool) *LayersVolumeAnnotationsListCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *LayersVolumeAnnotationsListCall) Source(source string) *LayersVolumeAnnotationsListCall { + c.opt_["source"] = source + return c +} + +// StartOffset sets the optional parameter "startOffset": The start +// offset to start retrieving data from. +func (c *LayersVolumeAnnotationsListCall) StartOffset(startOffset string) *LayersVolumeAnnotationsListCall { + c.opt_["startOffset"] = startOffset + return c +} + +// StartPosition sets the optional parameter "startPosition": The start +// position to start retrieving data from. +func (c *LayersVolumeAnnotationsListCall) StartPosition(startPosition string) *LayersVolumeAnnotationsListCall { + c.opt_["startPosition"] = startPosition + return c +} + +// UpdatedMax sets the optional parameter "updatedMax": RFC 3339 +// timestamp to restrict to items updated prior to this timestamp +// (exclusive). +func (c *LayersVolumeAnnotationsListCall) UpdatedMax(updatedMax string) *LayersVolumeAnnotationsListCall { + c.opt_["updatedMax"] = updatedMax + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": RFC 3339 +// timestamp to restrict to items updated since this timestamp +// (inclusive). +func (c *LayersVolumeAnnotationsListCall) UpdatedMin(updatedMin string) *LayersVolumeAnnotationsListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +// VolumeAnnotationsVersion sets the optional parameter +// "volumeAnnotationsVersion": The version of the volume annotations +// that you are requesting. +func (c *LayersVolumeAnnotationsListCall) VolumeAnnotationsVersion(volumeAnnotationsVersion string) *LayersVolumeAnnotationsListCall { + c.opt_["volumeAnnotationsVersion"] = volumeAnnotationsVersion + return c +} + +func (c *LayersVolumeAnnotationsListCall) Do() (*Volumeannotations, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("contentVersion", fmt.Sprintf("%v", c.contentVersion)) + if v, ok := c.opt_["endOffset"]; ok { + params.Set("endOffset", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endPosition"]; ok { + params.Set("endPosition", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startOffset"]; ok { + params.Set("startOffset", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startPosition"]; ok { + params.Set("startPosition", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMax"]; ok { + params.Set("updatedMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["volumeAnnotationsVersion"]; ok { + params.Set("volumeAnnotationsVersion", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/layers/{layerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{layerId}", url.QueryEscape(c.layerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumeannotations) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the volume annotations for a volume and layer.", + // "httpMethod": "GET", + // "id": "books.layers.volumeAnnotations.list", + // "parameterOrder": [ + // "volumeId", + // "layerId", + // "contentVersion" + // ], + // "parameters": { + // "contentVersion": { + // "description": "The content version for the requested volume.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "endOffset": { + // "description": "The end offset to end retrieving data from.", + // "location": "query", + // "type": "string" + // }, + // "endPosition": { + // "description": "The end position to end retrieving data from.", + // "location": "query", + // "type": "string" + // }, + // "layerId": { + // "description": "The ID for the layer to get the annotations.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "The locale information for the data. ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "200", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous page.", + // "location": "query", + // "type": "string" + // }, + // "showDeleted": { + // "description": "Set to true to return deleted annotations. updatedMin must be in the request to use this. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startOffset": { + // "description": "The start offset to start retrieving data from.", + // "location": "query", + // "type": "string" + // }, + // "startPosition": { + // "description": "The start position to start retrieving data from.", + // "location": "query", + // "type": "string" + // }, + // "updatedMax": { + // "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + // "location": "query", + // "type": "string" + // }, + // "volumeAnnotationsVersion": { + // "description": "The version of the volume annotations that you are requesting.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to retrieve annotations for.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}/layers/{layerId}", + // "response": { + // "$ref": "Volumeannotations" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.myconfig.releaseDownloadAccess": + +type MyconfigReleaseDownloadAccessCall struct { + s *Service + volumeIds []string + cpksver string + opt_ map[string]interface{} +} + +// ReleaseDownloadAccess: Release downloaded content access restriction. +func (r *MyconfigService) ReleaseDownloadAccess(volumeIds []string, cpksver string) *MyconfigReleaseDownloadAccessCall { + c := &MyconfigReleaseDownloadAccessCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeIds = volumeIds + c.cpksver = cpksver + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1, ISO-3166-1 +// codes for message localization, i.e. en_US. +func (c *MyconfigReleaseDownloadAccessCall) Locale(locale string) *MyconfigReleaseDownloadAccessCall { + c.opt_["locale"] = locale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MyconfigReleaseDownloadAccessCall) Source(source string) *MyconfigReleaseDownloadAccessCall { + c.opt_["source"] = source + return c +} + +func (c *MyconfigReleaseDownloadAccessCall) Do() (*DownloadAccesses, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("cpksver", fmt.Sprintf("%v", c.cpksver)) + for _, v := range c.volumeIds { + params.Add("volumeIds", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/releaseDownloadAccess") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DownloadAccesses) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Release downloaded content access restriction.", + // "httpMethod": "POST", + // "id": "books.myconfig.releaseDownloadAccess", + // "parameterOrder": [ + // "volumeIds", + // "cpksver" + // ], + // "parameters": { + // "cpksver": { + // "description": "The device/version ID from which to release the restriction.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "locale": { + // "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeIds": { + // "description": "The volume(s) to release restrictions for.", + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "myconfig/releaseDownloadAccess", + // "response": { + // "$ref": "DownloadAccesses" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.myconfig.requestAccess": + +type MyconfigRequestAccessCall struct { + s *Service + source string + volumeId string + nonce string + cpksver string + opt_ map[string]interface{} +} + +// RequestAccess: Request concurrent and download access restrictions. +func (r *MyconfigService) RequestAccess(source string, volumeId string, nonce string, cpksver string) *MyconfigRequestAccessCall { + c := &MyconfigRequestAccessCall{s: r.s, opt_: make(map[string]interface{})} + c.source = source + c.volumeId = volumeId + c.nonce = nonce + c.cpksver = cpksver + return c +} + +// LicenseTypes sets the optional parameter "licenseTypes": The type of +// access license to request. If not specified, the default is BOTH. +func (c *MyconfigRequestAccessCall) LicenseTypes(licenseTypes string) *MyconfigRequestAccessCall { + c.opt_["licenseTypes"] = licenseTypes + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1, ISO-3166-1 +// codes for message localization, i.e. en_US. +func (c *MyconfigRequestAccessCall) Locale(locale string) *MyconfigRequestAccessCall { + c.opt_["locale"] = locale + return c +} + +func (c *MyconfigRequestAccessCall) Do() (*RequestAccess, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("cpksver", fmt.Sprintf("%v", c.cpksver)) + params.Set("nonce", fmt.Sprintf("%v", c.nonce)) + params.Set("source", fmt.Sprintf("%v", c.source)) + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + if v, ok := c.opt_["licenseTypes"]; ok { + params.Set("licenseTypes", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/requestAccess") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RequestAccess) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Request concurrent and download access restrictions.", + // "httpMethod": "POST", + // "id": "books.myconfig.requestAccess", + // "parameterOrder": [ + // "source", + // "volumeId", + // "nonce", + // "cpksver" + // ], + // "parameters": { + // "cpksver": { + // "description": "The device/version ID from which to request the restrictions.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "licenseTypes": { + // "description": "The type of access license to request. If not specified, the default is BOTH.", + // "enum": [ + // "BOTH", + // "CONCURRENT", + // "DOWNLOAD" + // ], + // "enumDescriptions": [ + // "Both concurrent and download licenses.", + // "Concurrent access license.", + // "Offline download access license." + // ], + // "location": "query", + // "type": "string" + // }, + // "locale": { + // "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + // "location": "query", + // "type": "string" + // }, + // "nonce": { + // "description": "The client nonce value.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to request concurrent/download restrictions for.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "myconfig/requestAccess", + // "response": { + // "$ref": "RequestAccess" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.myconfig.syncVolumeLicenses": + +type MyconfigSyncVolumeLicensesCall struct { + s *Service + source string + nonce string + cpksver string + opt_ map[string]interface{} +} + +// SyncVolumeLicenses: Request downloaded content access for specified +// volumes on the My eBooks shelf. +func (r *MyconfigService) SyncVolumeLicenses(source string, nonce string, cpksver string) *MyconfigSyncVolumeLicensesCall { + c := &MyconfigSyncVolumeLicensesCall{s: r.s, opt_: make(map[string]interface{})} + c.source = source + c.nonce = nonce + c.cpksver = cpksver + return c +} + +// Features sets the optional parameter "features": List of features +// supported by the client, i.e., 'RENTALS' +func (c *MyconfigSyncVolumeLicensesCall) Features(features string) *MyconfigSyncVolumeLicensesCall { + c.opt_["features"] = features + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1, ISO-3166-1 +// codes for message localization, i.e. en_US. +func (c *MyconfigSyncVolumeLicensesCall) Locale(locale string) *MyconfigSyncVolumeLicensesCall { + c.opt_["locale"] = locale + return c +} + +// ShowPreorders sets the optional parameter "showPreorders": Set to +// true to show pre-ordered books. Defaults to false. +func (c *MyconfigSyncVolumeLicensesCall) ShowPreorders(showPreorders bool) *MyconfigSyncVolumeLicensesCall { + c.opt_["showPreorders"] = showPreorders + return c +} + +// VolumeIds sets the optional parameter "volumeIds": The volume(s) to +// request download restrictions for. +func (c *MyconfigSyncVolumeLicensesCall) VolumeIds(volumeIds string) *MyconfigSyncVolumeLicensesCall { + c.opt_["volumeIds"] = volumeIds + return c +} + +func (c *MyconfigSyncVolumeLicensesCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("cpksver", fmt.Sprintf("%v", c.cpksver)) + params.Set("nonce", fmt.Sprintf("%v", c.nonce)) + params.Set("source", fmt.Sprintf("%v", c.source)) + if v, ok := c.opt_["features"]; ok { + params.Set("features", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showPreorders"]; ok { + params.Set("showPreorders", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["volumeIds"]; ok { + params.Set("volumeIds", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "myconfig/syncVolumeLicenses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Request downloaded content access for specified volumes on the My eBooks shelf.", + // "httpMethod": "POST", + // "id": "books.myconfig.syncVolumeLicenses", + // "parameterOrder": [ + // "source", + // "nonce", + // "cpksver" + // ], + // "parameters": { + // "cpksver": { + // "description": "The device/version ID from which to release the restriction.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "features": { + // "description": "List of features supported by the client, i.e., 'RENTALS'", + // "enum": [ + // "RENTALS" + // ], + // "enumDescriptions": [ + // "Client supports rentals." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "ISO-639-1, ISO-3166-1 codes for message localization, i.e. en_US.", + // "location": "query", + // "type": "string" + // }, + // "nonce": { + // "description": "The client nonce value.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "showPreorders": { + // "description": "Set to true to show pre-ordered books. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "volumeIds": { + // "description": "The volume(s) to request download restrictions for.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "myconfig/syncVolumeLicenses", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.delete": + +type MylibraryAnnotationsDeleteCall struct { + s *Service + annotationId string + opt_ map[string]interface{} +} + +// Delete: Deletes an annotation. +func (r *MylibraryAnnotationsService) Delete(annotationId string) *MylibraryAnnotationsDeleteCall { + c := &MylibraryAnnotationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.annotationId = annotationId + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryAnnotationsDeleteCall) Source(source string) *MylibraryAnnotationsDeleteCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryAnnotationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/{annotationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{annotationId}", url.QueryEscape(c.annotationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an annotation.", + // "httpMethod": "DELETE", + // "id": "books.mylibrary.annotations.delete", + // "parameterOrder": [ + // "annotationId" + // ], + // "parameters": { + // "annotationId": { + // "description": "The ID for the annotation to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations/{annotationId}", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.get": + +type MylibraryAnnotationsGetCall struct { + s *Service + annotationId string + opt_ map[string]interface{} +} + +// Get: Gets an annotation by its ID. +func (r *MylibraryAnnotationsService) Get(annotationId string) *MylibraryAnnotationsGetCall { + c := &MylibraryAnnotationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.annotationId = annotationId + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryAnnotationsGetCall) Source(source string) *MylibraryAnnotationsGetCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryAnnotationsGetCall) Do() (*Annotation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/{annotationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{annotationId}", url.QueryEscape(c.annotationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets an annotation by its ID.", + // "httpMethod": "GET", + // "id": "books.mylibrary.annotations.get", + // "parameterOrder": [ + // "annotationId" + // ], + // "parameters": { + // "annotationId": { + // "description": "The ID for the annotation to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations/{annotationId}", + // "response": { + // "$ref": "Annotation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.insert": + +type MylibraryAnnotationsInsertCall struct { + s *Service + annotation *Annotation + opt_ map[string]interface{} +} + +// Insert: Inserts a new annotation. +func (r *MylibraryAnnotationsService) Insert(annotation *Annotation) *MylibraryAnnotationsInsertCall { + c := &MylibraryAnnotationsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.annotation = annotation + return c +} + +// ShowOnlySummaryInResponse sets the optional parameter +// "showOnlySummaryInResponse": Requests that only the summary of the +// specified layer be provided in the response. +func (c *MylibraryAnnotationsInsertCall) ShowOnlySummaryInResponse(showOnlySummaryInResponse bool) *MylibraryAnnotationsInsertCall { + c.opt_["showOnlySummaryInResponse"] = showOnlySummaryInResponse + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryAnnotationsInsertCall) Source(source string) *MylibraryAnnotationsInsertCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryAnnotationsInsertCall) Do() (*Annotation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["showOnlySummaryInResponse"]; ok { + params.Set("showOnlySummaryInResponse", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new annotation.", + // "httpMethod": "POST", + // "id": "books.mylibrary.annotations.insert", + // "parameters": { + // "showOnlySummaryInResponse": { + // "description": "Requests that only the summary of the specified layer be provided in the response.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations", + // "request": { + // "$ref": "Annotation" + // }, + // "response": { + // "$ref": "Annotation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.list": + +type MylibraryAnnotationsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of annotations, possibly filtered. +func (r *MylibraryAnnotationsService) List() *MylibraryAnnotationsListCall { + c := &MylibraryAnnotationsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// ContentVersion sets the optional parameter "contentVersion": The +// content version for the requested volume. +func (c *MylibraryAnnotationsListCall) ContentVersion(contentVersion string) *MylibraryAnnotationsListCall { + c.opt_["contentVersion"] = contentVersion + return c +} + +// LayerId sets the optional parameter "layerId": The layer ID to limit +// annotation by. +func (c *MylibraryAnnotationsListCall) LayerId(layerId string) *MylibraryAnnotationsListCall { + c.opt_["layerId"] = layerId + return c +} + +// LayerIds sets the optional parameter "layerIds": The layer ID(s) to +// limit annotation by. +func (c *MylibraryAnnotationsListCall) LayerIds(layerIds string) *MylibraryAnnotationsListCall { + c.opt_["layerIds"] = layerIds + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *MylibraryAnnotationsListCall) MaxResults(maxResults int64) *MylibraryAnnotationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageIds sets the optional parameter "pageIds": The page ID(s) for the +// volume that is being queried. +func (c *MylibraryAnnotationsListCall) PageIds(pageIds string) *MylibraryAnnotationsListCall { + c.opt_["pageIds"] = pageIds + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous page. +func (c *MylibraryAnnotationsListCall) PageToken(pageToken string) *MylibraryAnnotationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Set to true to +// return deleted annotations. updatedMin must be in the request to use +// this. Defaults to false. +func (c *MylibraryAnnotationsListCall) ShowDeleted(showDeleted bool) *MylibraryAnnotationsListCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryAnnotationsListCall) Source(source string) *MylibraryAnnotationsListCall { + c.opt_["source"] = source + return c +} + +// UpdatedMax sets the optional parameter "updatedMax": RFC 3339 +// timestamp to restrict to items updated prior to this timestamp +// (exclusive). +func (c *MylibraryAnnotationsListCall) UpdatedMax(updatedMax string) *MylibraryAnnotationsListCall { + c.opt_["updatedMax"] = updatedMax + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": RFC 3339 +// timestamp to restrict to items updated since this timestamp +// (inclusive). +func (c *MylibraryAnnotationsListCall) UpdatedMin(updatedMin string) *MylibraryAnnotationsListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +// VolumeId sets the optional parameter "volumeId": The volume to +// restrict annotations to. +func (c *MylibraryAnnotationsListCall) VolumeId(volumeId string) *MylibraryAnnotationsListCall { + c.opt_["volumeId"] = volumeId + return c +} + +func (c *MylibraryAnnotationsListCall) Do() (*Annotations, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["contentVersion"]; ok { + params.Set("contentVersion", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["layerId"]; ok { + params.Set("layerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["layerIds"]; ok { + params.Set("layerIds", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageIds"]; ok { + params.Set("pageIds", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMax"]; ok { + params.Set("updatedMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["volumeId"]; ok { + params.Set("volumeId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotations) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of annotations, possibly filtered.", + // "httpMethod": "GET", + // "id": "books.mylibrary.annotations.list", + // "parameters": { + // "contentVersion": { + // "description": "The content version for the requested volume.", + // "location": "query", + // "type": "string" + // }, + // "layerId": { + // "description": "The layer ID to limit annotation by.", + // "location": "query", + // "type": "string" + // }, + // "layerIds": { + // "description": "The layer ID(s) to limit annotation by.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "40", + // "minimum": "0", + // "type": "integer" + // }, + // "pageIds": { + // "description": "The page ID(s) for the volume that is being queried.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous page.", + // "location": "query", + // "type": "string" + // }, + // "showDeleted": { + // "description": "Set to true to return deleted annotations. updatedMin must be in the request to use this. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "updatedMax": { + // "description": "RFC 3339 timestamp to restrict to items updated prior to this timestamp (exclusive).", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "RFC 3339 timestamp to restrict to items updated since this timestamp (inclusive).", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "The volume to restrict annotations to.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations", + // "response": { + // "$ref": "Annotations" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.summary": + +type MylibraryAnnotationsSummaryCall struct { + s *Service + layerIds []string + volumeId string + opt_ map[string]interface{} +} + +// Summary: Gets the summary of specified layers. +func (r *MylibraryAnnotationsService) Summary(layerIds []string, volumeId string) *MylibraryAnnotationsSummaryCall { + c := &MylibraryAnnotationsSummaryCall{s: r.s, opt_: make(map[string]interface{})} + c.layerIds = layerIds + c.volumeId = volumeId + return c +} + +func (c *MylibraryAnnotationsSummaryCall) Do() (*AnnotationsSummary, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + for _, v := range c.layerIds { + params.Add("layerIds", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/summary") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AnnotationsSummary) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the summary of specified layers.", + // "httpMethod": "POST", + // "id": "books.mylibrary.annotations.summary", + // "parameterOrder": [ + // "layerIds", + // "volumeId" + // ], + // "parameters": { + // "layerIds": { + // "description": "Array of layer IDs to get the summary for.", + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // }, + // "volumeId": { + // "description": "Volume id to get the summary for.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations/summary", + // "response": { + // "$ref": "AnnotationsSummary" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.annotations.update": + +type MylibraryAnnotationsUpdateCall struct { + s *Service + annotationId string + annotation *Annotation + opt_ map[string]interface{} +} + +// Update: Updates an existing annotation. +func (r *MylibraryAnnotationsService) Update(annotationId string, annotation *Annotation) *MylibraryAnnotationsUpdateCall { + c := &MylibraryAnnotationsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.annotationId = annotationId + c.annotation = annotation + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryAnnotationsUpdateCall) Source(source string) *MylibraryAnnotationsUpdateCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryAnnotationsUpdateCall) Do() (*Annotation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.annotation) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/annotations/{annotationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{annotationId}", url.QueryEscape(c.annotationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Annotation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing annotation.", + // "httpMethod": "PUT", + // "id": "books.mylibrary.annotations.update", + // "parameterOrder": [ + // "annotationId" + // ], + // "parameters": { + // "annotationId": { + // "description": "The ID for the annotation to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/annotations/{annotationId}", + // "request": { + // "$ref": "Annotation" + // }, + // "response": { + // "$ref": "Annotation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.addVolume": + +type MylibraryBookshelvesAddVolumeCall struct { + s *Service + shelf string + volumeId string + opt_ map[string]interface{} +} + +// AddVolume: Adds a volume to a bookshelf. +func (r *MylibraryBookshelvesService) AddVolume(shelf string, volumeId string) *MylibraryBookshelvesAddVolumeCall { + c := &MylibraryBookshelvesAddVolumeCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + c.volumeId = volumeId + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesAddVolumeCall) Source(source string) *MylibraryBookshelvesAddVolumeCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesAddVolumeCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/addVolume") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Adds a volume to a bookshelf.", + // "httpMethod": "POST", + // "id": "books.mylibrary.bookshelves.addVolume", + // "parameterOrder": [ + // "shelf", + // "volumeId" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf to which to add a volume.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume to add.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}/addVolume", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.clearVolumes": + +type MylibraryBookshelvesClearVolumesCall struct { + s *Service + shelf string + opt_ map[string]interface{} +} + +// ClearVolumes: Clears all volumes from a bookshelf. +func (r *MylibraryBookshelvesService) ClearVolumes(shelf string) *MylibraryBookshelvesClearVolumesCall { + c := &MylibraryBookshelvesClearVolumesCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesClearVolumesCall) Source(source string) *MylibraryBookshelvesClearVolumesCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesClearVolumesCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/clearVolumes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Clears all volumes from a bookshelf.", + // "httpMethod": "POST", + // "id": "books.mylibrary.bookshelves.clearVolumes", + // "parameterOrder": [ + // "shelf" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf from which to remove a volume.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}/clearVolumes", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.get": + +type MylibraryBookshelvesGetCall struct { + s *Service + shelf string + opt_ map[string]interface{} +} + +// Get: Retrieves metadata for a specific bookshelf belonging to the +// authenticated user. +func (r *MylibraryBookshelvesService) Get(shelf string) *MylibraryBookshelvesGetCall { + c := &MylibraryBookshelvesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesGetCall) Source(source string) *MylibraryBookshelvesGetCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesGetCall) Do() (*Bookshelf, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bookshelf) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves metadata for a specific bookshelf belonging to the authenticated user.", + // "httpMethod": "GET", + // "id": "books.mylibrary.bookshelves.get", + // "parameterOrder": [ + // "shelf" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}", + // "response": { + // "$ref": "Bookshelf" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.list": + +type MylibraryBookshelvesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of bookshelves belonging to the authenticated +// user. +func (r *MylibraryBookshelvesService) List() *MylibraryBookshelvesListCall { + c := &MylibraryBookshelvesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesListCall) Source(source string) *MylibraryBookshelvesListCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesListCall) Do() (*Bookshelves, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bookshelves) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of bookshelves belonging to the authenticated user.", + // "httpMethod": "GET", + // "id": "books.mylibrary.bookshelves.list", + // "parameters": { + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "mylibrary/bookshelves", + // "response": { + // "$ref": "Bookshelves" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.moveVolume": + +type MylibraryBookshelvesMoveVolumeCall struct { + s *Service + shelf string + volumeId string + volumePosition int64 + opt_ map[string]interface{} +} + +// MoveVolume: Moves a volume within a bookshelf. +func (r *MylibraryBookshelvesService) MoveVolume(shelf string, volumeId string, volumePosition int64) *MylibraryBookshelvesMoveVolumeCall { + c := &MylibraryBookshelvesMoveVolumeCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + c.volumeId = volumeId + c.volumePosition = volumePosition + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesMoveVolumeCall) Source(source string) *MylibraryBookshelvesMoveVolumeCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesMoveVolumeCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + params.Set("volumePosition", fmt.Sprintf("%v", c.volumePosition)) + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/moveVolume") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Moves a volume within a bookshelf.", + // "httpMethod": "POST", + // "id": "books.mylibrary.bookshelves.moveVolume", + // "parameterOrder": [ + // "shelf", + // "volumeId", + // "volumePosition" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf with the volume.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume to move.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "volumePosition": { + // "description": "Position on shelf to move the item (0 puts the item before the current first item, 1 puts it between the first and the second and so on.)", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}/moveVolume", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.removeVolume": + +type MylibraryBookshelvesRemoveVolumeCall struct { + s *Service + shelf string + volumeId string + opt_ map[string]interface{} +} + +// RemoveVolume: Removes a volume from a bookshelf. +func (r *MylibraryBookshelvesService) RemoveVolume(shelf string, volumeId string) *MylibraryBookshelvesRemoveVolumeCall { + c := &MylibraryBookshelvesRemoveVolumeCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + c.volumeId = volumeId + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesRemoveVolumeCall) Source(source string) *MylibraryBookshelvesRemoveVolumeCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryBookshelvesRemoveVolumeCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/removeVolume") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a volume from a bookshelf.", + // "httpMethod": "POST", + // "id": "books.mylibrary.bookshelves.removeVolume", + // "parameterOrder": [ + // "shelf", + // "volumeId" + // ], + // "parameters": { + // "shelf": { + // "description": "ID of bookshelf from which to remove a volume.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume to remove.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}/removeVolume", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.bookshelves.volumes.list": + +type MylibraryBookshelvesVolumesListCall struct { + s *Service + shelf string + opt_ map[string]interface{} +} + +// List: Gets volume information for volumes on a bookshelf. +func (r *MylibraryBookshelvesVolumesService) List(shelf string) *MylibraryBookshelvesVolumesListCall { + c := &MylibraryBookshelvesVolumesListCall{s: r.s, opt_: make(map[string]interface{})} + c.shelf = shelf + return c +} + +// Country sets the optional parameter "country": ISO-3166-1 code to +// override the IP-based location. +func (c *MylibraryBookshelvesVolumesListCall) Country(country string) *MylibraryBookshelvesVolumesListCall { + c.opt_["country"] = country + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *MylibraryBookshelvesVolumesListCall) MaxResults(maxResults int64) *MylibraryBookshelvesVolumesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *MylibraryBookshelvesVolumesListCall) Projection(projection string) *MylibraryBookshelvesVolumesListCall { + c.opt_["projection"] = projection + return c +} + +// Q sets the optional parameter "q": Full-text search query string in +// this bookshelf. +func (c *MylibraryBookshelvesVolumesListCall) Q(q string) *MylibraryBookshelvesVolumesListCall { + c.opt_["q"] = q + return c +} + +// ShowPreorders sets the optional parameter "showPreorders": Set to +// true to show pre-ordered books. Defaults to false. +func (c *MylibraryBookshelvesVolumesListCall) ShowPreorders(showPreorders bool) *MylibraryBookshelvesVolumesListCall { + c.opt_["showPreorders"] = showPreorders + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryBookshelvesVolumesListCall) Source(source string) *MylibraryBookshelvesVolumesListCall { + c.opt_["source"] = source + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first element to return (starts at 0) +func (c *MylibraryBookshelvesVolumesListCall) StartIndex(startIndex int64) *MylibraryBookshelvesVolumesListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *MylibraryBookshelvesVolumesListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["country"]; ok { + params.Set("country", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showPreorders"]; ok { + params.Set("showPreorders", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/bookshelves/{shelf}/volumes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{shelf}", url.QueryEscape(c.shelf), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets volume information for volumes on a bookshelf.", + // "httpMethod": "GET", + // "id": "books.mylibrary.bookshelves.volumes.list", + // "parameterOrder": [ + // "shelf" + // ], + // "parameters": { + // "country": { + // "description": "ISO-3166-1 code to override the IP-based location.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "full", + // "lite" + // ], + // "enumDescriptions": [ + // "Includes all volume data.", + // "Includes a subset of fields in volumeInfo and accessInfo." + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Full-text search query string in this bookshelf.", + // "location": "query", + // "type": "string" + // }, + // "shelf": { + // "description": "The bookshelf ID or name retrieve volumes for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "showPreorders": { + // "description": "Set to true to show pre-ordered books. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first element to return (starts at 0)", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "mylibrary/bookshelves/{shelf}/volumes", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.readingpositions.get": + +type MylibraryReadingpositionsGetCall struct { + s *Service + volumeId string + opt_ map[string]interface{} +} + +// Get: Retrieves my reading position information for a volume. +func (r *MylibraryReadingpositionsService) Get(volumeId string) *MylibraryReadingpositionsGetCall { + c := &MylibraryReadingpositionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + return c +} + +// ContentVersion sets the optional parameter "contentVersion": Volume +// content version for which this reading position is requested. +func (c *MylibraryReadingpositionsGetCall) ContentVersion(contentVersion string) *MylibraryReadingpositionsGetCall { + c.opt_["contentVersion"] = contentVersion + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryReadingpositionsGetCall) Source(source string) *MylibraryReadingpositionsGetCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryReadingpositionsGetCall) Do() (*ReadingPosition, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["contentVersion"]; ok { + params.Set("contentVersion", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/readingpositions/{volumeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReadingPosition) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves my reading position information for a volume.", + // "httpMethod": "GET", + // "id": "books.mylibrary.readingpositions.get", + // "parameterOrder": [ + // "volumeId" + // ], + // "parameters": { + // "contentVersion": { + // "description": "Volume content version for which this reading position is requested.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume for which to retrieve a reading position.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "mylibrary/readingpositions/{volumeId}", + // "response": { + // "$ref": "ReadingPosition" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.mylibrary.readingpositions.setPosition": + +type MylibraryReadingpositionsSetPositionCall struct { + s *Service + volumeId string + timestamp string + position string + opt_ map[string]interface{} +} + +// SetPosition: Sets my reading position information for a volume. +func (r *MylibraryReadingpositionsService) SetPosition(volumeId string, timestamp string, position string) *MylibraryReadingpositionsSetPositionCall { + c := &MylibraryReadingpositionsSetPositionCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + c.timestamp = timestamp + c.position = position + return c +} + +// Action sets the optional parameter "action": Action that caused this +// reading position to be set. +func (c *MylibraryReadingpositionsSetPositionCall) Action(action string) *MylibraryReadingpositionsSetPositionCall { + c.opt_["action"] = action + return c +} + +// ContentVersion sets the optional parameter "contentVersion": Volume +// content version for which this reading position applies. +func (c *MylibraryReadingpositionsSetPositionCall) ContentVersion(contentVersion string) *MylibraryReadingpositionsSetPositionCall { + c.opt_["contentVersion"] = contentVersion + return c +} + +// DeviceCookie sets the optional parameter "deviceCookie": Random +// persistent device cookie optional on set position. +func (c *MylibraryReadingpositionsSetPositionCall) DeviceCookie(deviceCookie string) *MylibraryReadingpositionsSetPositionCall { + c.opt_["deviceCookie"] = deviceCookie + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *MylibraryReadingpositionsSetPositionCall) Source(source string) *MylibraryReadingpositionsSetPositionCall { + c.opt_["source"] = source + return c +} + +func (c *MylibraryReadingpositionsSetPositionCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("position", fmt.Sprintf("%v", c.position)) + params.Set("timestamp", fmt.Sprintf("%v", c.timestamp)) + if v, ok := c.opt_["action"]; ok { + params.Set("action", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["contentVersion"]; ok { + params.Set("contentVersion", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["deviceCookie"]; ok { + params.Set("deviceCookie", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "mylibrary/readingpositions/{volumeId}/setPosition") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Sets my reading position information for a volume.", + // "httpMethod": "POST", + // "id": "books.mylibrary.readingpositions.setPosition", + // "parameterOrder": [ + // "volumeId", + // "timestamp", + // "position" + // ], + // "parameters": { + // "action": { + // "description": "Action that caused this reading position to be set.", + // "enum": [ + // "bookmark", + // "chapter", + // "next-page", + // "prev-page", + // "scroll", + // "search" + // ], + // "enumDescriptions": [ + // "User chose bookmark within volume.", + // "User selected chapter from list.", + // "Next page event.", + // "Previous page event.", + // "User navigated to page.", + // "User chose search results within volume." + // ], + // "location": "query", + // "type": "string" + // }, + // "contentVersion": { + // "description": "Volume content version for which this reading position applies.", + // "location": "query", + // "type": "string" + // }, + // "deviceCookie": { + // "description": "Random persistent device cookie optional on set position.", + // "location": "query", + // "type": "string" + // }, + // "position": { + // "description": "Position string for the new volume reading position.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "timestamp": { + // "description": "RFC 3339 UTC format timestamp associated with this reading position.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume for which to update the reading position.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "mylibrary/readingpositions/{volumeId}/setPosition", + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.get": + +type VolumesGetCall struct { + s *Service + volumeId string + opt_ map[string]interface{} +} + +// Get: Gets volume information for a single volume. +func (r *VolumesService) Get(volumeId string) *VolumesGetCall { + c := &VolumesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + return c +} + +// Country sets the optional parameter "country": ISO-3166-1 code to +// override the IP-based location. +func (c *VolumesGetCall) Country(country string) *VolumesGetCall { + c.opt_["country"] = country + return c +} + +// Partner sets the optional parameter "partner": Brand results for +// partner ID. +func (c *VolumesGetCall) Partner(partner string) *VolumesGetCall { + c.opt_["partner"] = partner + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *VolumesGetCall) Projection(projection string) *VolumesGetCall { + c.opt_["projection"] = projection + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesGetCall) Source(source string) *VolumesGetCall { + c.opt_["source"] = source + return c +} + +func (c *VolumesGetCall) Do() (*Volume, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["country"]; ok { + params.Set("country", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["partner"]; ok { + params.Set("partner", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volume) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets volume information for a single volume.", + // "httpMethod": "GET", + // "id": "books.volumes.get", + // "parameterOrder": [ + // "volumeId" + // ], + // "parameters": { + // "country": { + // "description": "ISO-3166-1 code to override the IP-based location.", + // "location": "query", + // "type": "string" + // }, + // "partner": { + // "description": "Brand results for partner ID.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "full", + // "lite" + // ], + // "enumDescriptions": [ + // "Includes all volume data.", + // "Includes a subset of fields in volumeInfo and accessInfo." + // ], + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of volume to retrieve.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}", + // "response": { + // "$ref": "Volume" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.list": + +type VolumesListCall struct { + s *Service + q string + opt_ map[string]interface{} +} + +// List: Performs a book search. +func (r *VolumesService) List(q string) *VolumesListCall { + c := &VolumesListCall{s: r.s, opt_: make(map[string]interface{})} + c.q = q + return c +} + +// Download sets the optional parameter "download": Restrict to volumes +// by download availability. +func (c *VolumesListCall) Download(download string) *VolumesListCall { + c.opt_["download"] = download + return c +} + +// Filter sets the optional parameter "filter": Filter search results. +func (c *VolumesListCall) Filter(filter string) *VolumesListCall { + c.opt_["filter"] = filter + return c +} + +// LangRestrict sets the optional parameter "langRestrict": Restrict +// results to books with this language code. +func (c *VolumesListCall) LangRestrict(langRestrict string) *VolumesListCall { + c.opt_["langRestrict"] = langRestrict + return c +} + +// LibraryRestrict sets the optional parameter "libraryRestrict": +// Restrict search to this user's library. +func (c *VolumesListCall) LibraryRestrict(libraryRestrict string) *VolumesListCall { + c.opt_["libraryRestrict"] = libraryRestrict + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *VolumesListCall) MaxResults(maxResults int64) *VolumesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results. +func (c *VolumesListCall) OrderBy(orderBy string) *VolumesListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// Partner sets the optional parameter "partner": Restrict and brand +// results for partner ID. +func (c *VolumesListCall) Partner(partner string) *VolumesListCall { + c.opt_["partner"] = partner + return c +} + +// PrintType sets the optional parameter "printType": Restrict to books +// or magazines. +func (c *VolumesListCall) PrintType(printType string) *VolumesListCall { + c.opt_["printType"] = printType + return c +} + +// Projection sets the optional parameter "projection": Restrict +// information returned to a set of selected fields. +func (c *VolumesListCall) Projection(projection string) *VolumesListCall { + c.opt_["projection"] = projection + return c +} + +// ShowPreorders sets the optional parameter "showPreorders": Set to +// true to show books available for preorder. Defaults to false. +func (c *VolumesListCall) ShowPreorders(showPreorders bool) *VolumesListCall { + c.opt_["showPreorders"] = showPreorders + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesListCall) Source(source string) *VolumesListCall { + c.opt_["source"] = source + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first result to return (starts at 0) +func (c *VolumesListCall) StartIndex(startIndex int64) *VolumesListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *VolumesListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("q", fmt.Sprintf("%v", c.q)) + if v, ok := c.opt_["download"]; ok { + params.Set("download", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["langRestrict"]; ok { + params.Set("langRestrict", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["libraryRestrict"]; ok { + params.Set("libraryRestrict", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["partner"]; ok { + params.Set("partner", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["printType"]; ok { + params.Set("printType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showPreorders"]; ok { + params.Set("showPreorders", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Performs a book search.", + // "httpMethod": "GET", + // "id": "books.volumes.list", + // "parameterOrder": [ + // "q" + // ], + // "parameters": { + // "download": { + // "description": "Restrict to volumes by download availability.", + // "enum": [ + // "epub" + // ], + // "enumDescriptions": [ + // "All volumes with epub." + // ], + // "location": "query", + // "type": "string" + // }, + // "filter": { + // "description": "Filter search results.", + // "enum": [ + // "ebooks", + // "free-ebooks", + // "full", + // "paid-ebooks", + // "partial" + // ], + // "enumDescriptions": [ + // "All Google eBooks.", + // "Google eBook with full volume text viewability.", + // "Public can view entire volume text.", + // "Google eBook with a price.", + // "Public able to see parts of text." + // ], + // "location": "query", + // "type": "string" + // }, + // "langRestrict": { + // "description": "Restrict results to books with this language code.", + // "location": "query", + // "type": "string" + // }, + // "libraryRestrict": { + // "description": "Restrict search to this user's library.", + // "enum": [ + // "my-library", + // "no-restrict" + // ], + // "enumDescriptions": [ + // "Restrict to the user's library, any shelf.", + // "Do not restrict based on user's library." + // ], + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "40", + // "minimum": "0", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Sort search results.", + // "enum": [ + // "newest", + // "relevance" + // ], + // "enumDescriptions": [ + // "Most recently published.", + // "Relevance to search terms." + // ], + // "location": "query", + // "type": "string" + // }, + // "partner": { + // "description": "Restrict and brand results for partner ID.", + // "location": "query", + // "type": "string" + // }, + // "printType": { + // "description": "Restrict to books or magazines.", + // "enum": [ + // "all", + // "books", + // "magazines" + // ], + // "enumDescriptions": [ + // "All volume content types.", + // "Just books.", + // "Just magazines." + // ], + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Restrict information returned to a set of selected fields.", + // "enum": [ + // "full", + // "lite" + // ], + // "enumDescriptions": [ + // "Includes all volume data.", + // "Includes a subset of fields in volumeInfo and accessInfo." + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Full-text search query string.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "showPreorders": { + // "description": "Set to true to show books available for preorder. Defaults to false.", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first result to return (starts at 0)", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "volumes", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.associated.list": + +type VolumesAssociatedListCall struct { + s *Service + volumeId string + opt_ map[string]interface{} +} + +// List: Return a list of associated books. +func (r *VolumesAssociatedService) List(volumeId string) *VolumesAssociatedListCall { + c := &VolumesAssociatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.volumeId = volumeId + return c +} + +// Association sets the optional parameter "association": Association +// type. +func (c *VolumesAssociatedListCall) Association(association string) *VolumesAssociatedListCall { + c.opt_["association"] = association + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1 language and +// ISO-3166-1 country code. Ex: 'en_US'. Used for generating +// recommendations. +func (c *VolumesAssociatedListCall) Locale(locale string) *VolumesAssociatedListCall { + c.opt_["locale"] = locale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesAssociatedListCall) Source(source string) *VolumesAssociatedListCall { + c.opt_["source"] = source + return c +} + +func (c *VolumesAssociatedListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["association"]; ok { + params.Set("association", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/{volumeId}/associated") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{volumeId}", url.QueryEscape(c.volumeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return a list of associated books.", + // "httpMethod": "GET", + // "id": "books.volumes.associated.list", + // "parameterOrder": [ + // "volumeId" + // ], + // "parameters": { + // "association": { + // "description": "Association type.", + // "enum": [ + // "end-of-sample", + // "end-of-volume" + // ], + // "enumDescriptions": [ + // "Recommendations for display end-of-sample.", + // "Recommendations for display end-of-volume." + // ], + // "location": "query", + // "type": "string" + // }, + // "locale": { + // "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of the source volume.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/{volumeId}/associated", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.mybooks.list": + +type VolumesMybooksListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return a list of books in My Library. +func (r *VolumesMybooksService) List() *VolumesMybooksListCall { + c := &VolumesMybooksListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// AcquireMethod sets the optional parameter "acquireMethod": How the +// book was aquired +func (c *VolumesMybooksListCall) AcquireMethod(acquireMethod string) *VolumesMybooksListCall { + c.opt_["acquireMethod"] = acquireMethod + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1 language and +// ISO-3166-1 country code. Ex:'en_US'. Used for generating +// recommendations. +func (c *VolumesMybooksListCall) Locale(locale string) *VolumesMybooksListCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *VolumesMybooksListCall) MaxResults(maxResults int64) *VolumesMybooksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ProcessingState sets the optional parameter "processingState": The +// processing state of the user uploaded volumes to be returned. +// Applicable only if the UPLOADED is specified in the acquireMethod. +func (c *VolumesMybooksListCall) ProcessingState(processingState string) *VolumesMybooksListCall { + c.opt_["processingState"] = processingState + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesMybooksListCall) Source(source string) *VolumesMybooksListCall { + c.opt_["source"] = source + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first result to return (starts at 0) +func (c *VolumesMybooksListCall) StartIndex(startIndex int64) *VolumesMybooksListCall { + c.opt_["startIndex"] = startIndex + return c +} + +func (c *VolumesMybooksListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["acquireMethod"]; ok { + params.Set("acquireMethod", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["processingState"]; ok { + params.Set("processingState", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/mybooks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return a list of books in My Library.", + // "httpMethod": "GET", + // "id": "books.volumes.mybooks.list", + // "parameters": { + // "acquireMethod": { + // "description": "How the book was aquired", + // "enum": [ + // "PREORDERED", + // "PREVIOUSLY_RENTED", + // "PUBLIC_DOMAIN", + // "PURCHASED", + // "RENTED", + // "SAMPLE", + // "UPLOADED" + // ], + // "enumDescriptions": [ + // "Preordered books (not yet available)", + // "User-rented books past their expiration time", + // "Public domain books", + // "Purchased books", + // "User-rented books", + // "Sample books", + // "User uploaded books" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "locale": { + // "description": "ISO-639-1 language and ISO-3166-1 country code. Ex:'en_US'. Used for generating recommendations.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "processingState": { + // "description": "The processing state of the user uploaded volumes to be returned. Applicable only if the UPLOADED is specified in the acquireMethod.", + // "enum": [ + // "COMPLETED_FAILED", + // "COMPLETED_SUCCESS", + // "RUNNING" + // ], + // "enumDescriptions": [ + // "The volume processing hase failed.", + // "The volume processing was completed.", + // "The volume processing is not completed." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first result to return (starts at 0)", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // } + // }, + // "path": "volumes/mybooks", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.recommended.list": + +type VolumesRecommendedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return a list of recommended books for the current user. +func (r *VolumesRecommendedService) List() *VolumesRecommendedListCall { + c := &VolumesRecommendedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1 language and +// ISO-3166-1 country code. Ex: 'en_US'. Used for generating +// recommendations. +func (c *VolumesRecommendedListCall) Locale(locale string) *VolumesRecommendedListCall { + c.opt_["locale"] = locale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesRecommendedListCall) Source(source string) *VolumesRecommendedListCall { + c.opt_["source"] = source + return c +} + +func (c *VolumesRecommendedListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/recommended") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return a list of recommended books for the current user.", + // "httpMethod": "GET", + // "id": "books.volumes.recommended.list", + // "parameters": { + // "locale": { + // "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "volumes/recommended", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.recommended.rate": + +type VolumesRecommendedRateCall struct { + s *Service + rating string + volumeId string + opt_ map[string]interface{} +} + +// Rate: Rate a recommended book for the current user. +func (r *VolumesRecommendedService) Rate(rating string, volumeId string) *VolumesRecommendedRateCall { + c := &VolumesRecommendedRateCall{s: r.s, opt_: make(map[string]interface{})} + c.rating = rating + c.volumeId = volumeId + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1 language and +// ISO-3166-1 country code. Ex: 'en_US'. Used for generating +// recommendations. +func (c *VolumesRecommendedRateCall) Locale(locale string) *VolumesRecommendedRateCall { + c.opt_["locale"] = locale + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesRecommendedRateCall) Source(source string) *VolumesRecommendedRateCall { + c.opt_["source"] = source + return c +} + +func (c *VolumesRecommendedRateCall) Do() (*BooksVolumesRecommendedRateResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("rating", fmt.Sprintf("%v", c.rating)) + params.Set("volumeId", fmt.Sprintf("%v", c.volumeId)) + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/recommended/rate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BooksVolumesRecommendedRateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Rate a recommended book for the current user.", + // "httpMethod": "POST", + // "id": "books.volumes.recommended.rate", + // "parameterOrder": [ + // "rating", + // "volumeId" + // ], + // "parameters": { + // "locale": { + // "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + // "location": "query", + // "type": "string" + // }, + // "rating": { + // "description": "Rating to be given to the volume.", + // "enum": [ + // "HAVE_IT", + // "NOT_INTERESTED" + // ], + // "enumDescriptions": [ + // "Rating indicating a dismissal due to ownership.", + // "Rating indicating a negative dismissal of a volume." + // ], + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "volumeId": { + // "description": "ID of the source volume.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "volumes/recommended/rate", + // "response": { + // "$ref": "BooksVolumesRecommendedRateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} + +// method id "books.volumes.useruploaded.list": + +type VolumesUseruploadedListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return a list of books uploaded by the current user. +func (r *VolumesUseruploadedService) List() *VolumesUseruploadedListCall { + c := &VolumesUseruploadedListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Locale sets the optional parameter "locale": ISO-639-1 language and +// ISO-3166-1 country code. Ex: 'en_US'. Used for generating +// recommendations. +func (c *VolumesUseruploadedListCall) Locale(locale string) *VolumesUseruploadedListCall { + c.opt_["locale"] = locale + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *VolumesUseruploadedListCall) MaxResults(maxResults int64) *VolumesUseruploadedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ProcessingState sets the optional parameter "processingState": The +// processing state of the user uploaded volumes to be returned. +func (c *VolumesUseruploadedListCall) ProcessingState(processingState string) *VolumesUseruploadedListCall { + c.opt_["processingState"] = processingState + return c +} + +// Source sets the optional parameter "source": String to identify the +// originator of this request. +func (c *VolumesUseruploadedListCall) Source(source string) *VolumesUseruploadedListCall { + c.opt_["source"] = source + return c +} + +// StartIndex sets the optional parameter "startIndex": Index of the +// first result to return (starts at 0) +func (c *VolumesUseruploadedListCall) StartIndex(startIndex int64) *VolumesUseruploadedListCall { + c.opt_["startIndex"] = startIndex + return c +} + +// VolumeId sets the optional parameter "volumeId": The ids of the +// volumes to be returned. If not specified all that match the +// processingState are returned. +func (c *VolumesUseruploadedListCall) VolumeId(volumeId string) *VolumesUseruploadedListCall { + c.opt_["volumeId"] = volumeId + return c +} + +func (c *VolumesUseruploadedListCall) Do() (*Volumes, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["processingState"]; ok { + params.Set("processingState", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["volumeId"]; ok { + params.Set("volumeId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "volumes/useruploaded") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Volumes) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return a list of books uploaded by the current user.", + // "httpMethod": "GET", + // "id": "books.volumes.useruploaded.list", + // "parameters": { + // "locale": { + // "description": "ISO-639-1 language and ISO-3166-1 country code. Ex: 'en_US'. Used for generating recommendations.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "maximum": "40", + // "minimum": "0", + // "type": "integer" + // }, + // "processingState": { + // "description": "The processing state of the user uploaded volumes to be returned.", + // "enum": [ + // "COMPLETED_FAILED", + // "COMPLETED_SUCCESS", + // "RUNNING" + // ], + // "enumDescriptions": [ + // "The volume processing hase failed.", + // "The volume processing was completed.", + // "The volume processing is not completed." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "source": { + // "description": "String to identify the originator of this request.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Index of the first result to return (starts at 0)", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "volumeId": { + // "description": "The ids of the volumes to be returned. If not specified all that match the processingState are returned.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "volumes/useruploaded", + // "response": { + // "$ref": "Volumes" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/books" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/build-examples.sh b/third_party/src/code.google.com/p/google-api-go-client/build-examples.sh new file mode 100755 index 0000000000000..215fb80d8432f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/build-examples.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +set -e + +make -C google-api install +make -C google-api-go-generator install +google-api-go-generator/google-api-go-gen -cache -api=tasks:v1 +google-api-go-generator/google-api-go-gen -cache -api=urlshortener:v1 +make -C tasks/v1 install +make -C urlshortener/v1 install +make -C examples diff --git a/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-api.json b/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-api.json new file mode 100644 index 0000000000000..ca4b1c52dce79 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-api.json @@ -0,0 +1,2364 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/AvFzDvrMkTggQcj9dKzw6cVhrpQ\"", + "discoveryVersion": "v1", + "id": "calendar:v3", + "name": "calendar", + "version": "v3", + "title": "Calendar API", + "description": "Lets you manipulate events and other calendar data.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/calendar-16.png", + "x32": "http://www.google.com/images/icons/product/calendar-32.png" + }, + "documentationLink": "https://developers.google.com/google-apps/calendar/firstapp", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/calendar/v3/", + "basePath": "/calendar/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "calendar/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/calendar": { + "description": "Manage your calendars" + }, + "https://www.googleapis.com/auth/calendar.readonly": { + "description": "View your calendars" + } + } + } + }, + "schemas": { + "Acl": { + "id": "Acl", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the collection." + }, + "items": { + "type": "array", + "description": "List of rules on the access control list.", + "items": { + "$ref": "AclRule" + } + }, + "kind": { + "type": "string", + "description": "Type of the collection (\"calendar#acl\").", + "default": "calendar#acl" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access the next page of this result. Omitted if no further results are available." + } + } + }, + "AclRule": { + "id": "AclRule", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Identifier of the ACL rule." + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#aclRule\").", + "default": "calendar#aclRule" + }, + "role": { + "type": "string", + "description": "The role assigned to the scope. Possible values are: \n- \"none\" - Provides no access. \n- \"freeBusyReader\" - Provides read access to free/busy information. \n- \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \n- \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \n- \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs.", + "annotations": { + "required": [ + "calendar.acl.insert" + ] + } + }, + "scope": { + "type": "object", + "description": "The scope of the rule.", + "properties": { + "type": { + "type": "string", + "description": "The type of the scope. Possible values are: \n- \"default\" - The public scope. This is the default value. \n- \"user\" - Limits the scope to a single user. \n- \"group\" - Limits the scope to a group. \n- \"domain\" - Limits the scope to a domain. Note: The permissions granted to the \"default\", or public, scope apply to any user, authenticated or not.", + "annotations": { + "required": [ + "calendar.acl.insert" + ] + } + }, + "value": { + "type": "string", + "description": "The email address of a user or group, or the name of a domain, depending on the scope type. Omitted for type \"default\"." + } + }, + "annotations": { + "required": [ + "calendar.acl.insert" + ] + } + } + } + }, + "Calendar": { + "id": "Calendar", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description of the calendar. Optional." + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Identifier of the calendar." + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#calendar\").", + "default": "calendar#calendar" + }, + "location": { + "type": "string", + "description": "Geographic location of the calendar as free-form text. Optional." + }, + "summary": { + "type": "string", + "description": "Title of the calendar.", + "annotations": { + "required": [ + "calendar.calendars.insert" + ] + } + }, + "timeZone": { + "type": "string", + "description": "The time zone of the calendar. Optional." + } + } + }, + "CalendarList": { + "id": "CalendarList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the collection." + }, + "items": { + "type": "array", + "description": "Calendars that are present on the user's calendar list.", + "items": { + "$ref": "CalendarListEntry" + } + }, + "kind": { + "type": "string", + "description": "Type of the collection (\"calendar#calendarList\").", + "default": "calendar#calendarList" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access the next page of this result." + } + } + }, + "CalendarListEntry": { + "id": "CalendarListEntry", + "type": "object", + "properties": { + "accessRole": { + "type": "string", + "description": "The effective access role that the authenticated user has on the calendar. Read-only. Possible values are: \n- \"freeBusyReader\" - Provides read access to free/busy information. \n- \"reader\" - Provides read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \n- \"writer\" - Provides read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \n- \"owner\" - Provides ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs." + }, + "backgroundColor": { + "type": "string", + "description": "The main color of the calendar in the format '#0088aa'. This property supersedes the index-based colorId property. Optional." + }, + "colorId": { + "type": "string", + "description": "The color of the calendar. This is an ID referring to an entry in the \"calendar\" section of the colors definition (see the \"colors\" endpoint). Optional." + }, + "defaultReminders": { + "type": "array", + "description": "The default reminders that the authenticated user has for this calendar.", + "items": { + "$ref": "EventReminder" + } + }, + "description": { + "type": "string", + "description": "Description of the calendar. Optional. Read-only." + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "foregroundColor": { + "type": "string", + "description": "The foreground color of the calendar in the format '#ffffff'. This property supersedes the index-based colorId property. Optional." + }, + "hidden": { + "type": "boolean", + "description": "Whether the calendar has been hidden from the list. Optional. The default is False.", + "default": "false" + }, + "id": { + "type": "string", + "description": "Identifier of the calendar.", + "annotations": { + "required": [ + "calendar.calendarList.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#calendarListEntry\").", + "default": "calendar#calendarListEntry" + }, + "location": { + "type": "string", + "description": "Geographic location of the calendar as free-form text. Optional. Read-only." + }, + "notificationSettings": { + "type": "object", + "description": "The notifications that the authenticated user is receiving for this calendar.", + "properties": { + "notifications": { + "type": "array", + "description": "The list of notifications set for this calendar.", + "items": { + "$ref": "CalendarNotification" + } + } + } + }, + "primary": { + "type": "boolean", + "description": "Whether the calendar is the primary calendar of the authenticated user. Read-only. Optional. The default is False.", + "default": "false" + }, + "selected": { + "type": "boolean", + "description": "Whether the calendar content shows up in the calendar UI. Optional. The default is False.", + "default": "false" + }, + "summary": { + "type": "string", + "description": "Title of the calendar. Read-only." + }, + "summaryOverride": { + "type": "string", + "description": "The summary that the authenticated user has set for this calendar. Optional." + }, + "timeZone": { + "type": "string", + "description": "The time zone of the calendar. Optional. Read-only." + } + } + }, + "CalendarNotification": { + "id": "CalendarNotification", + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The method used to deliver the notification. Possible values are: \n- \"email\" - Reminders are sent via email. \n- \"sms\" - Reminders are sent via SMS. This value is read-only and is ignored on inserts and updates.", + "annotations": { + "required": [ + "calendar.calendarList.insert", + "calendar.calendarList.update" + ] + } + }, + "type": { + "type": "string", + "description": "The type of notification. Possible values are: \n- \"eventCreation\" - Notification sent when a new event is put on the calendar. \n- \"eventChange\" - Notification sent when an event is changed. \n- \"eventCancellation\" - Notification sent when an event is cancelled. \n- \"eventResponse\" - Notification sent when an event is changed. \n- \"agenda\" - An agenda with the events of the day (sent out in the morning).", + "annotations": { + "required": [ + "calendar.calendarList.insert", + "calendar.calendarList.update" + ] + } + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "The address where notifications are delivered for this channel." + }, + "expiration": { + "type": "string", + "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "A UUID or similar unique string that identifies this channel." + }, + "kind": { + "type": "string", + "description": "Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed string \"api#channel\".", + "default": "api#channel" + }, + "params": { + "type": "object", + "description": "Additional parameters controlling delivery channel behavior. Optional.", + "additionalProperties": { + "type": "string", + "description": "Declares a new parameter by name." + } + }, + "payload": { + "type": "boolean", + "description": "A Boolean value to indicate whether payload is wanted. Optional." + }, + "resourceId": { + "type": "string", + "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions." + }, + "resourceUri": { + "type": "string", + "description": "A version-specific identifier for the watched resource." + }, + "token": { + "type": "string", + "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional." + }, + "type": { + "type": "string", + "description": "The type of delivery mechanism used for this channel." + } + } + }, + "ColorDefinition": { + "id": "ColorDefinition", + "type": "object", + "properties": { + "background": { + "type": "string", + "description": "The background color associated with this color definition." + }, + "foreground": { + "type": "string", + "description": "The foreground color that can be used to write on top of a background with 'background' color." + } + } + }, + "Colors": { + "id": "Colors", + "type": "object", + "properties": { + "calendar": { + "type": "object", + "description": "Palette of calendar colors, mapping from the color ID to its definition. An 'calendarListEntry' resource refers to one of these color IDs in its 'color' field. Read-only.", + "additionalProperties": { + "$ref": "ColorDefinition", + "description": "A calendar color defintion." + } + }, + "event": { + "type": "object", + "description": "Palette of event colors, mapping from the color ID to its definition. An 'event' resource may refer to one of these color IDs in its 'color' field. Read-only.", + "additionalProperties": { + "$ref": "ColorDefinition", + "description": "An event color definition." + } + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#colors\").", + "default": "calendar#colors" + }, + "updated": { + "type": "string", + "description": "Last modification time of the color palette (as a RFC 3339 timestamp). Read-only.", + "format": "date-time" + } + } + }, + "Error": { + "id": "Error", + "type": "object", + "properties": { + "domain": { + "type": "string", + "description": "Domain, or broad category, of the error." + }, + "reason": { + "type": "string", + "description": "Specific reason for the error. Some of the possible values are: \n- \"groupTooBig\" - The group of users requested is too large for a single query. \n- \"tooManyCalendarsRequested\" - The number of calendars requested is too large for a single query. \n- \"notFound\" - The requested resource was not found. \n- \"internalError\" - The API service has encountered an internal error. Additional error types may be added in the future, so clients should gracefully handle additional error statuses not included in this list." + } + } + }, + "Event": { + "id": "Event", + "type": "object", + "properties": { + "anyoneCanAddSelf": { + "type": "boolean", + "description": "Whether anyone can invite themselves to the event. Optional. The default is False.", + "default": "false" + }, + "attendees": { + "type": "array", + "description": "The attendees of the event.", + "items": { + "$ref": "EventAttendee" + } + }, + "attendeesOmitted": { + "type": "boolean", + "description": "Whether attendees may have been omitted from the event's representation. When retrieving an event, this may be due to a restriction specified by the 'maxAttendee' query parameter. When updating an event, this can be used to only update the participant's response. Optional. The default is False.", + "default": "false" + }, + "colorId": { + "type": "string", + "description": "The color of the event. This is an ID referring to an entry in the \"event\" section of the colors definition (see the \"colors\" endpoint). Optional." + }, + "created": { + "type": "string", + "description": "Creation time of the event (as a RFC 3339 timestamp). Read-only.", + "format": "date-time" + }, + "creator": { + "type": "object", + "description": "The creator of the event. Read-only.", + "properties": { + "displayName": { + "type": "string", + "description": "The creator's name, if available." + }, + "email": { + "type": "string", + "description": "The creator's email address, if available." + }, + "id": { + "type": "string", + "description": "The creator's Profile ID, if available." + }, + "self": { + "type": "boolean", + "description": "Whether the creator corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.", + "default": "false" + } + } + }, + "description": { + "type": "string", + "description": "Description of the event. Optional." + }, + "end": { + "$ref": "EventDateTime", + "description": "The (exclusive) end time of the event. For a recurring event, this is the end time of the first instance.", + "annotations": { + "required": [ + "calendar.events.import", + "calendar.events.insert", + "calendar.events.update" + ] + } + }, + "endTimeUnspecified": { + "type": "boolean", + "description": "Whether the end time is actually unspecified. An end time is still provided for compatibility reasons, even if this attribute is set to True. The default is False.", + "default": "false" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "extendedProperties": { + "type": "object", + "description": "Extended properties of the event.", + "properties": { + "private": { + "type": "object", + "description": "Properties that are private to the copy of the event that appears on this calendar.", + "additionalProperties": { + "type": "string", + "description": "The name of the private property and the corresponding value." + } + }, + "shared": { + "type": "object", + "description": "Properties that are shared between copies of the event on other attendees' calendars.", + "additionalProperties": { + "type": "string", + "description": "The name of the shared property and the corresponding value." + } + } + } + }, + "gadget": { + "type": "object", + "description": "A gadget that extends this event.", + "properties": { + "display": { + "type": "string", + "description": "The gadget's display mode. Optional. Possible values are: \n- \"icon\" - The gadget displays next to the event's title in the calendar view. \n- \"chip\" - The gadget displays when the event is clicked." + }, + "height": { + "type": "integer", + "description": "The gadget's height in pixels. Optional.", + "format": "int32" + }, + "iconLink": { + "type": "string", + "description": "The gadget's icon URL." + }, + "link": { + "type": "string", + "description": "The gadget's URL." + }, + "preferences": { + "type": "object", + "description": "Preferences.", + "additionalProperties": { + "type": "string", + "description": "The preference name and corresponding value." + } + }, + "title": { + "type": "string", + "description": "The gadget's title." + }, + "type": { + "type": "string", + "description": "The gadget's type." + }, + "width": { + "type": "integer", + "description": "The gadget's width in pixels. Optional.", + "format": "int32" + } + } + }, + "guestsCanInviteOthers": { + "type": "boolean", + "description": "Whether attendees other than the organizer can invite others to the event. Optional. The default is True.", + "default": "true" + }, + "guestsCanModify": { + "type": "boolean", + "description": "Whether attendees other than the organizer can modify the event. Optional. The default is False.", + "default": "false" + }, + "guestsCanSeeOtherGuests": { + "type": "boolean", + "description": "Whether attendees other than the organizer can see who the event's attendees are. Optional. The default is True.", + "default": "true" + }, + "hangoutLink": { + "type": "string", + "description": "An absolute link to the Google+ hangout associated with this event. Read-only." + }, + "htmlLink": { + "type": "string", + "description": "An absolute link to this event in the Google Calendar Web UI. Read-only." + }, + "iCalUID": { + "type": "string", + "description": "Event ID in the iCalendar format.", + "annotations": { + "required": [ + "calendar.events.import" + ] + } + }, + "id": { + "type": "string", + "description": "Identifier of the event. When creating new single or recurring events, you can specify their IDs. Provided IDs must follow these rules: \n- characters allowed in the ID are those used in base32hex encoding, i.e. lowercase letters a-v and digits 0-9, see section 3.1.2 in RFC2938 \n- the length of the ID must be between 5 and 1024 characters \n- the ID must be unique per calendar Due to the globally distributed nature of the system, we cannot guarantee that ID collisions will be detected at event creation time. To minimize the risk of collisions we recommend using an established UUID algorithm such as one described in RFC4122." + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#event\").", + "default": "calendar#event" + }, + "location": { + "type": "string", + "description": "Geographic location of the event as free-form text. Optional." + }, + "locked": { + "type": "boolean", + "description": "Whether this is a locked event copy where no changes can be made to the main event fields \"summary\", \"description\", \"location\", \"start\", \"end\" or \"recurrence\". The default is False. Read-Only.", + "default": "false" + }, + "organizer": { + "type": "object", + "description": "The organizer of the event. If the organizer is also an attendee, this is indicated with a separate entry in 'attendees' with the 'organizer' field set to True. To change the organizer, use the \"move\" operation. Read-only, except when importing an event.", + "properties": { + "displayName": { + "type": "string", + "description": "The organizer's name, if available." + }, + "email": { + "type": "string", + "description": "The organizer's email address, if available." + }, + "id": { + "type": "string", + "description": "The organizer's Profile ID, if available." + }, + "self": { + "type": "boolean", + "description": "Whether the organizer corresponds to the calendar on which this copy of the event appears. Read-only. The default is False.", + "default": "false" + } + } + }, + "originalStartTime": { + "$ref": "EventDateTime", + "description": "For an instance of a recurring event, this is the time at which this event would start according to the recurrence data in the recurring event identified by recurringEventId. Immutable." + }, + "privateCopy": { + "type": "boolean", + "description": "Whether this is a private event copy where changes are not shared with other copies on other calendars. Optional. Immutable. The default is False.", + "default": "false" + }, + "recurrence": { + "type": "array", + "description": "List of RRULE, EXRULE, RDATE and EXDATE lines for a recurring event. This field is omitted for single events or instances of recurring events.", + "items": { + "type": "string" + } + }, + "recurringEventId": { + "type": "string", + "description": "For an instance of a recurring event, this is the event ID of the recurring event itself. Immutable." + }, + "reminders": { + "type": "object", + "description": "Information about the event's reminders for the authenticated user.", + "properties": { + "overrides": { + "type": "array", + "description": "If the event doesn't use the default reminders, this lists the reminders specific to the event, or, if not set, indicates that no reminders are set for this event.", + "items": { + "$ref": "EventReminder" + } + }, + "useDefault": { + "type": "boolean", + "description": "Whether the default reminders of the calendar apply to the event." + } + } + }, + "sequence": { + "type": "integer", + "description": "Sequence number as per iCalendar.", + "format": "int32" + }, + "source": { + "type": "object", + "description": "Source of an event from which it was created; for example a web page, an email message or any document identifiable by an URL using HTTP/HTTPS protocol. Accessible only by the creator of the event.", + "properties": { + "title": { + "type": "string", + "description": "Title of the source; for example a title of a web page or an email subject." + }, + "url": { + "type": "string", + "description": "URL of the source pointing to a resource. URL's protocol must be HTTP or HTTPS." + } + } + }, + "start": { + "$ref": "EventDateTime", + "description": "The (inclusive) start time of the event. For a recurring event, this is the start time of the first instance.", + "annotations": { + "required": [ + "calendar.events.import", + "calendar.events.insert", + "calendar.events.update" + ] + } + }, + "status": { + "type": "string", + "description": "Status of the event. Optional. Possible values are: \n- \"confirmed\" - The event is confirmed. This is the default status. \n- \"tentative\" - The event is tentatively confirmed. \n- \"cancelled\" - The event is cancelled." + }, + "summary": { + "type": "string", + "description": "Title of the event." + }, + "transparency": { + "type": "string", + "description": "Whether the event blocks time on the calendar. Optional. Possible values are: \n- \"opaque\" - The event blocks time on the calendar. This is the default value. \n- \"transparent\" - The event does not block time on the calendar.", + "default": "opaque" + }, + "updated": { + "type": "string", + "description": "Last modification time of the event (as a RFC 3339 timestamp). Read-only.", + "format": "date-time" + }, + "visibility": { + "type": "string", + "description": "Visibility of the event. Optional. Possible values are: \n- \"default\" - Uses the default visibility for events on the calendar. This is the default value. \n- \"public\" - The event is public and event details are visible to all readers of the calendar. \n- \"private\" - The event is private and only event attendees may view event details. \n- \"confidential\" - The event is private. This value is provided for compatibility reasons.", + "default": "default" + } + } + }, + "EventAttendee": { + "id": "EventAttendee", + "type": "object", + "properties": { + "additionalGuests": { + "type": "integer", + "description": "Number of additional guests. Optional. The default is 0.", + "format": "int32" + }, + "comment": { + "type": "string", + "description": "The attendee's response comment. Optional." + }, + "displayName": { + "type": "string", + "description": "The attendee's name, if available. Optional." + }, + "email": { + "type": "string", + "description": "The attendee's email address, if available. This field must be present when adding an attendee.", + "annotations": { + "required": [ + "calendar.events.import", + "calendar.events.insert", + "calendar.events.update" + ] + } + }, + "id": { + "type": "string", + "description": "The attendee's Profile ID, if available." + }, + "optional": { + "type": "boolean", + "description": "Whether this is an optional attendee. Optional. The default is False." + }, + "organizer": { + "type": "boolean", + "description": "Whether the attendee is the organizer of the event. Read-only. The default is False." + }, + "resource": { + "type": "boolean", + "description": "Whether the attendee is a resource. Read-only. The default is False." + }, + "responseStatus": { + "type": "string", + "description": "The attendee's response status. Possible values are: \n- \"needsAction\" - The attendee has not responded to the invitation. \n- \"declined\" - The attendee has declined the invitation. \n- \"tentative\" - The attendee has tentatively accepted the invitation. \n- \"accepted\" - The attendee has accepted the invitation." + }, + "self": { + "type": "boolean", + "description": "Whether this entry represents the calendar on which this copy of the event appears. Read-only. The default is False." + } + } + }, + "EventDateTime": { + "id": "EventDateTime", + "type": "object", + "properties": { + "date": { + "type": "string", + "description": "The date, in the format \"yyyy-mm-dd\", if this is an all-day event.", + "format": "date" + }, + "dateTime": { + "type": "string", + "description": "The time, as a combined date-time value (formatted according to RFC 3339). A time zone offset is required unless a time zone is explicitly specified in 'timeZone'.", + "format": "date-time" + }, + "timeZone": { + "type": "string", + "description": "The name of the time zone in which the time is specified (e.g. \"Europe/Zurich\"). Optional. The default is the time zone of the calendar." + } + } + }, + "EventReminder": { + "id": "EventReminder", + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The method used by this reminder. Possible values are: \n- \"email\" - Reminders are sent via email. \n- \"sms\" - Reminders are sent via SMS. \n- \"popup\" - Reminders are sent via a UI popup.", + "annotations": { + "required": [ + "calendar.calendarList.insert", + "calendar.calendarList.update", + "calendar.events.import", + "calendar.events.insert", + "calendar.events.update" + ] + } + }, + "minutes": { + "type": "integer", + "description": "Number of minutes before the start of the event when the reminder should trigger.", + "format": "int32", + "annotations": { + "required": [ + "calendar.calendarList.insert", + "calendar.calendarList.update", + "calendar.events.import", + "calendar.events.insert", + "calendar.events.update" + ] + } + } + } + }, + "Events": { + "id": "Events", + "type": "object", + "properties": { + "accessRole": { + "type": "string", + "description": "The user's access role for this calendar. Read-only. Possible values are: \n- \"none\" - The user has no access. \n- \"freeBusyReader\" - The user has read access to free/busy information. \n- \"reader\" - The user has read access to the calendar. Private events will appear to users with reader access, but event details will be hidden. \n- \"writer\" - The user has read and write access to the calendar. Private events will appear to users with writer access, and event details will be visible. \n- \"owner\" - The user has ownership of the calendar. This role has all of the permissions of the writer role with the additional ability to see and manipulate ACLs." + }, + "defaultReminders": { + "type": "array", + "description": "The default reminders on the calendar for the authenticated user. These reminders apply to all events on this calendar that do not explicitly override them (i.e. do not have 'reminders.useDefault' set to 'true').", + "items": { + "$ref": "EventReminder" + } + }, + "description": { + "type": "string", + "description": "Description of the calendar. Read-only." + }, + "etag": { + "type": "string", + "description": "ETag of the collection." + }, + "items": { + "type": "array", + "description": "List of events on the calendar.", + "items": { + "$ref": "Event" + } + }, + "kind": { + "type": "string", + "description": "Type of the collection (\"calendar#events\").", + "default": "calendar#events" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access the next page of this result. Omitted if no further results are available." + }, + "summary": { + "type": "string", + "description": "Title of the calendar. Read-only." + }, + "timeZone": { + "type": "string", + "description": "The time zone of the calendar. Read-only." + }, + "updated": { + "type": "string", + "description": "Last modification time of the calendar (as a RFC 3339 timestamp). Read-only.", + "format": "date-time" + } + } + }, + "FreeBusyCalendar": { + "id": "FreeBusyCalendar", + "type": "object", + "properties": { + "busy": { + "type": "array", + "description": "List of time ranges during which this calendar should be regarded as busy.", + "items": { + "$ref": "TimePeriod" + } + }, + "errors": { + "type": "array", + "description": "Optional error(s) (if computation for the calendar failed).", + "items": { + "$ref": "Error" + } + } + } + }, + "FreeBusyGroup": { + "id": "FreeBusyGroup", + "type": "object", + "properties": { + "calendars": { + "type": "array", + "description": "List of calendars' identifiers within a group.", + "items": { + "type": "string" + } + }, + "errors": { + "type": "array", + "description": "Optional error(s) (if computation for the group failed).", + "items": { + "$ref": "Error" + } + } + } + }, + "FreeBusyRequest": { + "id": "FreeBusyRequest", + "type": "object", + "properties": { + "calendarExpansionMax": { + "type": "integer", + "description": "Maximal number of calendars for which FreeBusy information is to be provided. Optional.", + "format": "int32" + }, + "groupExpansionMax": { + "type": "integer", + "description": "Maximal number of calendar identifiers to be provided for a single group. Optional. An error will be returned for a group with more members than this value.", + "format": "int32" + }, + "items": { + "type": "array", + "description": "List of calendars and/or groups to query.", + "items": { + "$ref": "FreeBusyRequestItem" + } + }, + "timeMax": { + "type": "string", + "description": "The end of the interval for the query.", + "format": "date-time" + }, + "timeMin": { + "type": "string", + "description": "The start of the interval for the query.", + "format": "date-time" + }, + "timeZone": { + "type": "string", + "description": "Time zone used in the response. Optional. The default is UTC.", + "default": "UTC" + } + } + }, + "FreeBusyRequestItem": { + "id": "FreeBusyRequestItem", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The identifier of a calendar or a group." + } + } + }, + "FreeBusyResponse": { + "id": "FreeBusyResponse", + "type": "object", + "properties": { + "calendars": { + "type": "object", + "description": "List of free/busy information for calendars.", + "additionalProperties": { + "$ref": "FreeBusyCalendar", + "description": "Free/busy expansions for a single calendar." + } + }, + "groups": { + "type": "object", + "description": "Expansion of groups.", + "additionalProperties": { + "$ref": "FreeBusyGroup", + "description": "List of calendars that are members of this group." + } + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#freeBusy\").", + "default": "calendar#freeBusy" + }, + "timeMax": { + "type": "string", + "description": "The end of the interval.", + "format": "date-time" + }, + "timeMin": { + "type": "string", + "description": "The start of the interval.", + "format": "date-time" + } + } + }, + "Setting": { + "id": "Setting", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "The id of the user setting." + }, + "kind": { + "type": "string", + "description": "Type of the resource (\"calendar#setting\").", + "default": "calendar#setting" + }, + "value": { + "type": "string", + "description": "Value of the user setting. The format of the value depends on the ID of the setting. It must always be a UTF-8 string of length up to 1024 characters." + } + } + }, + "Settings": { + "id": "Settings", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of the collection." + }, + "items": { + "type": "array", + "description": "List of user settings.", + "items": { + "$ref": "Setting" + } + }, + "kind": { + "type": "string", + "description": "Type of the collection (\"calendar#settings\").", + "default": "calendar#settings" + } + } + }, + "TimePeriod": { + "id": "TimePeriod", + "type": "object", + "properties": { + "end": { + "type": "string", + "description": "The (exclusive) end of the time period.", + "format": "date-time" + }, + "start": { + "type": "string", + "description": "The (inclusive) start of the time period.", + "format": "date-time" + } + } + } + }, + "resources": { + "acl": { + "methods": { + "delete": { + "id": "calendar.acl.delete", + "path": "calendars/{calendarId}/acl/{ruleId}", + "httpMethod": "DELETE", + "description": "Deletes an access control rule.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "ruleId": { + "type": "string", + "description": "ACL rule identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId", + "ruleId" + ], + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "get": { + "id": "calendar.acl.get", + "path": "calendars/{calendarId}/acl/{ruleId}", + "httpMethod": "GET", + "description": "Returns an access control rule.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "ruleId": { + "type": "string", + "description": "ACL rule identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId", + "ruleId" + ], + "response": { + "$ref": "AclRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + }, + "insert": { + "id": "calendar.acl.insert", + "path": "calendars/{calendarId}/acl", + "httpMethod": "POST", + "description": "Creates an access control rule.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "AclRule" + }, + "response": { + "$ref": "AclRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "list": { + "id": "calendar.acl.list", + "path": "calendars/{calendarId}/acl", + "httpMethod": "GET", + "description": "Returns the rules in the access control list for the calendar.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "response": { + "$ref": "Acl" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ], + "supportsSubscription": true + }, + "patch": { + "id": "calendar.acl.patch", + "path": "calendars/{calendarId}/acl/{ruleId}", + "httpMethod": "PATCH", + "description": "Updates an access control rule. This method supports patch semantics.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "ruleId": { + "type": "string", + "description": "ACL rule identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId", + "ruleId" + ], + "request": { + "$ref": "AclRule" + }, + "response": { + "$ref": "AclRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "update": { + "id": "calendar.acl.update", + "path": "calendars/{calendarId}/acl/{ruleId}", + "httpMethod": "PUT", + "description": "Updates an access control rule.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "ruleId": { + "type": "string", + "description": "ACL rule identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId", + "ruleId" + ], + "request": { + "$ref": "AclRule" + }, + "response": { + "$ref": "AclRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + } + } + }, + "calendarList": { + "methods": { + "delete": { + "id": "calendar.calendarList.delete", + "path": "users/me/calendarList/{calendarId}", + "httpMethod": "DELETE", + "description": "Deletes an entry on the user's calendar list.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "get": { + "id": "calendar.calendarList.get", + "path": "users/me/calendarList/{calendarId}", + "httpMethod": "GET", + "description": "Returns an entry on the user's calendar list.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "response": { + "$ref": "CalendarListEntry" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + }, + "insert": { + "id": "calendar.calendarList.insert", + "path": "users/me/calendarList", + "httpMethod": "POST", + "description": "Adds an entry to the user's calendar list.", + "parameters": { + "colorRgbFormat": { + "type": "boolean", + "description": "Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.", + "location": "query" + } + }, + "request": { + "$ref": "CalendarListEntry" + }, + "response": { + "$ref": "CalendarListEntry" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "list": { + "id": "calendar.calendarList.list", + "path": "users/me/calendarList", + "httpMethod": "GET", + "description": "Returns entries on the user's calendar list.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of entries returned on one result page. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "minAccessRole": { + "type": "string", + "description": "The minimum access role for the user in the returned entires. Optional. The default is no restriction.", + "enum": [ + "freeBusyReader", + "owner", + "reader", + "writer" + ], + "enumDescriptions": [ + "The user can read free/busy information.", + "The user can read and modify events and access control lists.", + "The user can read events that are not private.", + "The user can read and modify events." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying which result page to return. Optional.", + "location": "query" + }, + "showHidden": { + "type": "boolean", + "description": "Whether to show hidden entries. Optional. The default is False.", + "location": "query" + } + }, + "response": { + "$ref": "CalendarList" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ], + "supportsSubscription": true + }, + "patch": { + "id": "calendar.calendarList.patch", + "path": "users/me/calendarList/{calendarId}", + "httpMethod": "PATCH", + "description": "Updates an entry on the user's calendar list. This method supports patch semantics.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "colorRgbFormat": { + "type": "boolean", + "description": "Whether to use the 'foregroundColor' and 'backgroundColor' fields to write the calendar colors (RGB). If this feature is used, the index-based 'colorId' field will be set to the best matching option automatically. Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "CalendarListEntry" + }, + "response": { + "$ref": "CalendarListEntry" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "update": { + "id": "calendar.calendarList.update", + "path": "users/me/calendarList/{calendarId}", + "httpMethod": "PUT", + "description": "Updates an entry on the user's calendar list.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "colorRgbFormat": { + "type": "boolean", + "description": "Whether to use the 'foregroundColor' and 'backgroundColor' fields to write the calendar colors (RGB). If this feature is used, the index-based 'colorId' field will be set to the best matching option automatically. Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "CalendarListEntry" + }, + "response": { + "$ref": "CalendarListEntry" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + } + } + }, + "calendars": { + "methods": { + "clear": { + "id": "calendar.calendars.clear", + "path": "calendars/{calendarId}/clear", + "httpMethod": "POST", + "description": "Clears a primary calendar. This operation deletes all data associated with the primary calendar of an account and cannot be undone.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "delete": { + "id": "calendar.calendars.delete", + "path": "calendars/{calendarId}", + "httpMethod": "DELETE", + "description": "Deletes a secondary calendar.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "get": { + "id": "calendar.calendars.get", + "path": "calendars/{calendarId}", + "httpMethod": "GET", + "description": "Returns metadata for a calendar.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "response": { + "$ref": "Calendar" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + }, + "insert": { + "id": "calendar.calendars.insert", + "path": "calendars", + "httpMethod": "POST", + "description": "Creates a secondary calendar.", + "request": { + "$ref": "Calendar" + }, + "response": { + "$ref": "Calendar" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "patch": { + "id": "calendar.calendars.patch", + "path": "calendars/{calendarId}", + "httpMethod": "PATCH", + "description": "Updates metadata for a calendar. This method supports patch semantics.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "Calendar" + }, + "response": { + "$ref": "Calendar" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "update": { + "id": "calendar.calendars.update", + "path": "calendars/{calendarId}", + "httpMethod": "PUT", + "description": "Updates metadata for a calendar.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "Calendar" + }, + "response": { + "$ref": "Calendar" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + } + } + }, + "channels": { + "methods": { + "stop": { + "id": "calendar.channels.stop", + "path": "channels/stop", + "httpMethod": "POST", + "description": "Stop watching resources through this channel", + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + } + } + }, + "colors": { + "methods": { + "get": { + "id": "calendar.colors.get", + "path": "colors", + "httpMethod": "GET", + "description": "Returns the color definitions for calendars and events.", + "response": { + "$ref": "Colors" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + } + } + }, + "events": { + "methods": { + "delete": { + "id": "calendar.events.delete", + "path": "calendars/{calendarId}/events/{eventId}", + "httpMethod": "DELETE", + "description": "Deletes an event.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "eventId": { + "type": "string", + "description": "Event identifier.", + "required": true, + "location": "path" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the deletion of the event. Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId" + ], + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "get": { + "id": "calendar.events.get", + "path": "calendars/{calendarId}/events/{eventId}", + "httpMethod": "GET", + "description": "Returns an event.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "eventId": { + "type": "string", + "description": "Event identifier.", + "required": true, + "location": "path" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "timeZone": { + "type": "string", + "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId" + ], + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + }, + "import": { + "id": "calendar.events.import", + "path": "calendars/{calendarId}/events/import", + "httpMethod": "POST", + "description": "Imports an event. This operation is used to add a private copy of an existing event to a calendar.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "Event" + }, + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "insert": { + "id": "calendar.events.insert", + "path": "calendars/{calendarId}/events", + "httpMethod": "POST", + "description": "Creates an event.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the creation of the new event. Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "Event" + }, + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "instances": { + "id": "calendar.events.instances", + "path": "calendars/{calendarId}/events/{eventId}/instances", + "httpMethod": "GET", + "description": "Returns instances of the specified recurring event.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "eventId": { + "type": "string", + "description": "Recurring event identifier.", + "required": true, + "location": "path" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of events returned on one result page. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "originalStart": { + "type": "string", + "description": "The original start time of the instance in the result. Optional.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying which result page to return. Optional.", + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events will still be included if 'singleEvents' is False. Optional. The default is False.", + "location": "query" + }, + "timeMax": { + "type": "string", + "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + "format": "date-time", + "location": "query" + }, + "timeMin": { + "type": "string", + "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + "format": "date-time", + "location": "query" + }, + "timeZone": { + "type": "string", + "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId" + ], + "response": { + "$ref": "Events" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ], + "supportsSubscription": true + }, + "list": { + "id": "calendar.events.list", + "path": "calendars/{calendarId}/events", + "httpMethod": "GET", + "description": "Returns events on the specified calendar.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "iCalUID": { + "type": "string", + "description": "Specifies iCalendar UID (iCalUID) of events to be included in the response. Optional.", + "location": "query" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of events returned on one result page. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "The order of the events returned in the result. Optional. The default is an unspecified, stable order.", + "enum": [ + "startTime", + "updated" + ], + "enumDescriptions": [ + "Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter \"singleEvents\" is True)", + "Order by last modification time (ascending)." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying which result page to return. Optional.", + "location": "query" + }, + "privateExtendedProperty": { + "type": "string", + "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.", + "repeated": true, + "location": "query" + }, + "q": { + "type": "string", + "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.", + "location": "query" + }, + "sharedExtendedProperty": { + "type": "string", + "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.", + "repeated": true, + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.", + "location": "query" + }, + "showHiddenInvitations": { + "type": "boolean", + "description": "Whether to include hidden invitations in the result. Optional. The default is False.", + "location": "query" + }, + "singleEvents": { + "type": "boolean", + "description": "Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.", + "location": "query" + }, + "timeMax": { + "type": "string", + "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + "format": "date-time", + "location": "query" + }, + "timeMin": { + "type": "string", + "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + "format": "date-time", + "location": "query" + }, + "timeZone": { + "type": "string", + "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "Lower bound for an event's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId" + ], + "response": { + "$ref": "Events" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ], + "supportsSubscription": true + }, + "move": { + "id": "calendar.events.move", + "path": "calendars/{calendarId}/events/{eventId}/move", + "httpMethod": "POST", + "description": "Moves an event to another calendar, i.e. changes an event's organizer.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier of the source calendar where the event currently is on.", + "required": true, + "location": "path" + }, + "destination": { + "type": "string", + "description": "Calendar identifier of the target calendar where the event is to be moved to.", + "required": true, + "location": "query" + }, + "eventId": { + "type": "string", + "description": "Event identifier.", + "required": true, + "location": "path" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the change of the event's organizer. Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId", + "destination" + ], + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "patch": { + "id": "calendar.events.patch", + "path": "calendars/{calendarId}/events/{eventId}", + "httpMethod": "PATCH", + "description": "Updates an event. This method supports patch semantics.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "eventId": { + "type": "string", + "description": "Event identifier.", + "required": true, + "location": "path" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the event update (e.g. attendee's responses, title changes, etc.). Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId" + ], + "request": { + "$ref": "Event" + }, + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "quickAdd": { + "id": "calendar.events.quickAdd", + "path": "calendars/{calendarId}/events/quickAdd", + "httpMethod": "POST", + "description": "Creates an event based on a simple text string.", + "parameters": { + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the creation of the event. Optional. The default is False.", + "location": "query" + }, + "text": { + "type": "string", + "description": "The text describing the event to be created.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "text" + ], + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "update": { + "id": "calendar.events.update", + "path": "calendars/{calendarId}/events/{eventId}", + "httpMethod": "PUT", + "description": "Updates an event.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "eventId": { + "type": "string", + "description": "Event identifier.", + "required": true, + "location": "path" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "sendNotifications": { + "type": "boolean", + "description": "Whether to send notifications about the event update (e.g. attendee's responses, title changes, etc.). Optional. The default is False.", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId", + "eventId" + ], + "request": { + "$ref": "Event" + }, + "response": { + "$ref": "Event" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar" + ] + }, + "watch": { + "id": "calendar.events.watch", + "path": "calendars/{calendarId}/events/watch", + "httpMethod": "POST", + "description": "Watch for changes to Events resources.", + "parameters": { + "alwaysIncludeEmail": { + "type": "boolean", + "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + "location": "query" + }, + "calendarId": { + "type": "string", + "description": "Calendar identifier.", + "required": true, + "location": "path" + }, + "iCalUID": { + "type": "string", + "description": "Specifies iCalendar UID (iCalUID) of events to be included in the response. Optional.", + "location": "query" + }, + "maxAttendees": { + "type": "integer", + "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of events returned on one result page. Optional.", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "The order of the events returned in the result. Optional. The default is an unspecified, stable order.", + "enum": [ + "startTime", + "updated" + ], + "enumDescriptions": [ + "Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter \"singleEvents\" is True)", + "Order by last modification time (ascending)." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying which result page to return. Optional.", + "location": "query" + }, + "privateExtendedProperty": { + "type": "string", + "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.", + "repeated": true, + "location": "query" + }, + "q": { + "type": "string", + "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.", + "location": "query" + }, + "sharedExtendedProperty": { + "type": "string", + "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.", + "repeated": true, + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.", + "location": "query" + }, + "showHiddenInvitations": { + "type": "boolean", + "description": "Whether to include hidden invitations in the result. Optional. The default is False.", + "location": "query" + }, + "singleEvents": { + "type": "boolean", + "description": "Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.", + "location": "query" + }, + "timeMax": { + "type": "string", + "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + "format": "date-time", + "location": "query" + }, + "timeMin": { + "type": "string", + "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + "format": "date-time", + "location": "query" + }, + "timeZone": { + "type": "string", + "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "Lower bound for an event's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "calendarId" + ], + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ], + "supportsSubscription": true + } + } + }, + "freebusy": { + "methods": { + "query": { + "id": "calendar.freebusy.query", + "path": "freeBusy", + "httpMethod": "POST", + "description": "Returns free/busy information for a set of calendars.", + "request": { + "$ref": "FreeBusyRequest" + }, + "response": { + "$ref": "FreeBusyResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + } + } + }, + "settings": { + "methods": { + "get": { + "id": "calendar.settings.get", + "path": "users/me/settings/{setting}", + "httpMethod": "GET", + "description": "Returns a single user setting.", + "parameters": { + "setting": { + "type": "string", + "description": "The id of the user setting.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "setting" + ], + "response": { + "$ref": "Setting" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ] + }, + "list": { + "id": "calendar.settings.list", + "path": "users/me/settings", + "httpMethod": "GET", + "description": "Returns all user settings for the authenticated user.", + "response": { + "$ref": "Settings" + }, + "scopes": [ + "https://www.googleapis.com/auth/calendar", + "https://www.googleapis.com/auth/calendar.readonly" + ], + "supportsSubscription": true + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-gen.go b/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-gen.go new file mode 100644 index 0000000000000..34cd8bba501e4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/calendar/v3/calendar-gen.go @@ -0,0 +1,4423 @@ +// Package calendar provides access to the Calendar API. +// +// See https://developers.google.com/google-apps/calendar/firstapp +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/calendar/v3" +// ... +// calendarService, err := calendar.New(oauthHttpClient) +package calendar + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "calendar:v3" +const apiName = "calendar" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/calendar/v3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your calendars + CalendarScope = "https://www.googleapis.com/auth/calendar" + + // View your calendars + CalendarReadonlyScope = "https://www.googleapis.com/auth/calendar.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Acl = NewAclService(s) + s.CalendarList = NewCalendarListService(s) + s.Calendars = NewCalendarsService(s) + s.Channels = NewChannelsService(s) + s.Colors = NewColorsService(s) + s.Events = NewEventsService(s) + s.Freebusy = NewFreebusyService(s) + s.Settings = NewSettingsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Acl *AclService + + CalendarList *CalendarListService + + Calendars *CalendarsService + + Channels *ChannelsService + + Colors *ColorsService + + Events *EventsService + + Freebusy *FreebusyService + + Settings *SettingsService +} + +func NewAclService(s *Service) *AclService { + rs := &AclService{s: s} + return rs +} + +type AclService struct { + s *Service +} + +func NewCalendarListService(s *Service) *CalendarListService { + rs := &CalendarListService{s: s} + return rs +} + +type CalendarListService struct { + s *Service +} + +func NewCalendarsService(s *Service) *CalendarsService { + rs := &CalendarsService{s: s} + return rs +} + +type CalendarsService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewColorsService(s *Service) *ColorsService { + rs := &ColorsService{s: s} + return rs +} + +type ColorsService struct { + s *Service +} + +func NewEventsService(s *Service) *EventsService { + rs := &EventsService{s: s} + return rs +} + +type EventsService struct { + s *Service +} + +func NewFreebusyService(s *Service) *FreebusyService { + rs := &FreebusyService{s: s} + return rs +} + +type FreebusyService struct { + s *Service +} + +func NewSettingsService(s *Service) *SettingsService { + rs := &SettingsService{s: s} + return rs +} + +type SettingsService struct { + s *Service +} + +type Acl struct { + // Etag: ETag of the collection. + Etag string `json:"etag,omitempty"` + + // Items: List of rules on the access control list. + Items []*AclRule `json:"items,omitempty"` + + // Kind: Type of the collection ("calendar#acl"). + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access the next page of this result. + // Omitted if no further results are available. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AclRule struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Identifier of the ACL rule. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource ("calendar#aclRule"). + Kind string `json:"kind,omitempty"` + + // Role: The role assigned to the scope. Possible values are: + // - "none" + // - Provides no access. + // - "freeBusyReader" - Provides read access to + // free/busy information. + // - "reader" - Provides read access to the + // calendar. Private events will appear to users with reader access, but + // event details will be hidden. + // - "writer" - Provides read and write + // access to the calendar. Private events will appear to users with + // writer access, and event details will be visible. + // - "owner" - + // Provides ownership of the calendar. This role has all of the + // permissions of the writer role with the additional ability to see and + // manipulate ACLs. + Role string `json:"role,omitempty"` + + // Scope: The scope of the rule. + Scope *AclRuleScope `json:"scope,omitempty"` +} + +type AclRuleScope struct { + // Type: The type of the scope. Possible values are: + // - "default" - The + // public scope. This is the default value. + // - "user" - Limits the scope + // to a single user. + // - "group" - Limits the scope to a group. + // - + // "domain" - Limits the scope to a domain. Note: The permissions + // granted to the "default", or public, scope apply to any user, + // authenticated or not. + Type string `json:"type,omitempty"` + + // Value: The email address of a user or group, or the name of a domain, + // depending on the scope type. Omitted for type "default". + Value string `json:"value,omitempty"` +} + +type Calendar struct { + // Description: Description of the calendar. Optional. + Description string `json:"description,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Identifier of the calendar. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource ("calendar#calendar"). + Kind string `json:"kind,omitempty"` + + // Location: Geographic location of the calendar as free-form text. + // Optional. + Location string `json:"location,omitempty"` + + // Summary: Title of the calendar. + Summary string `json:"summary,omitempty"` + + // TimeZone: The time zone of the calendar. Optional. + TimeZone string `json:"timeZone,omitempty"` +} + +type CalendarList struct { + // Etag: ETag of the collection. + Etag string `json:"etag,omitempty"` + + // Items: Calendars that are present on the user's calendar list. + Items []*CalendarListEntry `json:"items,omitempty"` + + // Kind: Type of the collection ("calendar#calendarList"). + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access the next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type CalendarListEntry struct { + // AccessRole: The effective access role that the authenticated user has + // on the calendar. Read-only. Possible values are: + // - "freeBusyReader" + // - Provides read access to free/busy information. + // - "reader" - + // Provides read access to the calendar. Private events will appear to + // users with reader access, but event details will be hidden. + // - + // "writer" - Provides read and write access to the calendar. Private + // events will appear to users with writer access, and event details + // will be visible. + // - "owner" - Provides ownership of the calendar. + // This role has all of the permissions of the writer role with the + // additional ability to see and manipulate ACLs. + AccessRole string `json:"accessRole,omitempty"` + + // BackgroundColor: The main color of the calendar in the format + // '#0088aa'. This property supersedes the index-based colorId property. + // Optional. + BackgroundColor string `json:"backgroundColor,omitempty"` + + // ColorId: The color of the calendar. This is an ID referring to an + // entry in the "calendar" section of the colors definition (see the + // "colors" endpoint). Optional. + ColorId string `json:"colorId,omitempty"` + + // DefaultReminders: The default reminders that the authenticated user + // has for this calendar. + DefaultReminders []*EventReminder `json:"defaultReminders,omitempty"` + + // Description: Description of the calendar. Optional. Read-only. + Description string `json:"description,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // ForegroundColor: The foreground color of the calendar in the format + // '#ffffff'. This property supersedes the index-based colorId property. + // Optional. + ForegroundColor string `json:"foregroundColor,omitempty"` + + // Hidden: Whether the calendar has been hidden from the list. Optional. + // The default is False. + Hidden bool `json:"hidden,omitempty"` + + // Id: Identifier of the calendar. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource ("calendar#calendarListEntry"). + Kind string `json:"kind,omitempty"` + + // Location: Geographic location of the calendar as free-form text. + // Optional. Read-only. + Location string `json:"location,omitempty"` + + // NotificationSettings: The notifications that the authenticated user + // is receiving for this calendar. + NotificationSettings *CalendarListEntryNotificationSettings `json:"notificationSettings,omitempty"` + + // Primary: Whether the calendar is the primary calendar of the + // authenticated user. Read-only. Optional. The default is False. + Primary bool `json:"primary,omitempty"` + + // Selected: Whether the calendar content shows up in the calendar UI. + // Optional. The default is False. + Selected bool `json:"selected,omitempty"` + + // Summary: Title of the calendar. Read-only. + Summary string `json:"summary,omitempty"` + + // SummaryOverride: The summary that the authenticated user has set for + // this calendar. Optional. + SummaryOverride string `json:"summaryOverride,omitempty"` + + // TimeZone: The time zone of the calendar. Optional. Read-only. + TimeZone string `json:"timeZone,omitempty"` +} + +type CalendarListEntryNotificationSettings struct { + // Notifications: The list of notifications set for this calendar. + Notifications []*CalendarNotification `json:"notifications,omitempty"` +} + +type CalendarNotification struct { + // Method: The method used to deliver the notification. Possible values + // are: + // - "email" - Reminders are sent via email. + // - "sms" - Reminders + // are sent via SMS. This value is read-only and is ignored on inserts + // and updates. + Method string `json:"method,omitempty"` + + // Type: The type of notification. Possible values are: + // - + // "eventCreation" - Notification sent when a new event is put on the + // calendar. + // - "eventChange" - Notification sent when an event is + // changed. + // - "eventCancellation" - Notification sent when an event is + // cancelled. + // - "eventResponse" - Notification sent when an event is + // changed. + // - "agenda" - An agenda with the events of the day (sent out + // in the morning). + Type string `json:"type,omitempty"` +} + +type Channel struct { + // Address: The address where notifications are delivered for this + // channel. + Address string `json:"address,omitempty"` + + // Expiration: Date and time of notification channel expiration, + // expressed as a Unix timestamp, in milliseconds. Optional. + Expiration int64 `json:"expiration,omitempty,string"` + + // Id: A UUID or similar unique string that identifies this channel. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a notification channel used to watch for + // changes to a resource. Value: the fixed string "api#channel". + Kind string `json:"kind,omitempty"` + + // Params: Additional parameters controlling delivery channel behavior. + // Optional. + Params map[string]string `json:"params,omitempty"` + + // Payload: A Boolean value to indicate whether payload is wanted. + // Optional. + Payload bool `json:"payload,omitempty"` + + // ResourceId: An opaque ID that identifies the resource being watched + // on this channel. Stable across different API versions. + ResourceId string `json:"resourceId,omitempty"` + + // ResourceUri: A version-specific identifier for the watched resource. + ResourceUri string `json:"resourceUri,omitempty"` + + // Token: An arbitrary string delivered to the target address with each + // notification delivered over this channel. Optional. + Token string `json:"token,omitempty"` + + // Type: The type of delivery mechanism used for this channel. + Type string `json:"type,omitempty"` +} + +type ColorDefinition struct { + // Background: The background color associated with this color + // definition. + Background string `json:"background,omitempty"` + + // Foreground: The foreground color that can be used to write on top of + // a background with 'background' color. + Foreground string `json:"foreground,omitempty"` +} + +type Colors struct { + // Calendar: Palette of calendar colors, mapping from the color ID to + // its definition. An 'calendarListEntry' resource refers to one of + // these color IDs in its 'color' field. Read-only. + Calendar *ColorsCalendar `json:"calendar,omitempty"` + + // Event: Palette of event colors, mapping from the color ID to its + // definition. An 'event' resource may refer to one of these color IDs + // in its 'color' field. Read-only. + Event *ColorsEvent `json:"event,omitempty"` + + // Kind: Type of the resource ("calendar#colors"). + Kind string `json:"kind,omitempty"` + + // Updated: Last modification time of the color palette (as a RFC 3339 + // timestamp). Read-only. + Updated string `json:"updated,omitempty"` +} + +type ColorsCalendar struct { +} + +type ColorsEvent struct { +} + +type Error struct { + // Domain: Domain, or broad category, of the error. + Domain string `json:"domain,omitempty"` + + // Reason: Specific reason for the error. Some of the possible values + // are: + // - "groupTooBig" - The group of users requested is too large + // for a single query. + // - "tooManyCalendarsRequested" - The number of + // calendars requested is too large for a single query. + // - "notFound" - + // The requested resource was not found. + // - "internalError" - The API + // service has encountered an internal error. Additional error types + // may be added in the future, so clients should gracefully handle + // additional error statuses not included in this list. + Reason string `json:"reason,omitempty"` +} + +type Event struct { + // AnyoneCanAddSelf: Whether anyone can invite themselves to the event. + // Optional. The default is False. + AnyoneCanAddSelf bool `json:"anyoneCanAddSelf,omitempty"` + + // Attendees: The attendees of the event. + Attendees []*EventAttendee `json:"attendees,omitempty"` + + // AttendeesOmitted: Whether attendees may have been omitted from the + // event's representation. When retrieving an event, this may be due to + // a restriction specified by the 'maxAttendee' query parameter. When + // updating an event, this can be used to only update the participant's + // response. Optional. The default is False. + AttendeesOmitted bool `json:"attendeesOmitted,omitempty"` + + // ColorId: The color of the event. This is an ID referring to an entry + // in the "event" section of the colors definition (see the "colors" + // endpoint). Optional. + ColorId string `json:"colorId,omitempty"` + + // Created: Creation time of the event (as a RFC 3339 timestamp). + // Read-only. + Created string `json:"created,omitempty"` + + // Creator: The creator of the event. Read-only. + Creator *EventCreator `json:"creator,omitempty"` + + // Description: Description of the event. Optional. + Description string `json:"description,omitempty"` + + // End: The (exclusive) end time of the event. For a recurring event, + // this is the end time of the first instance. + End *EventDateTime `json:"end,omitempty"` + + // EndTimeUnspecified: Whether the end time is actually unspecified. An + // end time is still provided for compatibility reasons, even if this + // attribute is set to True. The default is False. + EndTimeUnspecified bool `json:"endTimeUnspecified,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // ExtendedProperties: Extended properties of the event. + ExtendedProperties *EventExtendedProperties `json:"extendedProperties,omitempty"` + + // Gadget: A gadget that extends this event. + Gadget *EventGadget `json:"gadget,omitempty"` + + // GuestsCanInviteOthers: Whether attendees other than the organizer can + // invite others to the event. Optional. The default is True. + GuestsCanInviteOthers bool `json:"guestsCanInviteOthers,omitempty"` + + // GuestsCanModify: Whether attendees other than the organizer can + // modify the event. Optional. The default is False. + GuestsCanModify bool `json:"guestsCanModify,omitempty"` + + // GuestsCanSeeOtherGuests: Whether attendees other than the organizer + // can see who the event's attendees are. Optional. The default is True. + GuestsCanSeeOtherGuests bool `json:"guestsCanSeeOtherGuests,omitempty"` + + // HangoutLink: An absolute link to the Google+ hangout associated with + // this event. Read-only. + HangoutLink string `json:"hangoutLink,omitempty"` + + // HtmlLink: An absolute link to this event in the Google Calendar Web + // UI. Read-only. + HtmlLink string `json:"htmlLink,omitempty"` + + // ICalUID: Event ID in the iCalendar format. + ICalUID string `json:"iCalUID,omitempty"` + + // Id: Identifier of the event. When creating new single or recurring + // events, you can specify their IDs. Provided IDs must follow these + // rules: + // - characters allowed in the ID are those used in base32hex + // encoding, i.e. lowercase letters a-v and digits 0-9, see section + // 3.1.2 in RFC2938 + // - the length of the ID must be between 5 and 1024 + // characters + // - the ID must be unique per calendar Due to the globally + // distributed nature of the system, we cannot guarantee that ID + // collisions will be detected at event creation time. To minimize the + // risk of collisions we recommend using an established UUID algorithm + // such as one described in RFC4122. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource ("calendar#event"). + Kind string `json:"kind,omitempty"` + + // Location: Geographic location of the event as free-form text. + // Optional. + Location string `json:"location,omitempty"` + + // Locked: Whether this is a locked event copy where no changes can be + // made to the main event fields "summary", "description", "location", + // "start", "end" or "recurrence". The default is False. Read-Only. + Locked bool `json:"locked,omitempty"` + + // Organizer: The organizer of the event. If the organizer is also an + // attendee, this is indicated with a separate entry in 'attendees' with + // the 'organizer' field set to True. To change the organizer, use the + // "move" operation. Read-only, except when importing an event. + Organizer *EventOrganizer `json:"organizer,omitempty"` + + // OriginalStartTime: For an instance of a recurring event, this is the + // time at which this event would start according to the recurrence data + // in the recurring event identified by recurringEventId. Immutable. + OriginalStartTime *EventDateTime `json:"originalStartTime,omitempty"` + + // PrivateCopy: Whether this is a private event copy where changes are + // not shared with other copies on other calendars. Optional. Immutable. + // The default is False. + PrivateCopy bool `json:"privateCopy,omitempty"` + + // Recurrence: List of RRULE, EXRULE, RDATE and EXDATE lines for a + // recurring event. This field is omitted for single events or instances + // of recurring events. + Recurrence []string `json:"recurrence,omitempty"` + + // RecurringEventId: For an instance of a recurring event, this is the + // event ID of the recurring event itself. Immutable. + RecurringEventId string `json:"recurringEventId,omitempty"` + + // Reminders: Information about the event's reminders for the + // authenticated user. + Reminders *EventReminders `json:"reminders,omitempty"` + + // Sequence: Sequence number as per iCalendar. + Sequence int64 `json:"sequence,omitempty"` + + // Source: Source of an event from which it was created; for example a + // web page, an email message or any document identifiable by an URL + // using HTTP/HTTPS protocol. Accessible only by the creator of the + // event. + Source *EventSource `json:"source,omitempty"` + + // Start: The (inclusive) start time of the event. For a recurring + // event, this is the start time of the first instance. + Start *EventDateTime `json:"start,omitempty"` + + // Status: Status of the event. Optional. Possible values are: + // - + // "confirmed" - The event is confirmed. This is the default status. + // - + // "tentative" - The event is tentatively confirmed. + // - "cancelled" - + // The event is cancelled. + Status string `json:"status,omitempty"` + + // Summary: Title of the event. + Summary string `json:"summary,omitempty"` + + // Transparency: Whether the event blocks time on the calendar. + // Optional. Possible values are: + // - "opaque" - The event blocks time + // on the calendar. This is the default value. + // - "transparent" - The + // event does not block time on the calendar. + Transparency string `json:"transparency,omitempty"` + + // Updated: Last modification time of the event (as a RFC 3339 + // timestamp). Read-only. + Updated string `json:"updated,omitempty"` + + // Visibility: Visibility of the event. Optional. Possible values are: + // + // - "default" - Uses the default visibility for events on the + // calendar. This is the default value. + // - "public" - The event is + // public and event details are visible to all readers of the calendar. + // + // - "private" - The event is private and only event attendees may view + // event details. + // - "confidential" - The event is private. This value + // is provided for compatibility reasons. + Visibility string `json:"visibility,omitempty"` +} + +type EventCreator struct { + // DisplayName: The creator's name, if available. + DisplayName string `json:"displayName,omitempty"` + + // Email: The creator's email address, if available. + Email string `json:"email,omitempty"` + + // Id: The creator's Profile ID, if available. + Id string `json:"id,omitempty"` + + // Self: Whether the creator corresponds to the calendar on which this + // copy of the event appears. Read-only. The default is False. + Self bool `json:"self,omitempty"` +} + +type EventExtendedProperties struct { + // Private: Properties that are private to the copy of the event that + // appears on this calendar. + Private map[string]string `json:"private,omitempty"` + + // Shared: Properties that are shared between copies of the event on + // other attendees' calendars. + Shared map[string]string `json:"shared,omitempty"` +} + +type EventGadget struct { + // Display: The gadget's display mode. Optional. Possible values are: + // + // - "icon" - The gadget displays next to the event's title in the + // calendar view. + // - "chip" - The gadget displays when the event is + // clicked. + Display string `json:"display,omitempty"` + + // Height: The gadget's height in pixels. Optional. + Height int64 `json:"height,omitempty"` + + // IconLink: The gadget's icon URL. + IconLink string `json:"iconLink,omitempty"` + + // Link: The gadget's URL. + Link string `json:"link,omitempty"` + + // Preferences: Preferences. + Preferences map[string]string `json:"preferences,omitempty"` + + // Title: The gadget's title. + Title string `json:"title,omitempty"` + + // Type: The gadget's type. + Type string `json:"type,omitempty"` + + // Width: The gadget's width in pixels. Optional. + Width int64 `json:"width,omitempty"` +} + +type EventOrganizer struct { + // DisplayName: The organizer's name, if available. + DisplayName string `json:"displayName,omitempty"` + + // Email: The organizer's email address, if available. + Email string `json:"email,omitempty"` + + // Id: The organizer's Profile ID, if available. + Id string `json:"id,omitempty"` + + // Self: Whether the organizer corresponds to the calendar on which this + // copy of the event appears. Read-only. The default is False. + Self bool `json:"self,omitempty"` +} + +type EventReminders struct { + // Overrides: If the event doesn't use the default reminders, this lists + // the reminders specific to the event, or, if not set, indicates that + // no reminders are set for this event. + Overrides []*EventReminder `json:"overrides,omitempty"` + + // UseDefault: Whether the default reminders of the calendar apply to + // the event. + UseDefault bool `json:"useDefault,omitempty"` +} + +type EventSource struct { + // Title: Title of the source; for example a title of a web page or an + // email subject. + Title string `json:"title,omitempty"` + + // Url: URL of the source pointing to a resource. URL's protocol must be + // HTTP or HTTPS. + Url string `json:"url,omitempty"` +} + +type EventAttendee struct { + // AdditionalGuests: Number of additional guests. Optional. The default + // is 0. + AdditionalGuests int64 `json:"additionalGuests,omitempty"` + + // Comment: The attendee's response comment. Optional. + Comment string `json:"comment,omitempty"` + + // DisplayName: The attendee's name, if available. Optional. + DisplayName string `json:"displayName,omitempty"` + + // Email: The attendee's email address, if available. This field must be + // present when adding an attendee. + Email string `json:"email,omitempty"` + + // Id: The attendee's Profile ID, if available. + Id string `json:"id,omitempty"` + + // Optional: Whether this is an optional attendee. Optional. The default + // is False. + Optional bool `json:"optional,omitempty"` + + // Organizer: Whether the attendee is the organizer of the event. + // Read-only. The default is False. + Organizer bool `json:"organizer,omitempty"` + + // Resource: Whether the attendee is a resource. Read-only. The default + // is False. + Resource bool `json:"resource,omitempty"` + + // ResponseStatus: The attendee's response status. Possible values are: + // + // - "needsAction" - The attendee has not responded to the invitation. + // + // - "declined" - The attendee has declined the invitation. + // - + // "tentative" - The attendee has tentatively accepted the invitation. + // + // - "accepted" - The attendee has accepted the invitation. + ResponseStatus string `json:"responseStatus,omitempty"` + + // Self: Whether this entry represents the calendar on which this copy + // of the event appears. Read-only. The default is False. + Self bool `json:"self,omitempty"` +} + +type EventDateTime struct { + // Date: The date, in the format "yyyy-mm-dd", if this is an all-day + // event. + Date string `json:"date,omitempty"` + + // DateTime: The time, as a combined date-time value (formatted + // according to RFC 3339). A time zone offset is required unless a time + // zone is explicitly specified in 'timeZone'. + DateTime string `json:"dateTime,omitempty"` + + // TimeZone: The name of the time zone in which the time is specified + // (e.g. "Europe/Zurich"). Optional. The default is the time zone of the + // calendar. + TimeZone string `json:"timeZone,omitempty"` +} + +type EventReminder struct { + // Method: The method used by this reminder. Possible values are: + // - + // "email" - Reminders are sent via email. + // - "sms" - Reminders are sent + // via SMS. + // - "popup" - Reminders are sent via a UI popup. + Method string `json:"method,omitempty"` + + // Minutes: Number of minutes before the start of the event when the + // reminder should trigger. + Minutes int64 `json:"minutes,omitempty"` +} + +type Events struct { + // AccessRole: The user's access role for this calendar. Read-only. + // Possible values are: + // - "none" - The user has no access. + // - + // "freeBusyReader" - The user has read access to free/busy information. + // + // - "reader" - The user has read access to the calendar. Private + // events will appear to users with reader access, but event details + // will be hidden. + // - "writer" - The user has read and write access to + // the calendar. Private events will appear to users with writer access, + // and event details will be visible. + // - "owner" - The user has + // ownership of the calendar. This role has all of the permissions of + // the writer role with the additional ability to see and manipulate + // ACLs. + AccessRole string `json:"accessRole,omitempty"` + + // DefaultReminders: The default reminders on the calendar for the + // authenticated user. These reminders apply to all events on this + // calendar that do not explicitly override them (i.e. do not have + // 'reminders.useDefault' set to 'true'). + DefaultReminders []*EventReminder `json:"defaultReminders,omitempty"` + + // Description: Description of the calendar. Read-only. + Description string `json:"description,omitempty"` + + // Etag: ETag of the collection. + Etag string `json:"etag,omitempty"` + + // Items: List of events on the calendar. + Items []*Event `json:"items,omitempty"` + + // Kind: Type of the collection ("calendar#events"). + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access the next page of this result. + // Omitted if no further results are available. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Summary: Title of the calendar. Read-only. + Summary string `json:"summary,omitempty"` + + // TimeZone: The time zone of the calendar. Read-only. + TimeZone string `json:"timeZone,omitempty"` + + // Updated: Last modification time of the calendar (as a RFC 3339 + // timestamp). Read-only. + Updated string `json:"updated,omitempty"` +} + +type FreeBusyCalendar struct { + // Busy: List of time ranges during which this calendar should be + // regarded as busy. + Busy []*TimePeriod `json:"busy,omitempty"` + + // Errors: Optional error(s) (if computation for the calendar failed). + Errors []*Error `json:"errors,omitempty"` +} + +type FreeBusyGroup struct { + // Calendars: List of calendars' identifiers within a group. + Calendars []string `json:"calendars,omitempty"` + + // Errors: Optional error(s) (if computation for the group failed). + Errors []*Error `json:"errors,omitempty"` +} + +type FreeBusyRequest struct { + // CalendarExpansionMax: Maximal number of calendars for which FreeBusy + // information is to be provided. Optional. + CalendarExpansionMax int64 `json:"calendarExpansionMax,omitempty"` + + // GroupExpansionMax: Maximal number of calendar identifiers to be + // provided for a single group. Optional. An error will be returned for + // a group with more members than this value. + GroupExpansionMax int64 `json:"groupExpansionMax,omitempty"` + + // Items: List of calendars and/or groups to query. + Items []*FreeBusyRequestItem `json:"items,omitempty"` + + // TimeMax: The end of the interval for the query. + TimeMax string `json:"timeMax,omitempty"` + + // TimeMin: The start of the interval for the query. + TimeMin string `json:"timeMin,omitempty"` + + // TimeZone: Time zone used in the response. Optional. The default is + // UTC. + TimeZone string `json:"timeZone,omitempty"` +} + +type FreeBusyRequestItem struct { + // Id: The identifier of a calendar or a group. + Id string `json:"id,omitempty"` +} + +type FreeBusyResponse struct { + // Calendars: List of free/busy information for calendars. + Calendars *FreeBusyResponseCalendars `json:"calendars,omitempty"` + + // Groups: Expansion of groups. + Groups *FreeBusyResponseGroups `json:"groups,omitempty"` + + // Kind: Type of the resource ("calendar#freeBusy"). + Kind string `json:"kind,omitempty"` + + // TimeMax: The end of the interval. + TimeMax string `json:"timeMax,omitempty"` + + // TimeMin: The start of the interval. + TimeMin string `json:"timeMin,omitempty"` +} + +type FreeBusyResponseCalendars struct { +} + +type FreeBusyResponseGroups struct { +} + +type Setting struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: The id of the user setting. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource ("calendar#setting"). + Kind string `json:"kind,omitempty"` + + // Value: Value of the user setting. The format of the value depends on + // the ID of the setting. It must always be a UTF-8 string of length up + // to 1024 characters. + Value string `json:"value,omitempty"` +} + +type Settings struct { + // Etag: Etag of the collection. + Etag string `json:"etag,omitempty"` + + // Items: List of user settings. + Items []*Setting `json:"items,omitempty"` + + // Kind: Type of the collection ("calendar#settings"). + Kind string `json:"kind,omitempty"` +} + +type TimePeriod struct { + // End: The (exclusive) end of the time period. + End string `json:"end,omitempty"` + + // Start: The (inclusive) start of the time period. + Start string `json:"start,omitempty"` +} + +// method id "calendar.acl.delete": + +type AclDeleteCall struct { + s *Service + calendarId string + ruleId string + opt_ map[string]interface{} +} + +// Delete: Deletes an access control rule. +func (r *AclService) Delete(calendarId string, ruleId string) *AclDeleteCall { + c := &AclDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.ruleId = ruleId + return c +} + +func (c *AclDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl/{ruleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{ruleId}", url.QueryEscape(c.ruleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an access control rule.", + // "httpMethod": "DELETE", + // "id": "calendar.acl.delete", + // "parameterOrder": [ + // "calendarId", + // "ruleId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ruleId": { + // "description": "ACL rule identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl/{ruleId}", + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.acl.get": + +type AclGetCall struct { + s *Service + calendarId string + ruleId string + opt_ map[string]interface{} +} + +// Get: Returns an access control rule. +func (r *AclService) Get(calendarId string, ruleId string) *AclGetCall { + c := &AclGetCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.ruleId = ruleId + return c +} + +func (c *AclGetCall) Do() (*AclRule, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl/{ruleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{ruleId}", url.QueryEscape(c.ruleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AclRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns an access control rule.", + // "httpMethod": "GET", + // "id": "calendar.acl.get", + // "parameterOrder": [ + // "calendarId", + // "ruleId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ruleId": { + // "description": "ACL rule identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl/{ruleId}", + // "response": { + // "$ref": "AclRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.acl.insert": + +type AclInsertCall struct { + s *Service + calendarId string + aclrule *AclRule + opt_ map[string]interface{} +} + +// Insert: Creates an access control rule. +func (r *AclService) Insert(calendarId string, aclrule *AclRule) *AclInsertCall { + c := &AclInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.aclrule = aclrule + return c +} + +func (c *AclInsertCall) Do() (*AclRule, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AclRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an access control rule.", + // "httpMethod": "POST", + // "id": "calendar.acl.insert", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl", + // "request": { + // "$ref": "AclRule" + // }, + // "response": { + // "$ref": "AclRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.acl.list": + +type AclListCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// List: Returns the rules in the access control list for the calendar. +func (r *AclService) List(calendarId string) *AclListCall { + c := &AclListCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *AclListCall) Do() (*Acl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Acl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the rules in the access control list for the calendar.", + // "httpMethod": "GET", + // "id": "calendar.acl.list", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl", + // "response": { + // "$ref": "Acl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ], + // "supportsSubscription": true + // } + +} + +// method id "calendar.acl.patch": + +type AclPatchCall struct { + s *Service + calendarId string + ruleId string + aclrule *AclRule + opt_ map[string]interface{} +} + +// Patch: Updates an access control rule. This method supports patch +// semantics. +func (r *AclService) Patch(calendarId string, ruleId string, aclrule *AclRule) *AclPatchCall { + c := &AclPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.ruleId = ruleId + c.aclrule = aclrule + return c +} + +func (c *AclPatchCall) Do() (*AclRule, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl/{ruleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{ruleId}", url.QueryEscape(c.ruleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AclRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an access control rule. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "calendar.acl.patch", + // "parameterOrder": [ + // "calendarId", + // "ruleId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ruleId": { + // "description": "ACL rule identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl/{ruleId}", + // "request": { + // "$ref": "AclRule" + // }, + // "response": { + // "$ref": "AclRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.acl.update": + +type AclUpdateCall struct { + s *Service + calendarId string + ruleId string + aclrule *AclRule + opt_ map[string]interface{} +} + +// Update: Updates an access control rule. +func (r *AclService) Update(calendarId string, ruleId string, aclrule *AclRule) *AclUpdateCall { + c := &AclUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.ruleId = ruleId + c.aclrule = aclrule + return c +} + +func (c *AclUpdateCall) Do() (*AclRule, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.aclrule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/acl/{ruleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{ruleId}", url.QueryEscape(c.ruleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AclRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an access control rule.", + // "httpMethod": "PUT", + // "id": "calendar.acl.update", + // "parameterOrder": [ + // "calendarId", + // "ruleId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ruleId": { + // "description": "ACL rule identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/acl/{ruleId}", + // "request": { + // "$ref": "AclRule" + // }, + // "response": { + // "$ref": "AclRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendarList.delete": + +type CalendarListDeleteCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// Delete: Deletes an entry on the user's calendar list. +func (r *CalendarListService) Delete(calendarId string) *CalendarListDeleteCall { + c := &CalendarListDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *CalendarListDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an entry on the user's calendar list.", + // "httpMethod": "DELETE", + // "id": "calendar.calendarList.delete", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/me/calendarList/{calendarId}", + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendarList.get": + +type CalendarListGetCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// Get: Returns an entry on the user's calendar list. +func (r *CalendarListService) Get(calendarId string) *CalendarListGetCall { + c := &CalendarListGetCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *CalendarListGetCall) Do() (*CalendarListEntry, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CalendarListEntry) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns an entry on the user's calendar list.", + // "httpMethod": "GET", + // "id": "calendar.calendarList.get", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/me/calendarList/{calendarId}", + // "response": { + // "$ref": "CalendarListEntry" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.calendarList.insert": + +type CalendarListInsertCall struct { + s *Service + calendarlistentry *CalendarListEntry + opt_ map[string]interface{} +} + +// Insert: Adds an entry to the user's calendar list. +func (r *CalendarListService) Insert(calendarlistentry *CalendarListEntry) *CalendarListInsertCall { + c := &CalendarListInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarlistentry = calendarlistentry + return c +} + +// ColorRgbFormat sets the optional parameter "colorRgbFormat": Whether +// to use the foregroundColor and backgroundColor fields to write the +// calendar colors (RGB). If this feature is used, the index-based +// colorId field will be set to the best matching option automatically. +// The default is False. +func (c *CalendarListInsertCall) ColorRgbFormat(colorRgbFormat bool) *CalendarListInsertCall { + c.opt_["colorRgbFormat"] = colorRgbFormat + return c +} + +func (c *CalendarListInsertCall) Do() (*CalendarListEntry, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["colorRgbFormat"]; ok { + params.Set("colorRgbFormat", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CalendarListEntry) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an entry to the user's calendar list.", + // "httpMethod": "POST", + // "id": "calendar.calendarList.insert", + // "parameters": { + // "colorRgbFormat": { + // "description": "Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option automatically. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "users/me/calendarList", + // "request": { + // "$ref": "CalendarListEntry" + // }, + // "response": { + // "$ref": "CalendarListEntry" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendarList.list": + +type CalendarListListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Returns entries on the user's calendar list. +func (r *CalendarListService) List() *CalendarListListCall { + c := &CalendarListListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of entries returned on one result page. +func (c *CalendarListListCall) MaxResults(maxResults int64) *CalendarListListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MinAccessRole sets the optional parameter "minAccessRole": The +// minimum access role for the user in the returned entires. The +// default is no restriction. +func (c *CalendarListListCall) MinAccessRole(minAccessRole string) *CalendarListListCall { + c.opt_["minAccessRole"] = minAccessRole + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// which result page to return. +func (c *CalendarListListCall) PageToken(pageToken string) *CalendarListListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ShowHidden sets the optional parameter "showHidden": Whether to show +// hidden entries. The default is False. +func (c *CalendarListListCall) ShowHidden(showHidden bool) *CalendarListListCall { + c.opt_["showHidden"] = showHidden + return c +} + +func (c *CalendarListListCall) Do() (*CalendarList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minAccessRole"]; ok { + params.Set("minAccessRole", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showHidden"]; ok { + params.Set("showHidden", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CalendarList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns entries on the user's calendar list.", + // "httpMethod": "GET", + // "id": "calendar.calendarList.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of entries returned on one result page. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "minAccessRole": { + // "description": "The minimum access role for the user in the returned entires. Optional. The default is no restriction.", + // "enum": [ + // "freeBusyReader", + // "owner", + // "reader", + // "writer" + // ], + // "enumDescriptions": [ + // "The user can read free/busy information.", + // "The user can read and modify events and access control lists.", + // "The user can read events that are not private.", + // "The user can read and modify events." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying which result page to return. Optional.", + // "location": "query", + // "type": "string" + // }, + // "showHidden": { + // "description": "Whether to show hidden entries. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "users/me/calendarList", + // "response": { + // "$ref": "CalendarList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "calendar.calendarList.patch": + +type CalendarListPatchCall struct { + s *Service + calendarId string + calendarlistentry *CalendarListEntry + opt_ map[string]interface{} +} + +// Patch: Updates an entry on the user's calendar list. This method +// supports patch semantics. +func (r *CalendarListService) Patch(calendarId string, calendarlistentry *CalendarListEntry) *CalendarListPatchCall { + c := &CalendarListPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.calendarlistentry = calendarlistentry + return c +} + +// ColorRgbFormat sets the optional parameter "colorRgbFormat": Whether +// to use the 'foregroundColor' and 'backgroundColor' fields to write +// the calendar colors (RGB). If this feature is used, the index-based +// 'colorId' field will be set to the best matching option +// automatically. The default is False. +func (c *CalendarListPatchCall) ColorRgbFormat(colorRgbFormat bool) *CalendarListPatchCall { + c.opt_["colorRgbFormat"] = colorRgbFormat + return c +} + +func (c *CalendarListPatchCall) Do() (*CalendarListEntry, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["colorRgbFormat"]; ok { + params.Set("colorRgbFormat", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CalendarListEntry) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an entry on the user's calendar list. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "calendar.calendarList.patch", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "colorRgbFormat": { + // "description": "Whether to use the 'foregroundColor' and 'backgroundColor' fields to write the calendar colors (RGB). If this feature is used, the index-based 'colorId' field will be set to the best matching option automatically. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "users/me/calendarList/{calendarId}", + // "request": { + // "$ref": "CalendarListEntry" + // }, + // "response": { + // "$ref": "CalendarListEntry" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendarList.update": + +type CalendarListUpdateCall struct { + s *Service + calendarId string + calendarlistentry *CalendarListEntry + opt_ map[string]interface{} +} + +// Update: Updates an entry on the user's calendar list. +func (r *CalendarListService) Update(calendarId string, calendarlistentry *CalendarListEntry) *CalendarListUpdateCall { + c := &CalendarListUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.calendarlistentry = calendarlistentry + return c +} + +// ColorRgbFormat sets the optional parameter "colorRgbFormat": Whether +// to use the 'foregroundColor' and 'backgroundColor' fields to write +// the calendar colors (RGB). If this feature is used, the index-based +// 'colorId' field will be set to the best matching option +// automatically. The default is False. +func (c *CalendarListUpdateCall) ColorRgbFormat(colorRgbFormat bool) *CalendarListUpdateCall { + c.opt_["colorRgbFormat"] = colorRgbFormat + return c +} + +func (c *CalendarListUpdateCall) Do() (*CalendarListEntry, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendarlistentry) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["colorRgbFormat"]; ok { + params.Set("colorRgbFormat", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/calendarList/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CalendarListEntry) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an entry on the user's calendar list.", + // "httpMethod": "PUT", + // "id": "calendar.calendarList.update", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "colorRgbFormat": { + // "description": "Whether to use the 'foregroundColor' and 'backgroundColor' fields to write the calendar colors (RGB). If this feature is used, the index-based 'colorId' field will be set to the best matching option automatically. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "users/me/calendarList/{calendarId}", + // "request": { + // "$ref": "CalendarListEntry" + // }, + // "response": { + // "$ref": "CalendarListEntry" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendars.clear": + +type CalendarsClearCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// Clear: Clears a primary calendar. This operation deletes all data +// associated with the primary calendar of an account and cannot be +// undone. +func (r *CalendarsService) Clear(calendarId string) *CalendarsClearCall { + c := &CalendarsClearCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *CalendarsClearCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/clear") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Clears a primary calendar. This operation deletes all data associated with the primary calendar of an account and cannot be undone.", + // "httpMethod": "POST", + // "id": "calendar.calendars.clear", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/clear", + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendars.delete": + +type CalendarsDeleteCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// Delete: Deletes a secondary calendar. +func (r *CalendarsService) Delete(calendarId string) *CalendarsDeleteCall { + c := &CalendarsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *CalendarsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a secondary calendar.", + // "httpMethod": "DELETE", + // "id": "calendar.calendars.delete", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}", + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendars.get": + +type CalendarsGetCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// Get: Returns metadata for a calendar. +func (r *CalendarsService) Get(calendarId string) *CalendarsGetCall { + c := &CalendarsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +func (c *CalendarsGetCall) Do() (*Calendar, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Calendar) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns metadata for a calendar.", + // "httpMethod": "GET", + // "id": "calendar.calendars.get", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}", + // "response": { + // "$ref": "Calendar" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.calendars.insert": + +type CalendarsInsertCall struct { + s *Service + calendar *Calendar + opt_ map[string]interface{} +} + +// Insert: Creates a secondary calendar. +func (r *CalendarsService) Insert(calendar *Calendar) *CalendarsInsertCall { + c := &CalendarsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.calendar = calendar + return c +} + +func (c *CalendarsInsertCall) Do() (*Calendar, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Calendar) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a secondary calendar.", + // "httpMethod": "POST", + // "id": "calendar.calendars.insert", + // "path": "calendars", + // "request": { + // "$ref": "Calendar" + // }, + // "response": { + // "$ref": "Calendar" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendars.patch": + +type CalendarsPatchCall struct { + s *Service + calendarId string + calendar *Calendar + opt_ map[string]interface{} +} + +// Patch: Updates metadata for a calendar. This method supports patch +// semantics. +func (r *CalendarsService) Patch(calendarId string, calendar *Calendar) *CalendarsPatchCall { + c := &CalendarsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.calendar = calendar + return c +} + +func (c *CalendarsPatchCall) Do() (*Calendar, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Calendar) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates metadata for a calendar. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "calendar.calendars.patch", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}", + // "request": { + // "$ref": "Calendar" + // }, + // "response": { + // "$ref": "Calendar" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.calendars.update": + +type CalendarsUpdateCall struct { + s *Service + calendarId string + calendar *Calendar + opt_ map[string]interface{} +} + +// Update: Updates metadata for a calendar. +func (r *CalendarsService) Update(calendarId string, calendar *Calendar) *CalendarsUpdateCall { + c := &CalendarsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.calendar = calendar + return c +} + +func (c *CalendarsUpdateCall) Do() (*Calendar, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.calendar) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Calendar) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates metadata for a calendar.", + // "httpMethod": "PUT", + // "id": "calendar.calendars.update", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}", + // "request": { + // "$ref": "Calendar" + // }, + // "response": { + // "$ref": "Calendar" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.channels.stop": + +type ChannelsStopCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Stop: Stop watching resources through this channel +func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { + c := &ChannelsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +func (c *ChannelsStopCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "channels/stop") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Stop watching resources through this channel", + // "httpMethod": "POST", + // "id": "calendar.channels.stop", + // "path": "channels/stop", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.colors.get": + +type ColorsGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Returns the color definitions for calendars and events. +func (r *ColorsService) Get() *ColorsGetCall { + c := &ColorsGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ColorsGetCall) Do() (*Colors, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "colors") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Colors) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the color definitions for calendars and events.", + // "httpMethod": "GET", + // "id": "calendar.colors.get", + // "path": "colors", + // "response": { + // "$ref": "Colors" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.events.delete": + +type EventsDeleteCall struct { + s *Service + calendarId string + eventId string + opt_ map[string]interface{} +} + +// Delete: Deletes an event. +func (r *EventsService) Delete(calendarId string, eventId string) *EventsDeleteCall { + c := &EventsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the deletion of the event. The +// default is False. +func (c *EventsDeleteCall) SendNotifications(sendNotifications bool) *EventsDeleteCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an event.", + // "httpMethod": "DELETE", + // "id": "calendar.events.delete", + // "parameterOrder": [ + // "calendarId", + // "eventId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the deletion of the event. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}", + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.get": + +type EventsGetCall struct { + s *Service + calendarId string + eventId string + opt_ map[string]interface{} +} + +// Get: Returns an event. +func (r *EventsService) Get(calendarId string, eventId string) *EventsGetCall { + c := &EventsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsGetCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsGetCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsGetCall) MaxAttendees(maxAttendees int64) *EventsGetCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// TimeZone sets the optional parameter "timeZone": Time zone used in +// the response. The default is the time zone of the calendar. +func (c *EventsGetCall) TimeZone(timeZone string) *EventsGetCall { + c.opt_["timeZone"] = timeZone + return c +} + +func (c *EventsGetCall) Do() (*Event, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeZone"]; ok { + params.Set("timeZone", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns an event.", + // "httpMethod": "GET", + // "id": "calendar.events.get", + // "parameterOrder": [ + // "calendarId", + // "eventId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "timeZone": { + // "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}", + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.events.import": + +type EventsImportCall struct { + s *Service + calendarId string + event *Event + opt_ map[string]interface{} +} + +// Import: Imports an event. This operation is used to add a private +// copy of an existing event to a calendar. +func (r *EventsService) Import(calendarId string, event *Event) *EventsImportCall { + c := &EventsImportCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.event = event + return c +} + +func (c *EventsImportCall) Do() (*Event, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.event) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/import") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Imports an event. This operation is used to add a private copy of an existing event to a calendar.", + // "httpMethod": "POST", + // "id": "calendar.events.import", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events/import", + // "request": { + // "$ref": "Event" + // }, + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.insert": + +type EventsInsertCall struct { + s *Service + calendarId string + event *Event + opt_ map[string]interface{} +} + +// Insert: Creates an event. +func (r *EventsService) Insert(calendarId string, event *Event) *EventsInsertCall { + c := &EventsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.event = event + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsInsertCall) MaxAttendees(maxAttendees int64) *EventsInsertCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the creation of the new event. +// The default is False. +func (c *EventsInsertCall) SendNotifications(sendNotifications bool) *EventsInsertCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsInsertCall) Do() (*Event, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.event) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an event.", + // "httpMethod": "POST", + // "id": "calendar.events.insert", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the creation of the new event. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "calendars/{calendarId}/events", + // "request": { + // "$ref": "Event" + // }, + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.instances": + +type EventsInstancesCall struct { + s *Service + calendarId string + eventId string + opt_ map[string]interface{} +} + +// Instances: Returns instances of the specified recurring event. +func (r *EventsService) Instances(calendarId string, eventId string) *EventsInstancesCall { + c := &EventsInstancesCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsInstancesCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsInstancesCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsInstancesCall) MaxAttendees(maxAttendees int64) *EventsInstancesCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of events returned on one result page. +func (c *EventsInstancesCall) MaxResults(maxResults int64) *EventsInstancesCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OriginalStart sets the optional parameter "originalStart": The +// original start time of the instance in the result. +func (c *EventsInstancesCall) OriginalStart(originalStart string) *EventsInstancesCall { + c.opt_["originalStart"] = originalStart + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// which result page to return. +func (c *EventsInstancesCall) PageToken(pageToken string) *EventsInstancesCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Whether to +// include deleted events (with 'status' equals 'cancelled') in the +// result. Cancelled instances of recurring events will still be +// included if 'singleEvents' is False. The default is False. +func (c *EventsInstancesCall) ShowDeleted(showDeleted bool) *EventsInstancesCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// TimeMax sets the optional parameter "timeMax": Upper bound +// (exclusive) for an event's start time to filter by. The default is +// not to filter by start time. +func (c *EventsInstancesCall) TimeMax(timeMax string) *EventsInstancesCall { + c.opt_["timeMax"] = timeMax + return c +} + +// TimeMin sets the optional parameter "timeMin": Lower bound +// (inclusive) for an event's end time to filter by. The default is not +// to filter by end time. +func (c *EventsInstancesCall) TimeMin(timeMin string) *EventsInstancesCall { + c.opt_["timeMin"] = timeMin + return c +} + +// TimeZone sets the optional parameter "timeZone": Time zone used in +// the response. The default is the time zone of the calendar. +func (c *EventsInstancesCall) TimeZone(timeZone string) *EventsInstancesCall { + c.opt_["timeZone"] = timeZone + return c +} + +func (c *EventsInstancesCall) Do() (*Events, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["originalStart"]; ok { + params.Set("originalStart", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMax"]; ok { + params.Set("timeMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMin"]; ok { + params.Set("timeMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeZone"]; ok { + params.Set("timeZone", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Events) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns instances of the specified recurring event.", + // "httpMethod": "GET", + // "id": "calendar.events.instances", + // "parameterOrder": [ + // "calendarId", + // "eventId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Recurring event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "maxResults": { + // "description": "Maximum number of events returned on one result page. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "originalStart": { + // "description": "The original start time of the instance in the result. Optional.", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying which result page to return. Optional.", + // "location": "query", + // "type": "string" + // }, + // "showDeleted": { + // "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events will still be included if 'singleEvents' is False. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "timeMax": { + // "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeMin": { + // "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeZone": { + // "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}/instances", + // "response": { + // "$ref": "Events" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "calendar.events.list": + +type EventsListCall struct { + s *Service + calendarId string + opt_ map[string]interface{} +} + +// List: Returns events on the specified calendar. +func (r *EventsService) List(calendarId string) *EventsListCall { + c := &EventsListCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsListCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsListCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// ICalUID sets the optional parameter "iCalUID": Specifies iCalendar +// UID (iCalUID) of events to be included in the response. +func (c *EventsListCall) ICalUID(iCalUID string) *EventsListCall { + c.opt_["iCalUID"] = iCalUID + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsListCall) MaxAttendees(maxAttendees int64) *EventsListCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of events returned on one result page. +func (c *EventsListCall) MaxResults(maxResults int64) *EventsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": The order of the +// events returned in the result. The default is an unspecified, stable +// order. +func (c *EventsListCall) OrderBy(orderBy string) *EventsListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// which result page to return. +func (c *EventsListCall) PageToken(pageToken string) *EventsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// PrivateExtendedProperty sets the optional parameter +// "privateExtendedProperty": Extended properties constraint specified +// as propertyName=value. Matches only private properties. This +// parameter might be repeated multiple times to return events that +// match all given constraints. +func (c *EventsListCall) PrivateExtendedProperty(privateExtendedProperty string) *EventsListCall { + c.opt_["privateExtendedProperty"] = privateExtendedProperty + return c +} + +// Q sets the optional parameter "q": Free text search terms to find +// events that match these terms in any field, except for extended +// properties. +func (c *EventsListCall) Q(q string) *EventsListCall { + c.opt_["q"] = q + return c +} + +// SharedExtendedProperty sets the optional parameter +// "sharedExtendedProperty": Extended properties constraint specified as +// propertyName=value. Matches only shared properties. This parameter +// might be repeated multiple times to return events that match all +// given constraints. +func (c *EventsListCall) SharedExtendedProperty(sharedExtendedProperty string) *EventsListCall { + c.opt_["sharedExtendedProperty"] = sharedExtendedProperty + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Whether to +// include deleted events (with 'status' equals 'cancelled') in the +// result. Cancelled instances of recurring events (but not the +// underlying recurring event) will still be included if 'showDeleted' +// and 'singleEvents' are both False. If 'showDeleted' and +// 'singleEvents' are both True, only single instances of deleted events +// (but not the underlying recurring events) are returned. The default +// is False. +func (c *EventsListCall) ShowDeleted(showDeleted bool) *EventsListCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// ShowHiddenInvitations sets the optional parameter +// "showHiddenInvitations": Whether to include hidden invitations in the +// result. The default is False. +func (c *EventsListCall) ShowHiddenInvitations(showHiddenInvitations bool) *EventsListCall { + c.opt_["showHiddenInvitations"] = showHiddenInvitations + return c +} + +// SingleEvents sets the optional parameter "singleEvents": Whether to +// expand recurring events into instances and only return single one-off +// events and instances of recurring events, but not the underlying +// recurring events themselves. The default is False. +func (c *EventsListCall) SingleEvents(singleEvents bool) *EventsListCall { + c.opt_["singleEvents"] = singleEvents + return c +} + +// TimeMax sets the optional parameter "timeMax": Upper bound +// (exclusive) for an event's start time to filter by. The default is +// not to filter by start time. +func (c *EventsListCall) TimeMax(timeMax string) *EventsListCall { + c.opt_["timeMax"] = timeMax + return c +} + +// TimeMin sets the optional parameter "timeMin": Lower bound +// (inclusive) for an event's end time to filter by. The default is not +// to filter by end time. +func (c *EventsListCall) TimeMin(timeMin string) *EventsListCall { + c.opt_["timeMin"] = timeMin + return c +} + +// TimeZone sets the optional parameter "timeZone": Time zone used in +// the response. The default is the time zone of the calendar. +func (c *EventsListCall) TimeZone(timeZone string) *EventsListCall { + c.opt_["timeZone"] = timeZone + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": Lower bound for +// an event's last modification time (as a RFC 3339 timestamp) to filter +// by. The default is not to filter by last modification time. +func (c *EventsListCall) UpdatedMin(updatedMin string) *EventsListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +func (c *EventsListCall) Do() (*Events, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["iCalUID"]; ok { + params.Set("iCalUID", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["privateExtendedProperty"]; ok { + params.Set("privateExtendedProperty", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sharedExtendedProperty"]; ok { + params.Set("sharedExtendedProperty", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showHiddenInvitations"]; ok { + params.Set("showHiddenInvitations", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["singleEvents"]; ok { + params.Set("singleEvents", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMax"]; ok { + params.Set("timeMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMin"]; ok { + params.Set("timeMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeZone"]; ok { + params.Set("timeZone", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Events) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns events on the specified calendar.", + // "httpMethod": "GET", + // "id": "calendar.events.list", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "iCalUID": { + // "description": "Specifies iCalendar UID (iCalUID) of events to be included in the response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "maxResults": { + // "description": "Maximum number of events returned on one result page. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "The order of the events returned in the result. Optional. The default is an unspecified, stable order.", + // "enum": [ + // "startTime", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter \"singleEvents\" is True)", + // "Order by last modification time (ascending)." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying which result page to return. Optional.", + // "location": "query", + // "type": "string" + // }, + // "privateExtendedProperty": { + // "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "q": { + // "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.", + // "location": "query", + // "type": "string" + // }, + // "sharedExtendedProperty": { + // "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "showDeleted": { + // "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "showHiddenInvitations": { + // "description": "Whether to include hidden invitations in the result. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "singleEvents": { + // "description": "Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "timeMax": { + // "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeMin": { + // "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeZone": { + // "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "Lower bound for an event's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events", + // "response": { + // "$ref": "Events" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "calendar.events.move": + +type EventsMoveCall struct { + s *Service + calendarId string + eventId string + destinationid string + opt_ map[string]interface{} +} + +// Move: Moves an event to another calendar, i.e. changes an event's +// organizer. +func (r *EventsService) Move(calendarId string, eventId string, destinationid string) *EventsMoveCall { + c := &EventsMoveCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + c.destinationid = destinationid + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the change of the event's +// organizer. The default is False. +func (c *EventsMoveCall) SendNotifications(sendNotifications bool) *EventsMoveCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsMoveCall) Do() (*Event, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("destination", fmt.Sprintf("%v", c.destinationid)) + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}/move") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Moves an event to another calendar, i.e. changes an event's organizer.", + // "httpMethod": "POST", + // "id": "calendar.events.move", + // "parameterOrder": [ + // "calendarId", + // "eventId", + // "destination" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier of the source calendar where the event currently is on.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "destination": { + // "description": "Calendar identifier of the target calendar where the event is to be moved to.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the change of the event's organizer. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}/move", + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.patch": + +type EventsPatchCall struct { + s *Service + calendarId string + eventId string + event *Event + opt_ map[string]interface{} +} + +// Patch: Updates an event. This method supports patch semantics. +func (r *EventsService) Patch(calendarId string, eventId string, event *Event) *EventsPatchCall { + c := &EventsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + c.event = event + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsPatchCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsPatchCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsPatchCall) MaxAttendees(maxAttendees int64) *EventsPatchCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the event update (e.g. attendee's +// responses, title changes, etc.). The default is False. +func (c *EventsPatchCall) SendNotifications(sendNotifications bool) *EventsPatchCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsPatchCall) Do() (*Event, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.event) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an event. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "calendar.events.patch", + // "parameterOrder": [ + // "calendarId", + // "eventId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the event update (e.g. attendee's responses, title changes, etc.). Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}", + // "request": { + // "$ref": "Event" + // }, + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.quickAdd": + +type EventsQuickAddCall struct { + s *Service + calendarId string + text string + opt_ map[string]interface{} +} + +// QuickAdd: Creates an event based on a simple text string. +func (r *EventsService) QuickAdd(calendarId string, text string) *EventsQuickAddCall { + c := &EventsQuickAddCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.text = text + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the creation of the event. The +// default is False. +func (c *EventsQuickAddCall) SendNotifications(sendNotifications bool) *EventsQuickAddCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsQuickAddCall) Do() (*Event, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("text", fmt.Sprintf("%v", c.text)) + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/quickAdd") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an event based on a simple text string.", + // "httpMethod": "POST", + // "id": "calendar.events.quickAdd", + // "parameterOrder": [ + // "calendarId", + // "text" + // ], + // "parameters": { + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the creation of the event. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "text": { + // "description": "The text describing the event to be created.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events/quickAdd", + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.update": + +type EventsUpdateCall struct { + s *Service + calendarId string + eventId string + event *Event + opt_ map[string]interface{} +} + +// Update: Updates an event. +func (r *EventsService) Update(calendarId string, eventId string, event *Event) *EventsUpdateCall { + c := &EventsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.eventId = eventId + c.event = event + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsUpdateCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsUpdateCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsUpdateCall) MaxAttendees(maxAttendees int64) *EventsUpdateCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// SendNotifications sets the optional parameter "sendNotifications": +// Whether to send notifications about the event update (e.g. attendee's +// responses, title changes, etc.). The default is False. +func (c *EventsUpdateCall) SendNotifications(sendNotifications bool) *EventsUpdateCall { + c.opt_["sendNotifications"] = sendNotifications + return c +} + +func (c *EventsUpdateCall) Do() (*Event, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.event) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sendNotifications"]; ok { + params.Set("sendNotifications", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/{eventId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{eventId}", url.QueryEscape(c.eventId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Event) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an event.", + // "httpMethod": "PUT", + // "id": "calendar.events.update", + // "parameterOrder": [ + // "calendarId", + // "eventId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "eventId": { + // "description": "Event identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "sendNotifications": { + // "description": "Whether to send notifications about the event update (e.g. attendee's responses, title changes, etc.). Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "calendars/{calendarId}/events/{eventId}", + // "request": { + // "$ref": "Event" + // }, + // "response": { + // "$ref": "Event" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar" + // ] + // } + +} + +// method id "calendar.events.watch": + +type EventsWatchCall struct { + s *Service + calendarId string + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Watch for changes to Events resources. +func (r *EventsService) Watch(calendarId string, channel *Channel) *EventsWatchCall { + c := &EventsWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.calendarId = calendarId + c.channel = channel + return c +} + +// AlwaysIncludeEmail sets the optional parameter "alwaysIncludeEmail": +// Whether to always include a value in the "email" field for the +// organizer, creator and attendees, even if no real email is available +// (i.e. a generated, non-working value will be provided). The use of +// this option is discouraged and should only be used by clients which +// cannot handle the absence of an email address value in the mentioned +// places. The default is False. +func (c *EventsWatchCall) AlwaysIncludeEmail(alwaysIncludeEmail bool) *EventsWatchCall { + c.opt_["alwaysIncludeEmail"] = alwaysIncludeEmail + return c +} + +// ICalUID sets the optional parameter "iCalUID": Specifies iCalendar +// UID (iCalUID) of events to be included in the response. +func (c *EventsWatchCall) ICalUID(iCalUID string) *EventsWatchCall { + c.opt_["iCalUID"] = iCalUID + return c +} + +// MaxAttendees sets the optional parameter "maxAttendees": The maximum +// number of attendees to include in the response. If there are more +// than the specified number of attendees, only the participant is +// returned. +func (c *EventsWatchCall) MaxAttendees(maxAttendees int64) *EventsWatchCall { + c.opt_["maxAttendees"] = maxAttendees + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of events returned on one result page. +func (c *EventsWatchCall) MaxResults(maxResults int64) *EventsWatchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": The order of the +// events returned in the result. The default is an unspecified, stable +// order. +func (c *EventsWatchCall) OrderBy(orderBy string) *EventsWatchCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// which result page to return. +func (c *EventsWatchCall) PageToken(pageToken string) *EventsWatchCall { + c.opt_["pageToken"] = pageToken + return c +} + +// PrivateExtendedProperty sets the optional parameter +// "privateExtendedProperty": Extended properties constraint specified +// as propertyName=value. Matches only private properties. This +// parameter might be repeated multiple times to return events that +// match all given constraints. +func (c *EventsWatchCall) PrivateExtendedProperty(privateExtendedProperty string) *EventsWatchCall { + c.opt_["privateExtendedProperty"] = privateExtendedProperty + return c +} + +// Q sets the optional parameter "q": Free text search terms to find +// events that match these terms in any field, except for extended +// properties. +func (c *EventsWatchCall) Q(q string) *EventsWatchCall { + c.opt_["q"] = q + return c +} + +// SharedExtendedProperty sets the optional parameter +// "sharedExtendedProperty": Extended properties constraint specified as +// propertyName=value. Matches only shared properties. This parameter +// might be repeated multiple times to return events that match all +// given constraints. +func (c *EventsWatchCall) SharedExtendedProperty(sharedExtendedProperty string) *EventsWatchCall { + c.opt_["sharedExtendedProperty"] = sharedExtendedProperty + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Whether to +// include deleted events (with 'status' equals 'cancelled') in the +// result. Cancelled instances of recurring events (but not the +// underlying recurring event) will still be included if 'showDeleted' +// and 'singleEvents' are both False. If 'showDeleted' and +// 'singleEvents' are both True, only single instances of deleted events +// (but not the underlying recurring events) are returned. The default +// is False. +func (c *EventsWatchCall) ShowDeleted(showDeleted bool) *EventsWatchCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// ShowHiddenInvitations sets the optional parameter +// "showHiddenInvitations": Whether to include hidden invitations in the +// result. The default is False. +func (c *EventsWatchCall) ShowHiddenInvitations(showHiddenInvitations bool) *EventsWatchCall { + c.opt_["showHiddenInvitations"] = showHiddenInvitations + return c +} + +// SingleEvents sets the optional parameter "singleEvents": Whether to +// expand recurring events into instances and only return single one-off +// events and instances of recurring events, but not the underlying +// recurring events themselves. The default is False. +func (c *EventsWatchCall) SingleEvents(singleEvents bool) *EventsWatchCall { + c.opt_["singleEvents"] = singleEvents + return c +} + +// TimeMax sets the optional parameter "timeMax": Upper bound +// (exclusive) for an event's start time to filter by. The default is +// not to filter by start time. +func (c *EventsWatchCall) TimeMax(timeMax string) *EventsWatchCall { + c.opt_["timeMax"] = timeMax + return c +} + +// TimeMin sets the optional parameter "timeMin": Lower bound +// (inclusive) for an event's end time to filter by. The default is not +// to filter by end time. +func (c *EventsWatchCall) TimeMin(timeMin string) *EventsWatchCall { + c.opt_["timeMin"] = timeMin + return c +} + +// TimeZone sets the optional parameter "timeZone": Time zone used in +// the response. The default is the time zone of the calendar. +func (c *EventsWatchCall) TimeZone(timeZone string) *EventsWatchCall { + c.opt_["timeZone"] = timeZone + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": Lower bound for +// an event's last modification time (as a RFC 3339 timestamp) to filter +// by. The default is not to filter by last modification time. +func (c *EventsWatchCall) UpdatedMin(updatedMin string) *EventsWatchCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +func (c *EventsWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["alwaysIncludeEmail"]; ok { + params.Set("alwaysIncludeEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["iCalUID"]; ok { + params.Set("iCalUID", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxAttendees"]; ok { + params.Set("maxAttendees", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["privateExtendedProperty"]; ok { + params.Set("privateExtendedProperty", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sharedExtendedProperty"]; ok { + params.Set("sharedExtendedProperty", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showHiddenInvitations"]; ok { + params.Set("showHiddenInvitations", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["singleEvents"]; ok { + params.Set("singleEvents", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMax"]; ok { + params.Set("timeMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeMin"]; ok { + params.Set("timeMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timeZone"]; ok { + params.Set("timeZone", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "calendars/{calendarId}/events/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{calendarId}", url.QueryEscape(c.calendarId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Watch for changes to Events resources.", + // "httpMethod": "POST", + // "id": "calendar.events.watch", + // "parameterOrder": [ + // "calendarId" + // ], + // "parameters": { + // "alwaysIncludeEmail": { + // "description": "Whether to always include a value in the \"email\" field for the organizer, creator and attendees, even if no real email is available (i.e. a generated, non-working value will be provided). The use of this option is discouraged and should only be used by clients which cannot handle the absence of an email address value in the mentioned places. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "calendarId": { + // "description": "Calendar identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "iCalUID": { + // "description": "Specifies iCalendar UID (iCalUID) of events to be included in the response. Optional.", + // "location": "query", + // "type": "string" + // }, + // "maxAttendees": { + // "description": "The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "maxResults": { + // "description": "Maximum number of events returned on one result page. Optional.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "The order of the events returned in the result. Optional. The default is an unspecified, stable order.", + // "enum": [ + // "startTime", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the start date/time (ascending). This is only available when querying single events (i.e. the parameter \"singleEvents\" is True)", + // "Order by last modification time (ascending)." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying which result page to return. Optional.", + // "location": "query", + // "type": "string" + // }, + // "privateExtendedProperty": { + // "description": "Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "q": { + // "description": "Free text search terms to find events that match these terms in any field, except for extended properties. Optional.", + // "location": "query", + // "type": "string" + // }, + // "sharedExtendedProperty": { + // "description": "Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "showDeleted": { + // "description": "Whether to include deleted events (with 'status' equals 'cancelled') in the result. Cancelled instances of recurring events (but not the underlying recurring event) will still be included if 'showDeleted' and 'singleEvents' are both False. If 'showDeleted' and 'singleEvents' are both True, only single instances of deleted events (but not the underlying recurring events) are returned. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "showHiddenInvitations": { + // "description": "Whether to include hidden invitations in the result. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "singleEvents": { + // "description": "Whether to expand recurring events into instances and only return single one-off events and instances of recurring events, but not the underlying recurring events themselves. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "timeMax": { + // "description": "Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeMin": { + // "description": "Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "timeZone": { + // "description": "Time zone used in the response. Optional. The default is the time zone of the calendar.", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "Lower bound for an event's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "calendars/{calendarId}/events/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "calendar.freebusy.query": + +type FreebusyQueryCall struct { + s *Service + freebusyrequest *FreeBusyRequest + opt_ map[string]interface{} +} + +// Query: Returns free/busy information for a set of calendars. +func (r *FreebusyService) Query(freebusyrequest *FreeBusyRequest) *FreebusyQueryCall { + c := &FreebusyQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.freebusyrequest = freebusyrequest + return c +} + +func (c *FreebusyQueryCall) Do() (*FreeBusyResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.freebusyrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "freeBusy") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FreeBusyResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns free/busy information for a set of calendars.", + // "httpMethod": "POST", + // "id": "calendar.freebusy.query", + // "path": "freeBusy", + // "request": { + // "$ref": "FreeBusyRequest" + // }, + // "response": { + // "$ref": "FreeBusyResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.settings.get": + +type SettingsGetCall struct { + s *Service + setting string + opt_ map[string]interface{} +} + +// Get: Returns a single user setting. +func (r *SettingsService) Get(setting string) *SettingsGetCall { + c := &SettingsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.setting = setting + return c +} + +func (c *SettingsGetCall) Do() (*Setting, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/settings/{setting}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{setting}", url.QueryEscape(c.setting), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Setting) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a single user setting.", + // "httpMethod": "GET", + // "id": "calendar.settings.get", + // "parameterOrder": [ + // "setting" + // ], + // "parameters": { + // "setting": { + // "description": "The id of the user setting.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/me/settings/{setting}", + // "response": { + // "$ref": "Setting" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ] + // } + +} + +// method id "calendar.settings.list": + +type SettingsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Returns all user settings for the authenticated user. +func (r *SettingsService) List() *SettingsListCall { + c := &SettingsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *SettingsListCall) Do() (*Settings, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/me/settings") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Settings) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns all user settings for the authenticated user.", + // "httpMethod": "GET", + // "id": "calendar.settings.list", + // "path": "users/me/settings", + // "response": { + // "$ref": "Settings" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/calendar", + // "https://www.googleapis.com/auth/calendar.readonly" + // ], + // "supportsSubscription": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-api.json b/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-api.json new file mode 100644 index 0000000000000..a72f8d4a7d359 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-api.json @@ -0,0 +1,839 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/fgmSCrAaA7mxBfjU-xmYlE1C4zQ\"", + "discoveryVersion": "v1", + "id": "civicinfo:us_v1", + "name": "civicinfo", + "canonicalName": "Civic Info", + "version": "us_v1", + "title": "Google Civic Information API", + "description": "An API for accessing civic information.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/civic-information", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/civicinfo/us_v1/", + "basePath": "/civicinfo/us_v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "civicinfo/us_v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "AdministrationRegion": { + "id": "AdministrationRegion", + "type": "object", + "description": "Describes information about a regional election administrative area.", + "properties": { + "electionAdministrationBody": { + "$ref": "AdministrativeBody", + "description": "The election administration body for this area." + }, + "id": { + "type": "string", + "description": "An ID for this object. IDs may change in future requests and should not be cached. Access to this field requires special access that can be requested from the Request more link on the Quotas page." + }, + "local_jurisdiction": { + "$ref": "AdministrationRegion", + "description": "The city or county that provides election information for this voter. This object can have the same elements as state." + }, + "name": { + "type": "string", + "description": "The name of the jurisdiction." + }, + "sources": { + "type": "array", + "description": "A list of sources for this area. If multiple sources are listed the data has been aggregated from those sources.", + "items": { + "$ref": "Source" + } + } + } + }, + "AdministrativeBody": { + "id": "AdministrativeBody", + "type": "object", + "description": "Information about an election administrative body (e.g. County Board of Elections).", + "properties": { + "absenteeVotingInfoUrl": { + "type": "string", + "description": "A URL provided by this administrative body for information on absentee voting." + }, + "ballotInfoUrl": { + "type": "string", + "description": "A URL provided by this administrative body to give contest information to the voter." + }, + "correspondenceAddress": { + "$ref": "SimpleAddressType", + "description": "The mailing address of this administrative body." + }, + "electionInfoUrl": { + "type": "string", + "description": "A URL provided by this administrative body for looking up general election information." + }, + "electionOfficials": { + "type": "array", + "description": "The election officials for this election administrative body.", + "items": { + "$ref": "ElectionOfficial" + } + }, + "electionRegistrationConfirmationUrl": { + "type": "string", + "description": "A URL provided by this administrative body for confirming that the voter is registered to vote." + }, + "electionRegistrationUrl": { + "type": "string", + "description": "A URL provided by this administrative body for looking up how to register to vote." + }, + "electionRulesUrl": { + "type": "string", + "description": "A URL provided by this administrative body describing election rules to the voter." + }, + "hoursOfOperation": { + "type": "string", + "description": "A description of the hours of operation for this administrative body." + }, + "name": { + "type": "string", + "description": "The name of this election administrative body." + }, + "physicalAddress": { + "$ref": "SimpleAddressType", + "description": "The physical address of this administrative body." + }, + "voter_services": { + "type": "array", + "description": "A description of the services this administrative body may provide.", + "items": { + "type": "string" + } + }, + "votingLocationFinderUrl": { + "type": "string", + "description": "A URL provided by this administrative body for looking up where to vote." + } + } + }, + "Candidate": { + "id": "Candidate", + "type": "object", + "description": "Information about a candidate running for elected office.", + "properties": { + "candidateUrl": { + "type": "string", + "description": "The URL for the candidate's campaign web site." + }, + "channels": { + "type": "array", + "description": "A list of known (social) media channels for this candidate.", + "items": { + "$ref": "Channel" + } + }, + "email": { + "type": "string", + "description": "The email address for the candidate's campaign." + }, + "name": { + "type": "string", + "description": "The candidate's name." + }, + "orderOnBallot": { + "type": "string", + "description": "The order the candidate appears on the ballot for this contest.", + "format": "int64" + }, + "party": { + "type": "string", + "description": "The full name of the party the candidate is a member of." + }, + "phone": { + "type": "string", + "description": "The voice phone number for the candidate's campaign office." + }, + "photoUrl": { + "type": "string", + "description": "A URL for a photo of the candidate." + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "A social media or web channel for a candidate.", + "properties": { + "id": { + "type": "string", + "description": "The unique public identifier for the candidate's channel." + }, + "type": { + "type": "string", + "description": "The type of channel. The following is a list of types of channels, but is not exhaustive. More channel types may be added at a later time. One of: GooglePlus, YouTube, Facebook, Twitter" + } + } + }, + "Contest": { + "id": "Contest", + "type": "object", + "description": "Information about a contest that appears on a voter's ballot.", + "properties": { + "ballotPlacement": { + "type": "string", + "description": "A number specifying the position of this contest on the voter's ballot.", + "format": "int64" + }, + "candidates": { + "type": "array", + "description": "The candidate choices for this contest.", + "items": { + "$ref": "Candidate" + } + }, + "district": { + "$ref": "ElectoralDistrict", + "description": "Information about the electoral district that this contest is in." + }, + "electorateSpecifications": { + "type": "string", + "description": "A description of any additional eligibility requirements for voting in this contest." + }, + "id": { + "type": "string", + "description": "An ID for this object. IDs may change in future requests and should not be cached. Access to this field requires special access that can be requested from the Request more link on the Quotas page." + }, + "level": { + "type": "string", + "description": "The level of office for this contest. One of: federal, state, county, city, other" + }, + "numberElected": { + "type": "string", + "description": "The number of candidates that will be elected to office in this contest.", + "format": "int64" + }, + "numberVotingFor": { + "type": "string", + "description": "The number of candidates that a voter may vote for in this contest.", + "format": "int64" + }, + "office": { + "type": "string", + "description": "The name of the office for this contest." + }, + "primaryParty": { + "type": "string", + "description": "If this is a partisan election, the name of the party it is for." + }, + "referendumSubtitle": { + "type": "string", + "description": "A brief description of the referendum. This field is only populated for contests of type 'Referendum'." + }, + "referendumTitle": { + "type": "string", + "description": "The title of the referendum (e.g. 'Proposition 42'). This field is only populated for contests of type 'Referendum'." + }, + "referendumUrl": { + "type": "string", + "description": "A link to the referendum. This field is only populated for contests of type 'Referendum'." + }, + "sources": { + "type": "array", + "description": "A list of sources for this contest. If multiple sources are listed, the data has been aggregated from those sources.", + "items": { + "$ref": "Source" + } + }, + "special": { + "type": "string", + "description": "\"Yes\" or \"No\" depending on whether this a contest being held outside the normal election cycle." + }, + "type": { + "type": "string", + "description": "The type of contest. Usually this will be 'General', 'Primary', or 'Run-off' for contests with candidates. For referenda this will be 'Referendum'." + } + } + }, + "DivisionSearchResponse": { + "id": "DivisionSearchResponse", + "type": "object", + "description": "The result of a division search query.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#divisionSearchResponse\".", + "default": "civicinfo#divisionSearchResponse" + }, + "results": { + "type": "array", + "items": { + "$ref": "DivisionSearchResult" + } + }, + "status": { + "type": "string", + "description": "The result of the request. One of: success, addressUnparseable, noAddressParameter, internalLookupFailure" + } + } + }, + "DivisionSearchResult": { + "id": "DivisionSearchResult", + "type": "object", + "description": "Represents a political geographic division that matches the requested query.", + "properties": { + "name": { + "type": "string", + "description": "The name of the division." + }, + "ocdId": { + "type": "string", + "description": "The unique Open Civic Data identifier for this division." + } + } + }, + "Election": { + "id": "Election", + "type": "object", + "description": "Information about the election that was queried.", + "properties": { + "electionDay": { + "type": "string", + "description": "Day of the election in YYYY-MM-DD format." + }, + "id": { + "type": "string", + "description": "The unique ID of this election.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "A displayable name for the election." + } + } + }, + "ElectionOfficial": { + "id": "ElectionOfficial", + "type": "object", + "description": "Information about individual election officials.", + "properties": { + "emailAddress": { + "type": "string", + "description": "The email address of the election official." + }, + "faxNumber": { + "type": "string", + "description": "The fax number of the election official." + }, + "name": { + "type": "string", + "description": "The full name of the election official." + }, + "officePhoneNumber": { + "type": "string", + "description": "The office phone number of the election official." + }, + "title": { + "type": "string", + "description": "The title of the election official." + } + } + }, + "ElectionsQueryResponse": { + "id": "ElectionsQueryResponse", + "type": "object", + "description": "The list of elections available for this version of the API.", + "properties": { + "elections": { + "type": "array", + "description": "A list of available elections", + "items": { + "$ref": "Election" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#electionsQueryResponse\".", + "default": "civicinfo#electionsQueryResponse" + } + } + }, + "ElectoralDistrict": { + "id": "ElectoralDistrict", + "type": "object", + "description": "Describes the geographic scope of a contest.", + "properties": { + "id": { + "type": "string", + "description": "An identifier for this district, relative to its scope. For example, the 34th State Senate district would have id \"34\" and a scope of stateUpper." + }, + "name": { + "type": "string", + "description": "The name of the district." + }, + "scope": { + "type": "string", + "description": "The geographic scope of this district. If unspecified the district's geography is not known. One of: national, statewide, congressional, stateUpper, stateLower, countywide, judicial, schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward, special" + } + } + }, + "GeographicDivision": { + "id": "GeographicDivision", + "type": "object", + "description": "Describes a political geography.", + "properties": { + "name": { + "type": "string", + "description": "The name of the division." + }, + "officeIds": { + "type": "array", + "description": "List of keys in the offices object, one for each office elected from this division. Will only be present if includeOffices was true (or absent) in the request.", + "items": { + "type": "string" + } + }, + "scope": { + "type": "string", + "description": "The geographic scope of the division. If unspecified, the division's geography is not known. One of: national, statewide, congressional, stateUpper, stateLower, countywide, judicial, schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward, special" + } + } + }, + "Office": { + "id": "Office", + "type": "object", + "description": "Information about an Office held by one or more Officials.", + "properties": { + "level": { + "type": "string", + "description": "The level of this elected office. One of: federal, state, county, city, other" + }, + "name": { + "type": "string", + "description": "The human-readable name of the office." + }, + "officialIds": { + "type": "array", + "description": "List of people who presently hold the office.", + "items": { + "type": "string" + } + }, + "sources": { + "type": "array", + "description": "A list of sources for this office. If multiple sources are listed, the data has been aggregated from those sources.", + "items": { + "$ref": "Source" + } + } + } + }, + "Official": { + "id": "Official", + "type": "object", + "description": "Information about a official holding an elected office.", + "properties": { + "address": { + "type": "array", + "description": "Addresses at which to contact the official.", + "items": { + "$ref": "SimpleAddressType" + } + }, + "channels": { + "type": "array", + "description": "A list of known (social) media channels for this official.", + "items": { + "$ref": "Channel" + } + }, + "emails": { + "type": "array", + "description": "The direct email addresses for the official.", + "items": { + "type": "string" + } + }, + "name": { + "type": "string", + "description": "The official's name." + }, + "party": { + "type": "string", + "description": "The full name of the party the official belongs to." + }, + "phones": { + "type": "array", + "description": "The official's public contact phone numbers.", + "items": { + "type": "string" + } + }, + "photoUrl": { + "type": "string", + "description": "A URL for a photo of the official." + }, + "urls": { + "type": "array", + "description": "The official's public website URLs.", + "items": { + "type": "string" + } + } + } + }, + "PollingLocation": { + "id": "PollingLocation", + "type": "object", + "description": "A location where a voter can vote. This may be an early vote site or an election day voting location.", + "properties": { + "address": { + "$ref": "SimpleAddressType", + "description": "The address of the location" + }, + "endDate": { + "type": "string", + "description": "The last date that this early vote site may be used. This field is not populated for polling locations." + }, + "id": { + "type": "string", + "description": "An ID for this object. IDs may change in future requests and should not be cached. Access to this field requires special access that can be requested from the Request more link on the Quotas page." + }, + "name": { + "type": "string", + "description": "The name of the early vote site. This field is not populated for polling locations." + }, + "notes": { + "type": "string", + "description": "Notes about this location (e.g. accessibility ramp or entrance to use)" + }, + "pollingHours": { + "type": "string", + "description": "A description of when this location is open." + }, + "sources": { + "type": "array", + "description": "A list of sources for this location. If multiple sources are listed the data has been aggregated from those sources.", + "items": { + "$ref": "Source" + } + }, + "startDate": { + "type": "string", + "description": "The first date that this early vote site may be used. This field is not populated for polling locations." + }, + "voterServices": { + "type": "string", + "description": "The services provided by this early vote site. This field is not populated for polling locations." + } + } + }, + "RepresentativeInfoRequest": { + "id": "RepresentativeInfoRequest", + "type": "object", + "description": "A request for political geography and representative information for an address.", + "properties": { + "address": { + "type": "string", + "description": "The address to look up. May only be specified if the field ocdId is not given in the URL." + } + } + }, + "RepresentativeInfoResponse": { + "id": "RepresentativeInfoResponse", + "type": "object", + "description": "The result of a representative info lookup query.", + "properties": { + "divisions": { + "type": "object", + "description": "Political geographic divisions that contain the requested address.", + "additionalProperties": { + "$ref": "GeographicDivision", + "description": "The unique Open Civic Data identifier for this division." + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#representativeInfoResponse\".", + "default": "civicinfo#representativeInfoResponse" + }, + "normalizedInput": { + "$ref": "SimpleAddressType", + "description": "The normalized version of the requested address" + }, + "offices": { + "type": "object", + "description": "Elected offices referenced by the divisions listed above. Will only be present if includeOffices was true in the request.", + "additionalProperties": { + "$ref": "Office", + "description": "A unique identifier for this office, within the context of this request. Identifiers are *not* long-lived: the same office may get different IDs on different requests." + } + }, + "officials": { + "type": "object", + "description": "Officials holding the offices listed above. Will only be present if includeOffices was true in the request.", + "additionalProperties": { + "$ref": "Official", + "description": "A unique identifier for this official, within the context of this request. Identifiers are *not* long-lived: the same official may get different IDs on different requests." + } + }, + "status": { + "type": "string", + "description": "The result of the request. One of: success, noStreetSegmentFound, addressUnparseable, noAddressParameter, multipleStreetSegmentsFound, electionOver, electionUnknown, internalLookupFailure, RequestedBothAddressAndOcdId" + } + } + }, + "SimpleAddressType": { + "id": "SimpleAddressType", + "type": "object", + "description": "A simple representation of an address.", + "properties": { + "city": { + "type": "string", + "description": "The city or town for the address." + }, + "line1": { + "type": "string", + "description": "The street name and number of this address." + }, + "line2": { + "type": "string", + "description": "The second line the address, if needed." + }, + "line3": { + "type": "string", + "description": "The third line of the address, if needed." + }, + "locationName": { + "type": "string", + "description": "The name of the location." + }, + "state": { + "type": "string", + "description": "The US two letter state abbreviation of the address." + }, + "zip": { + "type": "string", + "description": "The US Postal Zip Code of the address." + } + } + }, + "Source": { + "id": "Source", + "type": "object", + "description": "Contains information about the data source for the element containing it.", + "properties": { + "name": { + "type": "string", + "description": "The name of the data source." + }, + "official": { + "type": "boolean", + "description": "Whether this data comes from an official government source." + } + } + }, + "VoterInfoRequest": { + "id": "VoterInfoRequest", + "type": "object", + "description": "A request for information about a voter.", + "properties": { + "address": { + "type": "string", + "description": "The registered address of the voter to look up." + } + } + }, + "VoterInfoResponse": { + "id": "VoterInfoResponse", + "type": "object", + "description": "The result of a voter info lookup query.", + "properties": { + "contests": { + "type": "array", + "description": "Contests that will appear on the voter's ballot", + "items": { + "$ref": "Contest" + } + }, + "earlyVoteSites": { + "type": "array", + "description": "Locations where the voter is eligible to vote early, prior to election day", + "items": { + "$ref": "PollingLocation" + } + }, + "election": { + "$ref": "Election", + "description": "The election that was queried." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"civicinfo#voterInfoResponse\".", + "default": "civicinfo#voterInfoResponse" + }, + "normalizedInput": { + "$ref": "SimpleAddressType", + "description": "The normalized version of the requested address" + }, + "pollingLocations": { + "type": "array", + "description": "Locations where the voter is eligible to vote on election day. For states with mail-in voting only, these locations will be nearby drop box locations. Drop box locations are free to the voter and may be used instead of placing the ballot in the mail.", + "items": { + "$ref": "PollingLocation" + } + }, + "state": { + "type": "array", + "description": "Local Election Information for the state that the voter votes in. For the US, there will only be one element in this array.", + "items": { + "$ref": "AdministrationRegion" + } + }, + "status": { + "type": "string", + "description": "The result of the request. One of: success, noStreetSegmentFound, addressUnparseable, noAddressParameter, multipleStreetSegmentsFound, electionOver, electionUnknown, internalLookupFailure" + } + } + } + }, + "resources": { + "divisions": { + "methods": { + "search": { + "id": "civicinfo.divisions.search", + "path": "representatives/division_search", + "httpMethod": "GET", + "description": "Searches for political divisions by their natural name or OCD ID.", + "parameters": { + "query": { + "type": "string", + "description": "The search query. Queries can cover any parts of a OCD ID or a human readable division name. All words given in the query are treated as required patterns. In addition to that, most query operators of the Apache Lucene library are supported. See http://lucene.apache.org/core/2_9_4/queryparsersyntax.html", + "location": "query" + } + }, + "response": { + "$ref": "DivisionSearchResponse" + } + } + } + }, + "elections": { + "methods": { + "electionQuery": { + "id": "civicinfo.elections.electionQuery", + "path": "elections", + "httpMethod": "GET", + "description": "List of available elections to query.", + "response": { + "$ref": "ElectionsQueryResponse" + } + }, + "voterInfoQuery": { + "id": "civicinfo.elections.voterInfoQuery", + "path": "voterinfo/{electionId}/lookup", + "httpMethod": "POST", + "description": "Looks up information relevant to a voter based on the voter's registered address.", + "parameters": { + "electionId": { + "type": "string", + "description": "The unique ID of the election to look up. A list of election IDs can be obtained at https://www.googleapis.com/civicinfo/{version}/elections", + "required": true, + "format": "int64", + "location": "path" + }, + "officialOnly": { + "type": "boolean", + "description": "If set to true, only data from official state sources will be returned.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "electionId" + ], + "request": { + "$ref": "VoterInfoRequest" + }, + "response": { + "$ref": "VoterInfoResponse" + } + } + } + }, + "representatives": { + "methods": { + "representativeInfoQuery": { + "id": "civicinfo.representatives.representativeInfoQuery", + "path": "representatives/lookup", + "httpMethod": "POST", + "description": "Looks up political geography and (optionally) representative information based on an address.", + "parameters": { + "includeOffices": { + "type": "boolean", + "description": "Whether to return information about offices and officials. If false, only the top-level district information will be returned.", + "default": "true", + "location": "query" + }, + "ocdId": { + "type": "string", + "description": "The division to look up. May only be specified if the address field is not given in the request body.", + "location": "query" + } + }, + "request": { + "$ref": "RepresentativeInfoRequest" + }, + "response": { + "$ref": "RepresentativeInfoResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-gen.go b/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-gen.go new file mode 100644 index 0000000000000..9aa9d5da67fac --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/civicinfo/us_v1/civicinfo-gen.go @@ -0,0 +1,851 @@ +// Package civicinfo provides access to the Google Civic Information API. +// +// See https://developers.google.com/civic-information +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/civicinfo/us_v1" +// ... +// civicinfoService, err := civicinfo.New(oauthHttpClient) +package civicinfo + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "civicinfo:us_v1" +const apiName = "civicinfo" +const apiVersion = "us_v1" +const basePath = "https://www.googleapis.com/civicinfo/us_v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Divisions = NewDivisionsService(s) + s.Elections = NewElectionsService(s) + s.Representatives = NewRepresentativesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Divisions *DivisionsService + + Elections *ElectionsService + + Representatives *RepresentativesService +} + +func NewDivisionsService(s *Service) *DivisionsService { + rs := &DivisionsService{s: s} + return rs +} + +type DivisionsService struct { + s *Service +} + +func NewElectionsService(s *Service) *ElectionsService { + rs := &ElectionsService{s: s} + return rs +} + +type ElectionsService struct { + s *Service +} + +func NewRepresentativesService(s *Service) *RepresentativesService { + rs := &RepresentativesService{s: s} + return rs +} + +type RepresentativesService struct { + s *Service +} + +type AdministrationRegion struct { + // ElectionAdministrationBody: The election administration body for this + // area. + ElectionAdministrationBody *AdministrativeBody `json:"electionAdministrationBody,omitempty"` + + // Id: An ID for this object. IDs may change in future requests and + // should not be cached. Access to this field requires special access + // that can be requested from the Request more link on the Quotas page. + Id string `json:"id,omitempty"` + + // Local_jurisdiction: The city or county that provides election + // information for this voter. This object can have the same elements as + // state. + Local_jurisdiction *AdministrationRegion `json:"local_jurisdiction,omitempty"` + + // Name: The name of the jurisdiction. + Name string `json:"name,omitempty"` + + // Sources: A list of sources for this area. If multiple sources are + // listed the data has been aggregated from those sources. + Sources []*Source `json:"sources,omitempty"` +} + +type AdministrativeBody struct { + // AbsenteeVotingInfoUrl: A URL provided by this administrative body for + // information on absentee voting. + AbsenteeVotingInfoUrl string `json:"absenteeVotingInfoUrl,omitempty"` + + // BallotInfoUrl: A URL provided by this administrative body to give + // contest information to the voter. + BallotInfoUrl string `json:"ballotInfoUrl,omitempty"` + + // CorrespondenceAddress: The mailing address of this administrative + // body. + CorrespondenceAddress *SimpleAddressType `json:"correspondenceAddress,omitempty"` + + // ElectionInfoUrl: A URL provided by this administrative body for + // looking up general election information. + ElectionInfoUrl string `json:"electionInfoUrl,omitempty"` + + // ElectionOfficials: The election officials for this election + // administrative body. + ElectionOfficials []*ElectionOfficial `json:"electionOfficials,omitempty"` + + // ElectionRegistrationConfirmationUrl: A URL provided by this + // administrative body for confirming that the voter is registered to + // vote. + ElectionRegistrationConfirmationUrl string `json:"electionRegistrationConfirmationUrl,omitempty"` + + // ElectionRegistrationUrl: A URL provided by this administrative body + // for looking up how to register to vote. + ElectionRegistrationUrl string `json:"electionRegistrationUrl,omitempty"` + + // ElectionRulesUrl: A URL provided by this administrative body + // describing election rules to the voter. + ElectionRulesUrl string `json:"electionRulesUrl,omitempty"` + + // HoursOfOperation: A description of the hours of operation for this + // administrative body. + HoursOfOperation string `json:"hoursOfOperation,omitempty"` + + // Name: The name of this election administrative body. + Name string `json:"name,omitempty"` + + // PhysicalAddress: The physical address of this administrative body. + PhysicalAddress *SimpleAddressType `json:"physicalAddress,omitempty"` + + // Voter_services: A description of the services this administrative + // body may provide. + Voter_services []string `json:"voter_services,omitempty"` + + // VotingLocationFinderUrl: A URL provided by this administrative body + // for looking up where to vote. + VotingLocationFinderUrl string `json:"votingLocationFinderUrl,omitempty"` +} + +type Candidate struct { + // CandidateUrl: The URL for the candidate's campaign web site. + CandidateUrl string `json:"candidateUrl,omitempty"` + + // Channels: A list of known (social) media channels for this candidate. + Channels []*Channel `json:"channels,omitempty"` + + // Email: The email address for the candidate's campaign. + Email string `json:"email,omitempty"` + + // Name: The candidate's name. + Name string `json:"name,omitempty"` + + // OrderOnBallot: The order the candidate appears on the ballot for this + // contest. + OrderOnBallot int64 `json:"orderOnBallot,omitempty,string"` + + // Party: The full name of the party the candidate is a member of. + Party string `json:"party,omitempty"` + + // Phone: The voice phone number for the candidate's campaign office. + Phone string `json:"phone,omitempty"` + + // PhotoUrl: A URL for a photo of the candidate. + PhotoUrl string `json:"photoUrl,omitempty"` +} + +type Channel struct { + // Id: The unique public identifier for the candidate's channel. + Id string `json:"id,omitempty"` + + // Type: The type of channel. The following is a list of types of + // channels, but is not exhaustive. More channel types may be added at a + // later time. One of: GooglePlus, YouTube, Facebook, Twitter + Type string `json:"type,omitempty"` +} + +type Contest struct { + // BallotPlacement: A number specifying the position of this contest on + // the voter's ballot. + BallotPlacement int64 `json:"ballotPlacement,omitempty,string"` + + // Candidates: The candidate choices for this contest. + Candidates []*Candidate `json:"candidates,omitempty"` + + // District: Information about the electoral district that this contest + // is in. + District *ElectoralDistrict `json:"district,omitempty"` + + // ElectorateSpecifications: A description of any additional eligibility + // requirements for voting in this contest. + ElectorateSpecifications string `json:"electorateSpecifications,omitempty"` + + // Id: An ID for this object. IDs may change in future requests and + // should not be cached. Access to this field requires special access + // that can be requested from the Request more link on the Quotas page. + Id string `json:"id,omitempty"` + + // Level: The level of office for this contest. One of: federal, state, + // county, city, other + Level string `json:"level,omitempty"` + + // NumberElected: The number of candidates that will be elected to + // office in this contest. + NumberElected int64 `json:"numberElected,omitempty,string"` + + // NumberVotingFor: The number of candidates that a voter may vote for + // in this contest. + NumberVotingFor int64 `json:"numberVotingFor,omitempty,string"` + + // Office: The name of the office for this contest. + Office string `json:"office,omitempty"` + + // PrimaryParty: If this is a partisan election, the name of the party + // it is for. + PrimaryParty string `json:"primaryParty,omitempty"` + + // ReferendumSubtitle: A brief description of the referendum. This field + // is only populated for contests of type 'Referendum'. + ReferendumSubtitle string `json:"referendumSubtitle,omitempty"` + + // ReferendumTitle: The title of the referendum (e.g. 'Proposition 42'). + // This field is only populated for contests of type 'Referendum'. + ReferendumTitle string `json:"referendumTitle,omitempty"` + + // ReferendumUrl: A link to the referendum. This field is only populated + // for contests of type 'Referendum'. + ReferendumUrl string `json:"referendumUrl,omitempty"` + + // Sources: A list of sources for this contest. If multiple sources are + // listed, the data has been aggregated from those sources. + Sources []*Source `json:"sources,omitempty"` + + // Special: "Yes" or "No" depending on whether this a contest being held + // outside the normal election cycle. + Special string `json:"special,omitempty"` + + // Type: The type of contest. Usually this will be 'General', 'Primary', + // or 'Run-off' for contests with candidates. For referenda this will be + // 'Referendum'. + Type string `json:"type,omitempty"` +} + +type DivisionSearchResponse struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "civicinfo#divisionSearchResponse". + Kind string `json:"kind,omitempty"` + + Results []*DivisionSearchResult `json:"results,omitempty"` + + // Status: The result of the request. One of: success, + // addressUnparseable, noAddressParameter, internalLookupFailure + Status string `json:"status,omitempty"` +} + +type DivisionSearchResult struct { + // Name: The name of the division. + Name string `json:"name,omitempty"` + + // OcdId: The unique Open Civic Data identifier for this division. + OcdId string `json:"ocdId,omitempty"` +} + +type Election struct { + // ElectionDay: Day of the election in YYYY-MM-DD format. + ElectionDay string `json:"electionDay,omitempty"` + + // Id: The unique ID of this election. + Id int64 `json:"id,omitempty,string"` + + // Name: A displayable name for the election. + Name string `json:"name,omitempty"` +} + +type ElectionOfficial struct { + // EmailAddress: The email address of the election official. + EmailAddress string `json:"emailAddress,omitempty"` + + // FaxNumber: The fax number of the election official. + FaxNumber string `json:"faxNumber,omitempty"` + + // Name: The full name of the election official. + Name string `json:"name,omitempty"` + + // OfficePhoneNumber: The office phone number of the election official. + OfficePhoneNumber string `json:"officePhoneNumber,omitempty"` + + // Title: The title of the election official. + Title string `json:"title,omitempty"` +} + +type ElectionsQueryResponse struct { + // Elections: A list of available elections + Elections []*Election `json:"elections,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "civicinfo#electionsQueryResponse". + Kind string `json:"kind,omitempty"` +} + +type ElectoralDistrict struct { + // Id: An identifier for this district, relative to its scope. For + // example, the 34th State Senate district would have id "34" and a + // scope of stateUpper. + Id string `json:"id,omitempty"` + + // Name: The name of the district. + Name string `json:"name,omitempty"` + + // Scope: The geographic scope of this district. If unspecified the + // district's geography is not known. One of: national, statewide, + // congressional, stateUpper, stateLower, countywide, judicial, + // schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward, + // special + Scope string `json:"scope,omitempty"` +} + +type GeographicDivision struct { + // Name: The name of the division. + Name string `json:"name,omitempty"` + + // OfficeIds: List of keys in the offices object, one for each office + // elected from this division. Will only be present if includeOffices + // was true (or absent) in the request. + OfficeIds []string `json:"officeIds,omitempty"` + + // Scope: The geographic scope of the division. If unspecified, the + // division's geography is not known. One of: national, statewide, + // congressional, stateUpper, stateLower, countywide, judicial, + // schoolBoard, cityWide, township, countyCouncil, cityCouncil, ward, + // special + Scope string `json:"scope,omitempty"` +} + +type Office struct { + // Level: The level of this elected office. One of: federal, state, + // county, city, other + Level string `json:"level,omitempty"` + + // Name: The human-readable name of the office. + Name string `json:"name,omitempty"` + + // OfficialIds: List of people who presently hold the office. + OfficialIds []string `json:"officialIds,omitempty"` + + // Sources: A list of sources for this office. If multiple sources are + // listed, the data has been aggregated from those sources. + Sources []*Source `json:"sources,omitempty"` +} + +type Official struct { + // Address: Addresses at which to contact the official. + Address []*SimpleAddressType `json:"address,omitempty"` + + // Channels: A list of known (social) media channels for this official. + Channels []*Channel `json:"channels,omitempty"` + + // Emails: The direct email addresses for the official. + Emails []string `json:"emails,omitempty"` + + // Name: The official's name. + Name string `json:"name,omitempty"` + + // Party: The full name of the party the official belongs to. + Party string `json:"party,omitempty"` + + // Phones: The official's public contact phone numbers. + Phones []string `json:"phones,omitempty"` + + // PhotoUrl: A URL for a photo of the official. + PhotoUrl string `json:"photoUrl,omitempty"` + + // Urls: The official's public website URLs. + Urls []string `json:"urls,omitempty"` +} + +type PollingLocation struct { + // Address: The address of the location + Address *SimpleAddressType `json:"address,omitempty"` + + // EndDate: The last date that this early vote site may be used. This + // field is not populated for polling locations. + EndDate string `json:"endDate,omitempty"` + + // Id: An ID for this object. IDs may change in future requests and + // should not be cached. Access to this field requires special access + // that can be requested from the Request more link on the Quotas page. + Id string `json:"id,omitempty"` + + // Name: The name of the early vote site. This field is not populated + // for polling locations. + Name string `json:"name,omitempty"` + + // Notes: Notes about this location (e.g. accessibility ramp or entrance + // to use) + Notes string `json:"notes,omitempty"` + + // PollingHours: A description of when this location is open. + PollingHours string `json:"pollingHours,omitempty"` + + // Sources: A list of sources for this location. If multiple sources are + // listed the data has been aggregated from those sources. + Sources []*Source `json:"sources,omitempty"` + + // StartDate: The first date that this early vote site may be used. This + // field is not populated for polling locations. + StartDate string `json:"startDate,omitempty"` + + // VoterServices: The services provided by this early vote site. This + // field is not populated for polling locations. + VoterServices string `json:"voterServices,omitempty"` +} + +type RepresentativeInfoRequest struct { + // Address: The address to look up. May only be specified if the field + // ocdId is not given in the URL. + Address string `json:"address,omitempty"` +} + +type RepresentativeInfoResponse struct { + // Divisions: Political geographic divisions that contain the requested + // address. + Divisions *RepresentativeInfoResponseDivisions `json:"divisions,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "civicinfo#representativeInfoResponse". + Kind string `json:"kind,omitempty"` + + // NormalizedInput: The normalized version of the requested address + NormalizedInput *SimpleAddressType `json:"normalizedInput,omitempty"` + + // Offices: Elected offices referenced by the divisions listed above. + // Will only be present if includeOffices was true in the request. + Offices *RepresentativeInfoResponseOffices `json:"offices,omitempty"` + + // Officials: Officials holding the offices listed above. Will only be + // present if includeOffices was true in the request. + Officials *RepresentativeInfoResponseOfficials `json:"officials,omitempty"` + + // Status: The result of the request. One of: success, + // noStreetSegmentFound, addressUnparseable, noAddressParameter, + // multipleStreetSegmentsFound, electionOver, electionUnknown, + // internalLookupFailure, RequestedBothAddressAndOcdId + Status string `json:"status,omitempty"` +} + +type RepresentativeInfoResponseDivisions struct { +} + +type RepresentativeInfoResponseOffices struct { +} + +type RepresentativeInfoResponseOfficials struct { +} + +type SimpleAddressType struct { + // City: The city or town for the address. + City string `json:"city,omitempty"` + + // Line1: The street name and number of this address. + Line1 string `json:"line1,omitempty"` + + // Line2: The second line the address, if needed. + Line2 string `json:"line2,omitempty"` + + // Line3: The third line of the address, if needed. + Line3 string `json:"line3,omitempty"` + + // LocationName: The name of the location. + LocationName string `json:"locationName,omitempty"` + + // State: The US two letter state abbreviation of the address. + State string `json:"state,omitempty"` + + // Zip: The US Postal Zip Code of the address. + Zip string `json:"zip,omitempty"` +} + +type Source struct { + // Name: The name of the data source. + Name string `json:"name,omitempty"` + + // Official: Whether this data comes from an official government source. + Official bool `json:"official,omitempty"` +} + +type VoterInfoRequest struct { + // Address: The registered address of the voter to look up. + Address string `json:"address,omitempty"` +} + +type VoterInfoResponse struct { + // Contests: Contests that will appear on the voter's ballot + Contests []*Contest `json:"contests,omitempty"` + + // EarlyVoteSites: Locations where the voter is eligible to vote early, + // prior to election day + EarlyVoteSites []*PollingLocation `json:"earlyVoteSites,omitempty"` + + // Election: The election that was queried. + Election *Election `json:"election,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "civicinfo#voterInfoResponse". + Kind string `json:"kind,omitempty"` + + // NormalizedInput: The normalized version of the requested address + NormalizedInput *SimpleAddressType `json:"normalizedInput,omitempty"` + + // PollingLocations: Locations where the voter is eligible to vote on + // election day. For states with mail-in voting only, these locations + // will be nearby drop box locations. Drop box locations are free to the + // voter and may be used instead of placing the ballot in the mail. + PollingLocations []*PollingLocation `json:"pollingLocations,omitempty"` + + // State: Local Election Information for the state that the voter votes + // in. For the US, there will only be one element in this array. + State []*AdministrationRegion `json:"state,omitempty"` + + // Status: The result of the request. One of: success, + // noStreetSegmentFound, addressUnparseable, noAddressParameter, + // multipleStreetSegmentsFound, electionOver, electionUnknown, + // internalLookupFailure + Status string `json:"status,omitempty"` +} + +// method id "civicinfo.divisions.search": + +type DivisionsSearchCall struct { + s *Service + opt_ map[string]interface{} +} + +// Search: Searches for political divisions by their natural name or OCD +// ID. +func (r *DivisionsService) Search() *DivisionsSearchCall { + c := &DivisionsSearchCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Query sets the optional parameter "query": The search query. Queries +// can cover any parts of a OCD ID or a human readable division name. +// All words given in the query are treated as required patterns. In +// addition to that, most query operators of the Apache Lucene library +// are supported. See +// http://lucene.apache.org/core/2_9_4/queryparsersyntax.html +func (c *DivisionsSearchCall) Query(query string) *DivisionsSearchCall { + c.opt_["query"] = query + return c +} + +func (c *DivisionsSearchCall) Do() (*DivisionSearchResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "representatives/division_search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DivisionSearchResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Searches for political divisions by their natural name or OCD ID.", + // "httpMethod": "GET", + // "id": "civicinfo.divisions.search", + // "parameters": { + // "query": { + // "description": "The search query. Queries can cover any parts of a OCD ID or a human readable division name. All words given in the query are treated as required patterns. In addition to that, most query operators of the Apache Lucene library are supported. See http://lucene.apache.org/core/2_9_4/queryparsersyntax.html", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "representatives/division_search", + // "response": { + // "$ref": "DivisionSearchResponse" + // } + // } + +} + +// method id "civicinfo.elections.electionQuery": + +type ElectionsElectionQueryCall struct { + s *Service + opt_ map[string]interface{} +} + +// ElectionQuery: List of available elections to query. +func (r *ElectionsService) ElectionQuery() *ElectionsElectionQueryCall { + c := &ElectionsElectionQueryCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ElectionsElectionQueryCall) Do() (*ElectionsQueryResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "elections") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ElectionsQueryResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List of available elections to query.", + // "httpMethod": "GET", + // "id": "civicinfo.elections.electionQuery", + // "path": "elections", + // "response": { + // "$ref": "ElectionsQueryResponse" + // } + // } + +} + +// method id "civicinfo.elections.voterInfoQuery": + +type ElectionsVoterInfoQueryCall struct { + s *Service + electionId int64 + voterinforequest *VoterInfoRequest + opt_ map[string]interface{} +} + +// VoterInfoQuery: Looks up information relevant to a voter based on the +// voter's registered address. +func (r *ElectionsService) VoterInfoQuery(electionId int64, voterinforequest *VoterInfoRequest) *ElectionsVoterInfoQueryCall { + c := &ElectionsVoterInfoQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.electionId = electionId + c.voterinforequest = voterinforequest + return c +} + +// OfficialOnly sets the optional parameter "officialOnly": If set to +// true, only data from official state sources will be returned. +func (c *ElectionsVoterInfoQueryCall) OfficialOnly(officialOnly bool) *ElectionsVoterInfoQueryCall { + c.opt_["officialOnly"] = officialOnly + return c +} + +func (c *ElectionsVoterInfoQueryCall) Do() (*VoterInfoResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.voterinforequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["officialOnly"]; ok { + params.Set("officialOnly", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "voterinfo/{electionId}/lookup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{electionId}", strconv.FormatInt(c.electionId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(VoterInfoResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Looks up information relevant to a voter based on the voter's registered address.", + // "httpMethod": "POST", + // "id": "civicinfo.elections.voterInfoQuery", + // "parameterOrder": [ + // "electionId" + // ], + // "parameters": { + // "electionId": { + // "description": "The unique ID of the election to look up. A list of election IDs can be obtained at https://www.googleapis.com/civicinfo/{version}/elections", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "officialOnly": { + // "default": "false", + // "description": "If set to true, only data from official state sources will be returned.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "voterinfo/{electionId}/lookup", + // "request": { + // "$ref": "VoterInfoRequest" + // }, + // "response": { + // "$ref": "VoterInfoResponse" + // } + // } + +} + +// method id "civicinfo.representatives.representativeInfoQuery": + +type RepresentativesRepresentativeInfoQueryCall struct { + s *Service + representativeinforequest *RepresentativeInfoRequest + opt_ map[string]interface{} +} + +// RepresentativeInfoQuery: Looks up political geography and +// (optionally) representative information based on an address. +func (r *RepresentativesService) RepresentativeInfoQuery(representativeinforequest *RepresentativeInfoRequest) *RepresentativesRepresentativeInfoQueryCall { + c := &RepresentativesRepresentativeInfoQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.representativeinforequest = representativeinforequest + return c +} + +// IncludeOffices sets the optional parameter "includeOffices": Whether +// to return information about offices and officials. If false, only the +// top-level district information will be returned. +func (c *RepresentativesRepresentativeInfoQueryCall) IncludeOffices(includeOffices bool) *RepresentativesRepresentativeInfoQueryCall { + c.opt_["includeOffices"] = includeOffices + return c +} + +// OcdId sets the optional parameter "ocdId": The division to look up. +// May only be specified if the address field is not given in the +// request body. +func (c *RepresentativesRepresentativeInfoQueryCall) OcdId(ocdId string) *RepresentativesRepresentativeInfoQueryCall { + c.opt_["ocdId"] = ocdId + return c +} + +func (c *RepresentativesRepresentativeInfoQueryCall) Do() (*RepresentativeInfoResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.representativeinforequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeOffices"]; ok { + params.Set("includeOffices", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocdId"]; ok { + params.Set("ocdId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "representatives/lookup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RepresentativeInfoResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Looks up political geography and (optionally) representative information based on an address.", + // "httpMethod": "POST", + // "id": "civicinfo.representatives.representativeInfoQuery", + // "parameters": { + // "includeOffices": { + // "default": "true", + // "description": "Whether to return information about offices and officials. If false, only the top-level district information will be returned.", + // "location": "query", + // "type": "boolean" + // }, + // "ocdId": { + // "description": "The division to look up. May only be specified if the address field is not given in the request body.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "representatives/lookup", + // "request": { + // "$ref": "RepresentativeInfoRequest" + // }, + // "response": { + // "$ref": "RepresentativeInfoResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-api.json b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-api.json new file mode 100644 index 0000000000000..efb454a49f51f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-api.json @@ -0,0 +1,2774 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"a3GBuXuTtUYW9BV1SIieU5LiL7w/OMc_Q6bo_yRgn65QpS7XfQtbdfQ\"", + "discoveryVersion": "v1", + "id": "compute:v1beta12", + "name": "compute", + "version": "v1beta12", + "revision": "20121022", + "title": "Compute Engine API", + "description": "API for the Google Compute Engine service.", + "icons": { + "x16": "http://www.google.com/images/icons/product/compute_engine-16.png", + "x32": "http://www.google.com/images/icons/product/compute_engine-32.png" + }, + "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta12", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/compute/v1beta12/projects/", + "basePath": "/compute/v1beta12/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "compute/v1beta12/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/compute": { + "description": "View and manage your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/compute.readonly": { + "description": "View your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "AccessConfig": { + "id": "AccessConfig", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#accessConfig" + }, + "name": { + "type": "string", + "description": "Name of this access configuration." + }, + "natIP": { + "type": "string", + "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If left blank, the external IP will be drawn from a shared ephemeral pool." + }, + "type": { + "type": "string", + "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.", + "default": "ONE_TO_ONE_NAT" + } + } + }, + "AttachedDisk": { + "id": "AttachedDisk", + "type": "object", + "properties": { + "deleteOnTerminate": { + "type": "boolean", + "description": "Persistent disk only; If true, delete the disk and all its data when the associated instance is deleted. This property defaults to false if not specified." + }, + "deviceName": { + "type": "string", + "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system." + }, + "index": { + "type": "integer", + "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#attachedDisk" + }, + "mode": { + "type": "string", + "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\"." + }, + "source": { + "type": "string", + "description": "Persistent disk only; the URL of the persistent disk resource." + }, + "type": { + "type": "string", + "description": "Type of the disk, either \"EPHEMERAL\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "Disk": { + "id": "Disk", + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#disk" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "options": { + "type": "string", + "description": "Internal use only." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sizeGb": { + "type": "string", + "description": "Size of the persistent disk, specified in GB.", + "format": "int64", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "sourceSnapshot": { + "type": "string", + "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created." + }, + "sourceSnapshotId": { + "type": "string", + "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot." + }, + "status": { + "type": "string", + "description": "The status of disk creation (output only)." + }, + "zone": { + "type": "string", + "description": "URL for the zone where the persistent disk resides; provided by the client when the disk is created. A persistent disk must reside in the same zone as the instance to which it is attached.", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + } + } + }, + "DiskList": { + "id": "DiskList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent disk resources.", + "items": { + "$ref": "Disk" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Firewall": { + "id": "Firewall", + "type": "object", + "properties": { + "allowed": { + "type": "array", + "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.", + "items": { + "type": "object", + "properties": { + "IPProtocol": { + "type": "string", + "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number." + }, + "ports": { + "type": "array", + "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\nExample inputs include: [\"22\"], [\"80,\"443\"] and [\"12345-12349\"].", + "items": { + "type": "string" + } + } + } + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#firewall" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceRanges": { + "type": "array", + "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}" + } + }, + "sourceTags": { + "type": "array", + "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + }, + "targetTags": { + "type": "array", + "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + } + } + }, + "FirewallList": { + "id": "FirewallList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The firewall resources.", + "items": { + "$ref": "Firewall" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#firewallList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "Textual description of the resource; provided by the client when the resource is created." + }, + "diskSnapshot": { + "type": "object", + "description": "Not yet implemented.", + "properties": { + "source": { + "type": "string", + "description": "URL of the disk snapshot.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#image" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "preferredKernel": { + "type": "string", + "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used." + }, + "rawDisk": { + "type": "object", + "description": "The raw disk image parameters.", + "properties": { + "containerType": { + "type": "string", + "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.", + "default": "TAR", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "sha1Checksum": { + "type": "string", + "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.", + "pattern": "[a-f0-9]{40}" + }, + "source": { + "type": "string", + "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceType": { + "type": "string", + "description": "Must be \"RAW\"; provided by the client when the disk image is created.", + "default": "RAW", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "ImageList": { + "id": "ImageList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The disk image resources.", + "items": { + "$ref": "Image" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#imageList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "disks": { + "type": "array", + "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.", + "items": { + "$ref": "AttachedDisk" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "image": { + "type": "string", + "description": "An optional URL of the disk image resource to be to be installed on this instance; provided by the client when the instance is created. If not specified, the server will choose a default image.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#instance" + }, + "machineType": { + "type": "string", + "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "metadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information." + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkInterfaces": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "NetworkInterface" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "serviceAccounts": { + "type": "array", + "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.", + "items": { + "$ref": "ServiceAccount" + } + }, + "status": { + "type": "string", + "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional, human-readable explanation of the status (output only)." + }, + "tags": { + "type": "array", + "description": "An optional set of tags applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client when the instance is created. Each tag must be 1-63 characters long, and comply with RFC1035.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + }, + "zone": { + "type": "string", + "description": "URL of the zone resource describing where this instance should be hosted; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "InstanceList": { + "id": "InstanceList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "A list of instance resources.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Kernel": { + "id": "Kernel", + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#kernel" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "KernelList": { + "id": "KernelList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The kernel resources.", + "items": { + "$ref": "Kernel" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#kernelList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineType": { + "id": "MachineType", + "type": "object", + "properties": { + "availableZone": { + "type": "array", + "description": "The zones that this machine type can run in.", + "items": { + "type": "any" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "ephemeralDisks": { + "type": "array", + "description": "List of extended ephemeral disks assigned to the instance.", + "items": { + "type": "object", + "properties": { + "diskGb": { + "type": "integer", + "description": "Size of the ephemeral disk, defined in GB.", + "format": "int32" + } + } + } + }, + "guestCpus": { + "type": "integer", + "description": "Count of CPUs exposed to the instance.", + "format": "int32" + }, + "hostCpus": { + "type": "number", + "description": "Count of physical CPUs reserved on the virtual machine host. Deprecated.", + "format": "double" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "imageSpaceGb": { + "type": "integer", + "description": "Space allotted for the image, defined in GB.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineType" + }, + "maximumPersistentDisks": { + "type": "integer", + "description": "Maximum persistent disks allowed.", + "format": "int32" + }, + "maximumPersistentDisksSizeGb": { + "type": "string", + "description": "Maximum total persistent disks size (GB) allowed.", + "format": "int64" + }, + "memoryMb": { + "type": "integer", + "description": "Physical memory assigned to the instance, defined in MB.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "MachineTypeList": { + "id": "MachineTypeList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The machine type resources.", + "items": { + "$ref": "MachineType" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must be unique.", + "pattern": "[a-zA-Z0-9-_]{1,128}", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + }, + "value": { + "type": "string", + "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 15000 bytes.", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + } + } + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#metadata" + } + } + }, + "Network": { + "id": "Network", + "type": "object", + "properties": { + "IPv4Range": { + "type": "string", + "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "gatewayIPv4": { + "type": "string", + "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#network" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "NetworkInterface": { + "id": "NetworkInterface", + "type": "object", + "properties": { + "accessConfigs": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "AccessConfig" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#networkInterface" + }, + "name": { + "type": "string", + "description": "Name of the resource, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)." + }, + "network": { + "type": "string", + "description": "URL of the network resource attached to this interface.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkIP": { + "type": "string", + "description": "An optional IPV4 internal network address to assign to this instance. If not specified, one will be assigned from the available range." + } + } + }, + "NetworkList": { + "id": "NetworkList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The network resources.", + "items": { + "$ref": "Network" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#networkList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Operation": { + "id": "Operation", + "type": "object", + "properties": { + "clientOperationId": { + "type": "string", + "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "endTime": { + "type": "string", + "description": "The time that this operation was completed. This is in RFC 3339 format (output only)." + }, + "error": { + "type": "object", + "description": "If errors occurred during processing of this operation, this field will be populated (output only).", + "properties": { + "errors": { + "type": "array", + "description": "The array of errors encountered while processing this operation.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error type identifier for this error." + }, + "location": { + "type": "string", + "description": "Indicates the field in the request which caused the error. This property is optional." + }, + "message": { + "type": "string", + "description": "An optional, human-readable error message." + } + } + } + } + } + }, + "httpErrorMessage": { + "type": "string", + "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)." + }, + "httpErrorStatusCode": { + "type": "integer", + "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "insertTime": { + "type": "string", + "description": "The time that this operation was requested. This is in RFC 3339 format (output only)." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#operation" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "operationType": { + "type": "string", + "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)." + }, + "progress": { + "type": "integer", + "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).", + "format": "int32" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional textual description of the current status of the operation (output only)." + }, + "targetId": { + "type": "string", + "description": "Unique target id which identifies a particular incarnation of the target (output only).", + "format": "uint64" + }, + "targetLink": { + "type": "string", + "description": "URL of the resource the operation is mutating (output only)." + }, + "user": { + "type": "string", + "description": "User who requested the operation, for example \"user@example.com\" (output only)." + } + } + }, + "OperationList": { + "id": "OperationList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The operation resources.", + "items": { + "$ref": "Operation" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "properties": { + "commonInstanceMetadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs available to all instances contained in this project." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "externalIpAddresses": { + "type": "array", + "description": "Internet available IP addresses available for use in this project.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#project" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this project.", + "items": { + "type": "object", + "properties": { + "limit": { + "type": "number", + "description": "Quota limit for this metric.", + "format": "double" + }, + "metric": { + "type": "string", + "description": "Name of the quota metric." + }, + "usage": { + "type": "number", + "description": "Current usage of this metric.", + "format": "double" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "ServiceAccount": { + "id": "ServiceAccount", + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "Email address of the service account." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serviceAccount" + }, + "scopes": { + "type": "array", + "description": "The list of scopes to be made available for this service account.", + "items": { + "type": "string" + } + } + } + }, + "Snapshot": { + "id": "Snapshot", + "type": "object", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "diskSizeGb": { + "type": "string", + "description": "Size of the persistent disk snapshot, specified in GB (output only).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#snapshot" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.snapshots.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceDisk": { + "type": "string", + "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created." + }, + "sourceDiskId": { + "type": "string", + "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name." + }, + "status": { + "type": "string", + "description": "The status of the persistent disk snapshot (output only)." + } + } + }, + "SnapshotList": { + "id": "SnapshotList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent snapshot resources.", + "items": { + "$ref": "Snapshot" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#snapshotList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Zone": { + "id": "Zone", + "type": "object", + "properties": { + "availableMachineType": { + "type": "array", + "description": "The machine types that can be used in this zone (output only).", + "items": { + "type": "any" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#zone" + }, + "maintenanceWindows": { + "type": "array", + "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.", + "items": { + "type": "object", + "properties": { + "beginTime": { + "type": "string", + "description": "Begin time of the maintenance window, in RFC 3339 format." + }, + "description": { + "type": "string", + "description": "Textual description of the maintenance window." + }, + "endTime": { + "type": "string", + "description": "End time of the maintenance window, in RFC 3339 format." + }, + "name": { + "type": "string", + "description": "Name of the maintenance window." + } + } + } + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the zone. \"UP\" or \"DOWN\"." + } + } + }, + "ZoneList": { + "id": "ZoneList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The zone resources.", + "items": { + "$ref": "Zone" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#zoneList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + } + }, + "resources": { + "disks": { + "methods": { + "delete": { + "id": "compute.disks.delete", + "path": "{project}/disks/{disk}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "disk" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.disks.get", + "path": "{project}/disks/{disk}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "disk" + ], + "response": { + "$ref": "Disk" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.disks.insert", + "path": "{project}/disks", + "httpMethod": "POST", + "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Disk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.disks.list", + "path": "{project}/disks", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "DiskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "firewalls": { + "methods": { + "delete": { + "id": "compute.firewalls.delete", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "DELETE", + "description": "Deletes the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.firewalls.get", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "GET", + "description": "Returns the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Firewall" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.firewalls.insert", + "path": "{project}/firewalls", + "httpMethod": "POST", + "description": "Creates a firewall resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.firewalls.list", + "path": "{project}/firewalls", + "httpMethod": "GET", + "description": "Retrieves the list of firewall resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "FirewallList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.firewalls.patch", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "PATCH", + "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.firewalls.update", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "PUT", + "description": "Updates the specified firewall resource with the data included in the request.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "images": { + "methods": { + "delete": { + "id": "compute.images.delete", + "path": "{project}/images/{image}", + "httpMethod": "DELETE", + "description": "Deletes the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.images.get", + "path": "{project}/images/{image}", + "httpMethod": "GET", + "description": "Returns the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.images.insert", + "path": "{project}/images", + "httpMethod": "POST", + "description": "Creates an image resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/devstorage.read_only" + ] + }, + "list": { + "id": "compute.images.list", + "path": "{project}/images", + "httpMethod": "GET", + "description": "Retrieves the list of image resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ImageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "instances": { + "methods": { + "addAccessConfig": { + "id": "compute.instances.addAccessConfig", + "path": "{project}/instances/{instance}/add-access-config", + "httpMethod": "POST", + "description": "Adds an access config to an instance's network interface.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "network_interface" + ], + "request": { + "$ref": "AccessConfig" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.instances.delete", + "path": "{project}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deleteAccessConfig": { + "id": "compute.instances.deleteAccessConfig", + "path": "{project}/instances/{instance}/delete-access-config", + "httpMethod": "POST", + "description": "Deletes an access config from an instance's network interface.", + "parameters": { + "access_config": { + "type": "string", + "description": "Access config name.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "access_config", + "network_interface" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.instances.get", + "path": "{project}/instances/{instance}", + "httpMethod": "GET", + "description": "Returns the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "Instance" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.instances.insert", + "path": "{project}/instances", + "httpMethod": "POST", + "description": "Creates an instance resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Instance" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.instances.list", + "path": "{project}/instances", + "httpMethod": "GET", + "description": "Retrieves the list of instance resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstanceList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "kernels": { + "methods": { + "get": { + "id": "compute.kernels.get", + "path": "{project}/kernels/{kernel}", + "httpMethod": "GET", + "description": "Returns the specified kernel resource.", + "parameters": { + "kernel": { + "type": "string", + "description": "Name of the kernel resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "kernel" + ], + "response": { + "$ref": "Kernel" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.kernels.list", + "path": "{project}/kernels", + "httpMethod": "GET", + "description": "Retrieves the list of kernel resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "KernelList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "machineTypes": { + "methods": { + "get": { + "id": "compute.machineTypes.get", + "path": "{project}/machine-types/{machineType}", + "httpMethod": "GET", + "description": "Returns the specified machine type resource.", + "parameters": { + "machineType": { + "type": "string", + "description": "Name of the machine type resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "machineType" + ], + "response": { + "$ref": "MachineType" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.machineTypes.list", + "path": "{project}/machine-types", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "MachineTypeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "networks": { + "methods": { + "delete": { + "id": "compute.networks.delete", + "path": "{project}/networks/{network}", + "httpMethod": "DELETE", + "description": "Deletes the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.networks.get", + "path": "{project}/networks/{network}", + "httpMethod": "GET", + "description": "Returns the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Network" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.networks.insert", + "path": "{project}/networks", + "httpMethod": "POST", + "description": "Creates a network resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Network" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.networks.list", + "path": "{project}/networks", + "httpMethod": "GET", + "description": "Retrieves the list of network resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "NetworkList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "operations": { + "methods": { + "delete": { + "id": "compute.operations.delete", + "path": "{project}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.operations.get", + "path": "{project}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.operations.list", + "path": "{project}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "compute.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Returns the specified project resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project resource to retrieve.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setCommonInstanceMetadata": { + "id": "compute.projects.setCommonInstanceMetadata", + "path": "{project}/set-common-instance-metadata", + "httpMethod": "POST", + "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Metadata" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "snapshots": { + "methods": { + "delete": { + "id": "compute.snapshots.delete", + "path": "{project}/snapshots/{snapshot}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.snapshots.get", + "path": "{project}/snapshots/{snapshot}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Snapshot" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.snapshots.insert", + "path": "{project}/snapshots", + "httpMethod": "POST", + "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Snapshot" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.snapshots.list", + "path": "{project}/snapshots", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "SnapshotList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zones": { + "methods": { + "get": { + "id": "compute.zones.get", + "path": "{project}/zones/{zone}", + "httpMethod": "GET", + "description": "Returns the specified zone resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "Zone" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zones.list", + "path": "{project}/zones", + "httpMethod": "GET", + "description": "Retrieves the list of zone resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ZoneList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-gen.go b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-gen.go new file mode 100644 index 0000000000000..8dca92bf6d981 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta12/compute-gen.go @@ -0,0 +1,4384 @@ +// Package compute provides access to the Compute Engine API. +// +// See https://developers.google.com/compute/docs/reference/v1beta12 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/compute/v1beta12" +// ... +// computeService, err := compute.New(oauthHttpClient) +package compute + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New + +const apiId = "compute:v1beta12" +const apiName = "compute" +const apiVersion = "v1beta12" +const basePath = "https://www.googleapis.com/compute/v1beta12/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Compute Engine resources + ComputeScope = "https://www.googleapis.com/auth/compute" + + // View your Google Compute Engine resources + ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Disks = &DisksService{s: s} + s.Firewalls = &FirewallsService{s: s} + s.Images = &ImagesService{s: s} + s.Instances = &InstancesService{s: s} + s.Kernels = &KernelsService{s: s} + s.MachineTypes = &MachineTypesService{s: s} + s.Networks = &NetworksService{s: s} + s.Operations = &OperationsService{s: s} + s.Projects = &ProjectsService{s: s} + s.Snapshots = &SnapshotsService{s: s} + s.Zones = &ZonesService{s: s} + return s, nil +} + +type Service struct { + client *http.Client + + Disks *DisksService + + Firewalls *FirewallsService + + Images *ImagesService + + Instances *InstancesService + + Kernels *KernelsService + + MachineTypes *MachineTypesService + + Networks *NetworksService + + Operations *OperationsService + + Projects *ProjectsService + + Snapshots *SnapshotsService + + Zones *ZonesService +} + +type DisksService struct { + s *Service +} + +type FirewallsService struct { + s *Service +} + +type ImagesService struct { + s *Service +} + +type InstancesService struct { + s *Service +} + +type KernelsService struct { + s *Service +} + +type MachineTypesService struct { + s *Service +} + +type NetworksService struct { + s *Service +} + +type OperationsService struct { + s *Service +} + +type ProjectsService struct { + s *Service +} + +type SnapshotsService struct { + s *Service +} + +type ZonesService struct { + s *Service +} + +type AccessConfig struct { + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of this access configuration. + Name string `json:"name,omitempty"` + + // NatIP: An external IP address associated with this instance. Specify + // an unused static IP address available to the project. If left blank, + // the external IP will be drawn from a shared ephemeral pool. + NatIP string `json:"natIP,omitempty"` + + // Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This + // configures port-for-port NAT to the internet. + Type string `json:"type,omitempty"` +} + +type AttachedDisk struct { + // DeleteOnTerminate: Persistent disk only; If true, delete the disk and + // all its data when the associated instance is deleted. This property + // defaults to false if not specified. + DeleteOnTerminate bool `json:"deleteOnTerminate,omitempty"` + + // DeviceName: Persistent disk only; must be unique within the instance + // when specified. This represents a unique device name that is + // reflected into the /dev/ tree of a Linux operating system running + // within the instance. If not specified, a default will be chosen by + // the system. + DeviceName string `json:"deviceName,omitempty"` + + // Index: A zero-based index to assign to this disk, where 0 is reserved + // for the boot disk. If not specified, the server will choose an + // appropriate value. + Index int64 `json:"index,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Mode: The mode in which to attach this disk, either "READ_WRITE" or + // "READ_ONLY". + Mode string `json:"mode,omitempty"` + + // Source: Persistent disk only; the URL of the persistent disk + // resource. + Source string `json:"source,omitempty"` + + // Type: Type of the disk, either "EPHEMERAL" or "PERSISTENT". Note that + // persistent disks must be created before you can specify them here. + Type string `json:"type,omitempty"` +} + +type Disk struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Options: Internal use only. + Options string `json:"options,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SizeGb: Size of the persistent disk, specified in GB. + SizeGb int64 `json:"sizeGb,omitempty,string"` + + // SourceSnapshot: The source snapshot used to create this disk. Once + // the source snapshot has been deleted from the system, this field will + // be cleared, and will not be set even if a snapshot with the same name + // has been re-created. + SourceSnapshot string `json:"sourceSnapshot,omitempty"` + + // SourceSnapshotId: The 'id' value of the snapshot used to create this + // disk. This value may be used to determine whether the disk was + // created from the current or a previous instance of a given disk + // snapshot. + SourceSnapshotId string `json:"sourceSnapshotId,omitempty"` + + // Status: The status of disk creation (output only). + Status string `json:"status,omitempty"` + + // Zone: URL for the zone where the persistent disk resides; provided by + // the client when the disk is created. A persistent disk must reside in + // the same zone as the instance to which it is attached. + Zone string `json:"zone,omitempty"` +} + +type DiskList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent disk resources. + Items []*Disk `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Firewall struct { + // Allowed: The list of rules specified by this firewall. Each rule + // specifies a protocol and port-range tuple that describes a permitted + // connection. + Allowed []*FirewallAllowed `json:"allowed,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this firewall is applied; + // provided by the client when the firewall is created. + Network string `json:"network,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceRanges: A list of IP address blocks expressed in CIDR format + // which this rule applies to. One or both of sourceRanges and + // sourceTags may be set; an inbound connection is allowed if either the + // range or the tag of the source matches. + SourceRanges []string `json:"sourceRanges,omitempty"` + + // SourceTags: A list of instance tags which this rule applies to. One + // or both of sourceRanges and sourceTags may be set; an inbound + // connection is allowed if either the range or the tag of the source + // matches. + SourceTags []string `json:"sourceTags,omitempty"` + + // TargetTags: A list of instance tags indicating sets of instances + // located on network which may make network connections as specified in + // allowed. If no targetTags are specified, the firewall rule applies to + // all instances on the specified network. + TargetTags []string `json:"targetTags,omitempty"` +} + +type FirewallAllowed struct { + // IPProtocol: Required; this is the IP protocol that is allowed for + // this rule. This can either be a well known protocol string (tcp, udp + // or icmp) or the IP protocol number. + IPProtocol string `json:"IPProtocol,omitempty"` + + // Ports: An optional list of ports which are allowed. It is an error to + // specify this for any protocol that isn't UDP or TCP. Each entry must + // be either an integer or a range. If not specified, connections + // through any port are allowed. + // Example inputs include: ["22"], + // ["80,"443"] and ["12345-12349"]. + Ports []string `json:"ports,omitempty"` +} + +type FirewallList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The firewall resources. + Items []*Firewall `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Image struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: Textual description of the resource; provided by the + // client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSnapshot: Not yet implemented. + DiskSnapshot *ImageDiskSnapshot `json:"diskSnapshot,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PreferredKernel: An optional URL of the preferred kernel for use with + // this disk image. If not specified, a server defined default kernel + // will be used. + PreferredKernel string `json:"preferredKernel,omitempty"` + + // RawDisk: The raw disk image parameters. + RawDisk *ImageRawDisk `json:"rawDisk,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceType: Must be "RAW"; provided by the client when the disk image + // is created. + SourceType string `json:"sourceType,omitempty"` +} + +type ImageDiskSnapshot struct { + // Source: URL of the disk snapshot. + Source string `json:"source,omitempty"` +} + +type ImageRawDisk struct { + // ContainerType: The format used to encode and transmit the block + // device. Should be TAR. This is just a container and transmission + // format and not a runtime format. Provided by the client when the disk + // image is created. + ContainerType string `json:"containerType,omitempty"` + + // Sha1Checksum: An optional SHA1 checksum of the disk image before + // unpackaging; provided by the client when the disk image is created. + Sha1Checksum string `json:"sha1Checksum,omitempty"` + + // Source: The full Google Cloud Storage URL where the disk image is + // stored; provided by the client when the disk image is created. + Source string `json:"source,omitempty"` +} + +type ImageList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The disk image resources. + Items []*Image `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Instance struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Disks: Array of disks associated with this instance. Persistent disks + // must be created before you can assign them. + Disks []*AttachedDisk `json:"disks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Image: An optional URL of the disk image resource to be to be + // installed on this instance; provided by the client when the instance + // is created. If not specified, the server will choose a default image. + Image string `json:"image,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MachineType: URL of the machine type resource describing which + // machine type to use to host the instance; provided by the client when + // the instance is created. + MachineType string `json:"machineType,omitempty"` + + // Metadata: Metadata key/value pairs assigned to this instance. + // Consists of custom metadata or predefined keys; see Instance + // documentation for more information. + Metadata *Metadata `json:"metadata,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // NetworkInterfaces: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // ServiceAccounts: A list of service accounts each with specified + // scopes, for which access tokens are to be made available to the + // instance through metadata queries. + ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"` + + // Status: Instance status. One of the following values: "PROVISIONING", + // "STAGING", "RUNNING" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional, human-readable explanation of the status + // (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // Tags: An optional set of tags applied to this instance. Used to + // identify valid sources or targets for network firewalls. Provided by + // the client when the instance is created. Each tag must be 1-63 + // characters long, and comply with RFC1035. + Tags []string `json:"tags,omitempty"` + + // Zone: URL of the zone resource describing where this instance should + // be hosted; provided by the client when the instance is created. + Zone string `json:"zone,omitempty"` +} + +type InstanceList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A list of instance resources. + Items []*Instance `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Kernel struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type KernelList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The kernel resources. + Items []*Kernel `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineType struct { + // AvailableZone: The zones that this machine type can run in. + AvailableZone []interface{} `json:"availableZone,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // EphemeralDisks: List of extended ephemeral disks assigned to the + // instance. + EphemeralDisks []*MachineTypeEphemeralDisks `json:"ephemeralDisks,omitempty"` + + // GuestCpus: Count of CPUs exposed to the instance. + GuestCpus int64 `json:"guestCpus,omitempty"` + + // HostCpus: Count of physical CPUs reserved on the virtual machine + // host. Deprecated. + HostCpus float64 `json:"hostCpus,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // ImageSpaceGb: Space allotted for the image, defined in GB. + ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaximumPersistentDisks: Maximum persistent disks allowed. + MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"` + + // MaximumPersistentDisksSizeGb: Maximum total persistent disks size + // (GB) allowed. + MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"` + + // MemoryMb: Physical memory assigned to the instance, defined in MB. + MemoryMb int64 `json:"memoryMb,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypeEphemeralDisks struct { + // DiskGb: Size of the ephemeral disk, defined in GB. + DiskGb int64 `json:"diskGb,omitempty"` +} + +type MachineTypeList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The machine type resources. + Items []*MachineType `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Metadata struct { + // Items: Array of key/value pairs. The total size of all keys and + // values must be less than 512 KB. + Items []*MetadataItems `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` +} + +type MetadataItems struct { + // Key: Key for the metadata entry. Keys must conform to the following + // regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is + // reflected as part of a URL in the metadata server. Additionally, to + // avoid ambiguity, keys must be unique. + Key string `json:"key,omitempty"` + + // Value: Value for the metadata entry. These are free-form strings, and + // only have meaning as interpreted by the image running in the + // instance. The only restriction placed on values is that their size + // must be less than or equal to 15000 bytes. + Value string `json:"value,omitempty"` +} + +type Network struct { + // IPv4Range: Required; The range of internal addresses that are legal + // on this network. This range is a CIDR specification, for example: + // 192.168.0.0/16. Provided by the client when the network is created. + IPv4Range string `json:"IPv4Range,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // GatewayIPv4: An optional address that is used for default routing to + // other networks. This must be within the range specified by IPv4Range, + // and is typically the first usable address in that range. If not + // specified, the default value is the first usable address in + // IPv4Range. + GatewayIPv4 string `json:"gatewayIPv4,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type NetworkInterface struct { + // AccessConfigs: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource, determined by the server; for network + // devices, these are e.g. eth0, eth1, etc. (output only). + Name string `json:"name,omitempty"` + + // Network: URL of the network resource attached to this interface. + Network string `json:"network,omitempty"` + + // NetworkIP: An optional IPV4 internal network address to assign to + // this instance. If not specified, one will be assigned from the + // available range. + NetworkIP string `json:"networkIP,omitempty"` +} + +type NetworkList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The network resources. + Items []*Network `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Operation struct { + // ClientOperationId: An optional identifier specified by the client + // when the mutation was initiated. Must be unique for all operation + // resources in the project (output only). + ClientOperationId string `json:"clientOperationId,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // EndTime: The time that this operation was completed. This is in RFC + // 3339 format (output only). + EndTime string `json:"endTime,omitempty"` + + // Error: If errors occurred during processing of this operation, this + // field will be populated (output only). + Error *OperationError `json:"error,omitempty"` + + // HttpErrorMessage: If operation fails, the HTTP error message + // returned, e.g. NOT FOUND. (output only). + HttpErrorMessage string `json:"httpErrorMessage,omitempty"` + + // HttpErrorStatusCode: If operation fails, the HTTP error status code + // returned, e.g. 404. (output only). + HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // InsertTime: The time that this operation was requested. This is in + // RFC 3339 format (output only). + InsertTime string `json:"insertTime,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // OperationType: Type of the operation. Examples include "insert", + // "update", and "delete" (output only). + OperationType string `json:"operationType,omitempty"` + + // Progress: An optional progress indicator that ranges from 0 to 100. + // There is no requirement that this be linear or support any + // granularity of operations. This should not be used to guess at when + // the operation will be complete. This number should be monotonically + // increasing as the operation progresses (output only). + Progress int64 `json:"progress,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC 3339 format (output only). + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING", "RUNNING", or "DONE" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional textual description of the current status + // of the operation (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // TargetId: Unique target id which identifies a particular incarnation + // of the target (output only). + TargetId uint64 `json:"targetId,omitempty,string"` + + // TargetLink: URL of the resource the operation is mutating (output + // only). + TargetLink string `json:"targetLink,omitempty"` + + // User: User who requested the operation, for example + // "user@example.com" (output only). + User string `json:"user,omitempty"` +} + +type OperationError struct { + // Errors: The array of errors encountered while processing this + // operation. + Errors []*OperationErrorErrors `json:"errors,omitempty"` +} + +type OperationErrorErrors struct { + // Code: The error type identifier for this error. + Code string `json:"code,omitempty"` + + // Location: Indicates the field in the request which caused the error. + // This property is optional. + Location string `json:"location,omitempty"` + + // Message: An optional, human-readable error message. + Message string `json:"message,omitempty"` +} + +type OperationList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The operation resources. + Items []*Operation `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Project struct { + // CommonInstanceMetadata: Metadata key/value pairs available to all + // instances contained in this project. + CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // ExternalIpAddresses: Internet available IP addresses available for + // use in this project. + ExternalIpAddresses []string `json:"externalIpAddresses,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this project. + Quotas []*ProjectQuotas `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ProjectQuotas struct { + // Limit: Quota limit for this metric. + Limit float64 `json:"limit,omitempty"` + + // Metric: Name of the quota metric. + Metric string `json:"metric,omitempty"` + + // Usage: Current usage of this metric. + Usage float64 `json:"usage,omitempty"` +} + +type ServiceAccount struct { + // Email: Email address of the service account. + Email string `json:"email,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Scopes: The list of scopes to be made available for this service + // account. + Scopes []string `json:"scopes,omitempty"` +} + +type Snapshot struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSizeGb: Size of the persistent disk snapshot, specified in GB + // (output only). + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceDisk: The source disk used to create this snapshot. Once the + // source disk has been deleted from the system, this field will be + // cleared, and will not be set even if a disk with the same name has + // been re-created. + SourceDisk string `json:"sourceDisk,omitempty"` + + // SourceDiskId: The 'id' value of the disk used to create this + // snapshot. This value may be used to determine whether the snapshot + // was taken from the current or a previous instance of a given disk + // name. + SourceDiskId string `json:"sourceDiskId,omitempty"` + + // Status: The status of the persistent disk snapshot (output only). + Status string `json:"status,omitempty"` +} + +type SnapshotList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent snapshot resources. + Items []*Snapshot `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Zone struct { + // AvailableMachineType: The machine types that can be used in this zone + // (output only). + AvailableMachineType []interface{} `json:"availableMachineType,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaintenanceWindows: Scheduled maintenance windows for the zone. When + // the zone is in a maintenance window, all resources which reside in + // the zone will be unavailable. + MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the zone. "UP" or "DOWN". + Status string `json:"status,omitempty"` +} + +type ZoneMaintenanceWindows struct { + // BeginTime: Begin time of the maintenance window, in RFC 3339 format. + BeginTime string `json:"beginTime,omitempty"` + + // Description: Textual description of the maintenance window. + Description string `json:"description,omitempty"` + + // EndTime: End time of the maintenance window, in RFC 3339 format. + EndTime string `json:"endTime,omitempty"` + + // Name: Name of the maintenance window. + Name string `json:"name,omitempty"` +} + +type ZoneList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The zone resources. + Items []*Zone `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +// method id "compute.disks.delete": + +type DisksDeleteCall struct { + s *Service + project string + disk string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk resource. +func (r *DisksService) Delete(project string, disk string) *DisksDeleteCall { + c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/disks/{disk}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{disk}", cleanPathString(c.disk), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk resource.", + // "httpMethod": "DELETE", + // "id": "compute.disks.delete", + // "parameterOrder": [ + // "project", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks/{disk}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.get": + +type DisksGetCall struct { + s *Service + project string + disk string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk resource. +func (r *DisksService) Get(project string, disk string) *DisksGetCall { + c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksGetCall) Do() (*Disk, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/disks/{disk}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{disk}", cleanPathString(c.disk), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Disk) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk resource.", + // "httpMethod": "GET", + // "id": "compute.disks.get", + // "parameterOrder": [ + // "project", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks/{disk}", + // "response": { + // "$ref": "Disk" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.insert": + +type DisksInsertCall struct { + s *Service + project string + disk *Disk + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk resource in the specified project +// using the data included in the request. +func (r *DisksService) Insert(project string, disk *Disk) *DisksInsertCall { + c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/disks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.disks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks", + // "request": { + // "$ref": "Disk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.list": + +type DisksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk resources contained +// within the specified project. +func (r *DisksService) List(project string) *DisksListCall { + c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksListCall) Filter(filter string) *DisksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksListCall) PageToken(pageToken string) *DisksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksListCall) Do() (*DiskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/disks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.disks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks", + // "response": { + // "$ref": "DiskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.delete": + +type FirewallsDeleteCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified firewall resource. +func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall { + c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified firewall resource.", + // "httpMethod": "DELETE", + // "id": "compute.firewalls.delete", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.get": + +type FirewallsGetCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Get: Returns the specified firewall resource. +func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall { + c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsGetCall) Do() (*Firewall, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Firewall) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified firewall resource.", + // "httpMethod": "GET", + // "id": "compute.firewalls.get", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "response": { + // "$ref": "Firewall" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.insert": + +type FirewallsInsertCall struct { + s *Service + project string + firewall *Firewall + opt_ map[string]interface{} +} + +// Insert: Creates a firewall resource in the specified project using +// the data included in the request. +func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall { + c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a firewall resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.firewalls.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.list": + +type FirewallsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of firewall resources available to the +// specified project. +func (r *FirewallsService) List(project string) *FirewallsListCall { + c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *FirewallsListCall) Do() (*FirewallList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FirewallList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of firewall resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.firewalls.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls", + // "response": { + // "$ref": "FirewallList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.patch": + +type FirewallsPatchCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Patch: Updates the specified firewall resource with the data included +// in the request. This method supports patch semantics. +func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall { + c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.firewalls.patch", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.update": + +type FirewallsUpdateCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Update: Updates the specified firewall resource with the data +// included in the request. +func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall { + c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.firewalls.update", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.delete": + +type ImagesDeleteCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified image resource. +func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall { + c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/images/{image}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{image}", cleanPathString(c.image), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified image resource.", + // "httpMethod": "DELETE", + // "id": "compute.images.delete", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images/{image}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.get": + +type ImagesGetCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Get: Returns the specified image resource. +func (r *ImagesService) Get(project string, image string) *ImagesGetCall { + c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/images/{image}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{image}", cleanPathString(c.image), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified image resource.", + // "httpMethod": "GET", + // "id": "compute.images.get", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images/{image}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.insert": + +type ImagesInsertCall struct { + s *Service + project string + image *Image + opt_ map[string]interface{} +} + +// Insert: Creates an image resource in the specified project using the +// data included in the request. +func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall { + c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/images") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an image resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.images.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/devstorage.read_only" + // ] + // } + +} + +// method id "compute.images.list": + +type ImagesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of image resources available to the +// specified project. +func (r *ImagesService) List(project string) *ImagesListCall { + c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ImagesListCall) Filter(filter string) *ImagesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ImagesListCall) Do() (*ImageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/images") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ImageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of image resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.images.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images", + // "response": { + // "$ref": "ImageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.addAccessConfig": + +type InstancesAddAccessConfigCall struct { + s *Service + project string + instance string + network_interface string + accessconfig *AccessConfig + opt_ map[string]interface{} +} + +// AddAccessConfig: Adds an access config to an instance's network +// interface. +func (r *InstancesService) AddAccessConfig(project string, instance string, network_interface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall { + c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.network_interface = network_interface + c.accessconfig = accessconfig + return c +} + +func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances/{instance}/add-access-config") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an access config to an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.addAccessConfig", + // "parameterOrder": [ + // "project", + // "instance", + // "network_interface" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}/add-access-config", + // "request": { + // "$ref": "AccessConfig" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified instance resource. +func (r *InstancesService) Delete(project string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances/{instance}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified instance resource.", + // "httpMethod": "DELETE", + // "id": "compute.instances.delete", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.deleteAccessConfig": + +type InstancesDeleteAccessConfigCall struct { + s *Service + project string + instance string + access_config string + network_interface string + opt_ map[string]interface{} +} + +// DeleteAccessConfig: Deletes an access config from an instance's +// network interface. +func (r *InstancesService) DeleteAccessConfig(project string, instance string, access_config string, network_interface string) *InstancesDeleteAccessConfigCall { + c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.access_config = access_config + c.network_interface = network_interface + return c +} + +func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("access_config", fmt.Sprintf("%v", c.access_config)) + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances/{instance}/delete-access-config") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes an access config from an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.deleteAccessConfig", + // "parameterOrder": [ + // "project", + // "instance", + // "access_config", + // "network_interface" + // ], + // "parameters": { + // "access_config": { + // "description": "Access config name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}/delete-access-config", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.get": + +type InstancesGetCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Get: Returns the specified instance resource. +func (r *InstancesService) Get(project string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*Instance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances/{instance}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Instance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance resource.", + // "httpMethod": "GET", + // "id": "compute.instances.get", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}", + // "response": { + // "$ref": "Instance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + instance *Instance + opt_ map[string]interface{} +} + +// Insert: Creates an instance resource in the specified project using +// the data included in the request. +func (r *InstancesService) Insert(project string, instance *Instance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an instance resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances", + // "request": { + // "$ref": "Instance" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.list": + +type InstancesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of instance resources contained within the +// specified project. +func (r *InstancesService) List(project string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesListCall) Filter(filter string) *InstancesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstanceList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/instances") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of instance resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.instances.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances", + // "response": { + // "$ref": "InstanceList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.get": + +type KernelsGetCall struct { + s *Service + project string + kernel string + opt_ map[string]interface{} +} + +// Get: Returns the specified kernel resource. +func (r *KernelsService) Get(project string, kernel string) *KernelsGetCall { + c := &KernelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.kernel = kernel + return c +} + +func (c *KernelsGetCall) Do() (*Kernel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/kernels/{kernel}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{kernel}", cleanPathString(c.kernel), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Kernel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified kernel resource.", + // "httpMethod": "GET", + // "id": "compute.kernels.get", + // "parameterOrder": [ + // "project", + // "kernel" + // ], + // "parameters": { + // "kernel": { + // "description": "Name of the kernel resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/kernels/{kernel}", + // "response": { + // "$ref": "Kernel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.list": + +type KernelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of kernel resources available to the +// specified project. +func (r *KernelsService) List(project string) *KernelsListCall { + c := &KernelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *KernelsListCall) Filter(filter string) *KernelsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *KernelsListCall) PageToken(pageToken string) *KernelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *KernelsListCall) Do() (*KernelList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/kernels") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(KernelList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of kernel resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.kernels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/kernels", + // "response": { + // "$ref": "KernelList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.get": + +type MachineTypesGetCall struct { + s *Service + project string + machineType string + opt_ map[string]interface{} +} + +// Get: Returns the specified machine type resource. +func (r *MachineTypesService) Get(project string, machineType string) *MachineTypesGetCall { + c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.machineType = machineType + return c +} + +func (c *MachineTypesGetCall) Do() (*MachineType, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/machine-types/{machineType}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{machineType}", cleanPathString(c.machineType), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineType) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified machine type resource.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.get", + // "parameterOrder": [ + // "project", + // "machineType" + // ], + // "parameters": { + // "machineType": { + // "description": "Name of the machine type resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/machine-types/{machineType}", + // "response": { + // "$ref": "MachineType" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.list": + +type MachineTypesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of machine type resources available to the +// specified project. +func (r *MachineTypesService) List(project string) *MachineTypesListCall { + c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesListCall) Do() (*MachineTypeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/machine-types") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/machine-types", + // "response": { + // "$ref": "MachineTypeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.delete": + +type NetworksDeleteCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified network resource. +func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall { + c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/networks/{network}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{network}", cleanPathString(c.network), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified network resource.", + // "httpMethod": "DELETE", + // "id": "compute.networks.delete", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks/{network}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.get": + +type NetworksGetCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Get: Returns the specified network resource. +func (r *NetworksService) Get(project string, network string) *NetworksGetCall { + c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksGetCall) Do() (*Network, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/networks/{network}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{network}", cleanPathString(c.network), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Network) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified network resource.", + // "httpMethod": "GET", + // "id": "compute.networks.get", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks/{network}", + // "response": { + // "$ref": "Network" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.insert": + +type NetworksInsertCall struct { + s *Service + project string + network *Network + opt_ map[string]interface{} +} + +// Insert: Creates a network resource in the specified project using the +// data included in the request. +func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall { + c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.network) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/networks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a network resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.networks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks", + // "request": { + // "$ref": "Network" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.list": + +type NetworksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of network resources available to the +// specified project. +func (r *NetworksService) List(project string) *NetworksListCall { + c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *NetworksListCall) Filter(filter string) *NetworksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NetworksListCall) Do() (*NetworkList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/networks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(NetworkList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of network resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.networks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks", + // "response": { + // "$ref": "NetworkList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.operations.delete": + +type OperationsDeleteCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified operation resource. +func (r *OperationsService) Delete(project string, operation string) *OperationsDeleteCall { + c := &OperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *OperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/operations/{operation}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{operation}", cleanPathString(c.operation), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.operations.delete", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.operations.get": + +type OperationsGetCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified operation resource. +func (r *OperationsService) Get(project string, operation string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *OperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/operations/{operation}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{operation}", cleanPathString(c.operation), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified operation resource.", + // "httpMethod": "GET", + // "id": "compute.operations.get", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.operations.list": + +type OperationsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified project. +func (r *OperationsService) List(project string) *OperationsListCall { + c := &OperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *OperationsListCall) Filter(filter string) *OperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *OperationsListCall) MaxResults(maxResults int64) *OperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *OperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/operations") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.operations.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Returns the specified project resource. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified project resource.", + // "httpMethod": "GET", + // "id": "compute.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project resource to retrieve.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.setCommonInstanceMetadata": + +type ProjectsSetCommonInstanceMetadataCall struct { + s *Service + project string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetCommonInstanceMetadata: Sets metadata common to all instances +// within the specified project using the data included in the request. +func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall { + c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.metadata = metadata + return c +} + +func (c *ProjectsSetCommonInstanceMetadataCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/set-common-instance-metadata") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.projects.setCommonInstanceMetadata", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/set-common-instance-metadata", + // "request": { + // "$ref": "Metadata" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.delete": + +type SnapshotsDeleteCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk snapshot resource. +func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall { + c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/snapshots/{snapshot}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{snapshot}", cleanPathString(c.snapshot), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk snapshot resource.", + // "httpMethod": "DELETE", + // "id": "compute.snapshots.delete", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots/{snapshot}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.get": + +type SnapshotsGetCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk snapshot resource. +func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall { + c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsGetCall) Do() (*Snapshot, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/snapshots/{snapshot}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{snapshot}", cleanPathString(c.snapshot), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Snapshot) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk snapshot resource.", + // "httpMethod": "GET", + // "id": "compute.snapshots.get", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots/{snapshot}", + // "response": { + // "$ref": "Snapshot" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.insert": + +type SnapshotsInsertCall struct { + s *Service + project string + snapshot *Snapshot + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk snapshot resource in the specified +// project using the data included in the request. +func (r *SnapshotsService) Insert(project string, snapshot *Snapshot) *SnapshotsInsertCall { + c := &SnapshotsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/snapshots") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.snapshots.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots", + // "request": { + // "$ref": "Snapshot" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.list": + +type SnapshotsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk snapshot resources +// contained within the specified project. +func (r *SnapshotsService) List(project string) *SnapshotsListCall { + c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SnapshotsListCall) Do() (*SnapshotList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/snapshots") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SnapshotList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.snapshots.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots", + // "response": { + // "$ref": "SnapshotList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.get": + +type ZonesGetCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// Get: Returns the specified zone resource. +func (r *ZonesService) Get(project string, zone string) *ZonesGetCall { + c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +func (c *ZonesGetCall) Do() (*Zone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/zones/{zone}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{zone}", cleanPathString(c.zone), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Zone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified zone resource.", + // "httpMethod": "GET", + // "id": "compute.zones.get", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}", + // "response": { + // "$ref": "Zone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.list": + +type ZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of zone resources available to the specified +// project. +func (r *ZonesService) List(project string) *ZonesListCall { + c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZonesListCall) Filter(filter string) *ZonesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZonesListCall) Do() (*ZoneList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta12/projects/", "{project}/zones") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ZoneList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of zone resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.zones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones", + // "response": { + // "$ref": "ZoneList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +func cleanPathString(s string) string { + return strings.Map(func(r rune) rune { + if r >= 0x2d && r <= 0x7a || r == '~' { + return r + } + return -1 + }, s) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-api.json b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-api.json new file mode 100644 index 0000000000000..60e5bb28c67cd --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-api.json @@ -0,0 +1,2872 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"95FJOuWe9QdOljMvtEYMArTvwNI/uZCmzQDE6V2uI2eL0FGkfgF1tAE\"", + "discoveryVersion": "v1", + "id": "compute:v1beta13", + "name": "compute", + "version": "v1beta13", + "revision": "20130403", + "title": "Compute Engine API", + "description": "API for the Google Compute Engine service.", + "icons": { + "x16": "http://www.google.com/images/icons/product/compute_engine-16.png", + "x32": "http://www.google.com/images/icons/product/compute_engine-32.png" + }, + "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta13", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/compute/v1beta13/projects/", + "basePath": "/compute/v1beta13/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "compute/v1beta13/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/compute": { + "description": "View and manage your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/compute.readonly": { + "description": "View your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "AccessConfig": { + "id": "AccessConfig", + "type": "object", + "description": "An access configuration attached to an instance's network interface.", + "properties": { + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#accessConfig" + }, + "name": { + "type": "string", + "description": "Name of this access configuration." + }, + "natIP": { + "type": "string", + "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If not specified, the external IP will be drawn from a shared ephemeral pool." + }, + "type": { + "type": "string", + "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.", + "default": "ONE_TO_ONE_NAT" + } + } + }, + "AttachedDisk": { + "id": "AttachedDisk", + "type": "object", + "description": "An instance-attached disk resource.", + "properties": { + "deleteOnTerminate": { + "type": "boolean", + "description": "Persistent disk only; If true, delete the disk and all its data when the associated instance is deleted. This property defaults to false if not specified." + }, + "deviceName": { + "type": "string", + "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system." + }, + "index": { + "type": "integer", + "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#attachedDisk" + }, + "mode": { + "type": "string", + "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\"." + }, + "source": { + "type": "string", + "description": "Persistent disk only; the URL of the persistent disk resource." + }, + "type": { + "type": "string", + "description": "Type of the disk, either \"EPHEMERAL\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "Disk": { + "id": "Disk", + "type": "object", + "description": "A persistent disk resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#disk" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "options": { + "type": "string", + "description": "Internal use only." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sizeGb": { + "type": "string", + "description": "Size of the persistent disk, specified in GB.", + "format": "int64", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "sourceSnapshot": { + "type": "string", + "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created." + }, + "sourceSnapshotId": { + "type": "string", + "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot." + }, + "status": { + "type": "string", + "description": "The status of disk creation (output only)." + }, + "zone": { + "type": "string", + "description": "URL for the zone where the persistent disk resides; provided by the client when the disk is created. A persistent disk must reside in the same zone as the instance to which it is attached.", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + } + } + }, + "DiskList": { + "id": "DiskList", + "type": "object", + "description": "Contains a list of persistent disk resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent disk resources.", + "items": { + "$ref": "Disk" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Firewall": { + "id": "Firewall", + "type": "object", + "description": "A firewall resource.", + "properties": { + "allowed": { + "type": "array", + "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.", + "items": { + "type": "object", + "properties": { + "IPProtocol": { + "type": "string", + "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number." + }, + "ports": { + "type": "array", + "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\nExample inputs include: [\"22\"], [\"80,\"443\"] and [\"12345-12349\"].", + "items": { + "type": "string" + } + } + } + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#firewall" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceRanges": { + "type": "array", + "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}" + } + }, + "sourceTags": { + "type": "array", + "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + }, + "targetTags": { + "type": "array", + "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + } + } + }, + "FirewallList": { + "id": "FirewallList", + "type": "object", + "description": "Contains a list of firewall resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The firewall resources.", + "items": { + "$ref": "Firewall" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#firewallList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "description": "A disk image resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "Textual description of the resource; provided by the client when the resource is created." + }, + "diskSnapshot": { + "type": "object", + "description": "Not yet implemented.", + "properties": { + "source": { + "type": "string", + "description": "URL of the disk snapshot.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#image" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "preferredKernel": { + "type": "string", + "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used." + }, + "rawDisk": { + "type": "object", + "description": "The raw disk image parameters.", + "properties": { + "containerType": { + "type": "string", + "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.", + "default": "TAR", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "sha1Checksum": { + "type": "string", + "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.", + "pattern": "[a-f0-9]{40}" + }, + "source": { + "type": "string", + "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceType": { + "type": "string", + "description": "Must be \"RAW\"; provided by the client when the disk image is created.", + "default": "RAW", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "ImageList": { + "id": "ImageList", + "type": "object", + "description": "Contains a list of disk image resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The disk image resources.", + "items": { + "$ref": "Image" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#imageList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "description": "An instance resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "disks": { + "type": "array", + "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.", + "items": { + "$ref": "AttachedDisk" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "image": { + "type": "string", + "description": "An optional URL of the disk image resource to be to be installed on this instance; provided by the client when the instance is created. If not specified, the server will choose a default image.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#instance" + }, + "machineType": { + "type": "string", + "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "metadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information." + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkInterfaces": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "NetworkInterface" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "serviceAccounts": { + "type": "array", + "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.", + "items": { + "$ref": "ServiceAccount" + } + }, + "status": { + "type": "string", + "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPED\", \"TERMINATED\", and \"STOPPING\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional, human-readable explanation of the status (output only)." + }, + "tags": { + "type": "array", + "description": "An optional set of tags applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client when the instance is created. Each tag must be 1-63 characters long, and comply with RFC1035.", + "items": { + "type": "string", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + } + }, + "zone": { + "type": "string", + "description": "URL of the zone resource describing where this instance should be hosted; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "InstanceList": { + "id": "InstanceList", + "type": "object", + "description": "Contains a list of instance resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "A list of instance resources.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Kernel": { + "id": "Kernel", + "type": "object", + "description": "A kernel resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#kernel" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "KernelList": { + "id": "KernelList", + "type": "object", + "description": "Contains a list of kernel resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The kernel resources.", + "items": { + "$ref": "Kernel" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#kernelList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineType": { + "id": "MachineType", + "type": "object", + "description": "A machine type resource.", + "properties": { + "availableZone": { + "type": "array", + "description": "The zones that this machine type can run in.", + "items": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "ephemeralDisks": { + "type": "array", + "description": "List of extended ephemeral disks assigned to the instance.", + "items": { + "type": "object", + "properties": { + "diskGb": { + "type": "integer", + "description": "Size of the ephemeral disk, defined in GB.", + "format": "int32" + } + } + } + }, + "guestCpus": { + "type": "integer", + "description": "Count of CPUs exposed to the instance.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "imageSpaceGb": { + "type": "integer", + "description": "Space allotted for the image, defined in GB.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineType" + }, + "maximumPersistentDisks": { + "type": "integer", + "description": "Maximum persistent disks allowed.", + "format": "int32" + }, + "maximumPersistentDisksSizeGb": { + "type": "string", + "description": "Maximum total persistent disks size (GB) allowed.", + "format": "int64" + }, + "memoryMb": { + "type": "integer", + "description": "Physical memory assigned to the instance, defined in MB.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "MachineTypeList": { + "id": "MachineTypeList", + "type": "object", + "description": "Contains a list of machine type resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The machine type resources.", + "items": { + "$ref": "MachineType" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "description": "A metadata key/value entry.", + "properties": { + "items": { + "type": "array", + "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.", + "pattern": "[a-zA-Z0-9-_]{1,128}", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + }, + "value": { + "type": "string", + "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 32768 bytes.", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + } + } + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#metadata" + } + } + }, + "Network": { + "id": "Network", + "type": "object", + "description": "A network resource.", + "properties": { + "IPv4Range": { + "type": "string", + "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "gatewayIPv4": { + "type": "string", + "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#network" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "NetworkInterface": { + "id": "NetworkInterface", + "type": "object", + "description": "A network interface resource attached to an instance.", + "properties": { + "accessConfigs": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "AccessConfig" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#networkInterface" + }, + "name": { + "type": "string", + "description": "Name of the resource, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)." + }, + "network": { + "type": "string", + "description": "URL of the network resource attached to this interface.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkIP": { + "type": "string", + "description": "An optional IPV4 internal network address to assign to this instance. If not specified, one will be assigned from the available range." + } + } + }, + "NetworkList": { + "id": "NetworkList", + "type": "object", + "description": "Contains a list of network resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The network resources.", + "items": { + "$ref": "Network" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#networkList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Operation": { + "id": "Operation", + "type": "object", + "description": "An operation resource, used to manage asynchronous API requests.", + "properties": { + "clientOperationId": { + "type": "string", + "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "endTime": { + "type": "string", + "description": "The time that this operation was completed. This is in RFC 3339 format (output only)." + }, + "error": { + "type": "object", + "description": "If errors occurred during processing of this operation, this field will be populated (output only).", + "properties": { + "errors": { + "type": "array", + "description": "The array of errors encountered while processing this operation.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error type identifier for this error." + }, + "location": { + "type": "string", + "description": "Indicates the field in the request which caused the error. This property is optional." + }, + "message": { + "type": "string", + "description": "An optional, human-readable error message." + } + } + } + } + } + }, + "httpErrorMessage": { + "type": "string", + "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)." + }, + "httpErrorStatusCode": { + "type": "integer", + "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "insertTime": { + "type": "string", + "description": "The time that this operation was requested. This is in RFC 3339 format (output only)." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#operation" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "operationType": { + "type": "string", + "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)." + }, + "progress": { + "type": "integer", + "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).", + "format": "int32" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional textual description of the current status of the operation (output only)." + }, + "targetId": { + "type": "string", + "description": "Unique target id which identifies a particular incarnation of the target (output only).", + "format": "uint64" + }, + "targetLink": { + "type": "string", + "description": "URL of the resource the operation is mutating (output only)." + }, + "user": { + "type": "string", + "description": "User who requested the operation, for example \"user@example.com\" (output only)." + } + } + }, + "OperationList": { + "id": "OperationList", + "type": "object", + "description": "Contains a list of operation resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The operation resources.", + "items": { + "$ref": "Operation" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project resource. Projects can be created only in the APIs Console. Unless marked otherwise, values can only be modified in the console.", + "properties": { + "commonInstanceMetadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs available to all instances contained in this project." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "externalIpAddresses": { + "type": "array", + "description": "Internet available IP addresses available for use in this project.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#project" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this project.", + "items": { + "type": "object", + "properties": { + "limit": { + "type": "number", + "description": "Quota limit for this metric.", + "format": "double" + }, + "metric": { + "type": "string", + "description": "Name of the quota metric." + }, + "usage": { + "type": "number", + "description": "Current usage of this metric.", + "format": "double" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "SerialPortOutput": { + "id": "SerialPortOutput", + "type": "object", + "description": "An instance serial console output.", + "properties": { + "contents": { + "type": "string", + "description": "The contents of the console output." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serialPortOutput" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource." + } + } + }, + "ServiceAccount": { + "id": "ServiceAccount", + "type": "object", + "description": "A service account.", + "properties": { + "email": { + "type": "string", + "description": "Email address of the service account." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serviceAccount" + }, + "scopes": { + "type": "array", + "description": "The list of scopes to be made available for this service account.", + "items": { + "type": "string" + } + } + } + }, + "Snapshot": { + "id": "Snapshot", + "type": "object", + "description": "A persistent disk snapshot resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "diskSizeGb": { + "type": "string", + "description": "Size of the persistent disk snapshot, specified in GB (output only).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#snapshot" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.snapshots.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceDisk": { + "type": "string", + "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created." + }, + "sourceDiskId": { + "type": "string", + "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name." + }, + "status": { + "type": "string", + "description": "The status of the persistent disk snapshot (output only)." + } + } + }, + "SnapshotList": { + "id": "SnapshotList", + "type": "object", + "description": "Contains a list of persistent disk snapshot resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent snapshot resources.", + "items": { + "$ref": "Snapshot" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#snapshotList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Zone": { + "id": "Zone", + "type": "object", + "description": "A zone resource.", + "properties": { + "availableMachineType": { + "type": "array", + "description": "The machine types that can be used in this zone (output only).", + "items": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#zone" + }, + "maintenanceWindows": { + "type": "array", + "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.", + "items": { + "type": "object", + "properties": { + "beginTime": { + "type": "string", + "description": "Begin time of the maintenance window, in RFC 3339 format." + }, + "description": { + "type": "string", + "description": "Textual description of the maintenance window." + }, + "endTime": { + "type": "string", + "description": "End time of the maintenance window, in RFC 3339 format." + }, + "name": { + "type": "string", + "description": "Name of the maintenance window." + } + } + } + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the zone. \"UP\" or \"DOWN\"." + } + } + }, + "ZoneList": { + "id": "ZoneList", + "type": "object", + "description": "Contains a list of zone resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The zone resources.", + "items": { + "$ref": "Zone" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#zoneList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + } + }, + "resources": { + "disks": { + "methods": { + "delete": { + "id": "compute.disks.delete", + "path": "{project}/disks/{disk}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "disk" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.disks.get", + "path": "{project}/disks/{disk}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "disk" + ], + "response": { + "$ref": "Disk" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.disks.insert", + "path": "{project}/disks", + "httpMethod": "POST", + "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Disk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.disks.list", + "path": "{project}/disks", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "DiskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "firewalls": { + "methods": { + "delete": { + "id": "compute.firewalls.delete", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "DELETE", + "description": "Deletes the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.firewalls.get", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "GET", + "description": "Returns the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Firewall" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.firewalls.insert", + "path": "{project}/firewalls", + "httpMethod": "POST", + "description": "Creates a firewall resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.firewalls.list", + "path": "{project}/firewalls", + "httpMethod": "GET", + "description": "Retrieves the list of firewall resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "FirewallList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.firewalls.patch", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "PATCH", + "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.firewalls.update", + "path": "{project}/firewalls/{firewall}", + "httpMethod": "PUT", + "description": "Updates the specified firewall resource with the data included in the request.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "images": { + "methods": { + "delete": { + "id": "compute.images.delete", + "path": "{project}/images/{image}", + "httpMethod": "DELETE", + "description": "Deletes the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.images.get", + "path": "{project}/images/{image}", + "httpMethod": "GET", + "description": "Returns the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.images.insert", + "path": "{project}/images", + "httpMethod": "POST", + "description": "Creates an image resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/devstorage.read_only" + ] + }, + "list": { + "id": "compute.images.list", + "path": "{project}/images", + "httpMethod": "GET", + "description": "Retrieves the list of image resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ImageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "instances": { + "methods": { + "addAccessConfig": { + "id": "compute.instances.addAccessConfig", + "path": "{project}/instances/{instance}/addAccessConfig", + "httpMethod": "POST", + "description": "Adds an access config to an instance's network interface.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "network_interface" + ], + "request": { + "$ref": "AccessConfig" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.instances.delete", + "path": "{project}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deleteAccessConfig": { + "id": "compute.instances.deleteAccessConfig", + "path": "{project}/instances/{instance}/deleteAccessConfig", + "httpMethod": "POST", + "description": "Deletes an access config from an instance's network interface.", + "parameters": { + "access_config": { + "type": "string", + "description": "Access config name.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "access_config", + "network_interface" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.instances.get", + "path": "{project}/instances/{instance}", + "httpMethod": "GET", + "description": "Returns the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "Instance" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getSerialPortOutput": { + "id": "compute.instances.getSerialPortOutput", + "path": "{project}/instances/{instance}/serialPort", + "httpMethod": "GET", + "description": "Returns the specified instance's serial port output.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "SerialPortOutput" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.instances.insert", + "path": "{project}/instances", + "httpMethod": "POST", + "description": "Creates an instance resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Instance" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.instances.list", + "path": "{project}/instances", + "httpMethod": "GET", + "description": "Retrieves the list of instance resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstanceList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "kernels": { + "methods": { + "get": { + "id": "compute.kernels.get", + "path": "{project}/kernels/{kernel}", + "httpMethod": "GET", + "description": "Returns the specified kernel resource.", + "parameters": { + "kernel": { + "type": "string", + "description": "Name of the kernel resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "kernel" + ], + "response": { + "$ref": "Kernel" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.kernels.list", + "path": "{project}/kernels", + "httpMethod": "GET", + "description": "Retrieves the list of kernel resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "KernelList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "machineTypes": { + "methods": { + "get": { + "id": "compute.machineTypes.get", + "path": "{project}/machineTypes/{machineType}", + "httpMethod": "GET", + "description": "Returns the specified machine type resource.", + "parameters": { + "machineType": { + "type": "string", + "description": "Name of the machine type resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "machineType" + ], + "response": { + "$ref": "MachineType" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.machineTypes.list", + "path": "{project}/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "MachineTypeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "networks": { + "methods": { + "delete": { + "id": "compute.networks.delete", + "path": "{project}/networks/{network}", + "httpMethod": "DELETE", + "description": "Deletes the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.networks.get", + "path": "{project}/networks/{network}", + "httpMethod": "GET", + "description": "Returns the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Network" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.networks.insert", + "path": "{project}/networks", + "httpMethod": "POST", + "description": "Creates a network resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Network" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.networks.list", + "path": "{project}/networks", + "httpMethod": "GET", + "description": "Retrieves the list of network resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "NetworkList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "operations": { + "methods": { + "delete": { + "id": "compute.operations.delete", + "path": "{project}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.operations.get", + "path": "{project}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.operations.list", + "path": "{project}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "compute.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Returns the specified project resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project resource to retrieve.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setCommonInstanceMetadata": { + "id": "compute.projects.setCommonInstanceMetadata", + "path": "{project}/setCommonInstanceMetadata", + "httpMethod": "POST", + "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "snapshots": { + "methods": { + "delete": { + "id": "compute.snapshots.delete", + "path": "{project}/snapshots/{snapshot}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.snapshots.get", + "path": "{project}/snapshots/{snapshot}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Snapshot" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.snapshots.insert", + "path": "{project}/snapshots", + "httpMethod": "POST", + "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Snapshot" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.snapshots.list", + "path": "{project}/snapshots", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "SnapshotList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zones": { + "methods": { + "get": { + "id": "compute.zones.get", + "path": "{project}/zones/{zone}", + "httpMethod": "GET", + "description": "Returns the specified zone resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "Zone" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zones.list", + "path": "{project}/zones", + "httpMethod": "GET", + "description": "Retrieves the list of zone resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ZoneList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-gen.go b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-gen.go new file mode 100644 index 0000000000000..13c16dd790e78 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta13/compute-gen.go @@ -0,0 +1,4553 @@ +// Package compute provides access to the Compute Engine API. +// +// See https://developers.google.com/compute/docs/reference/v1beta13 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/compute/v1beta13" +// ... +// computeService, err := compute.New(oauthHttpClient) +package compute + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New + +const apiId = "compute:v1beta13" +const apiName = "compute" +const apiVersion = "v1beta13" +const basePath = "https://www.googleapis.com/compute/v1beta13/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Compute Engine resources + ComputeScope = "https://www.googleapis.com/auth/compute" + + // View your Google Compute Engine resources + ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Disks = NewDisksService(s) + s.Firewalls = NewFirewallsService(s) + s.Images = NewImagesService(s) + s.Instances = NewInstancesService(s) + s.Kernels = NewKernelsService(s) + s.MachineTypes = NewMachineTypesService(s) + s.Networks = NewNetworksService(s) + s.Operations = NewOperationsService(s) + s.Projects = NewProjectsService(s) + s.Snapshots = NewSnapshotsService(s) + s.Zones = NewZonesService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Disks *DisksService + + Firewalls *FirewallsService + + Images *ImagesService + + Instances *InstancesService + + Kernels *KernelsService + + MachineTypes *MachineTypesService + + Networks *NetworksService + + Operations *OperationsService + + Projects *ProjectsService + + Snapshots *SnapshotsService + + Zones *ZonesService +} + +func NewDisksService(s *Service) *DisksService { + rs := &DisksService{s: s} + return rs +} + +type DisksService struct { + s *Service +} + +func NewFirewallsService(s *Service) *FirewallsService { + rs := &FirewallsService{s: s} + return rs +} + +type FirewallsService struct { + s *Service +} + +func NewImagesService(s *Service) *ImagesService { + rs := &ImagesService{s: s} + return rs +} + +type ImagesService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewKernelsService(s *Service) *KernelsService { + rs := &KernelsService{s: s} + return rs +} + +type KernelsService struct { + s *Service +} + +func NewMachineTypesService(s *Service) *MachineTypesService { + rs := &MachineTypesService{s: s} + return rs +} + +type MachineTypesService struct { + s *Service +} + +func NewNetworksService(s *Service) *NetworksService { + rs := &NetworksService{s: s} + return rs +} + +type NetworksService struct { + s *Service +} + +func NewOperationsService(s *Service) *OperationsService { + rs := &OperationsService{s: s} + return rs +} + +type OperationsService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewSnapshotsService(s *Service) *SnapshotsService { + rs := &SnapshotsService{s: s} + return rs +} + +type SnapshotsService struct { + s *Service +} + +func NewZonesService(s *Service) *ZonesService { + rs := &ZonesService{s: s} + return rs +} + +type ZonesService struct { + s *Service +} + +type AccessConfig struct { + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of this access configuration. + Name string `json:"name,omitempty"` + + // NatIP: An external IP address associated with this instance. Specify + // an unused static IP address available to the project. If not + // specified, the external IP will be drawn from a shared ephemeral + // pool. + NatIP string `json:"natIP,omitempty"` + + // Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This + // configures port-for-port NAT to the internet. + Type string `json:"type,omitempty"` +} + +type AttachedDisk struct { + // DeleteOnTerminate: Persistent disk only; If true, delete the disk and + // all its data when the associated instance is deleted. This property + // defaults to false if not specified. + DeleteOnTerminate bool `json:"deleteOnTerminate,omitempty"` + + // DeviceName: Persistent disk only; must be unique within the instance + // when specified. This represents a unique device name that is + // reflected into the /dev/ tree of a Linux operating system running + // within the instance. If not specified, a default will be chosen by + // the system. + DeviceName string `json:"deviceName,omitempty"` + + // Index: A zero-based index to assign to this disk, where 0 is reserved + // for the boot disk. If not specified, the server will choose an + // appropriate value. + Index int64 `json:"index,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Mode: The mode in which to attach this disk, either "READ_WRITE" or + // "READ_ONLY". + Mode string `json:"mode,omitempty"` + + // Source: Persistent disk only; the URL of the persistent disk + // resource. + Source string `json:"source,omitempty"` + + // Type: Type of the disk, either "EPHEMERAL" or "PERSISTENT". Note that + // persistent disks must be created before you can specify them here. + Type string `json:"type,omitempty"` +} + +type Disk struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Options: Internal use only. + Options string `json:"options,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SizeGb: Size of the persistent disk, specified in GB. + SizeGb int64 `json:"sizeGb,omitempty,string"` + + // SourceSnapshot: The source snapshot used to create this disk. Once + // the source snapshot has been deleted from the system, this field will + // be cleared, and will not be set even if a snapshot with the same name + // has been re-created. + SourceSnapshot string `json:"sourceSnapshot,omitempty"` + + // SourceSnapshotId: The 'id' value of the snapshot used to create this + // disk. This value may be used to determine whether the disk was + // created from the current or a previous instance of a given disk + // snapshot. + SourceSnapshotId string `json:"sourceSnapshotId,omitempty"` + + // Status: The status of disk creation (output only). + Status string `json:"status,omitempty"` + + // Zone: URL for the zone where the persistent disk resides; provided by + // the client when the disk is created. A persistent disk must reside in + // the same zone as the instance to which it is attached. + Zone string `json:"zone,omitempty"` +} + +type DiskList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent disk resources. + Items []*Disk `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Firewall struct { + // Allowed: The list of rules specified by this firewall. Each rule + // specifies a protocol and port-range tuple that describes a permitted + // connection. + Allowed []*FirewallAllowed `json:"allowed,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this firewall is applied; + // provided by the client when the firewall is created. + Network string `json:"network,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceRanges: A list of IP address blocks expressed in CIDR format + // which this rule applies to. One or both of sourceRanges and + // sourceTags may be set; an inbound connection is allowed if either the + // range or the tag of the source matches. + SourceRanges []string `json:"sourceRanges,omitempty"` + + // SourceTags: A list of instance tags which this rule applies to. One + // or both of sourceRanges and sourceTags may be set; an inbound + // connection is allowed if either the range or the tag of the source + // matches. + SourceTags []string `json:"sourceTags,omitempty"` + + // TargetTags: A list of instance tags indicating sets of instances + // located on network which may make network connections as specified in + // allowed. If no targetTags are specified, the firewall rule applies to + // all instances on the specified network. + TargetTags []string `json:"targetTags,omitempty"` +} + +type FirewallAllowed struct { + // IPProtocol: Required; this is the IP protocol that is allowed for + // this rule. This can either be a well known protocol string (tcp, udp + // or icmp) or the IP protocol number. + IPProtocol string `json:"IPProtocol,omitempty"` + + // Ports: An optional list of ports which are allowed. It is an error to + // specify this for any protocol that isn't UDP or TCP. Each entry must + // be either an integer or a range. If not specified, connections + // through any port are allowed. + // Example inputs include: ["22"], + // ["80,"443"] and ["12345-12349"]. + Ports []string `json:"ports,omitempty"` +} + +type FirewallList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The firewall resources. + Items []*Firewall `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Image struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: Textual description of the resource; provided by the + // client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSnapshot: Not yet implemented. + DiskSnapshot *ImageDiskSnapshot `json:"diskSnapshot,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PreferredKernel: An optional URL of the preferred kernel for use with + // this disk image. If not specified, a server defined default kernel + // will be used. + PreferredKernel string `json:"preferredKernel,omitempty"` + + // RawDisk: The raw disk image parameters. + RawDisk *ImageRawDisk `json:"rawDisk,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceType: Must be "RAW"; provided by the client when the disk image + // is created. + SourceType string `json:"sourceType,omitempty"` +} + +type ImageDiskSnapshot struct { + // Source: URL of the disk snapshot. + Source string `json:"source,omitempty"` +} + +type ImageRawDisk struct { + // ContainerType: The format used to encode and transmit the block + // device. Should be TAR. This is just a container and transmission + // format and not a runtime format. Provided by the client when the disk + // image is created. + ContainerType string `json:"containerType,omitempty"` + + // Sha1Checksum: An optional SHA1 checksum of the disk image before + // unpackaging; provided by the client when the disk image is created. + Sha1Checksum string `json:"sha1Checksum,omitempty"` + + // Source: The full Google Cloud Storage URL where the disk image is + // stored; provided by the client when the disk image is created. + Source string `json:"source,omitempty"` +} + +type ImageList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The disk image resources. + Items []*Image `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Instance struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Disks: Array of disks associated with this instance. Persistent disks + // must be created before you can assign them. + Disks []*AttachedDisk `json:"disks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Image: An optional URL of the disk image resource to be to be + // installed on this instance; provided by the client when the instance + // is created. If not specified, the server will choose a default image. + Image string `json:"image,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MachineType: URL of the machine type resource describing which + // machine type to use to host the instance; provided by the client when + // the instance is created. + MachineType string `json:"machineType,omitempty"` + + // Metadata: Metadata key/value pairs assigned to this instance. + // Consists of custom metadata or predefined keys; see Instance + // documentation for more information. + Metadata *Metadata `json:"metadata,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // NetworkInterfaces: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // ServiceAccounts: A list of service accounts each with specified + // scopes, for which access tokens are to be made available to the + // instance through metadata queries. + ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"` + + // Status: Instance status. One of the following values: "PROVISIONING", + // "STAGING", "RUNNING", "STOPPED", "TERMINATED", and "STOPPING" (output + // only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional, human-readable explanation of the status + // (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // Tags: An optional set of tags applied to this instance. Used to + // identify valid sources or targets for network firewalls. Provided by + // the client when the instance is created. Each tag must be 1-63 + // characters long, and comply with RFC1035. + Tags []string `json:"tags,omitempty"` + + // Zone: URL of the zone resource describing where this instance should + // be hosted; provided by the client when the instance is created. + Zone string `json:"zone,omitempty"` +} + +type InstanceList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A list of instance resources. + Items []*Instance `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Kernel struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type KernelList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The kernel resources. + Items []*Kernel `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineType struct { + // AvailableZone: The zones that this machine type can run in. + AvailableZone []string `json:"availableZone,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // EphemeralDisks: List of extended ephemeral disks assigned to the + // instance. + EphemeralDisks []*MachineTypeEphemeralDisks `json:"ephemeralDisks,omitempty"` + + // GuestCpus: Count of CPUs exposed to the instance. + GuestCpus int64 `json:"guestCpus,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // ImageSpaceGb: Space allotted for the image, defined in GB. + ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaximumPersistentDisks: Maximum persistent disks allowed. + MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"` + + // MaximumPersistentDisksSizeGb: Maximum total persistent disks size + // (GB) allowed. + MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"` + + // MemoryMb: Physical memory assigned to the instance, defined in MB. + MemoryMb int64 `json:"memoryMb,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypeEphemeralDisks struct { + // DiskGb: Size of the ephemeral disk, defined in GB. + DiskGb int64 `json:"diskGb,omitempty"` +} + +type MachineTypeList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The machine type resources. + Items []*MachineType `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Metadata struct { + // Items: Array of key/value pairs. The total size of all keys and + // values must be less than 512 KB. + Items []*MetadataItems `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` +} + +type MetadataItems struct { + // Key: Key for the metadata entry. Keys must conform to the following + // regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is + // reflected as part of a URL in the metadata server. Additionally, to + // avoid ambiguity, keys must not conflict with any other metadata keys + // for the project. + Key string `json:"key,omitempty"` + + // Value: Value for the metadata entry. These are free-form strings, and + // only have meaning as interpreted by the image running in the + // instance. The only restriction placed on values is that their size + // must be less than or equal to 32768 bytes. + Value string `json:"value,omitempty"` +} + +type Network struct { + // IPv4Range: Required; The range of internal addresses that are legal + // on this network. This range is a CIDR specification, for example: + // 192.168.0.0/16. Provided by the client when the network is created. + IPv4Range string `json:"IPv4Range,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // GatewayIPv4: An optional address that is used for default routing to + // other networks. This must be within the range specified by IPv4Range, + // and is typically the first usable address in that range. If not + // specified, the default value is the first usable address in + // IPv4Range. + GatewayIPv4 string `json:"gatewayIPv4,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type NetworkInterface struct { + // AccessConfigs: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource, determined by the server; for network + // devices, these are e.g. eth0, eth1, etc. (output only). + Name string `json:"name,omitempty"` + + // Network: URL of the network resource attached to this interface. + Network string `json:"network,omitempty"` + + // NetworkIP: An optional IPV4 internal network address to assign to + // this instance. If not specified, one will be assigned from the + // available range. + NetworkIP string `json:"networkIP,omitempty"` +} + +type NetworkList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The network resources. + Items []*Network `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Operation struct { + // ClientOperationId: An optional identifier specified by the client + // when the mutation was initiated. Must be unique for all operation + // resources in the project (output only). + ClientOperationId string `json:"clientOperationId,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // EndTime: The time that this operation was completed. This is in RFC + // 3339 format (output only). + EndTime string `json:"endTime,omitempty"` + + // Error: If errors occurred during processing of this operation, this + // field will be populated (output only). + Error *OperationError `json:"error,omitempty"` + + // HttpErrorMessage: If operation fails, the HTTP error message + // returned, e.g. NOT FOUND. (output only). + HttpErrorMessage string `json:"httpErrorMessage,omitempty"` + + // HttpErrorStatusCode: If operation fails, the HTTP error status code + // returned, e.g. 404. (output only). + HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // InsertTime: The time that this operation was requested. This is in + // RFC 3339 format (output only). + InsertTime string `json:"insertTime,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // OperationType: Type of the operation. Examples include "insert", + // "update", and "delete" (output only). + OperationType string `json:"operationType,omitempty"` + + // Progress: An optional progress indicator that ranges from 0 to 100. + // There is no requirement that this be linear or support any + // granularity of operations. This should not be used to guess at when + // the operation will be complete. This number should be monotonically + // increasing as the operation progresses (output only). + Progress int64 `json:"progress,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC 3339 format (output only). + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING", "RUNNING", or "DONE" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional textual description of the current status + // of the operation (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // TargetId: Unique target id which identifies a particular incarnation + // of the target (output only). + TargetId uint64 `json:"targetId,omitempty,string"` + + // TargetLink: URL of the resource the operation is mutating (output + // only). + TargetLink string `json:"targetLink,omitempty"` + + // User: User who requested the operation, for example + // "user@example.com" (output only). + User string `json:"user,omitempty"` +} + +type OperationError struct { + // Errors: The array of errors encountered while processing this + // operation. + Errors []*OperationErrorErrors `json:"errors,omitempty"` +} + +type OperationErrorErrors struct { + // Code: The error type identifier for this error. + Code string `json:"code,omitempty"` + + // Location: Indicates the field in the request which caused the error. + // This property is optional. + Location string `json:"location,omitempty"` + + // Message: An optional, human-readable error message. + Message string `json:"message,omitempty"` +} + +type OperationList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The operation resources. + Items []*Operation `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Project struct { + // CommonInstanceMetadata: Metadata key/value pairs available to all + // instances contained in this project. + CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // ExternalIpAddresses: Internet available IP addresses available for + // use in this project. + ExternalIpAddresses []string `json:"externalIpAddresses,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this project. + Quotas []*ProjectQuotas `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ProjectQuotas struct { + // Limit: Quota limit for this metric. + Limit float64 `json:"limit,omitempty"` + + // Metric: Name of the quota metric. + Metric string `json:"metric,omitempty"` + + // Usage: Current usage of this metric. + Usage float64 `json:"usage,omitempty"` +} + +type SerialPortOutput struct { + // Contents: The contents of the console output. + Contents string `json:"contents,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // SelfLink: Server defined URL for the resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type ServiceAccount struct { + // Email: Email address of the service account. + Email string `json:"email,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Scopes: The list of scopes to be made available for this service + // account. + Scopes []string `json:"scopes,omitempty"` +} + +type Snapshot struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSizeGb: Size of the persistent disk snapshot, specified in GB + // (output only). + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceDisk: The source disk used to create this snapshot. Once the + // source disk has been deleted from the system, this field will be + // cleared, and will not be set even if a disk with the same name has + // been re-created. + SourceDisk string `json:"sourceDisk,omitempty"` + + // SourceDiskId: The 'id' value of the disk used to create this + // snapshot. This value may be used to determine whether the snapshot + // was taken from the current or a previous instance of a given disk + // name. + SourceDiskId string `json:"sourceDiskId,omitempty"` + + // Status: The status of the persistent disk snapshot (output only). + Status string `json:"status,omitempty"` +} + +type SnapshotList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent snapshot resources. + Items []*Snapshot `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Zone struct { + // AvailableMachineType: The machine types that can be used in this zone + // (output only). + AvailableMachineType []string `json:"availableMachineType,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaintenanceWindows: Scheduled maintenance windows for the zone. When + // the zone is in a maintenance window, all resources which reside in + // the zone will be unavailable. + MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the zone. "UP" or "DOWN". + Status string `json:"status,omitempty"` +} + +type ZoneMaintenanceWindows struct { + // BeginTime: Begin time of the maintenance window, in RFC 3339 format. + BeginTime string `json:"beginTime,omitempty"` + + // Description: Textual description of the maintenance window. + Description string `json:"description,omitempty"` + + // EndTime: End time of the maintenance window, in RFC 3339 format. + EndTime string `json:"endTime,omitempty"` + + // Name: Name of the maintenance window. + Name string `json:"name,omitempty"` +} + +type ZoneList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The zone resources. + Items []*Zone `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +// method id "compute.disks.delete": + +type DisksDeleteCall struct { + s *Service + project string + disk string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk resource. +func (r *DisksService) Delete(project string, disk string) *DisksDeleteCall { + c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/disks/{disk}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{disk}", cleanPathString(c.disk), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk resource.", + // "httpMethod": "DELETE", + // "id": "compute.disks.delete", + // "parameterOrder": [ + // "project", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks/{disk}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.get": + +type DisksGetCall struct { + s *Service + project string + disk string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk resource. +func (r *DisksService) Get(project string, disk string) *DisksGetCall { + c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksGetCall) Do() (*Disk, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/disks/{disk}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{disk}", cleanPathString(c.disk), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Disk) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk resource.", + // "httpMethod": "GET", + // "id": "compute.disks.get", + // "parameterOrder": [ + // "project", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks/{disk}", + // "response": { + // "$ref": "Disk" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.insert": + +type DisksInsertCall struct { + s *Service + project string + disk *Disk + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk resource in the specified project +// using the data included in the request. +func (r *DisksService) Insert(project string, disk *Disk) *DisksInsertCall { + c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.disk = disk + return c +} + +func (c *DisksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/disks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.disks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks", + // "request": { + // "$ref": "Disk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.list": + +type DisksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk resources contained +// within the specified project. +func (r *DisksService) List(project string) *DisksListCall { + c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksListCall) Filter(filter string) *DisksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksListCall) PageToken(pageToken string) *DisksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksListCall) Do() (*DiskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/disks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.disks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/disks", + // "response": { + // "$ref": "DiskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.delete": + +type FirewallsDeleteCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified firewall resource. +func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall { + c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified firewall resource.", + // "httpMethod": "DELETE", + // "id": "compute.firewalls.delete", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.get": + +type FirewallsGetCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Get: Returns the specified firewall resource. +func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall { + c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsGetCall) Do() (*Firewall, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Firewall) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified firewall resource.", + // "httpMethod": "GET", + // "id": "compute.firewalls.get", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "response": { + // "$ref": "Firewall" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.insert": + +type FirewallsInsertCall struct { + s *Service + project string + firewall *Firewall + opt_ map[string]interface{} +} + +// Insert: Creates a firewall resource in the specified project using +// the data included in the request. +func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall { + c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a firewall resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.firewalls.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.list": + +type FirewallsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of firewall resources available to the +// specified project. +func (r *FirewallsService) List(project string) *FirewallsListCall { + c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *FirewallsListCall) Do() (*FirewallList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FirewallList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of firewall resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.firewalls.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls", + // "response": { + // "$ref": "FirewallList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.patch": + +type FirewallsPatchCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Patch: Updates the specified firewall resource with the data included +// in the request. This method supports patch semantics. +func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall { + c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.firewalls.patch", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.update": + +type FirewallsUpdateCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Update: Updates the specified firewall resource with the data +// included in the request. +func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall { + c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/firewalls/{firewall}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{firewall}", cleanPathString(c.firewall), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.firewalls.update", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.delete": + +type ImagesDeleteCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified image resource. +func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall { + c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/images/{image}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{image}", cleanPathString(c.image), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified image resource.", + // "httpMethod": "DELETE", + // "id": "compute.images.delete", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images/{image}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.get": + +type ImagesGetCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Get: Returns the specified image resource. +func (r *ImagesService) Get(project string, image string) *ImagesGetCall { + c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/images/{image}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{image}", cleanPathString(c.image), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified image resource.", + // "httpMethod": "GET", + // "id": "compute.images.get", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images/{image}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.insert": + +type ImagesInsertCall struct { + s *Service + project string + image *Image + opt_ map[string]interface{} +} + +// Insert: Creates an image resource in the specified project using the +// data included in the request. +func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall { + c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/images") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an image resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.images.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/devstorage.read_only" + // ] + // } + +} + +// method id "compute.images.list": + +type ImagesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of image resources available to the +// specified project. +func (r *ImagesService) List(project string) *ImagesListCall { + c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ImagesListCall) Filter(filter string) *ImagesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ImagesListCall) Do() (*ImageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/images") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ImageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of image resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.images.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/images", + // "response": { + // "$ref": "ImageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.addAccessConfig": + +type InstancesAddAccessConfigCall struct { + s *Service + project string + instance string + network_interface string + accessconfig *AccessConfig + opt_ map[string]interface{} +} + +// AddAccessConfig: Adds an access config to an instance's network +// interface. +func (r *InstancesService) AddAccessConfig(project string, instance string, network_interface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall { + c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.network_interface = network_interface + c.accessconfig = accessconfig + return c +} + +func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances/{instance}/addAccessConfig") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an access config to an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.addAccessConfig", + // "parameterOrder": [ + // "project", + // "instance", + // "network_interface" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}/addAccessConfig", + // "request": { + // "$ref": "AccessConfig" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified instance resource. +func (r *InstancesService) Delete(project string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances/{instance}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified instance resource.", + // "httpMethod": "DELETE", + // "id": "compute.instances.delete", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.deleteAccessConfig": + +type InstancesDeleteAccessConfigCall struct { + s *Service + project string + instance string + access_config string + network_interface string + opt_ map[string]interface{} +} + +// DeleteAccessConfig: Deletes an access config from an instance's +// network interface. +func (r *InstancesService) DeleteAccessConfig(project string, instance string, access_config string, network_interface string) *InstancesDeleteAccessConfigCall { + c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.access_config = access_config + c.network_interface = network_interface + return c +} + +func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("access_config", fmt.Sprintf("%v", c.access_config)) + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances/{instance}/deleteAccessConfig") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes an access config from an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.deleteAccessConfig", + // "parameterOrder": [ + // "project", + // "instance", + // "access_config", + // "network_interface" + // ], + // "parameters": { + // "access_config": { + // "description": "Access config name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}/deleteAccessConfig", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.get": + +type InstancesGetCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Get: Returns the specified instance resource. +func (r *InstancesService) Get(project string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*Instance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances/{instance}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Instance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance resource.", + // "httpMethod": "GET", + // "id": "compute.instances.get", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}", + // "response": { + // "$ref": "Instance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.getSerialPortOutput": + +type InstancesGetSerialPortOutputCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// GetSerialPortOutput: Returns the specified instance's serial port +// output. +func (r *InstancesService) GetSerialPortOutput(project string, instance string) *InstancesGetSerialPortOutputCall { + c := &InstancesGetSerialPortOutputCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesGetSerialPortOutputCall) Do() (*SerialPortOutput, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances/{instance}/serialPort") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{instance}", cleanPathString(c.instance), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SerialPortOutput) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance's serial port output.", + // "httpMethod": "GET", + // "id": "compute.instances.getSerialPortOutput", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances/{instance}/serialPort", + // "response": { + // "$ref": "SerialPortOutput" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + instance *Instance + opt_ map[string]interface{} +} + +// Insert: Creates an instance resource in the specified project using +// the data included in the request. +func (r *InstancesService) Insert(project string, instance *Instance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an instance resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances", + // "request": { + // "$ref": "Instance" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.list": + +type InstancesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of instance resources contained within the +// specified project. +func (r *InstancesService) List(project string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesListCall) Filter(filter string) *InstancesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstanceList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/instances") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of instance resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.instances.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/instances", + // "response": { + // "$ref": "InstanceList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.get": + +type KernelsGetCall struct { + s *Service + project string + kernel string + opt_ map[string]interface{} +} + +// Get: Returns the specified kernel resource. +func (r *KernelsService) Get(project string, kernel string) *KernelsGetCall { + c := &KernelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.kernel = kernel + return c +} + +func (c *KernelsGetCall) Do() (*Kernel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/kernels/{kernel}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{kernel}", cleanPathString(c.kernel), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Kernel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified kernel resource.", + // "httpMethod": "GET", + // "id": "compute.kernels.get", + // "parameterOrder": [ + // "project", + // "kernel" + // ], + // "parameters": { + // "kernel": { + // "description": "Name of the kernel resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/kernels/{kernel}", + // "response": { + // "$ref": "Kernel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.list": + +type KernelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of kernel resources available to the +// specified project. +func (r *KernelsService) List(project string) *KernelsListCall { + c := &KernelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *KernelsListCall) Filter(filter string) *KernelsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *KernelsListCall) PageToken(pageToken string) *KernelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *KernelsListCall) Do() (*KernelList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/kernels") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(KernelList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of kernel resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.kernels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/kernels", + // "response": { + // "$ref": "KernelList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.get": + +type MachineTypesGetCall struct { + s *Service + project string + machineType string + opt_ map[string]interface{} +} + +// Get: Returns the specified machine type resource. +func (r *MachineTypesService) Get(project string, machineType string) *MachineTypesGetCall { + c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.machineType = machineType + return c +} + +func (c *MachineTypesGetCall) Do() (*MachineType, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/machineTypes/{machineType}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{machineType}", cleanPathString(c.machineType), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineType) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified machine type resource.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.get", + // "parameterOrder": [ + // "project", + // "machineType" + // ], + // "parameters": { + // "machineType": { + // "description": "Name of the machine type resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/machineTypes/{machineType}", + // "response": { + // "$ref": "MachineType" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.list": + +type MachineTypesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of machine type resources available to the +// specified project. +func (r *MachineTypesService) List(project string) *MachineTypesListCall { + c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesListCall) Do() (*MachineTypeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/machineTypes") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/machineTypes", + // "response": { + // "$ref": "MachineTypeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.delete": + +type NetworksDeleteCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified network resource. +func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall { + c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/networks/{network}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{network}", cleanPathString(c.network), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified network resource.", + // "httpMethod": "DELETE", + // "id": "compute.networks.delete", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks/{network}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.get": + +type NetworksGetCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Get: Returns the specified network resource. +func (r *NetworksService) Get(project string, network string) *NetworksGetCall { + c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksGetCall) Do() (*Network, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/networks/{network}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{network}", cleanPathString(c.network), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Network) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified network resource.", + // "httpMethod": "GET", + // "id": "compute.networks.get", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks/{network}", + // "response": { + // "$ref": "Network" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.insert": + +type NetworksInsertCall struct { + s *Service + project string + network *Network + opt_ map[string]interface{} +} + +// Insert: Creates a network resource in the specified project using the +// data included in the request. +func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall { + c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.network) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/networks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a network resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.networks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks", + // "request": { + // "$ref": "Network" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.list": + +type NetworksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of network resources available to the +// specified project. +func (r *NetworksService) List(project string) *NetworksListCall { + c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *NetworksListCall) Filter(filter string) *NetworksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NetworksListCall) Do() (*NetworkList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/networks") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(NetworkList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of network resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.networks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/networks", + // "response": { + // "$ref": "NetworkList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.operations.delete": + +type OperationsDeleteCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified operation resource. +func (r *OperationsService) Delete(project string, operation string) *OperationsDeleteCall { + c := &OperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *OperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/operations/{operation}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{operation}", cleanPathString(c.operation), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.operations.delete", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.operations.get": + +type OperationsGetCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified operation resource. +func (r *OperationsService) Get(project string, operation string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *OperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/operations/{operation}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{operation}", cleanPathString(c.operation), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified operation resource.", + // "httpMethod": "GET", + // "id": "compute.operations.get", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.operations.list": + +type OperationsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified project. +func (r *OperationsService) List(project string) *OperationsListCall { + c := &OperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *OperationsListCall) Filter(filter string) *OperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *OperationsListCall) MaxResults(maxResults int64) *OperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *OperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/operations") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.operations.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Returns the specified project resource. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified project resource.", + // "httpMethod": "GET", + // "id": "compute.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project resource to retrieve.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.setCommonInstanceMetadata": + +type ProjectsSetCommonInstanceMetadataCall struct { + s *Service + project string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetCommonInstanceMetadata: Sets metadata common to all instances +// within the specified project using the data included in the request. +func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall { + c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.metadata = metadata + return c +} + +func (c *ProjectsSetCommonInstanceMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/setCommonInstanceMetadata") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.projects.setCommonInstanceMetadata", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/setCommonInstanceMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.delete": + +type SnapshotsDeleteCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk snapshot resource. +func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall { + c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/snapshots/{snapshot}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{snapshot}", cleanPathString(c.snapshot), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk snapshot resource.", + // "httpMethod": "DELETE", + // "id": "compute.snapshots.delete", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots/{snapshot}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.get": + +type SnapshotsGetCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk snapshot resource. +func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall { + c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsGetCall) Do() (*Snapshot, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/snapshots/{snapshot}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{snapshot}", cleanPathString(c.snapshot), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Snapshot) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk snapshot resource.", + // "httpMethod": "GET", + // "id": "compute.snapshots.get", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots/{snapshot}", + // "response": { + // "$ref": "Snapshot" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.insert": + +type SnapshotsInsertCall struct { + s *Service + project string + snapshot *Snapshot + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk snapshot resource in the specified +// project using the data included in the request. +func (r *SnapshotsService) Insert(project string, snapshot *Snapshot) *SnapshotsInsertCall { + c := &SnapshotsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/snapshots") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.snapshots.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots", + // "request": { + // "$ref": "Snapshot" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.list": + +type SnapshotsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk snapshot resources +// contained within the specified project. +func (r *SnapshotsService) List(project string) *SnapshotsListCall { + c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SnapshotsListCall) Do() (*SnapshotList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/snapshots") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SnapshotList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.snapshots.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/snapshots", + // "response": { + // "$ref": "SnapshotList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.get": + +type ZonesGetCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// Get: Returns the specified zone resource. +func (r *ZonesService) Get(project string, zone string) *ZonesGetCall { + c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +func (c *ZonesGetCall) Do() (*Zone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/zones/{zone}") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls = strings.Replace(urls, "{zone}", cleanPathString(c.zone), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Zone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified zone resource.", + // "httpMethod": "GET", + // "id": "compute.zones.get", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}", + // "response": { + // "$ref": "Zone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.list": + +type ZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of zone resources available to the specified +// project. +func (r *ZonesService) List(project string) *ZonesListCall { + c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZonesListCall) Filter(filter string) *ZonesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZonesListCall) Do() (*ZoneList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta13/projects/", "{project}/zones") + urls = strings.Replace(urls, "{project}", cleanPathString(c.project), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ZoneList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of zone resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.zones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones", + // "response": { + // "$ref": "ZoneList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +func cleanPathString(s string) string { + return strings.Map(func(r rune) rune { + if r >= 0x2d && r <= 0x7a || r == '~' { + return r + } + return -1 + }, s) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-api.json b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-api.json new file mode 100644 index 0000000000000..bb6bfe6f0b559 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-api.json @@ -0,0 +1,3696 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"wtgj9ZncHCe-ShJM8RewHb1DgWI/rrS0bXxeuc6ZnqrHW5G1FQX-ifQ\"", + "discoveryVersion": "v1", + "id": "compute:v1beta14", + "name": "compute", + "version": "v1beta14", + "revision": "20130525", + "title": "Compute Engine API", + "description": "API for the Google Compute Engine service.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/compute_engine-16.png", + "x32": "http://www.google.com/images/icons/product/compute_engine-32.png" + }, + "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta14", + "labels": [ + "deprecated" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/compute/v1beta14/projects/", + "basePath": "/compute/v1beta14/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "compute/v1beta14/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/compute": { + "description": "View and manage your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/compute.readonly": { + "description": "View your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "AccessConfig": { + "id": "AccessConfig", + "type": "object", + "description": "An access configuration attached to an instance's network interface.", + "properties": { + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#accessConfig" + }, + "name": { + "type": "string", + "description": "Name of this access configuration." + }, + "natIP": { + "type": "string", + "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If not specified, the external IP will be drawn from a shared ephemeral pool." + }, + "type": { + "type": "string", + "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.", + "default": "ONE_TO_ONE_NAT" + } + } + }, + "AttachedDisk": { + "id": "AttachedDisk", + "type": "object", + "description": "An instance-attached disk resource.", + "properties": { + "boot": { + "type": "boolean", + "description": "Indicates that this is a boot disk. VM will use the first partition of the disk for its root filesystem." + }, + "deviceName": { + "type": "string", + "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system." + }, + "index": { + "type": "integer", + "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#attachedDisk" + }, + "mode": { + "type": "string", + "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\"." + }, + "source": { + "type": "string", + "description": "Persistent disk only; the URL of the persistent disk resource." + }, + "type": { + "type": "string", + "description": "Type of the disk, either \"EPHEMERAL\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "DeprecationStatus": { + "id": "DeprecationStatus", + "type": "object", + "description": "Deprecation status for a public resource.", + "properties": { + "deleted": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED." + }, + "deprecated": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED." + }, + "obsolete": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE." + }, + "replacement": { + "type": "string", + "description": "A URL of the suggested replacement for the deprecated resource. The deprecated resource and its replacement must be resources of the same kind." + }, + "state": { + "type": "string", + "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error." + } + } + }, + "Disk": { + "id": "Disk", + "type": "object", + "description": "A persistent disk resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#disk" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "options": { + "type": "string", + "description": "Internal use only." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sizeGb": { + "type": "string", + "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.", + "format": "int64" + }, + "sourceSnapshot": { + "type": "string", + "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created." + }, + "sourceSnapshotId": { + "type": "string", + "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot." + }, + "status": { + "type": "string", + "description": "The status of disk creation (output only)." + }, + "zone": { + "type": "string", + "description": "URL of the zone where the disk resides (output only)." + } + } + }, + "DiskList": { + "id": "DiskList", + "type": "object", + "description": "Contains a list of persistent disk resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent disk resources.", + "items": { + "$ref": "Disk" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Firewall": { + "id": "Firewall", + "type": "object", + "description": "A firewall resource.", + "properties": { + "allowed": { + "type": "array", + "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.", + "items": { + "type": "object", + "properties": { + "IPProtocol": { + "type": "string", + "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number." + }, + "ports": { + "type": "array", + "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\n\nExample inputs include: [\"22\"], [\"80\",\"443\"] and [\"12345-12349\"].", + "items": { + "type": "string" + } + } + } + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#firewall" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceRanges": { + "type": "array", + "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "sourceTags": { + "type": "array", + "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "targetTags": { + "type": "array", + "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.", + "items": { + "type": "string" + } + } + } + }, + "FirewallList": { + "id": "FirewallList", + "type": "object", + "description": "Contains a list of firewall resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The firewall resources.", + "items": { + "$ref": "Firewall" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#firewallList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "description": "A disk image resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this image." + }, + "description": { + "type": "string", + "description": "Textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#image" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "preferredKernel": { + "type": "string", + "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "rawDisk": { + "type": "object", + "description": "The raw disk image parameters.", + "properties": { + "containerType": { + "type": "string", + "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.", + "default": "TAR" + }, + "sha1Checksum": { + "type": "string", + "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.", + "pattern": "[a-f0-9]{40}" + }, + "source": { + "type": "string", + "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceType": { + "type": "string", + "description": "Must be \"RAW\"; provided by the client when the disk image is created.", + "default": "RAW", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "ImageList": { + "id": "ImageList", + "type": "object", + "description": "Contains a list of disk image resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The disk image resources.", + "items": { + "$ref": "Image" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#imageList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "description": "An instance resource.", + "properties": { + "canIpForward": { + "type": "boolean", + "description": "Allows this instance to send packets with source IP addresses other than its own and receive packets with destination IP addresses other than its own. If this instance will be used as an IP gateway or it will be set as the next-hop in a Route resource, say true. If unsure, leave this set to false." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "disks": { + "type": "array", + "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.", + "items": { + "$ref": "AttachedDisk" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "image": { + "type": "string", + "description": "An optional URL of the disk image resource to be installed on this instance; provided by the client when the instance is created. Alternatively to passing the image, the client may choose to boot from a persistent disk, by setting boot=true flag on one of the entries in disks[] collection." + }, + "kernel": { + "type": "string", + "description": "URL of the kernel resource to use when booting. In case of booting from persistent disk, this parameter is required. When booting from a disk image, it is optional, but may be provided to use a different kernel than the one associated with the image." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#instance" + }, + "machineType": { + "type": "string", + "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "metadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information." + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkInterfaces": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "NetworkInterface" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + }, + "serviceAccounts": { + "type": "array", + "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.", + "items": { + "$ref": "ServiceAccount" + } + }, + "status": { + "type": "string", + "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional, human-readable explanation of the status (output only)." + }, + "tags": { + "$ref": "Tags", + "description": "A list of tags to be applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client on instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035." + }, + "zone": { + "type": "string", + "description": "URL of the zone where the instance resides (output only)." + } + } + }, + "InstanceList": { + "id": "InstanceList", + "type": "object", + "description": "Contains a list of instance resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "A list of instance resources.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Kernel": { + "id": "Kernel", + "type": "object", + "description": "A kernel resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this kernel." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#kernel" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "KernelList": { + "id": "KernelList", + "type": "object", + "description": "Contains a list of kernel resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The kernel resources.", + "items": { + "$ref": "Kernel" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#kernelList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineType": { + "id": "MachineType", + "type": "object", + "description": "A machine type resource.", + "properties": { + "availableZone": { + "type": "array", + "description": "The zones that this machine type can run in.", + "items": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this machine type." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "ephemeralDisks": { + "type": "array", + "description": "List of extended ephemeral disks assigned to the instance.", + "items": { + "type": "object", + "properties": { + "diskGb": { + "type": "integer", + "description": "Size of the ephemeral disk, defined in GB.", + "format": "int32" + } + } + } + }, + "guestCpus": { + "type": "integer", + "description": "Count of CPUs exposed to the instance.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "imageSpaceGb": { + "type": "integer", + "description": "Space allotted for the image, defined in GB.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineType" + }, + "maximumPersistentDisks": { + "type": "integer", + "description": "Maximum persistent disks allowed.", + "format": "int32" + }, + "maximumPersistentDisksSizeGb": { + "type": "string", + "description": "Maximum total persistent disks size (GB) allowed.", + "format": "int64" + }, + "memoryMb": { + "type": "integer", + "description": "Physical memory assigned to the instance, defined in MB.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "MachineTypeList": { + "id": "MachineTypeList", + "type": "object", + "description": "Contains a list of machine type resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The machine type resources.", + "items": { + "$ref": "MachineType" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineTypeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "description": "A metadata key/value entry.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the metadata's contents. This field is used for optimistic locking. An up-to-date metadata fingerprint must be provided in order to modify metadata.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.", + "pattern": "[a-zA-Z0-9-_]{1,128}", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + }, + "value": { + "type": "string", + "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 32768 bytes.", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + } + } + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#metadata" + } + } + }, + "Network": { + "id": "Network", + "type": "object", + "description": "A network resource.", + "properties": { + "IPv4Range": { + "type": "string", + "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "gatewayIPv4": { + "type": "string", + "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#network" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "NetworkInterface": { + "id": "NetworkInterface", + "type": "object", + "description": "A network interface resource attached to an instance.", + "properties": { + "accessConfigs": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "AccessConfig" + } + }, + "name": { + "type": "string", + "description": "Name of the network interface, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)." + }, + "network": { + "type": "string", + "description": "URL of the network resource attached to this interface.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkIP": { + "type": "string", + "description": "An optional IPV4 internal network address to assign to the instance for this network interface. If not specified, one will be assigned from the available range." + } + } + }, + "NetworkList": { + "id": "NetworkList", + "type": "object", + "description": "Contains a list of network resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The network resources.", + "items": { + "$ref": "Network" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#networkList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Operation": { + "id": "Operation", + "type": "object", + "description": "An operation resource, used to manage asynchronous API requests.", + "properties": { + "clientOperationId": { + "type": "string", + "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "endTime": { + "type": "string", + "description": "The time that this operation was completed. This is in RFC 3339 format (output only)." + }, + "error": { + "type": "object", + "description": "If errors occurred during processing of this operation, this field will be populated (output only).", + "properties": { + "errors": { + "type": "array", + "description": "The array of errors encountered while processing this operation.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error type identifier for this error." + }, + "location": { + "type": "string", + "description": "Indicates the field in the request which caused the error. This property is optional." + }, + "message": { + "type": "string", + "description": "An optional, human-readable error message." + } + } + } + } + } + }, + "httpErrorMessage": { + "type": "string", + "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)." + }, + "httpErrorStatusCode": { + "type": "integer", + "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "insertTime": { + "type": "string", + "description": "The time that this operation was requested. This is in RFC 3339 format (output only)." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#operation" + }, + "name": { + "type": "string", + "description": "Name of the resource (output only)." + }, + "operationType": { + "type": "string", + "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)." + }, + "progress": { + "type": "integer", + "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).", + "format": "int32" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional textual description of the current status of the operation (output only)." + }, + "targetId": { + "type": "string", + "description": "Unique target id which identifies a particular incarnation of the target (output only).", + "format": "uint64" + }, + "targetLink": { + "type": "string", + "description": "URL of the resource the operation is mutating (output only)." + }, + "user": { + "type": "string", + "description": "User who requested the operation, for example \"user@example.com\" (output only)." + }, + "warnings": { + "type": "array", + "description": "If warning messages generated during processing of this operation, this field will be populated (output only).", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + }, + "zone": { + "type": "string", + "description": "URL of the zone where the operation resides (output only)." + } + } + }, + "OperationList": { + "id": "OperationList", + "type": "object", + "description": "Contains a list of operation resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The operation resources.", + "items": { + "$ref": "Operation" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project resource. Projects can be created only in the APIs Console. Unless marked otherwise, values can only be modified in the console.", + "properties": { + "commonInstanceMetadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs available to all instances contained in this project." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "externalIpAddresses": { + "type": "array", + "description": "Internet available IP addresses available for use in this project.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#project" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this project.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "Quota": { + "id": "Quota", + "type": "object", + "description": "A quotas entry.", + "properties": { + "limit": { + "type": "number", + "description": "Quota limit for this metric.", + "format": "double" + }, + "metric": { + "type": "string", + "description": "Name of the quota metric." + }, + "usage": { + "type": "number", + "description": "Current usage of this metric.", + "format": "double" + } + } + }, + "Route": { + "id": "Route", + "type": "object", + "description": "The route resource. A Route is a rule that specifies how certain packets should be handled by the virtual network. Routes are associated with VMs by tag and the set of Routes for a particular VM is called its routing table. For each packet leaving a VM, the system searches that VM's routing table for a single best matching Route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the Route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the next_hop field of the winning Route -- either to another VM destination, a VM gateway or a GCE operated gateway. Packets that do not match any Route in the sending VM's routing table will be dropped.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "destRange": { + "type": "string", + "description": "Which packets does this route apply to?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#route" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this route is applied; provided by the client when the route is created.", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "nextHopGateway": { + "type": "string", + "description": "The URL to a gateway that should handle matching packets." + }, + "nextHopInstance": { + "type": "string", + "description": "The URL to an instance that should handle matching packets." + }, + "nextHopIp": { + "type": "string", + "description": "The network IP address of an instance that should handle matching packets." + }, + "nextHopNetwork": { + "type": "string", + "description": "The URL of the local network if it should handle matching packets." + }, + "priority": { + "type": "integer", + "description": "Breaks ties between Routes of equal specificity. Routes with smaller values win when tied with routes with larger values.", + "format": "uint32", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "tags": { + "type": "array", + "description": "A list of instance tags to which this route applies.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + } + } + }, + "RouteList": { + "id": "RouteList", + "type": "object", + "description": "Contains a list of route resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The route resources.", + "items": { + "$ref": "Route" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#routeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "SerialPortOutput": { + "id": "SerialPortOutput", + "type": "object", + "description": "An instance serial console output.", + "properties": { + "contents": { + "type": "string", + "description": "The contents of the console output." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serialPortOutput" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "ServiceAccount": { + "id": "ServiceAccount", + "type": "object", + "description": "A service account.", + "properties": { + "email": { + "type": "string", + "description": "Email address of the service account." + }, + "scopes": { + "type": "array", + "description": "The list of scopes to be made available for this service account.", + "items": { + "type": "string" + } + } + } + }, + "Snapshot": { + "id": "Snapshot", + "type": "object", + "description": "A persistent disk snapshot resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "diskSizeGb": { + "type": "string", + "description": "Size of the persistent disk snapshot, specified in GB (output only).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#snapshot" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.snapshots.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceDisk": { + "type": "string", + "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created." + }, + "sourceDiskId": { + "type": "string", + "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name." + }, + "status": { + "type": "string", + "description": "The status of the persistent disk snapshot (output only)." + } + } + }, + "SnapshotList": { + "id": "SnapshotList", + "type": "object", + "description": "Contains a list of persistent disk snapshot resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent snapshot resources.", + "items": { + "$ref": "Snapshot" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#snapshotList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Tags": { + "id": "Tags", + "type": "object", + "description": "A set of instance tags.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the tags stored in this object. This field is used optimistic locking. An up-to-date tags fingerprint must be provided in order to modify tags.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.", + "items": { + "type": "string" + } + } + } + }, + "Zone": { + "id": "Zone", + "type": "object", + "description": "A zone resource.", + "properties": { + "availableMachineType": { + "type": "array", + "description": "The machine types that can be used in this zone (output only).", + "items": { + "type": "string" + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this zone." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#zone" + }, + "maintenanceWindows": { + "type": "array", + "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.", + "items": { + "type": "object", + "properties": { + "beginTime": { + "type": "string", + "description": "Begin time of the maintenance window, in RFC 3339 format." + }, + "description": { + "type": "string", + "description": "Textual description of the maintenance window." + }, + "endTime": { + "type": "string", + "description": "End time of the maintenance window, in RFC 3339 format." + }, + "name": { + "type": "string", + "description": "Name of the maintenance window." + } + } + } + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this zone.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the zone. \"UP\" or \"DOWN\"." + } + } + }, + "ZoneList": { + "id": "ZoneList", + "type": "object", + "description": "Contains a list of zone resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The zone resources.", + "items": { + "$ref": "Zone" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#zoneList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + } + }, + "resources": { + "disks": { + "methods": { + "delete": { + "id": "compute.disks.delete", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.disks.get", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Disk" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.disks.insert", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "POST", + "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "sourceImage": { + "type": "string", + "description": "Optional. Source image to restore onto a disk.", + "location": "query" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Disk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.disks.list", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "DiskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "firewalls": { + "methods": { + "delete": { + "id": "compute.firewalls.delete", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "DELETE", + "description": "Deletes the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.firewalls.get", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "GET", + "description": "Returns the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Firewall" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.firewalls.insert", + "path": "{project}/global/firewalls", + "httpMethod": "POST", + "description": "Creates a firewall resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.firewalls.list", + "path": "{project}/global/firewalls", + "httpMethod": "GET", + "description": "Retrieves the list of firewall resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "FirewallList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.firewalls.patch", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PATCH", + "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.firewalls.update", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PUT", + "description": "Updates the specified firewall resource with the data included in the request.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "globalOperations": { + "methods": { + "delete": { + "id": "compute.globalOperations.delete", + "path": "{project}/global/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.globalOperations.get", + "path": "{project}/global/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.globalOperations.list", + "path": "{project}/global/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "images": { + "methods": { + "delete": { + "id": "compute.images.delete", + "path": "{project}/global/images/{image}", + "httpMethod": "DELETE", + "description": "Deletes the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deprecate": { + "id": "compute.images.deprecate", + "path": "{project}/global/images/{image}/deprecate", + "httpMethod": "POST", + "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + "parameters": { + "image": { + "type": "string", + "description": "Image name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "request": { + "$ref": "DeprecationStatus" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.images.get", + "path": "{project}/global/images/{image}", + "httpMethod": "GET", + "description": "Returns the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.images.insert", + "path": "{project}/global/images", + "httpMethod": "POST", + "description": "Creates an image resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "list": { + "id": "compute.images.list", + "path": "{project}/global/images", + "httpMethod": "GET", + "description": "Retrieves the list of image resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ImageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "instances": { + "methods": { + "addAccessConfig": { + "id": "compute.instances.addAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + "httpMethod": "POST", + "description": "Adds an access config to an instance's network interface.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "network_interface" + ], + "request": { + "$ref": "AccessConfig" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "attachDisk": { + "id": "compute.instances.attachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + "httpMethod": "POST", + "description": "Attaches a disk resource to an instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "AttachedDisk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.instances.delete", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deleteAccessConfig": { + "id": "compute.instances.deleteAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + "httpMethod": "POST", + "description": "Deletes an access config from an instance's network interface.", + "parameters": { + "access_config": { + "type": "string", + "description": "Access config name.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "network_interface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "access_config", + "network_interface" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "detachDisk": { + "id": "compute.instances.detachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + "httpMethod": "POST", + "description": "Detaches a disk from an instance.", + "parameters": { + "deviceName": { + "type": "string", + "description": "Disk device name to detach.", + "required": true, + "pattern": "\\w[\\w.-]{0,254}", + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "deviceName" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.instances.get", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "GET", + "description": "Returns the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Instance" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getSerialPortOutput": { + "id": "compute.instances.getSerialPortOutput", + "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + "httpMethod": "GET", + "description": "Returns the specified instance's serial port output.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "SerialPortOutput" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.instances.insert", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "POST", + "description": "Creates an instance resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Instance" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.instances.list", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "GET", + "description": "Retrieves the list of instance resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "InstanceList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "reset": { + "id": "compute.instances.reset", + "path": "{project}/zones/{zone}/instances/{instance}/reset", + "httpMethod": "POST", + "description": "Performs a hard reset on the instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setMetadata": { + "id": "compute.instances.setMetadata", + "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + "httpMethod": "POST", + "description": "Sets metadata for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setTags": { + "id": "compute.instances.setTags", + "path": "{project}/zones/{zone}/instances/{instance}/setTags", + "httpMethod": "POST", + "description": "Sets tags for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Tags" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "kernels": { + "methods": { + "get": { + "id": "compute.kernels.get", + "path": "{project}/global/kernels/{kernel}", + "httpMethod": "GET", + "description": "Returns the specified kernel resource.", + "parameters": { + "kernel": { + "type": "string", + "description": "Name of the kernel resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "kernel" + ], + "response": { + "$ref": "Kernel" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.kernels.list", + "path": "{project}/global/kernels", + "httpMethod": "GET", + "description": "Retrieves the list of kernel resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "KernelList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "machineTypes": { + "methods": { + "get": { + "id": "compute.machineTypes.get", + "path": "{project}/global/machineTypes/{machineType}", + "httpMethod": "GET", + "description": "Returns the specified machine type resource.", + "parameters": { + "machineType": { + "type": "string", + "description": "Name of the machine type resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "machineType" + ], + "response": { + "$ref": "MachineType" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.machineTypes.list", + "path": "{project}/global/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "MachineTypeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "networks": { + "methods": { + "delete": { + "id": "compute.networks.delete", + "path": "{project}/global/networks/{network}", + "httpMethod": "DELETE", + "description": "Deletes the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.networks.get", + "path": "{project}/global/networks/{network}", + "httpMethod": "GET", + "description": "Returns the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Network" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.networks.insert", + "path": "{project}/global/networks", + "httpMethod": "POST", + "description": "Creates a network resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Network" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.networks.list", + "path": "{project}/global/networks", + "httpMethod": "GET", + "description": "Retrieves the list of network resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "NetworkList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "compute.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Returns the specified project resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project resource to retrieve.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setCommonInstanceMetadata": { + "id": "compute.projects.setCommonInstanceMetadata", + "path": "{project}/setCommonInstanceMetadata", + "httpMethod": "POST", + "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "routes": { + "methods": { + "delete": { + "id": "compute.routes.delete", + "path": "{project}/global/routes/{route}", + "httpMethod": "DELETE", + "description": "Deletes the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.routes.get", + "path": "{project}/global/routes/{route}", + "httpMethod": "GET", + "description": "Returns the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Route" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.routes.insert", + "path": "{project}/global/routes", + "httpMethod": "POST", + "description": "Creates a route resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Route" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.routes.list", + "path": "{project}/global/routes", + "httpMethod": "GET", + "description": "Retrieves the list of route resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "RouteList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "snapshots": { + "methods": { + "delete": { + "id": "compute.snapshots.delete", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.snapshots.get", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Snapshot" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.snapshots.insert", + "path": "{project}/global/snapshots", + "httpMethod": "POST", + "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Snapshot" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.snapshots.list", + "path": "{project}/global/snapshots", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "SnapshotList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zoneOperations": { + "methods": { + "delete": { + "id": "compute.zoneOperations.delete", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.zoneOperations.get", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zoneOperations.list", + "path": "{project}/zones/{zone}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zones": { + "methods": { + "get": { + "id": "compute.zones.get", + "path": "{project}/zones/{zone}", + "httpMethod": "GET", + "description": "Returns the specified zone resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "Zone" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zones.list", + "path": "{project}/zones", + "httpMethod": "GET", + "description": "Retrieves the list of zone resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ZoneList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-gen.go b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-gen.go new file mode 100644 index 0000000000000..1ed11e155ce26 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta14/compute-gen.go @@ -0,0 +1,6161 @@ +// Package compute provides access to the Compute Engine API. +// +// See https://developers.google.com/compute/docs/reference/v1beta14 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/compute/v1beta14" +// ... +// computeService, err := compute.New(oauthHttpClient) +package compute + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "compute:v1beta14" +const apiName = "compute" +const apiVersion = "v1beta14" +const basePath = "https://www.googleapis.com/compute/v1beta14/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Compute Engine resources + ComputeScope = "https://www.googleapis.com/auth/compute" + + // View your Google Compute Engine resources + ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Disks = NewDisksService(s) + s.Firewalls = NewFirewallsService(s) + s.GlobalOperations = NewGlobalOperationsService(s) + s.Images = NewImagesService(s) + s.Instances = NewInstancesService(s) + s.Kernels = NewKernelsService(s) + s.MachineTypes = NewMachineTypesService(s) + s.Networks = NewNetworksService(s) + s.Projects = NewProjectsService(s) + s.Routes = NewRoutesService(s) + s.Snapshots = NewSnapshotsService(s) + s.ZoneOperations = NewZoneOperationsService(s) + s.Zones = NewZonesService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Disks *DisksService + + Firewalls *FirewallsService + + GlobalOperations *GlobalOperationsService + + Images *ImagesService + + Instances *InstancesService + + Kernels *KernelsService + + MachineTypes *MachineTypesService + + Networks *NetworksService + + Projects *ProjectsService + + Routes *RoutesService + + Snapshots *SnapshotsService + + ZoneOperations *ZoneOperationsService + + Zones *ZonesService +} + +func NewDisksService(s *Service) *DisksService { + rs := &DisksService{s: s} + return rs +} + +type DisksService struct { + s *Service +} + +func NewFirewallsService(s *Service) *FirewallsService { + rs := &FirewallsService{s: s} + return rs +} + +type FirewallsService struct { + s *Service +} + +func NewGlobalOperationsService(s *Service) *GlobalOperationsService { + rs := &GlobalOperationsService{s: s} + return rs +} + +type GlobalOperationsService struct { + s *Service +} + +func NewImagesService(s *Service) *ImagesService { + rs := &ImagesService{s: s} + return rs +} + +type ImagesService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewKernelsService(s *Service) *KernelsService { + rs := &KernelsService{s: s} + return rs +} + +type KernelsService struct { + s *Service +} + +func NewMachineTypesService(s *Service) *MachineTypesService { + rs := &MachineTypesService{s: s} + return rs +} + +type MachineTypesService struct { + s *Service +} + +func NewNetworksService(s *Service) *NetworksService { + rs := &NetworksService{s: s} + return rs +} + +type NetworksService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewRoutesService(s *Service) *RoutesService { + rs := &RoutesService{s: s} + return rs +} + +type RoutesService struct { + s *Service +} + +func NewSnapshotsService(s *Service) *SnapshotsService { + rs := &SnapshotsService{s: s} + return rs +} + +type SnapshotsService struct { + s *Service +} + +func NewZoneOperationsService(s *Service) *ZoneOperationsService { + rs := &ZoneOperationsService{s: s} + return rs +} + +type ZoneOperationsService struct { + s *Service +} + +func NewZonesService(s *Service) *ZonesService { + rs := &ZonesService{s: s} + return rs +} + +type ZonesService struct { + s *Service +} + +type AccessConfig struct { + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of this access configuration. + Name string `json:"name,omitempty"` + + // NatIP: An external IP address associated with this instance. Specify + // an unused static IP address available to the project. If not + // specified, the external IP will be drawn from a shared ephemeral + // pool. + NatIP string `json:"natIP,omitempty"` + + // Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This + // configures port-for-port NAT to the internet. + Type string `json:"type,omitempty"` +} + +type AttachedDisk struct { + // Boot: Indicates that this is a boot disk. VM will use the first + // partition of the disk for its root filesystem. + Boot bool `json:"boot,omitempty"` + + // DeviceName: Persistent disk only; must be unique within the instance + // when specified. This represents a unique device name that is + // reflected into the /dev/ tree of a Linux operating system running + // within the instance. If not specified, a default will be chosen by + // the system. + DeviceName string `json:"deviceName,omitempty"` + + // Index: A zero-based index to assign to this disk, where 0 is reserved + // for the boot disk. If not specified, the server will choose an + // appropriate value. + Index int64 `json:"index,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Mode: The mode in which to attach this disk, either "READ_WRITE" or + // "READ_ONLY". + Mode string `json:"mode,omitempty"` + + // Source: Persistent disk only; the URL of the persistent disk + // resource. + Source string `json:"source,omitempty"` + + // Type: Type of the disk, either "EPHEMERAL" or "PERSISTENT". Note that + // persistent disks must be created before you can specify them here. + Type string `json:"type,omitempty"` +} + +type DeprecationStatus struct { + // Deleted: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DELETED. + Deleted string `json:"deleted,omitempty"` + + // Deprecated: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DEPRECATED. + Deprecated string `json:"deprecated,omitempty"` + + // Obsolete: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to OBSOLETE. + Obsolete string `json:"obsolete,omitempty"` + + // Replacement: A URL of the suggested replacement for the deprecated + // resource. The deprecated resource and its replacement must be + // resources of the same kind. + Replacement string `json:"replacement,omitempty"` + + // State: The deprecation state. Can be "DEPRECATED", "OBSOLETE", or + // "DELETED". Operations which create a new resource using a + // "DEPRECATED" resource will return successfully, but with a warning + // indicating the deprecated resource and recommending its replacement. + // New uses of "OBSOLETE" or "DELETED" resources will result in an + // error. + State string `json:"state,omitempty"` +} + +type Disk struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Options: Internal use only. + Options string `json:"options,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SizeGb: Size of the persistent disk, specified in GB. This parameter + // is optional when creating a disk from a disk image or a snapshot, + // otherwise it is required. + SizeGb int64 `json:"sizeGb,omitempty,string"` + + // SourceSnapshot: The source snapshot used to create this disk. Once + // the source snapshot has been deleted from the system, this field will + // be cleared, and will not be set even if a snapshot with the same name + // has been re-created. + SourceSnapshot string `json:"sourceSnapshot,omitempty"` + + // SourceSnapshotId: The 'id' value of the snapshot used to create this + // disk. This value may be used to determine whether the disk was + // created from the current or a previous instance of a given disk + // snapshot. + SourceSnapshotId string `json:"sourceSnapshotId,omitempty"` + + // Status: The status of disk creation (output only). + Status string `json:"status,omitempty"` + + // Zone: URL of the zone where the disk resides (output only). + Zone string `json:"zone,omitempty"` +} + +type DiskList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent disk resources. + Items []*Disk `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Firewall struct { + // Allowed: The list of rules specified by this firewall. Each rule + // specifies a protocol and port-range tuple that describes a permitted + // connection. + Allowed []*FirewallAllowed `json:"allowed,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this firewall is applied; + // provided by the client when the firewall is created. + Network string `json:"network,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceRanges: A list of IP address blocks expressed in CIDR format + // which this rule applies to. One or both of sourceRanges and + // sourceTags may be set; an inbound connection is allowed if either the + // range or the tag of the source matches. + SourceRanges []string `json:"sourceRanges,omitempty"` + + // SourceTags: A list of instance tags which this rule applies to. One + // or both of sourceRanges and sourceTags may be set; an inbound + // connection is allowed if either the range or the tag of the source + // matches. + SourceTags []string `json:"sourceTags,omitempty"` + + // TargetTags: A list of instance tags indicating sets of instances + // located on network which may make network connections as specified in + // allowed. If no targetTags are specified, the firewall rule applies to + // all instances on the specified network. + TargetTags []string `json:"targetTags,omitempty"` +} + +type FirewallAllowed struct { + // IPProtocol: Required; this is the IP protocol that is allowed for + // this rule. This can either be a well known protocol string (tcp, udp + // or icmp) or the IP protocol number. + IPProtocol string `json:"IPProtocol,omitempty"` + + // Ports: An optional list of ports which are allowed. It is an error to + // specify this for any protocol that isn't UDP or TCP. Each entry must + // be either an integer or a range. If not specified, connections + // through any port are allowed. + // + // Example inputs include: ["22"], + // ["80","443"] and ["12345-12349"]. + Ports []string `json:"ports,omitempty"` +} + +type FirewallList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The firewall resources. + Items []*Firewall `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Image struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this image. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource; provided by the + // client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PreferredKernel: An optional URL of the preferred kernel for use with + // this disk image. If not specified, a server defined default kernel + // will be used. + PreferredKernel string `json:"preferredKernel,omitempty"` + + // RawDisk: The raw disk image parameters. + RawDisk *ImageRawDisk `json:"rawDisk,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceType: Must be "RAW"; provided by the client when the disk image + // is created. + SourceType string `json:"sourceType,omitempty"` +} + +type ImageRawDisk struct { + // ContainerType: The format used to encode and transmit the block + // device. Should be TAR. This is just a container and transmission + // format and not a runtime format. Provided by the client when the disk + // image is created. + ContainerType string `json:"containerType,omitempty"` + + // Sha1Checksum: An optional SHA1 checksum of the disk image before + // unpackaging; provided by the client when the disk image is created. + Sha1Checksum string `json:"sha1Checksum,omitempty"` + + // Source: The full Google Cloud Storage URL where the disk image is + // stored; provided by the client when the disk image is created. + Source string `json:"source,omitempty"` +} + +type ImageList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The disk image resources. + Items []*Image `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Instance struct { + // CanIpForward: Allows this instance to send packets with source IP + // addresses other than its own and receive packets with destination IP + // addresses other than its own. If this instance will be used as an IP + // gateway or it will be set as the next-hop in a Route resource, say + // true. If unsure, leave this set to false. + CanIpForward bool `json:"canIpForward,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Disks: Array of disks associated with this instance. Persistent disks + // must be created before you can assign them. + Disks []*AttachedDisk `json:"disks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Image: An optional URL of the disk image resource to be installed on + // this instance; provided by the client when the instance is created. + // Alternatively to passing the image, the client may choose to boot + // from a persistent disk, by setting boot=true flag on one of the + // entries in disks[] collection. + Image string `json:"image,omitempty"` + + // Kernel: URL of the kernel resource to use when booting. In case of + // booting from persistent disk, this parameter is required. When + // booting from a disk image, it is optional, but may be provided to use + // a different kernel than the one associated with the image. + Kernel string `json:"kernel,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MachineType: URL of the machine type resource describing which + // machine type to use to host the instance; provided by the client when + // the instance is created. + MachineType string `json:"machineType,omitempty"` + + // Metadata: Metadata key/value pairs assigned to this instance. + // Consists of custom metadata or predefined keys; see Instance + // documentation for more information. + Metadata *Metadata `json:"metadata,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // NetworkInterfaces: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // ServiceAccounts: A list of service accounts each with specified + // scopes, for which access tokens are to be made available to the + // instance through metadata queries. + ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"` + + // Status: Instance status. One of the following values: "PROVISIONING", + // "STAGING", "RUNNING", "STOPPING", "STOPPED", "TERMINATED" (output + // only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional, human-readable explanation of the status + // (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // Tags: A list of tags to be applied to this instance. Used to identify + // valid sources or targets for network firewalls. Provided by the + // client on instance creation. The tags can be later modified by the + // setTags method. Each tag within the list must comply with RFC1035. + Tags *Tags `json:"tags,omitempty"` + + // Zone: URL of the zone where the instance resides (output only). + Zone string `json:"zone,omitempty"` +} + +type InstanceList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A list of instance resources. + Items []*Instance `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Kernel struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this kernel. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type KernelList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The kernel resources. + Items []*Kernel `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineType struct { + // AvailableZone: The zones that this machine type can run in. + AvailableZone []string `json:"availableZone,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this machine type. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // EphemeralDisks: List of extended ephemeral disks assigned to the + // instance. + EphemeralDisks []*MachineTypeEphemeralDisks `json:"ephemeralDisks,omitempty"` + + // GuestCpus: Count of CPUs exposed to the instance. + GuestCpus int64 `json:"guestCpus,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // ImageSpaceGb: Space allotted for the image, defined in GB. + ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaximumPersistentDisks: Maximum persistent disks allowed. + MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"` + + // MaximumPersistentDisksSizeGb: Maximum total persistent disks size + // (GB) allowed. + MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"` + + // MemoryMb: Physical memory assigned to the instance, defined in MB. + MemoryMb int64 `json:"memoryMb,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypeEphemeralDisks struct { + // DiskGb: Size of the ephemeral disk, defined in GB. + DiskGb int64 `json:"diskGb,omitempty"` +} + +type MachineTypeList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The machine type resources. + Items []*MachineType `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Metadata struct { + // Fingerprint: Fingerprint of this resource. A hash of the metadata's + // contents. This field is used for optimistic locking. An up-to-date + // metadata fingerprint must be provided in order to modify metadata. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: Array of key/value pairs. The total size of all keys and + // values must be less than 512 KB. + Items []*MetadataItems `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` +} + +type MetadataItems struct { + // Key: Key for the metadata entry. Keys must conform to the following + // regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is + // reflected as part of a URL in the metadata server. Additionally, to + // avoid ambiguity, keys must not conflict with any other metadata keys + // for the project. + Key string `json:"key,omitempty"` + + // Value: Value for the metadata entry. These are free-form strings, and + // only have meaning as interpreted by the image running in the + // instance. The only restriction placed on values is that their size + // must be less than or equal to 32768 bytes. + Value string `json:"value,omitempty"` +} + +type Network struct { + // IPv4Range: Required; The range of internal addresses that are legal + // on this network. This range is a CIDR specification, for example: + // 192.168.0.0/16. Provided by the client when the network is created. + IPv4Range string `json:"IPv4Range,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // GatewayIPv4: An optional address that is used for default routing to + // other networks. This must be within the range specified by IPv4Range, + // and is typically the first usable address in that range. If not + // specified, the default value is the first usable address in + // IPv4Range. + GatewayIPv4 string `json:"gatewayIPv4,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type NetworkInterface struct { + // AccessConfigs: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"` + + // Name: Name of the network interface, determined by the server; for + // network devices, these are e.g. eth0, eth1, etc. (output only). + Name string `json:"name,omitempty"` + + // Network: URL of the network resource attached to this interface. + Network string `json:"network,omitempty"` + + // NetworkIP: An optional IPV4 internal network address to assign to the + // instance for this network interface. If not specified, one will be + // assigned from the available range. + NetworkIP string `json:"networkIP,omitempty"` +} + +type NetworkList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The network resources. + Items []*Network `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Operation struct { + // ClientOperationId: An optional identifier specified by the client + // when the mutation was initiated. Must be unique for all operation + // resources in the project (output only). + ClientOperationId string `json:"clientOperationId,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // EndTime: The time that this operation was completed. This is in RFC + // 3339 format (output only). + EndTime string `json:"endTime,omitempty"` + + // Error: If errors occurred during processing of this operation, this + // field will be populated (output only). + Error *OperationError `json:"error,omitempty"` + + // HttpErrorMessage: If operation fails, the HTTP error message + // returned, e.g. NOT FOUND. (output only). + HttpErrorMessage string `json:"httpErrorMessage,omitempty"` + + // HttpErrorStatusCode: If operation fails, the HTTP error status code + // returned, e.g. 404. (output only). + HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // InsertTime: The time that this operation was requested. This is in + // RFC 3339 format (output only). + InsertTime string `json:"insertTime,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource (output only). + Name string `json:"name,omitempty"` + + // OperationType: Type of the operation. Examples include "insert", + // "update", and "delete" (output only). + OperationType string `json:"operationType,omitempty"` + + // Progress: An optional progress indicator that ranges from 0 to 100. + // There is no requirement that this be linear or support any + // granularity of operations. This should not be used to guess at when + // the operation will be complete. This number should be monotonically + // increasing as the operation progresses (output only). + Progress int64 `json:"progress,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC 3339 format (output only). + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING", "RUNNING", or "DONE" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional textual description of the current status + // of the operation (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // TargetId: Unique target id which identifies a particular incarnation + // of the target (output only). + TargetId uint64 `json:"targetId,omitempty,string"` + + // TargetLink: URL of the resource the operation is mutating (output + // only). + TargetLink string `json:"targetLink,omitempty"` + + // User: User who requested the operation, for example + // "user@example.com" (output only). + User string `json:"user,omitempty"` + + // Warnings: If warning messages generated during processing of this + // operation, this field will be populated (output only). + Warnings []*OperationWarnings `json:"warnings,omitempty"` + + // Zone: URL of the zone where the operation resides (output only). + Zone string `json:"zone,omitempty"` +} + +type OperationError struct { + // Errors: The array of errors encountered while processing this + // operation. + Errors []*OperationErrorErrors `json:"errors,omitempty"` +} + +type OperationErrorErrors struct { + // Code: The error type identifier for this error. + Code string `json:"code,omitempty"` + + // Location: Indicates the field in the request which caused the error. + // This property is optional. + Location string `json:"location,omitempty"` + + // Message: An optional, human-readable error message. + Message string `json:"message,omitempty"` +} + +type OperationWarnings struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*OperationWarningsData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type OperationWarningsData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type OperationList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The operation resources. + Items []*Operation `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Project struct { + // CommonInstanceMetadata: Metadata key/value pairs available to all + // instances contained in this project. + CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // ExternalIpAddresses: Internet available IP addresses available for + // use in this project. + ExternalIpAddresses []string `json:"externalIpAddresses,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this project. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Quota struct { + // Limit: Quota limit for this metric. + Limit float64 `json:"limit,omitempty"` + + // Metric: Name of the quota metric. + Metric string `json:"metric,omitempty"` + + // Usage: Current usage of this metric. + Usage float64 `json:"usage,omitempty"` +} + +type Route struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DestRange: Which packets does this route apply to? + DestRange string `json:"destRange,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this route is applied; provided + // by the client when the route is created. + Network string `json:"network,omitempty"` + + // NextHopGateway: The URL to a gateway that should handle matching + // packets. + NextHopGateway string `json:"nextHopGateway,omitempty"` + + // NextHopInstance: The URL to an instance that should handle matching + // packets. + NextHopInstance string `json:"nextHopInstance,omitempty"` + + // NextHopIp: The network IP address of an instance that should handle + // matching packets. + NextHopIp string `json:"nextHopIp,omitempty"` + + // NextHopNetwork: The URL of the local network if it should handle + // matching packets. + NextHopNetwork string `json:"nextHopNetwork,omitempty"` + + // Priority: Breaks ties between Routes of equal specificity. Routes + // with smaller values win when tied with routes with larger values. + Priority int64 `json:"priority,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Tags: A list of instance tags to which this route applies. + Tags []string `json:"tags,omitempty"` +} + +type RouteList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The route resources. + Items []*Route `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type SerialPortOutput struct { + // Contents: The contents of the console output. + Contents string `json:"contents,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ServiceAccount struct { + // Email: Email address of the service account. + Email string `json:"email,omitempty"` + + // Scopes: The list of scopes to be made available for this service + // account. + Scopes []string `json:"scopes,omitempty"` +} + +type Snapshot struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSizeGb: Size of the persistent disk snapshot, specified in GB + // (output only). + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceDisk: The source disk used to create this snapshot. Once the + // source disk has been deleted from the system, this field will be + // cleared, and will not be set even if a disk with the same name has + // been re-created. + SourceDisk string `json:"sourceDisk,omitempty"` + + // SourceDiskId: The 'id' value of the disk used to create this + // snapshot. This value may be used to determine whether the snapshot + // was taken from the current or a previous instance of a given disk + // name. + SourceDiskId string `json:"sourceDiskId,omitempty"` + + // Status: The status of the persistent disk snapshot (output only). + Status string `json:"status,omitempty"` +} + +type SnapshotList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent snapshot resources. + Items []*Snapshot `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Tags struct { + // Fingerprint: Fingerprint of this resource. A hash of the tags stored + // in this object. This field is used optimistic locking. An up-to-date + // tags fingerprint must be provided in order to modify tags. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: An array of tags. Each tag must be 1-63 characters long, and + // comply with RFC1035. + Items []string `json:"items,omitempty"` +} + +type Zone struct { + // AvailableMachineType: The machine types that can be used in this zone + // (output only). + AvailableMachineType []string `json:"availableMachineType,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this zone. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaintenanceWindows: Scheduled maintenance windows for the zone. When + // the zone is in a maintenance window, all resources which reside in + // the zone will be unavailable. + MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this zone. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the zone. "UP" or "DOWN". + Status string `json:"status,omitempty"` +} + +type ZoneMaintenanceWindows struct { + // BeginTime: Begin time of the maintenance window, in RFC 3339 format. + BeginTime string `json:"beginTime,omitempty"` + + // Description: Textual description of the maintenance window. + Description string `json:"description,omitempty"` + + // EndTime: End time of the maintenance window, in RFC 3339 format. + EndTime string `json:"endTime,omitempty"` + + // Name: Name of the maintenance window. + Name string `json:"name,omitempty"` +} + +type ZoneList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The zone resources. + Items []*Zone `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +// method id "compute.disks.delete": + +type DisksDeleteCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk resource. +func (r *DisksService) Delete(project string, zone string, disk string) *DisksDeleteCall { + c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk resource.", + // "httpMethod": "DELETE", + // "id": "compute.disks.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.get": + +type DisksGetCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk resource. +func (r *DisksService) Get(project string, zone string, disk string) *DisksGetCall { + c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksGetCall) Do() (*Disk, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Disk) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk resource.", + // "httpMethod": "GET", + // "id": "compute.disks.get", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Disk" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.insert": + +type DisksInsertCall struct { + s *Service + project string + zone string + disk *Disk + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk resource in the specified project +// using the data included in the request. +func (r *DisksService) Insert(project string, zone string, disk *Disk) *DisksInsertCall { + c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +// SourceImage sets the optional parameter "sourceImage": Source image +// to restore onto a disk. +func (c *DisksInsertCall) SourceImage(sourceImage string) *DisksInsertCall { + c.opt_["sourceImage"] = sourceImage + return c +} + +func (c *DisksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["sourceImage"]; ok { + params.Set("sourceImage", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.disks.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "sourceImage": { + // "description": "Optional. Source image to restore onto a disk.", + // "location": "query", + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "request": { + // "$ref": "Disk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.list": + +type DisksListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk resources contained +// within the specified zone. +func (r *DisksService) List(project string, zone string) *DisksListCall { + c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksListCall) Filter(filter string) *DisksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksListCall) PageToken(pageToken string) *DisksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksListCall) Do() (*DiskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.disks.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "response": { + // "$ref": "DiskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.delete": + +type FirewallsDeleteCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified firewall resource. +func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall { + c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified firewall resource.", + // "httpMethod": "DELETE", + // "id": "compute.firewalls.delete", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.get": + +type FirewallsGetCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Get: Returns the specified firewall resource. +func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall { + c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsGetCall) Do() (*Firewall, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Firewall) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified firewall resource.", + // "httpMethod": "GET", + // "id": "compute.firewalls.get", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Firewall" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.insert": + +type FirewallsInsertCall struct { + s *Service + project string + firewall *Firewall + opt_ map[string]interface{} +} + +// Insert: Creates a firewall resource in the specified project using +// the data included in the request. +func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall { + c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a firewall resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.firewalls.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.list": + +type FirewallsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of firewall resources available to the +// specified project. +func (r *FirewallsService) List(project string) *FirewallsListCall { + c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *FirewallsListCall) Do() (*FirewallList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FirewallList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of firewall resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.firewalls.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "response": { + // "$ref": "FirewallList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.patch": + +type FirewallsPatchCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Patch: Updates the specified firewall resource with the data included +// in the request. This method supports patch semantics. +func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall { + c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.firewalls.patch", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.update": + +type FirewallsUpdateCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Update: Updates the specified firewall resource with the data +// included in the request. +func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall { + c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.firewalls.update", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.delete": + +type GlobalOperationsDeleteCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified operation resource. +func (r *GlobalOperationsService) Delete(project string, operation string) *GlobalOperationsDeleteCall { + c := &GlobalOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.globalOperations.delete", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.get": + +type GlobalOperationsGetCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified operation resource. +func (r *GlobalOperationsService) Get(project string, operation string) *GlobalOperationsGetCall { + c := &GlobalOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified operation resource.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.get", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.globalOperations.list": + +type GlobalOperationsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified project. +func (r *GlobalOperationsService) List(project string) *GlobalOperationsListCall { + c := &GlobalOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *GlobalOperationsListCall) Filter(filter string) *GlobalOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *GlobalOperationsListCall) PageToken(pageToken string) *GlobalOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *GlobalOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.delete": + +type ImagesDeleteCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified image resource. +func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall { + c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified image resource.", + // "httpMethod": "DELETE", + // "id": "compute.images.delete", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.deprecate": + +type ImagesDeprecateCall struct { + s *Service + project string + image string + deprecationstatus *DeprecationStatus + opt_ map[string]interface{} +} + +// Deprecate: Sets the deprecation status of an image. If no message +// body is given, clears the deprecation status instead. +func (r *ImagesService) Deprecate(project string, image string, deprecationstatus *DeprecationStatus) *ImagesDeprecateCall { + c := &ImagesDeprecateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + c.deprecationstatus = deprecationstatus + return c +} + +func (c *ImagesDeprecateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/images/{image}/deprecate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + // "httpMethod": "POST", + // "id": "compute.images.deprecate", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Image name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}/deprecate", + // "request": { + // "$ref": "DeprecationStatus" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.get": + +type ImagesGetCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Get: Returns the specified image resource. +func (r *ImagesService) Get(project string, image string) *ImagesGetCall { + c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified image resource.", + // "httpMethod": "GET", + // "id": "compute.images.get", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.insert": + +type ImagesInsertCall struct { + s *Service + project string + image *Image + opt_ map[string]interface{} +} + +// Insert: Creates an image resource in the specified project using the +// data included in the request. +func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall { + c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an image resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.images.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "compute.images.list": + +type ImagesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of image resources available to the +// specified project. +func (r *ImagesService) List(project string) *ImagesListCall { + c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ImagesListCall) Filter(filter string) *ImagesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ImagesListCall) Do() (*ImageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ImageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of image resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.images.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "response": { + // "$ref": "ImageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.addAccessConfig": + +type InstancesAddAccessConfigCall struct { + s *Service + project string + zone string + instance string + network_interface string + accessconfig *AccessConfig + opt_ map[string]interface{} +} + +// AddAccessConfig: Adds an access config to an instance's network +// interface. +func (r *InstancesService) AddAccessConfig(project string, zone string, instance string, network_interface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall { + c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.network_interface = network_interface + c.accessconfig = accessconfig + return c +} + +func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/addAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an access config to an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.addAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "network_interface" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + // "request": { + // "$ref": "AccessConfig" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.attachDisk": + +type InstancesAttachDiskCall struct { + s *Service + project string + zone string + instance string + attacheddisk *AttachedDisk + opt_ map[string]interface{} +} + +// AttachDisk: Attaches a disk resource to an instance. +func (r *InstancesService) AttachDisk(project string, zone string, instance string, attacheddisk *AttachedDisk) *InstancesAttachDiskCall { + c := &InstancesAttachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.attacheddisk = attacheddisk + return c +} + +func (c *InstancesAttachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/attachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Attaches a disk resource to an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.attachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + // "request": { + // "$ref": "AttachedDisk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified instance resource. +func (r *InstancesService) Delete(project string, zone string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified instance resource.", + // "httpMethod": "DELETE", + // "id": "compute.instances.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.deleteAccessConfig": + +type InstancesDeleteAccessConfigCall struct { + s *Service + project string + zone string + instance string + access_config string + network_interface string + opt_ map[string]interface{} +} + +// DeleteAccessConfig: Deletes an access config from an instance's +// network interface. +func (r *InstancesService) DeleteAccessConfig(project string, zone string, instance string, access_config string, network_interface string) *InstancesDeleteAccessConfigCall { + c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.access_config = access_config + c.network_interface = network_interface + return c +} + +func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("access_config", fmt.Sprintf("%v", c.access_config)) + params.Set("network_interface", fmt.Sprintf("%v", c.network_interface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes an access config from an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.deleteAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "access_config", + // "network_interface" + // ], + // "parameters": { + // "access_config": { + // "description": "Access config name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "network_interface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.detachDisk": + +type InstancesDetachDiskCall struct { + s *Service + project string + zone string + instance string + deviceName string + opt_ map[string]interface{} +} + +// DetachDisk: Detaches a disk from an instance. +func (r *InstancesService) DetachDisk(project string, zone string, instance string, deviceName string) *InstancesDetachDiskCall { + c := &InstancesDetachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.deviceName = deviceName + return c +} + +func (c *InstancesDetachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("deviceName", fmt.Sprintf("%v", c.deviceName)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/detachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Detaches a disk from an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.detachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "deviceName" + // ], + // "parameters": { + // "deviceName": { + // "description": "Disk device name to detach.", + // "location": "query", + // "pattern": "\\w[\\w.-]{0,254}", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.get": + +type InstancesGetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Get: Returns the specified instance resource. +func (r *InstancesService) Get(project string, zone string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*Instance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Instance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance resource.", + // "httpMethod": "GET", + // "id": "compute.instances.get", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Instance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.getSerialPortOutput": + +type InstancesGetSerialPortOutputCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// GetSerialPortOutput: Returns the specified instance's serial port +// output. +func (r *InstancesService) GetSerialPortOutput(project string, zone string, instance string) *InstancesGetSerialPortOutputCall { + c := &InstancesGetSerialPortOutputCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetSerialPortOutputCall) Do() (*SerialPortOutput, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/serialPort") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SerialPortOutput) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance's serial port output.", + // "httpMethod": "GET", + // "id": "compute.instances.getSerialPortOutput", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + // "response": { + // "$ref": "SerialPortOutput" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + zone string + instance *Instance + opt_ map[string]interface{} +} + +// Insert: Creates an instance resource in the specified project using +// the data included in the request. +func (r *InstancesService) Insert(project string, zone string, instance *Instance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an instance resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "request": { + // "$ref": "Instance" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.list": + +type InstancesListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of instance resources contained within the +// specified zone. +func (r *InstancesService) List(project string, zone string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesListCall) Filter(filter string) *InstancesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstanceList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of instance resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.instances.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "response": { + // "$ref": "InstanceList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.reset": + +type InstancesResetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Reset: Performs a hard reset on the instance. +func (r *InstancesService) Reset(project string, zone string, instance string) *InstancesResetCall { + c := &InstancesResetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesResetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Performs a hard reset on the instance.", + // "httpMethod": "POST", + // "id": "compute.instances.reset", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/reset", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setMetadata": + +type InstancesSetMetadataCall struct { + s *Service + project string + zone string + instance string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetMetadata: Sets metadata for the specified instance to the data +// included in the request. +func (r *InstancesService) SetMetadata(project string, zone string, instance string, metadata *Metadata) *InstancesSetMetadataCall { + c := &InstancesSetMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.metadata = metadata + return c +} + +func (c *InstancesSetMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/setMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setMetadata", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setTags": + +type InstancesSetTagsCall struct { + s *Service + project string + zone string + instance string + tags *Tags + opt_ map[string]interface{} +} + +// SetTags: Sets tags for the specified instance to the data included in +// the request. +func (r *InstancesService) SetTags(project string, zone string, instance string, tags *Tags) *InstancesSetTagsCall { + c := &InstancesSetTagsCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.tags = tags + return c +} + +func (c *InstancesSetTagsCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/instances/{instance}/setTags") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets tags for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setTags", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setTags", + // "request": { + // "$ref": "Tags" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.kernels.get": + +type KernelsGetCall struct { + s *Service + project string + kernel string + opt_ map[string]interface{} +} + +// Get: Returns the specified kernel resource. +func (r *KernelsService) Get(project string, kernel string) *KernelsGetCall { + c := &KernelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.kernel = kernel + return c +} + +func (c *KernelsGetCall) Do() (*Kernel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/kernels/{kernel}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{kernel}", url.QueryEscape(c.kernel), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Kernel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified kernel resource.", + // "httpMethod": "GET", + // "id": "compute.kernels.get", + // "parameterOrder": [ + // "project", + // "kernel" + // ], + // "parameters": { + // "kernel": { + // "description": "Name of the kernel resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels/{kernel}", + // "response": { + // "$ref": "Kernel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.list": + +type KernelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of kernel resources available to the +// specified project. +func (r *KernelsService) List(project string) *KernelsListCall { + c := &KernelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *KernelsListCall) Filter(filter string) *KernelsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *KernelsListCall) PageToken(pageToken string) *KernelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *KernelsListCall) Do() (*KernelList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/kernels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(KernelList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of kernel resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.kernels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels", + // "response": { + // "$ref": "KernelList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.get": + +type MachineTypesGetCall struct { + s *Service + project string + machineType string + opt_ map[string]interface{} +} + +// Get: Returns the specified machine type resource. +func (r *MachineTypesService) Get(project string, machineType string) *MachineTypesGetCall { + c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.machineType = machineType + return c +} + +func (c *MachineTypesGetCall) Do() (*MachineType, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/machineTypes/{machineType}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{machineType}", url.QueryEscape(c.machineType), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineType) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified machine type resource.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.get", + // "parameterOrder": [ + // "project", + // "machineType" + // ], + // "parameters": { + // "machineType": { + // "description": "Name of the machine type resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/machineTypes/{machineType}", + // "response": { + // "$ref": "MachineType" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.list": + +type MachineTypesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of machine type resources available to the +// specified project. +func (r *MachineTypesService) List(project string) *MachineTypesListCall { + c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesListCall) Do() (*MachineTypeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/machineTypes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/machineTypes", + // "response": { + // "$ref": "MachineTypeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.delete": + +type NetworksDeleteCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified network resource. +func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall { + c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified network resource.", + // "httpMethod": "DELETE", + // "id": "compute.networks.delete", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.get": + +type NetworksGetCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Get: Returns the specified network resource. +func (r *NetworksService) Get(project string, network string) *NetworksGetCall { + c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksGetCall) Do() (*Network, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Network) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified network resource.", + // "httpMethod": "GET", + // "id": "compute.networks.get", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Network" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.insert": + +type NetworksInsertCall struct { + s *Service + project string + network *Network + opt_ map[string]interface{} +} + +// Insert: Creates a network resource in the specified project using the +// data included in the request. +func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall { + c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.network) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a network resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.networks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "request": { + // "$ref": "Network" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.list": + +type NetworksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of network resources available to the +// specified project. +func (r *NetworksService) List(project string) *NetworksListCall { + c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *NetworksListCall) Filter(filter string) *NetworksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NetworksListCall) Do() (*NetworkList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(NetworkList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of network resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.networks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "response": { + // "$ref": "NetworkList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Returns the specified project resource. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified project resource.", + // "httpMethod": "GET", + // "id": "compute.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project resource to retrieve.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.setCommonInstanceMetadata": + +type ProjectsSetCommonInstanceMetadataCall struct { + s *Service + project string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetCommonInstanceMetadata: Sets metadata common to all instances +// within the specified project using the data included in the request. +func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall { + c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.metadata = metadata + return c +} + +func (c *ProjectsSetCommonInstanceMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/setCommonInstanceMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.projects.setCommonInstanceMetadata", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/setCommonInstanceMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.delete": + +type RoutesDeleteCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified route resource. +func (r *RoutesService) Delete(project string, route string) *RoutesDeleteCall { + c := &RoutesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified route resource.", + // "httpMethod": "DELETE", + // "id": "compute.routes.delete", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.get": + +type RoutesGetCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Get: Returns the specified route resource. +func (r *RoutesService) Get(project string, route string) *RoutesGetCall { + c := &RoutesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesGetCall) Do() (*Route, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Route) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified route resource.", + // "httpMethod": "GET", + // "id": "compute.routes.get", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Route" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.routes.insert": + +type RoutesInsertCall struct { + s *Service + project string + route *Route + opt_ map[string]interface{} +} + +// Insert: Creates a route resource in the specified project using the +// data included in the request. +func (r *RoutesService) Insert(project string, route *Route) *RoutesInsertCall { + c := &RoutesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.route) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a route resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.routes.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "request": { + // "$ref": "Route" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.list": + +type RoutesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of route resources available to the +// specified project. +func (r *RoutesService) List(project string) *RoutesListCall { + c := &RoutesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RoutesListCall) Filter(filter string) *RoutesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RoutesListCall) PageToken(pageToken string) *RoutesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RoutesListCall) Do() (*RouteList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RouteList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of route resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.routes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "response": { + // "$ref": "RouteList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.delete": + +type SnapshotsDeleteCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk snapshot resource. +func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall { + c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk snapshot resource.", + // "httpMethod": "DELETE", + // "id": "compute.snapshots.delete", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.get": + +type SnapshotsGetCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk snapshot resource. +func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall { + c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsGetCall) Do() (*Snapshot, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Snapshot) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk snapshot resource.", + // "httpMethod": "GET", + // "id": "compute.snapshots.get", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Snapshot" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.insert": + +type SnapshotsInsertCall struct { + s *Service + project string + snapshot *Snapshot + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk snapshot resource in the specified +// project using the data included in the request. +func (r *SnapshotsService) Insert(project string, snapshot *Snapshot) *SnapshotsInsertCall { + c := &SnapshotsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/snapshots") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk snapshot resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.snapshots.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots", + // "request": { + // "$ref": "Snapshot" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.list": + +type SnapshotsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk snapshot resources +// contained within the specified project. +func (r *SnapshotsService) List(project string) *SnapshotsListCall { + c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SnapshotsListCall) Do() (*SnapshotList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/global/snapshots") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SnapshotList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.snapshots.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots", + // "response": { + // "$ref": "SnapshotList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zoneOperations.delete": + +type ZoneOperationsDeleteCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified zone-specific operation resource. +func (r *ZoneOperationsService) Delete(project string, zone string, operation string) *ZoneOperationsDeleteCall { + c := &ZoneOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified zone-specific operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.zoneOperations.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.zoneOperations.get": + +type ZoneOperationsGetCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified zone-specific operation resource. +func (r *ZoneOperationsService) Get(project string, zone string, operation string) *ZoneOperationsGetCall { + c := &ZoneOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified zone-specific operation resource.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.get", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zoneOperations.list": + +type ZoneOperationsListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified zone. +func (r *ZoneOperationsService) List(project string, zone string) *ZoneOperationsListCall { + c := &ZoneOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZoneOperationsListCall) Filter(filter string) *ZoneOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZoneOperationsListCall) PageToken(pageToken string) *ZoneOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZoneOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.get": + +type ZonesGetCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// Get: Returns the specified zone resource. +func (r *ZonesService) Get(project string, zone string) *ZonesGetCall { + c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +func (c *ZonesGetCall) Do() (*Zone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones/{zone}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Zone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified zone resource.", + // "httpMethod": "GET", + // "id": "compute.zones.get", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}", + // "response": { + // "$ref": "Zone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.list": + +type ZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of zone resources available to the specified +// project. +func (r *ZonesService) List(project string) *ZonesListCall { + c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZonesListCall) Filter(filter string) *ZonesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum and default value is 100. +func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZonesListCall) Do() (*ZoneList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta14/projects/", "{project}/zones") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ZoneList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of zone resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.zones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones", + // "response": { + // "$ref": "ZoneList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-api.json b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-api.json new file mode 100644 index 0000000000000..bb851538c1950 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-api.json @@ -0,0 +1,6357 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"_UU0hweWJUeoapnMzW_8ULttsqM/1b42mTNhp-IHR0jf9o6NABcHCFc\"", + "discoveryVersion": "v1", + "id": "compute:v1beta15", + "name": "compute", + "version": "v1beta15", + "title": "Compute Engine API", + "description": "API for the Google Compute Engine service.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/compute_engine-16.png", + "x32": "http://www.google.com/images/icons/product/compute_engine-32.png" + }, + "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta15", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/compute/v1beta15/projects/", + "basePath": "/compute/v1beta15/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "compute/v1beta15/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/compute": { + "description": "View and manage your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/compute.readonly": { + "description": "View your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "AccessConfig": { + "id": "AccessConfig", + "type": "object", + "description": "An access configuration attached to an instance's network interface.", + "properties": { + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#accessConfig" + }, + "name": { + "type": "string", + "description": "Name of this access configuration." + }, + "natIP": { + "type": "string", + "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If not specified, the external IP will be drawn from a shared ephemeral pool." + }, + "type": { + "type": "string", + "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.", + "default": "ONE_TO_ONE_NAT" + } + } + }, + "Address": { + "id": "Address", + "type": "object", + "description": "A reserved address resource.", + "properties": { + "address": { + "type": "string", + "description": "The IP address represented by this resource." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#address" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.addresses.insert" + ] + } + }, + "region": { + "type": "string", + "description": "URL of the region where the address resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "The status of the address (output only)." + }, + "user": { + "type": "string" + } + } + }, + "AddressAggregatedList": { + "id": "AddressAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped address lists.", + "additionalProperties": { + "$ref": "AddressesScopedList", + "description": "Name of the scope containing this set of addresses." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#addressAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "AddressList": { + "id": "AddressList", + "type": "object", + "description": "Contains a list of address resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The address resources.", + "items": { + "$ref": "Address" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#addressList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "AddressesScopedList": { + "id": "AddressesScopedList", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "description": "List of addresses contained in this scope.", + "items": { + "$ref": "Address" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of addresses when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "AttachedDisk": { + "id": "AttachedDisk", + "type": "object", + "description": "An instance-attached disk resource.", + "properties": { + "boot": { + "type": "boolean", + "description": "Indicates that this is a boot disk. VM will use the first partition of the disk for its root filesystem." + }, + "deviceName": { + "type": "string", + "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system." + }, + "index": { + "type": "integer", + "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value (output only).", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#attachedDisk" + }, + "mode": { + "type": "string", + "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\"." + }, + "source": { + "type": "string", + "description": "Persistent disk only; the URL of the persistent disk resource." + }, + "type": { + "type": "string", + "description": "Type of the disk, either \"SCRATCH\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "DeprecationStatus": { + "id": "DeprecationStatus", + "type": "object", + "description": "Deprecation status for a public resource.", + "properties": { + "deleted": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED." + }, + "deprecated": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED." + }, + "obsolete": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE." + }, + "replacement": { + "type": "string", + "description": "A URL of the suggested replacement for the deprecated resource. The deprecated resource and its replacement must be resources of the same kind." + }, + "state": { + "type": "string", + "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error." + } + } + }, + "Disk": { + "id": "Disk", + "type": "object", + "description": "A persistent disk resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#disk" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "options": { + "type": "string", + "description": "Internal use only." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sizeGb": { + "type": "string", + "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.", + "format": "int64" + }, + "sourceImage": { + "type": "string", + "description": "The source image used to create this disk. Once the source image has been deleted from the system, this field will not be set, even if an image with the same name has been re-created." + }, + "sourceImageId": { + "type": "string", + "description": "The 'id' value of the image used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given image." + }, + "sourceSnapshot": { + "type": "string", + "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created." + }, + "sourceSnapshotId": { + "type": "string", + "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot." + }, + "status": { + "type": "string", + "description": "The status of disk creation (output only)." + }, + "zone": { + "type": "string", + "description": "URL of the zone where the disk resides (output only)." + } + } + }, + "DiskAggregatedList": { + "id": "DiskAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped disk lists.", + "additionalProperties": { + "$ref": "DisksScopedList", + "description": "Name of the scope containing this set of disks." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "DiskList": { + "id": "DiskList", + "type": "object", + "description": "Contains a list of persistent disk resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent disk resources.", + "items": { + "$ref": "Disk" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "DisksScopedList": { + "id": "DisksScopedList", + "type": "object", + "properties": { + "disks": { + "type": "array", + "description": "List of disks contained in this scope.", + "items": { + "$ref": "Disk" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of disks when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Firewall": { + "id": "Firewall", + "type": "object", + "description": "A firewall resource.", + "properties": { + "allowed": { + "type": "array", + "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.", + "items": { + "type": "object", + "properties": { + "IPProtocol": { + "type": "string", + "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number." + }, + "ports": { + "type": "array", + "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\n\nExample inputs include: [\"22\"], [\"80\",\"443\"] and [\"12345-12349\"].", + "items": { + "type": "string" + } + } + } + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#firewall" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceRanges": { + "type": "array", + "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "sourceTags": { + "type": "array", + "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "targetTags": { + "type": "array", + "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.", + "items": { + "type": "string" + } + } + } + }, + "FirewallList": { + "id": "FirewallList", + "type": "object", + "description": "Contains a list of firewall resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The firewall resources.", + "items": { + "$ref": "Firewall" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#firewallList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRule": { + "id": "ForwardingRule", + "type": "object", + "description": "A ForwardingRule resource. A ForwardingRule resource specifies which pool of target VMs to forward a packet to if it matches the given [IPAddress, IPProtocol, portRange] tuple.", + "properties": { + "IPAddress": { + "type": "string", + "description": "Value of the reserved IP address that this forwarding rule is serving on behalf of. The address resource must live in the same region as the forwarding rule. If left empty (default value), an ephemeral IP will be assigned." + }, + "IPProtocol": { + "type": "string", + "description": "The IP protocol to which this rule applies, can be either 'TCP' or 'UDP' (If left empty, will use TCP by default)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#forwardingRule" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "portRange": { + "type": "string", + "description": "If 'IPProtocol' is 'TCP' or 'UDP', only packets addressed to ports in the specified range will be forwarded to 'target'. If left empty (default value), all ports are forwarded. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges." + }, + "region": { + "type": "string", + "description": "URL of the region where the forwarding rule resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "target": { + "type": "string", + "description": "The URL of the target resource to receive the matched traffic. It must live in the same region as this forwarding rule." + } + } + }, + "ForwardingRuleAggregatedList": { + "id": "ForwardingRuleAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped forwarding rule lists.", + "additionalProperties": { + "$ref": "ForwardingRulesScopedList", + "description": "Name of the scope containing this set of addresses." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#forwardingRuleAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRuleList": { + "id": "ForwardingRuleList", + "type": "object", + "description": "Contains a list of ForwardingRule resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The ForwardingRule resources.", + "items": { + "$ref": "ForwardingRule" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#forwardingRuleList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRulesScopedList": { + "id": "ForwardingRulesScopedList", + "type": "object", + "properties": { + "forwardingRules": { + "type": "array", + "description": "List of forwarding rules contained in this scope.", + "items": { + "$ref": "ForwardingRule" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of forwarding rules when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "HealthCheckReference": { + "id": "HealthCheckReference", + "type": "object", + "properties": { + "healthCheck": { + "type": "string" + } + } + }, + "HealthStatus": { + "id": "HealthStatus", + "type": "object", + "properties": { + "healthState": { + "type": "string", + "description": "Health state of the instance." + }, + "instance": { + "type": "string", + "description": "URL of the instance resource." + }, + "ipAddress": { + "type": "string", + "description": "The IP address represented by this resource." + } + } + }, + "HttpHealthCheck": { + "id": "HttpHealthCheck", + "type": "object", + "description": "An HttpHealthCheck resource. This resource defines a template for how individual VMs should be checked for health, via HTTP.", + "properties": { + "checkIntervalSec": { + "type": "integer", + "description": "How often (in seconds) to send a health check. The default value is 5 seconds.", + "format": "int32" + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "healthyThreshold": { + "type": "integer", + "description": "A so-far unhealthy VM will be marked healthy after this many consecutive successes. The default value is 2.", + "format": "int32" + }, + "host": { + "type": "string", + "description": "The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#httpHealthCheck" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "port": { + "type": "integer", + "description": "The TCP port number for the HTTP health check request. The default value is 80.", + "format": "int32" + }, + "requestPath": { + "type": "string", + "description": "The request path of the HTTP health check request. The default value is \"/\"." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "timeoutSec": { + "type": "integer", + "description": "How long (in seconds) to wait before claiming failure. The default value is 5 seconds.", + "format": "int32" + }, + "unhealthyThreshold": { + "type": "integer", + "description": "A so-far healthy VM will be marked unhealthy after this many consecutive failures. The default value is 2.", + "format": "int32" + } + } + }, + "HttpHealthCheckList": { + "id": "HttpHealthCheckList", + "type": "object", + "description": "Contains a list of HttpHealthCheck resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The HttpHealthCheck resources.", + "items": { + "$ref": "HttpHealthCheck" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#httpHealthCheckList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "description": "A disk image resource.", + "properties": { + "archiveSizeBytes": { + "type": "string", + "description": "Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).", + "format": "int64" + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this image." + }, + "description": { + "type": "string", + "description": "Textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#image" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "preferredKernel": { + "type": "string", + "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "rawDisk": { + "type": "object", + "description": "The raw disk image parameters.", + "properties": { + "containerType": { + "type": "string", + "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.", + "default": "TAR" + }, + "sha1Checksum": { + "type": "string", + "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.", + "pattern": "[a-f0-9]{40}" + }, + "source": { + "type": "string", + "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceType": { + "type": "string", + "description": "Must be \"RAW\"; provided by the client when the disk image is created.", + "default": "RAW", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "status": { + "type": "string", + "description": "Status of the image (output only). It will be one of the following READY - after image has been successfully created and is ready for use FAILED - if creating the image fails for some reason PENDING - the image creation is in progress An image can be used to create other resources suck as instances only after the image has been successfully created and the status is set to READY." + } + } + }, + "ImageList": { + "id": "ImageList", + "type": "object", + "description": "Contains a list of disk image resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The disk image resources.", + "items": { + "$ref": "Image" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#imageList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "description": "An instance resource.", + "properties": { + "canIpForward": { + "type": "boolean", + "description": "Allows this instance to send packets with source IP addresses other than its own and receive packets with destination IP addresses other than its own. If this instance will be used as an IP gateway or it will be set as the next-hop in a Route resource, say true. If unsure, leave this set to false." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "disks": { + "type": "array", + "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.", + "items": { + "$ref": "AttachedDisk" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "image": { + "type": "string", + "description": "An optional URL of the disk image resource to be installed on this instance; provided by the client when the instance is created. Alternatively to passing the image, the client may choose to boot from a persistent disk, by setting boot=true flag on one of the entries in disks[] collection." + }, + "kernel": { + "type": "string", + "description": "URL of the kernel resource to use when booting. In case of booting from persistent disk, this parameter is required. When booting from a disk image, it is optional, but may be provided to use a different kernel than the one associated with the image." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#instance" + }, + "machineType": { + "type": "string", + "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "metadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information." + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkInterfaces": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "NetworkInterface" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + }, + "serviceAccounts": { + "type": "array", + "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.", + "items": { + "$ref": "ServiceAccount" + } + }, + "status": { + "type": "string", + "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional, human-readable explanation of the status (output only)." + }, + "tags": { + "$ref": "Tags", + "description": "A list of tags to be applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client on instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035." + }, + "zone": { + "type": "string", + "description": "URL of the zone where the instance resides (output only)." + } + } + }, + "InstanceAggregatedList": { + "id": "InstanceAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped instance lists.", + "additionalProperties": { + "$ref": "InstancesScopedList", + "description": "Name of the scope containing this set of instances." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "InstanceList": { + "id": "InstanceList", + "type": "object", + "description": "Contains a list of instance resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "A list of instance resources.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "InstanceReference": { + "id": "InstanceReference", + "type": "object", + "properties": { + "instance": { + "type": "string" + } + } + }, + "InstancesScopedList": { + "id": "InstancesScopedList", + "type": "object", + "properties": { + "instances": { + "type": "array", + "description": "List of instances contained in this scope.", + "items": { + "$ref": "Instance" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of instances when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Kernel": { + "id": "Kernel", + "type": "object", + "description": "A kernel resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this kernel." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#kernel" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "KernelList": { + "id": "KernelList", + "type": "object", + "description": "Contains a list of kernel resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The kernel resources.", + "items": { + "$ref": "Kernel" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#kernelList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineType": { + "id": "MachineType", + "type": "object", + "description": "A machine type resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this machine type." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "guestCpus": { + "type": "integer", + "description": "Count of CPUs exposed to the instance.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "imageSpaceGb": { + "type": "integer", + "description": "Space allotted for the image, defined in GB.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineType" + }, + "maximumPersistentDisks": { + "type": "integer", + "description": "Maximum persistent disks allowed.", + "format": "int32" + }, + "maximumPersistentDisksSizeGb": { + "type": "string", + "description": "Maximum total persistent disks size (GB) allowed.", + "format": "int64" + }, + "memoryMb": { + "type": "integer", + "description": "Physical memory assigned to the instance, defined in MB.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "scratchDisks": { + "type": "array", + "description": "List of extended scratch disks assigned to the instance.", + "items": { + "type": "object", + "properties": { + "diskGb": { + "type": "integer", + "description": "Size of the scratch disk, defined in GB.", + "format": "int32" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "zone": { + "type": "string", + "description": "Url of the zone where the machine type resides (output only)." + } + } + }, + "MachineTypeAggregatedList": { + "id": "MachineTypeAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped machine type lists.", + "additionalProperties": { + "$ref": "MachineTypesScopedList", + "description": "Name of the scope containing this set of machine types." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineTypeList": { + "id": "MachineTypeList", + "type": "object", + "description": "Contains a list of machine type resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The machine type resources.", + "items": { + "$ref": "MachineType" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineTypesScopedList": { + "id": "MachineTypesScopedList", + "type": "object", + "properties": { + "machineTypes": { + "type": "array", + "description": "List of machine types contained in this scope.", + "items": { + "$ref": "MachineType" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of machine types when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "description": "A metadata key/value entry.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the metadata's contents. This field is used for optimistic locking. An up-to-date metadata fingerprint must be provided in order to modify metadata.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.", + "pattern": "[a-zA-Z0-9-_]{1,128}", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + }, + "value": { + "type": "string", + "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 32768 bytes.", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + } + } + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#metadata" + } + } + }, + "Network": { + "id": "Network", + "type": "object", + "description": "A network resource.", + "properties": { + "IPv4Range": { + "type": "string", + "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "gatewayIPv4": { + "type": "string", + "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#network" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "NetworkInterface": { + "id": "NetworkInterface", + "type": "object", + "description": "A network interface resource attached to an instance.", + "properties": { + "accessConfigs": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "AccessConfig" + } + }, + "name": { + "type": "string", + "description": "Name of the network interface, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)." + }, + "network": { + "type": "string", + "description": "URL of the network resource attached to this interface.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkIP": { + "type": "string", + "description": "An optional IPV4 internal network address assigned to the instance for this network interface (output only)." + } + } + }, + "NetworkList": { + "id": "NetworkList", + "type": "object", + "description": "Contains a list of network resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The network resources.", + "items": { + "$ref": "Network" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#networkList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Operation": { + "id": "Operation", + "type": "object", + "description": "An operation resource, used to manage asynchronous API requests.", + "properties": { + "clientOperationId": { + "type": "string", + "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "endTime": { + "type": "string", + "description": "The time that this operation was completed. This is in RFC 3339 format (output only)." + }, + "error": { + "type": "object", + "description": "If errors occurred during processing of this operation, this field will be populated (output only).", + "properties": { + "errors": { + "type": "array", + "description": "The array of errors encountered while processing this operation.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error type identifier for this error." + }, + "location": { + "type": "string", + "description": "Indicates the field in the request which caused the error. This property is optional." + }, + "message": { + "type": "string", + "description": "An optional, human-readable error message." + } + } + } + } + } + }, + "httpErrorMessage": { + "type": "string", + "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)." + }, + "httpErrorStatusCode": { + "type": "integer", + "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "insertTime": { + "type": "string", + "description": "The time that this operation was requested. This is in RFC 3339 format (output only)." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#operation" + }, + "name": { + "type": "string", + "description": "Name of the resource (output only)." + }, + "operationType": { + "type": "string", + "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)." + }, + "progress": { + "type": "integer", + "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).", + "format": "int32" + }, + "region": { + "type": "string", + "description": "URL of the region where the operation resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only)." + }, + "statusMessage": { + "type": "string", + "description": "An optional textual description of the current status of the operation (output only)." + }, + "targetId": { + "type": "string", + "description": "Unique target id which identifies a particular incarnation of the target (output only).", + "format": "uint64" + }, + "targetLink": { + "type": "string", + "description": "URL of the resource the operation is mutating (output only)." + }, + "user": { + "type": "string", + "description": "User who requested the operation, for example \"user@example.com\" (output only)." + }, + "warnings": { + "type": "array", + "description": "If warning messages generated during processing of this operation, this field will be populated (output only).", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + }, + "zone": { + "type": "string", + "description": "URL of the zone where the operation resides (output only)." + } + } + }, + "OperationAggregatedList": { + "id": "OperationAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped operation lists.", + "additionalProperties": { + "$ref": "OperationsScopedList", + "description": "Name of the scope containing this set of operations." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "OperationList": { + "id": "OperationList", + "type": "object", + "description": "Contains a list of operation resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The operation resources.", + "items": { + "$ref": "Operation" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "OperationsScopedList": { + "id": "OperationsScopedList", + "type": "object", + "properties": { + "operations": { + "type": "array", + "description": "List of operations contained in this scope.", + "items": { + "$ref": "Operation" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of operations when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project resource. Projects can be created only in the APIs Console. Unless marked otherwise, values can only be modified in the console.", + "properties": { + "commonInstanceMetadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs available to all instances contained in this project." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#project" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this project.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "Quota": { + "id": "Quota", + "type": "object", + "description": "A quotas entry.", + "properties": { + "limit": { + "type": "number", + "description": "Quota limit for this metric.", + "format": "double" + }, + "metric": { + "type": "string", + "description": "Name of the quota metric." + }, + "usage": { + "type": "number", + "description": "Current usage of this metric.", + "format": "double" + } + } + }, + "Region": { + "id": "Region", + "type": "object", + "description": "Region resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this region." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#region" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this region.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the region, \"UP\" or \"DOWN\"." + }, + "zones": { + "type": "array", + "description": "A list of zones homed in this region, in the form of resource URLs.", + "items": { + "type": "string" + } + } + } + }, + "RegionList": { + "id": "RegionList", + "type": "object", + "description": "Contains a list of region resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The region resources.", + "items": { + "$ref": "Region" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#regionList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Route": { + "id": "Route", + "type": "object", + "description": "The route resource. A Route is a rule that specifies how certain packets should be handled by the virtual network. Routes are associated with VMs by tag and the set of Routes for a particular VM is called its routing table. For each packet leaving a VM, the system searches that VM's routing table for a single best matching Route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the Route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the next_hop field of the winning Route -- either to another VM destination, a VM gateway or a GCE operated gateway. Packets that do not match any Route in the sending VM's routing table will be dropped.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "destRange": { + "type": "string", + "description": "Which packets does this route apply to?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#route" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this route is applied; provided by the client when the route is created.", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "nextHopGateway": { + "type": "string", + "description": "The URL to a gateway that should handle matching packets." + }, + "nextHopInstance": { + "type": "string", + "description": "The URL to an instance that should handle matching packets." + }, + "nextHopIp": { + "type": "string", + "description": "The network IP address of an instance that should handle matching packets." + }, + "nextHopNetwork": { + "type": "string", + "description": "The URL of the local network if it should handle matching packets." + }, + "priority": { + "type": "integer", + "description": "Breaks ties between Routes of equal specificity. Routes with smaller values win when tied with routes with larger values.", + "format": "uint32", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "tags": { + "type": "array", + "description": "A list of instance tags to which this route applies.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "warnings": { + "type": "array", + "description": "If potential misconfigurations are detected for this route, this field will be populated with warning messages.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + } + }, + "RouteList": { + "id": "RouteList", + "type": "object", + "description": "Contains a list of route resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The route resources.", + "items": { + "$ref": "Route" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#routeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "SerialPortOutput": { + "id": "SerialPortOutput", + "type": "object", + "description": "An instance serial console output.", + "properties": { + "contents": { + "type": "string", + "description": "The contents of the console output." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serialPortOutput" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "ServiceAccount": { + "id": "ServiceAccount", + "type": "object", + "description": "A service account.", + "properties": { + "email": { + "type": "string", + "description": "Email address of the service account." + }, + "scopes": { + "type": "array", + "description": "The list of scopes to be made available for this service account.", + "items": { + "type": "string" + } + } + } + }, + "Snapshot": { + "id": "Snapshot", + "type": "object", + "description": "A persistent disk snapshot resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "diskSizeGb": { + "type": "string", + "description": "Size of the persistent disk snapshot, specified in GB (output only).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#snapshot" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceDisk": { + "type": "string", + "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created (output only)." + }, + "sourceDiskId": { + "type": "string", + "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name." + }, + "status": { + "type": "string", + "description": "The status of the persistent disk snapshot (output only)." + } + } + }, + "SnapshotList": { + "id": "SnapshotList", + "type": "object", + "description": "Contains a list of persistent disk snapshot resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent snapshot resources.", + "items": { + "$ref": "Snapshot" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#snapshotList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Tags": { + "id": "Tags", + "type": "object", + "description": "A set of instance tags.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the tags stored in this object. This field is used optimistic locking. An up-to-date tags fingerprint must be provided in order to modify tags.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.", + "items": { + "type": "string" + } + } + } + }, + "TargetPool": { + "id": "TargetPool", + "type": "object", + "description": "A TargetPool resource. This resource defines a pool of VMs, associated HttpHealthCheck resources, and the fallback TargetPool.", + "properties": { + "backupPool": { + "type": "string", + "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool, and its 'failoverRatio' field is properly set to a value between [0, 1].\n\n'backupPool' and 'failoverRatio' together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below 'failoverRatio', traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' and 'backupPool' are not set, or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "failoverRatio": { + "type": "number", + "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool (i.e., not as a backup pool to some other target pool). The value of the field must be in [0, 1].\n\nIf set, 'backupPool' must also be set. They together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below this number, traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' is not set or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy.", + "format": "float" + }, + "healthChecks": { + "type": "array", + "description": "A list of URLs to the HttpHealthCheck resource. A member VM in this pool is considered healthy if and only if all specified health checks pass. An empty list means all member VMs will be considered healthy at all times.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "instances": { + "type": "array", + "description": "A list of resource URLs to the member VMs serving this pool. They must live in zones contained in the same region as this pool.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#targetPool" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "region": { + "type": "string", + "description": "URL of the region where the target pool resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sessionAffinity": { + "type": "string", + "description": "Sesssion affinity option, must be one of the following values: 'NONE': Connections from the same client IP may go to any VM in the pool; 'CLIENT_IP': Connections from the same client IP will go to the same VM in the pool while that VM remains healthy. 'CLIENT_IP_PROTO': Connections from the same client IP with the same IP protocol will go to the same VM in the pool while that VM remains healthy." + } + } + }, + "TargetPoolAggregatedList": { + "id": "TargetPoolAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped target pool lists.", + "additionalProperties": { + "$ref": "TargetPoolsScopedList", + "description": "Name of the scope containing this set of target pools." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "TargetPoolInstanceHealth": { + "id": "TargetPoolInstanceHealth", + "type": "object", + "properties": { + "healthStatus": { + "type": "array", + "items": { + "$ref": "HealthStatus" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolInstanceHealth" + } + } + }, + "TargetPoolList": { + "id": "TargetPoolList", + "type": "object", + "description": "Contains a list of TargetPool resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The TargetPool resources.", + "items": { + "$ref": "TargetPool" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "TargetPoolsScopedList": { + "id": "TargetPoolsScopedList", + "type": "object", + "properties": { + "targetPools": { + "type": "array", + "description": "List of target pools contained in this scope.", + "items": { + "$ref": "TargetPool" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of addresses when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning." + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "TargetReference": { + "id": "TargetReference", + "type": "object", + "properties": { + "target": { + "type": "string" + } + } + }, + "Zone": { + "id": "Zone", + "type": "object", + "description": "A zone resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this zone." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#zone" + }, + "maintenanceWindows": { + "type": "array", + "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.", + "items": { + "type": "object", + "properties": { + "beginTime": { + "type": "string", + "description": "Begin time of the maintenance window, in RFC 3339 format." + }, + "description": { + "type": "string", + "description": "Textual description of the maintenance window." + }, + "endTime": { + "type": "string", + "description": "End time of the maintenance window, in RFC 3339 format." + }, + "name": { + "type": "string", + "description": "Name of the maintenance window." + } + } + } + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this zone.", + "items": { + "$ref": "Quota" + } + }, + "region": { + "type": "string", + "description": "Full URL reference to the region which hosts the zone (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the zone. \"UP\" or \"DOWN\"." + } + } + }, + "ZoneList": { + "id": "ZoneList", + "type": "object", + "description": "Contains a list of zone resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The zone resources.", + "items": { + "$ref": "Zone" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#zoneList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + } + }, + "resources": { + "addresses": { + "methods": { + "aggregatedList": { + "id": "compute.addresses.aggregatedList", + "path": "{project}/aggregated/addresses", + "httpMethod": "GET", + "description": "Retrieves the list of addresses grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "AddressAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.addresses.delete", + "path": "{project}/regions/{region}/addresses/{address}", + "httpMethod": "DELETE", + "description": "Deletes the specified address resource.", + "parameters": { + "address": { + "type": "string", + "description": "Name of the address resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "address" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.addresses.get", + "path": "{project}/regions/{region}/addresses/{address}", + "httpMethod": "GET", + "description": "Returns the specified address resource.", + "parameters": { + "address": { + "type": "string", + "description": "Name of the address resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "address" + ], + "response": { + "$ref": "Address" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.addresses.insert", + "path": "{project}/regions/{region}/addresses", + "httpMethod": "POST", + "description": "Creates an address resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "Address" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.addresses.list", + "path": "{project}/regions/{region}/addresses", + "httpMethod": "GET", + "description": "Retrieves the list of address resources contained within the specified region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "AddressList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "disks": { + "methods": { + "aggregatedList": { + "id": "compute.disks.aggregatedList", + "path": "{project}/aggregated/disks", + "httpMethod": "GET", + "description": "Retrieves the list of disks grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "DiskAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "createSnapshot": { + "id": "compute.disks.createSnapshot", + "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot", + "httpMethod": "POST", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "request": { + "$ref": "Snapshot" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.disks.delete", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.disks.get", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Disk" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.disks.insert", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "POST", + "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "sourceImage": { + "type": "string", + "description": "Optional. Source image to restore onto a disk.", + "location": "query" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Disk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.disks.list", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "DiskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "firewalls": { + "methods": { + "delete": { + "id": "compute.firewalls.delete", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "DELETE", + "description": "Deletes the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.firewalls.get", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "GET", + "description": "Returns the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Firewall" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.firewalls.insert", + "path": "{project}/global/firewalls", + "httpMethod": "POST", + "description": "Creates a firewall resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.firewalls.list", + "path": "{project}/global/firewalls", + "httpMethod": "GET", + "description": "Retrieves the list of firewall resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "FirewallList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.firewalls.patch", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PATCH", + "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.firewalls.update", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PUT", + "description": "Updates the specified firewall resource with the data included in the request.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "forwardingRules": { + "methods": { + "aggregatedList": { + "id": "compute.forwardingRules.aggregatedList", + "path": "{project}/aggregated/forwardingRules", + "httpMethod": "GET", + "description": "Retrieves the list of forwarding rules grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ForwardingRuleAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.forwardingRules.delete", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + "httpMethod": "DELETE", + "description": "Deletes the specified ForwardingRule resource.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.forwardingRules.get", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + "httpMethod": "GET", + "description": "Returns the specified ForwardingRule resource.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "response": { + "$ref": "ForwardingRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.forwardingRules.insert", + "path": "{project}/regions/{region}/forwardingRules", + "httpMethod": "POST", + "description": "Creates a ForwardingRule resource in the specified project and region using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "ForwardingRule" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.forwardingRules.list", + "path": "{project}/regions/{region}/forwardingRules", + "httpMethod": "GET", + "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "ForwardingRuleList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setTarget": { + "id": "compute.forwardingRules.setTarget", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", + "httpMethod": "POST", + "description": "Changes target url for forwarding rule.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource in which target is to be set.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "request": { + "$ref": "TargetReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "globalOperations": { + "methods": { + "aggregatedList": { + "id": "compute.globalOperations.aggregatedList", + "path": "{project}/aggregated/operations", + "httpMethod": "GET", + "description": "Retrieves the list of all operations grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.globalOperations.delete", + "path": "{project}/global/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.globalOperations.get", + "path": "{project}/global/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.globalOperations.list", + "path": "{project}/global/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "httpHealthChecks": { + "methods": { + "delete": { + "id": "compute.httpHealthChecks.delete", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "DELETE", + "description": "Deletes the specified HttpHealthCheck resource.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.httpHealthChecks.get", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "GET", + "description": "Returns the specified HttpHealthCheck resource.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "response": { + "$ref": "HttpHealthCheck" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.httpHealthChecks.insert", + "path": "{project}/global/httpHealthChecks", + "httpMethod": "POST", + "description": "Creates a HttpHealthCheck resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.httpHealthChecks.list", + "path": "{project}/global/httpHealthChecks", + "httpMethod": "GET", + "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "HttpHealthCheckList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.httpHealthChecks.patch", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "PATCH", + "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.httpHealthChecks.update", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "PUT", + "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "images": { + "methods": { + "delete": { + "id": "compute.images.delete", + "path": "{project}/global/images/{image}", + "httpMethod": "DELETE", + "description": "Deletes the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deprecate": { + "id": "compute.images.deprecate", + "path": "{project}/global/images/{image}/deprecate", + "httpMethod": "POST", + "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + "parameters": { + "image": { + "type": "string", + "description": "Image name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "request": { + "$ref": "DeprecationStatus" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.images.get", + "path": "{project}/global/images/{image}", + "httpMethod": "GET", + "description": "Returns the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.images.insert", + "path": "{project}/global/images", + "httpMethod": "POST", + "description": "Creates an image resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "list": { + "id": "compute.images.list", + "path": "{project}/global/images", + "httpMethod": "GET", + "description": "Retrieves the list of image resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ImageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "instances": { + "methods": { + "addAccessConfig": { + "id": "compute.instances.addAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + "httpMethod": "POST", + "description": "Adds an access config to an instance's network interface.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "networkInterface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "networkInterface" + ], + "request": { + "$ref": "AccessConfig" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "aggregatedList": { + "id": "compute.instances.aggregatedList", + "path": "{project}/aggregated/instances", + "httpMethod": "GET", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstanceAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "attachDisk": { + "id": "compute.instances.attachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + "httpMethod": "POST", + "description": "Attaches a disk resource to an instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "AttachedDisk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.instances.delete", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deleteAccessConfig": { + "id": "compute.instances.deleteAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + "httpMethod": "POST", + "description": "Deletes an access config from an instance's network interface.", + "parameters": { + "accessConfig": { + "type": "string", + "description": "Access config name.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "networkInterface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "accessConfig", + "networkInterface" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "detachDisk": { + "id": "compute.instances.detachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + "httpMethod": "POST", + "description": "Detaches a disk from an instance.", + "parameters": { + "deviceName": { + "type": "string", + "description": "Disk device name to detach.", + "required": true, + "pattern": "\\w[\\w.-]{0,254}", + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "deviceName" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.instances.get", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "GET", + "description": "Returns the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Instance" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getSerialPortOutput": { + "id": "compute.instances.getSerialPortOutput", + "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + "httpMethod": "GET", + "description": "Returns the specified instance's serial port output.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "SerialPortOutput" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.instances.insert", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "POST", + "description": "Creates an instance resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Instance" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.instances.list", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "GET", + "description": "Retrieves the list of instance resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "InstanceList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "reset": { + "id": "compute.instances.reset", + "path": "{project}/zones/{zone}/instances/{instance}/reset", + "httpMethod": "POST", + "description": "Performs a hard reset on the instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setMetadata": { + "id": "compute.instances.setMetadata", + "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + "httpMethod": "POST", + "description": "Sets metadata for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setTags": { + "id": "compute.instances.setTags", + "path": "{project}/zones/{zone}/instances/{instance}/setTags", + "httpMethod": "POST", + "description": "Sets tags for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Tags" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "kernels": { + "methods": { + "get": { + "id": "compute.kernels.get", + "path": "{project}/global/kernels/{kernel}", + "httpMethod": "GET", + "description": "Returns the specified kernel resource.", + "parameters": { + "kernel": { + "type": "string", + "description": "Name of the kernel resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "kernel" + ], + "response": { + "$ref": "Kernel" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.kernels.list", + "path": "{project}/global/kernels", + "httpMethod": "GET", + "description": "Retrieves the list of kernel resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "KernelList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "machineTypes": { + "methods": { + "aggregatedList": { + "id": "compute.machineTypes.aggregatedList", + "path": "{project}/aggregated/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "MachineTypeAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "get": { + "id": "compute.machineTypes.get", + "path": "{project}/zones/{zone}/machineTypes/{machineType}", + "httpMethod": "GET", + "description": "Returns the specified machine type resource.", + "parameters": { + "machineType": { + "type": "string", + "description": "Name of the machine type resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "machineType" + ], + "response": { + "$ref": "MachineType" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.machineTypes.list", + "path": "{project}/zones/{zone}/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "MachineTypeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "networks": { + "methods": { + "delete": { + "id": "compute.networks.delete", + "path": "{project}/global/networks/{network}", + "httpMethod": "DELETE", + "description": "Deletes the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.networks.get", + "path": "{project}/global/networks/{network}", + "httpMethod": "GET", + "description": "Returns the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Network" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.networks.insert", + "path": "{project}/global/networks", + "httpMethod": "POST", + "description": "Creates a network resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Network" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.networks.list", + "path": "{project}/global/networks", + "httpMethod": "GET", + "description": "Retrieves the list of network resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "NetworkList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "compute.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Returns the specified project resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project resource to retrieve.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setCommonInstanceMetadata": { + "id": "compute.projects.setCommonInstanceMetadata", + "path": "{project}/setCommonInstanceMetadata", + "httpMethod": "POST", + "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "regionOperations": { + "methods": { + "delete": { + "id": "compute.regionOperations.delete", + "path": "{project}/regions/{region}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified region-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.regionOperations.get", + "path": "{project}/regions/{region}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified region-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.regionOperations.list", + "path": "{project}/regions/{region}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "regions": { + "methods": { + "get": { + "id": "compute.regions.get", + "path": "{project}/regions/{region}", + "httpMethod": "GET", + "description": "Returns the specified region resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "Region" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.regions.list", + "path": "{project}/regions", + "httpMethod": "GET", + "description": "Retrieves the list of region resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "RegionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "routes": { + "methods": { + "delete": { + "id": "compute.routes.delete", + "path": "{project}/global/routes/{route}", + "httpMethod": "DELETE", + "description": "Deletes the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.routes.get", + "path": "{project}/global/routes/{route}", + "httpMethod": "GET", + "description": "Returns the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Route" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.routes.insert", + "path": "{project}/global/routes", + "httpMethod": "POST", + "description": "Creates a route resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Route" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.routes.list", + "path": "{project}/global/routes", + "httpMethod": "GET", + "description": "Retrieves the list of route resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "RouteList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "snapshots": { + "methods": { + "delete": { + "id": "compute.snapshots.delete", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.snapshots.get", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Snapshot" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.snapshots.list", + "path": "{project}/global/snapshots", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "SnapshotList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "targetPools": { + "methods": { + "addHealthCheck": { + "id": "compute.targetPools.addHealthCheck", + "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", + "httpMethod": "POST", + "description": "Adds health check URL to targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which health_check_url is to be added.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "HealthCheckReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "addInstance": { + "id": "compute.targetPools.addInstance", + "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance", + "httpMethod": "POST", + "description": "Adds instance url to targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which instance_url is to be added.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "InstanceReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "aggregatedList": { + "id": "compute.targetPools.aggregatedList", + "path": "{project}/aggregated/targetPools", + "httpMethod": "GET", + "description": "Retrieves the list of target pools grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "TargetPoolAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.targetPools.delete", + "path": "{project}/regions/{region}/targetPools/{targetPool}", + "httpMethod": "DELETE", + "description": "Deletes the specified TargetPool resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.targetPools.get", + "path": "{project}/regions/{region}/targetPools/{targetPool}", + "httpMethod": "GET", + "description": "Returns the specified TargetPool resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "response": { + "$ref": "TargetPool" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getHealth": { + "id": "compute.targetPools.getHealth", + "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth", + "httpMethod": "POST", + "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which the queried instance belongs.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "InstanceReference" + }, + "response": { + "$ref": "TargetPoolInstanceHealth" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.targetPools.insert", + "path": "{project}/regions/{region}/targetPools", + "httpMethod": "POST", + "description": "Creates a TargetPool resource in the specified project and region using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "TargetPool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.targetPools.list", + "path": "{project}/regions/{region}/targetPools", + "httpMethod": "GET", + "description": "Retrieves the list of TargetPool resources available to the specified project and region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "TargetPoolList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "removeHealthCheck": { + "id": "compute.targetPools.removeHealthCheck", + "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", + "httpMethod": "POST", + "description": "Removes health check URL from targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which health_check_url is to be removed.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "HealthCheckReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "removeInstance": { + "id": "compute.targetPools.removeInstance", + "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance", + "httpMethod": "POST", + "description": "Removes instance URL from targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which instance_url is to be removed.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "InstanceReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setBackup": { + "id": "compute.targetPools.setBackup", + "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup", + "httpMethod": "POST", + "description": "Changes backup pool configurations.", + "parameters": { + "failoverRatio": { + "type": "number", + "description": "New failoverRatio value for the containing target pool.", + "format": "float", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource for which the backup is to be set.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "zoneOperations": { + "methods": { + "delete": { + "id": "compute.zoneOperations.delete", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.zoneOperations.get", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zoneOperations.list", + "path": "{project}/zones/{zone}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zones": { + "methods": { + "get": { + "id": "compute.zones.get", + "path": "{project}/zones/{zone}", + "httpMethod": "GET", + "description": "Returns the specified zone resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "Zone" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zones.list", + "path": "{project}/zones", + "httpMethod": "GET", + "description": "Retrieves the list of zone resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ZoneList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-gen.go b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-gen.go new file mode 100644 index 0000000000000..5f08be9ef9b5e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta15/compute-gen.go @@ -0,0 +1,10787 @@ +// Package compute provides access to the Compute Engine API. +// +// See https://developers.google.com/compute/docs/reference/v1beta15 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/compute/v1beta15" +// ... +// computeService, err := compute.New(oauthHttpClient) +package compute + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "compute:v1beta15" +const apiName = "compute" +const apiVersion = "v1beta15" +const basePath = "https://www.googleapis.com/compute/v1beta15/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Compute Engine resources + ComputeScope = "https://www.googleapis.com/auth/compute" + + // View your Google Compute Engine resources + ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly" + + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Addresses = NewAddressesService(s) + s.Disks = NewDisksService(s) + s.Firewalls = NewFirewallsService(s) + s.ForwardingRules = NewForwardingRulesService(s) + s.GlobalOperations = NewGlobalOperationsService(s) + s.HttpHealthChecks = NewHttpHealthChecksService(s) + s.Images = NewImagesService(s) + s.Instances = NewInstancesService(s) + s.Kernels = NewKernelsService(s) + s.MachineTypes = NewMachineTypesService(s) + s.Networks = NewNetworksService(s) + s.Projects = NewProjectsService(s) + s.RegionOperations = NewRegionOperationsService(s) + s.Regions = NewRegionsService(s) + s.Routes = NewRoutesService(s) + s.Snapshots = NewSnapshotsService(s) + s.TargetPools = NewTargetPoolsService(s) + s.ZoneOperations = NewZoneOperationsService(s) + s.Zones = NewZonesService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Addresses *AddressesService + + Disks *DisksService + + Firewalls *FirewallsService + + ForwardingRules *ForwardingRulesService + + GlobalOperations *GlobalOperationsService + + HttpHealthChecks *HttpHealthChecksService + + Images *ImagesService + + Instances *InstancesService + + Kernels *KernelsService + + MachineTypes *MachineTypesService + + Networks *NetworksService + + Projects *ProjectsService + + RegionOperations *RegionOperationsService + + Regions *RegionsService + + Routes *RoutesService + + Snapshots *SnapshotsService + + TargetPools *TargetPoolsService + + ZoneOperations *ZoneOperationsService + + Zones *ZonesService +} + +func NewAddressesService(s *Service) *AddressesService { + rs := &AddressesService{s: s} + return rs +} + +type AddressesService struct { + s *Service +} + +func NewDisksService(s *Service) *DisksService { + rs := &DisksService{s: s} + return rs +} + +type DisksService struct { + s *Service +} + +func NewFirewallsService(s *Service) *FirewallsService { + rs := &FirewallsService{s: s} + return rs +} + +type FirewallsService struct { + s *Service +} + +func NewForwardingRulesService(s *Service) *ForwardingRulesService { + rs := &ForwardingRulesService{s: s} + return rs +} + +type ForwardingRulesService struct { + s *Service +} + +func NewGlobalOperationsService(s *Service) *GlobalOperationsService { + rs := &GlobalOperationsService{s: s} + return rs +} + +type GlobalOperationsService struct { + s *Service +} + +func NewHttpHealthChecksService(s *Service) *HttpHealthChecksService { + rs := &HttpHealthChecksService{s: s} + return rs +} + +type HttpHealthChecksService struct { + s *Service +} + +func NewImagesService(s *Service) *ImagesService { + rs := &ImagesService{s: s} + return rs +} + +type ImagesService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewKernelsService(s *Service) *KernelsService { + rs := &KernelsService{s: s} + return rs +} + +type KernelsService struct { + s *Service +} + +func NewMachineTypesService(s *Service) *MachineTypesService { + rs := &MachineTypesService{s: s} + return rs +} + +type MachineTypesService struct { + s *Service +} + +func NewNetworksService(s *Service) *NetworksService { + rs := &NetworksService{s: s} + return rs +} + +type NetworksService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewRegionOperationsService(s *Service) *RegionOperationsService { + rs := &RegionOperationsService{s: s} + return rs +} + +type RegionOperationsService struct { + s *Service +} + +func NewRegionsService(s *Service) *RegionsService { + rs := &RegionsService{s: s} + return rs +} + +type RegionsService struct { + s *Service +} + +func NewRoutesService(s *Service) *RoutesService { + rs := &RoutesService{s: s} + return rs +} + +type RoutesService struct { + s *Service +} + +func NewSnapshotsService(s *Service) *SnapshotsService { + rs := &SnapshotsService{s: s} + return rs +} + +type SnapshotsService struct { + s *Service +} + +func NewTargetPoolsService(s *Service) *TargetPoolsService { + rs := &TargetPoolsService{s: s} + return rs +} + +type TargetPoolsService struct { + s *Service +} + +func NewZoneOperationsService(s *Service) *ZoneOperationsService { + rs := &ZoneOperationsService{s: s} + return rs +} + +type ZoneOperationsService struct { + s *Service +} + +func NewZonesService(s *Service) *ZonesService { + rs := &ZonesService{s: s} + return rs +} + +type ZonesService struct { + s *Service +} + +type AccessConfig struct { + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of this access configuration. + Name string `json:"name,omitempty"` + + // NatIP: An external IP address associated with this instance. Specify + // an unused static IP address available to the project. If not + // specified, the external IP will be drawn from a shared ephemeral + // pool. + NatIP string `json:"natIP,omitempty"` + + // Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This + // configures port-for-port NAT to the internet. + Type string `json:"type,omitempty"` +} + +type Address struct { + // Address: The IP address represented by this resource. + Address string `json:"address,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Region: URL of the region where the address resides (output only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the address (output only). + Status string `json:"status,omitempty"` + + User string `json:"user,omitempty"` +} + +type AddressAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped address lists. + Items *AddressAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type AddressAggregatedListItems struct { +} + +type AddressList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The address resources. + Items []*Address `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type AddressesScopedList struct { + // Addresses: List of addresses contained in this scope. + Addresses []*Address `json:"addresses,omitempty"` + + // Warning: Informational warning which replaces the list of addresses + // when the list is empty. + Warning *AddressesScopedListWarning `json:"warning,omitempty"` +} + +type AddressesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*AddressesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type AddressesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type AttachedDisk struct { + // Boot: Indicates that this is a boot disk. VM will use the first + // partition of the disk for its root filesystem. + Boot bool `json:"boot,omitempty"` + + // DeviceName: Persistent disk only; must be unique within the instance + // when specified. This represents a unique device name that is + // reflected into the /dev/ tree of a Linux operating system running + // within the instance. If not specified, a default will be chosen by + // the system. + DeviceName string `json:"deviceName,omitempty"` + + // Index: A zero-based index to assign to this disk, where 0 is reserved + // for the boot disk. If not specified, the server will choose an + // appropriate value (output only). + Index int64 `json:"index,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Mode: The mode in which to attach this disk, either "READ_WRITE" or + // "READ_ONLY". + Mode string `json:"mode,omitempty"` + + // Source: Persistent disk only; the URL of the persistent disk + // resource. + Source string `json:"source,omitempty"` + + // Type: Type of the disk, either "SCRATCH" or "PERSISTENT". Note that + // persistent disks must be created before you can specify them here. + Type string `json:"type,omitempty"` +} + +type DeprecationStatus struct { + // Deleted: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DELETED. + Deleted string `json:"deleted,omitempty"` + + // Deprecated: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DEPRECATED. + Deprecated string `json:"deprecated,omitempty"` + + // Obsolete: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to OBSOLETE. + Obsolete string `json:"obsolete,omitempty"` + + // Replacement: A URL of the suggested replacement for the deprecated + // resource. The deprecated resource and its replacement must be + // resources of the same kind. + Replacement string `json:"replacement,omitempty"` + + // State: The deprecation state. Can be "DEPRECATED", "OBSOLETE", or + // "DELETED". Operations which create a new resource using a + // "DEPRECATED" resource will return successfully, but with a warning + // indicating the deprecated resource and recommending its replacement. + // New uses of "OBSOLETE" or "DELETED" resources will result in an + // error. + State string `json:"state,omitempty"` +} + +type Disk struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Options: Internal use only. + Options string `json:"options,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SizeGb: Size of the persistent disk, specified in GB. This parameter + // is optional when creating a disk from a disk image or a snapshot, + // otherwise it is required. + SizeGb int64 `json:"sizeGb,omitempty,string"` + + // SourceImage: The source image used to create this disk. Once the + // source image has been deleted from the system, this field will not be + // set, even if an image with the same name has been re-created. + SourceImage string `json:"sourceImage,omitempty"` + + // SourceImageId: The 'id' value of the image used to create this disk. + // This value may be used to determine whether the disk was created from + // the current or a previous instance of a given image. + SourceImageId string `json:"sourceImageId,omitempty"` + + // SourceSnapshot: The source snapshot used to create this disk. Once + // the source snapshot has been deleted from the system, this field will + // be cleared, and will not be set even if a snapshot with the same name + // has been re-created. + SourceSnapshot string `json:"sourceSnapshot,omitempty"` + + // SourceSnapshotId: The 'id' value of the snapshot used to create this + // disk. This value may be used to determine whether the disk was + // created from the current or a previous instance of a given disk + // snapshot. + SourceSnapshotId string `json:"sourceSnapshotId,omitempty"` + + // Status: The status of disk creation (output only). + Status string `json:"status,omitempty"` + + // Zone: URL of the zone where the disk resides (output only). + Zone string `json:"zone,omitempty"` +} + +type DiskAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped disk lists. + Items *DiskAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type DiskAggregatedListItems struct { +} + +type DiskList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent disk resources. + Items []*Disk `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type DisksScopedList struct { + // Disks: List of disks contained in this scope. + Disks []*Disk `json:"disks,omitempty"` + + // Warning: Informational warning which replaces the list of disks when + // the list is empty. + Warning *DisksScopedListWarning `json:"warning,omitempty"` +} + +type DisksScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*DisksScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type DisksScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Firewall struct { + // Allowed: The list of rules specified by this firewall. Each rule + // specifies a protocol and port-range tuple that describes a permitted + // connection. + Allowed []*FirewallAllowed `json:"allowed,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this firewall is applied; + // provided by the client when the firewall is created. + Network string `json:"network,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceRanges: A list of IP address blocks expressed in CIDR format + // which this rule applies to. One or both of sourceRanges and + // sourceTags may be set; an inbound connection is allowed if either the + // range or the tag of the source matches. + SourceRanges []string `json:"sourceRanges,omitempty"` + + // SourceTags: A list of instance tags which this rule applies to. One + // or both of sourceRanges and sourceTags may be set; an inbound + // connection is allowed if either the range or the tag of the source + // matches. + SourceTags []string `json:"sourceTags,omitempty"` + + // TargetTags: A list of instance tags indicating sets of instances + // located on network which may make network connections as specified in + // allowed. If no targetTags are specified, the firewall rule applies to + // all instances on the specified network. + TargetTags []string `json:"targetTags,omitempty"` +} + +type FirewallAllowed struct { + // IPProtocol: Required; this is the IP protocol that is allowed for + // this rule. This can either be a well known protocol string (tcp, udp + // or icmp) or the IP protocol number. + IPProtocol string `json:"IPProtocol,omitempty"` + + // Ports: An optional list of ports which are allowed. It is an error to + // specify this for any protocol that isn't UDP or TCP. Each entry must + // be either an integer or a range. If not specified, connections + // through any port are allowed. + // + // Example inputs include: ["22"], + // ["80","443"] and ["12345-12349"]. + Ports []string `json:"ports,omitempty"` +} + +type FirewallList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The firewall resources. + Items []*Firewall `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRule struct { + // IPAddress: Value of the reserved IP address that this forwarding rule + // is serving on behalf of. The address resource must live in the same + // region as the forwarding rule. If left empty (default value), an + // ephemeral IP will be assigned. + IPAddress string `json:"IPAddress,omitempty"` + + // IPProtocol: The IP protocol to which this rule applies, can be either + // 'TCP' or 'UDP' (If left empty, will use TCP by default). + IPProtocol string `json:"IPProtocol,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PortRange: If 'IPProtocol' is 'TCP' or 'UDP', only packets addressed + // to ports in the specified range will be forwarded to 'target'. If + // left empty (default value), all ports are forwarded. Forwarding rules + // with the same [IPAddress, IPProtocol] pair must have disjoint port + // ranges. + PortRange string `json:"portRange,omitempty"` + + // Region: URL of the region where the forwarding rule resides (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Target: The URL of the target resource to receive the matched + // traffic. It must live in the same region as this forwarding rule. + Target string `json:"target,omitempty"` +} + +type ForwardingRuleAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped forwarding rule lists. + Items *ForwardingRuleAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRuleAggregatedListItems struct { +} + +type ForwardingRuleList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The ForwardingRule resources. + Items []*ForwardingRule `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRulesScopedList struct { + // ForwardingRules: List of forwarding rules contained in this scope. + ForwardingRules []*ForwardingRule `json:"forwardingRules,omitempty"` + + // Warning: Informational warning which replaces the list of forwarding + // rules when the list is empty. + Warning *ForwardingRulesScopedListWarning `json:"warning,omitempty"` +} + +type ForwardingRulesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*ForwardingRulesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type ForwardingRulesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type HealthCheckReference struct { + HealthCheck string `json:"healthCheck,omitempty"` +} + +type HealthStatus struct { + // HealthState: Health state of the instance. + HealthState string `json:"healthState,omitempty"` + + // Instance: URL of the instance resource. + Instance string `json:"instance,omitempty"` + + // IpAddress: The IP address represented by this resource. + IpAddress string `json:"ipAddress,omitempty"` +} + +type HttpHealthCheck struct { + // CheckIntervalSec: How often (in seconds) to send a health check. The + // default value is 5 seconds. + CheckIntervalSec int64 `json:"checkIntervalSec,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // HealthyThreshold: A so-far unhealthy VM will be marked healthy after + // this many consecutive successes. The default value is 2. + HealthyThreshold int64 `json:"healthyThreshold,omitempty"` + + // Host: The value of the host header in the HTTP health check request. + // If left empty (default value), the public IP on behalf of which this + // health check is performed will be used. + Host string `json:"host,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Port: The TCP port number for the HTTP health check request. The + // default value is 80. + Port int64 `json:"port,omitempty"` + + // RequestPath: The request path of the HTTP health check request. The + // default value is "/". + RequestPath string `json:"requestPath,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // TimeoutSec: How long (in seconds) to wait before claiming failure. + // The default value is 5 seconds. + TimeoutSec int64 `json:"timeoutSec,omitempty"` + + // UnhealthyThreshold: A so-far healthy VM will be marked unhealthy + // after this many consecutive failures. The default value is 2. + UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"` +} + +type HttpHealthCheckList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The HttpHealthCheck resources. + Items []*HttpHealthCheck `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Image struct { + // ArchiveSizeBytes: Size of the image tar.gz archive stored in Google + // Cloud Storage (in bytes). + ArchiveSizeBytes int64 `json:"archiveSizeBytes,omitempty,string"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this image. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource; provided by the + // client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PreferredKernel: An optional URL of the preferred kernel for use with + // this disk image. If not specified, a server defined default kernel + // will be used. + PreferredKernel string `json:"preferredKernel,omitempty"` + + // RawDisk: The raw disk image parameters. + RawDisk *ImageRawDisk `json:"rawDisk,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceType: Must be "RAW"; provided by the client when the disk image + // is created. + SourceType string `json:"sourceType,omitempty"` + + // Status: Status of the image (output only). It will be one of the + // following READY - after image has been successfully created and is + // ready for use FAILED - if creating the image fails for some reason + // PENDING - the image creation is in progress An image can be used to + // create other resources suck as instances only after the image has + // been successfully created and the status is set to READY. + Status string `json:"status,omitempty"` +} + +type ImageRawDisk struct { + // ContainerType: The format used to encode and transmit the block + // device. Should be TAR. This is just a container and transmission + // format and not a runtime format. Provided by the client when the disk + // image is created. + ContainerType string `json:"containerType,omitempty"` + + // Sha1Checksum: An optional SHA1 checksum of the disk image before + // unpackaging; provided by the client when the disk image is created. + Sha1Checksum string `json:"sha1Checksum,omitempty"` + + // Source: The full Google Cloud Storage URL where the disk image is + // stored; provided by the client when the disk image is created. + Source string `json:"source,omitempty"` +} + +type ImageList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The disk image resources. + Items []*Image `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Instance struct { + // CanIpForward: Allows this instance to send packets with source IP + // addresses other than its own and receive packets with destination IP + // addresses other than its own. If this instance will be used as an IP + // gateway or it will be set as the next-hop in a Route resource, say + // true. If unsure, leave this set to false. + CanIpForward bool `json:"canIpForward,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Disks: Array of disks associated with this instance. Persistent disks + // must be created before you can assign them. + Disks []*AttachedDisk `json:"disks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Image: An optional URL of the disk image resource to be installed on + // this instance; provided by the client when the instance is created. + // Alternatively to passing the image, the client may choose to boot + // from a persistent disk, by setting boot=true flag on one of the + // entries in disks[] collection. + Image string `json:"image,omitempty"` + + // Kernel: URL of the kernel resource to use when booting. In case of + // booting from persistent disk, this parameter is required. When + // booting from a disk image, it is optional, but may be provided to use + // a different kernel than the one associated with the image. + Kernel string `json:"kernel,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MachineType: URL of the machine type resource describing which + // machine type to use to host the instance; provided by the client when + // the instance is created. + MachineType string `json:"machineType,omitempty"` + + // Metadata: Metadata key/value pairs assigned to this instance. + // Consists of custom metadata or predefined keys; see Instance + // documentation for more information. + Metadata *Metadata `json:"metadata,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // NetworkInterfaces: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // ServiceAccounts: A list of service accounts each with specified + // scopes, for which access tokens are to be made available to the + // instance through metadata queries. + ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"` + + // Status: Instance status. One of the following values: "PROVISIONING", + // "STAGING", "RUNNING", "STOPPING", "STOPPED", "TERMINATED" (output + // only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional, human-readable explanation of the status + // (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // Tags: A list of tags to be applied to this instance. Used to identify + // valid sources or targets for network firewalls. Provided by the + // client on instance creation. The tags can be later modified by the + // setTags method. Each tag within the list must comply with RFC1035. + Tags *Tags `json:"tags,omitempty"` + + // Zone: URL of the zone where the instance resides (output only). + Zone string `json:"zone,omitempty"` +} + +type InstanceAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped instance lists. + Items *InstanceAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type InstanceAggregatedListItems struct { +} + +type InstanceList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A list of instance resources. + Items []*Instance `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type InstanceReference struct { + Instance string `json:"instance,omitempty"` +} + +type InstancesScopedList struct { + // Instances: List of instances contained in this scope. + Instances []*Instance `json:"instances,omitempty"` + + // Warning: Informational warning which replaces the list of instances + // when the list is empty. + Warning *InstancesScopedListWarning `json:"warning,omitempty"` +} + +type InstancesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*InstancesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type InstancesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Kernel struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this kernel. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type KernelList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The kernel resources. + Items []*Kernel `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineType struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this machine type. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // GuestCpus: Count of CPUs exposed to the instance. + GuestCpus int64 `json:"guestCpus,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // ImageSpaceGb: Space allotted for the image, defined in GB. + ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaximumPersistentDisks: Maximum persistent disks allowed. + MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"` + + // MaximumPersistentDisksSizeGb: Maximum total persistent disks size + // (GB) allowed. + MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"` + + // MemoryMb: Physical memory assigned to the instance, defined in MB. + MemoryMb int64 `json:"memoryMb,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // ScratchDisks: List of extended scratch disks assigned to the + // instance. + ScratchDisks []*MachineTypeScratchDisks `json:"scratchDisks,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Zone: Url of the zone where the machine type resides (output only). + Zone string `json:"zone,omitempty"` +} + +type MachineTypeScratchDisks struct { + // DiskGb: Size of the scratch disk, defined in GB. + DiskGb int64 `json:"diskGb,omitempty"` +} + +type MachineTypeAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped machine type lists. + Items *MachineTypeAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypeAggregatedListItems struct { +} + +type MachineTypeList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The machine type resources. + Items []*MachineType `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypesScopedList struct { + // MachineTypes: List of machine types contained in this scope. + MachineTypes []*MachineType `json:"machineTypes,omitempty"` + + // Warning: Informational warning which replaces the list of machine + // types when the list is empty. + Warning *MachineTypesScopedListWarning `json:"warning,omitempty"` +} + +type MachineTypesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*MachineTypesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type MachineTypesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Metadata struct { + // Fingerprint: Fingerprint of this resource. A hash of the metadata's + // contents. This field is used for optimistic locking. An up-to-date + // metadata fingerprint must be provided in order to modify metadata. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: Array of key/value pairs. The total size of all keys and + // values must be less than 512 KB. + Items []*MetadataItems `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` +} + +type MetadataItems struct { + // Key: Key for the metadata entry. Keys must conform to the following + // regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is + // reflected as part of a URL in the metadata server. Additionally, to + // avoid ambiguity, keys must not conflict with any other metadata keys + // for the project. + Key string `json:"key,omitempty"` + + // Value: Value for the metadata entry. These are free-form strings, and + // only have meaning as interpreted by the image running in the + // instance. The only restriction placed on values is that their size + // must be less than or equal to 32768 bytes. + Value string `json:"value,omitempty"` +} + +type Network struct { + // IPv4Range: Required; The range of internal addresses that are legal + // on this network. This range is a CIDR specification, for example: + // 192.168.0.0/16. Provided by the client when the network is created. + IPv4Range string `json:"IPv4Range,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // GatewayIPv4: An optional address that is used for default routing to + // other networks. This must be within the range specified by IPv4Range, + // and is typically the first usable address in that range. If not + // specified, the default value is the first usable address in + // IPv4Range. + GatewayIPv4 string `json:"gatewayIPv4,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type NetworkInterface struct { + // AccessConfigs: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"` + + // Name: Name of the network interface, determined by the server; for + // network devices, these are e.g. eth0, eth1, etc. (output only). + Name string `json:"name,omitempty"` + + // Network: URL of the network resource attached to this interface. + Network string `json:"network,omitempty"` + + // NetworkIP: An optional IPV4 internal network address assigned to the + // instance for this network interface (output only). + NetworkIP string `json:"networkIP,omitempty"` +} + +type NetworkList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The network resources. + Items []*Network `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Operation struct { + // ClientOperationId: An optional identifier specified by the client + // when the mutation was initiated. Must be unique for all operation + // resources in the project (output only). + ClientOperationId string `json:"clientOperationId,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // EndTime: The time that this operation was completed. This is in RFC + // 3339 format (output only). + EndTime string `json:"endTime,omitempty"` + + // Error: If errors occurred during processing of this operation, this + // field will be populated (output only). + Error *OperationError `json:"error,omitempty"` + + // HttpErrorMessage: If operation fails, the HTTP error message + // returned, e.g. NOT FOUND. (output only). + HttpErrorMessage string `json:"httpErrorMessage,omitempty"` + + // HttpErrorStatusCode: If operation fails, the HTTP error status code + // returned, e.g. 404. (output only). + HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // InsertTime: The time that this operation was requested. This is in + // RFC 3339 format (output only). + InsertTime string `json:"insertTime,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource (output only). + Name string `json:"name,omitempty"` + + // OperationType: Type of the operation. Examples include "insert", + // "update", and "delete" (output only). + OperationType string `json:"operationType,omitempty"` + + // Progress: An optional progress indicator that ranges from 0 to 100. + // There is no requirement that this be linear or support any + // granularity of operations. This should not be used to guess at when + // the operation will be complete. This number should be monotonically + // increasing as the operation progresses (output only). + Progress int64 `json:"progress,omitempty"` + + // Region: URL of the region where the operation resides (output only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC 3339 format (output only). + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING", "RUNNING", or "DONE" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional textual description of the current status + // of the operation (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // TargetId: Unique target id which identifies a particular incarnation + // of the target (output only). + TargetId uint64 `json:"targetId,omitempty,string"` + + // TargetLink: URL of the resource the operation is mutating (output + // only). + TargetLink string `json:"targetLink,omitempty"` + + // User: User who requested the operation, for example + // "user@example.com" (output only). + User string `json:"user,omitempty"` + + // Warnings: If warning messages generated during processing of this + // operation, this field will be populated (output only). + Warnings []*OperationWarnings `json:"warnings,omitempty"` + + // Zone: URL of the zone where the operation resides (output only). + Zone string `json:"zone,omitempty"` +} + +type OperationError struct { + // Errors: The array of errors encountered while processing this + // operation. + Errors []*OperationErrorErrors `json:"errors,omitempty"` +} + +type OperationErrorErrors struct { + // Code: The error type identifier for this error. + Code string `json:"code,omitempty"` + + // Location: Indicates the field in the request which caused the error. + // This property is optional. + Location string `json:"location,omitempty"` + + // Message: An optional, human-readable error message. + Message string `json:"message,omitempty"` +} + +type OperationWarnings struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*OperationWarningsData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type OperationWarningsData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type OperationAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped operation lists. + Items *OperationAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type OperationAggregatedListItems struct { +} + +type OperationList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The operation resources. + Items []*Operation `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type OperationsScopedList struct { + // Operations: List of operations contained in this scope. + Operations []*Operation `json:"operations,omitempty"` + + // Warning: Informational warning which replaces the list of operations + // when the list is empty. + Warning *OperationsScopedListWarning `json:"warning,omitempty"` +} + +type OperationsScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*OperationsScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type OperationsScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Project struct { + // CommonInstanceMetadata: Metadata key/value pairs available to all + // instances contained in this project. + CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this project. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Quota struct { + // Limit: Quota limit for this metric. + Limit float64 `json:"limit,omitempty"` + + // Metric: Name of the quota metric. + Metric string `json:"metric,omitempty"` + + // Usage: Current usage of this metric. + Usage float64 `json:"usage,omitempty"` +} + +type Region struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this region. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this region. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the region, "UP" or "DOWN". + Status string `json:"status,omitempty"` + + // Zones: A list of zones homed in this region, in the form of resource + // URLs. + Zones []string `json:"zones,omitempty"` +} + +type RegionList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The region resources. + Items []*Region `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Route struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DestRange: Which packets does this route apply to? + DestRange string `json:"destRange,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this route is applied; provided + // by the client when the route is created. + Network string `json:"network,omitempty"` + + // NextHopGateway: The URL to a gateway that should handle matching + // packets. + NextHopGateway string `json:"nextHopGateway,omitempty"` + + // NextHopInstance: The URL to an instance that should handle matching + // packets. + NextHopInstance string `json:"nextHopInstance,omitempty"` + + // NextHopIp: The network IP address of an instance that should handle + // matching packets. + NextHopIp string `json:"nextHopIp,omitempty"` + + // NextHopNetwork: The URL of the local network if it should handle + // matching packets. + NextHopNetwork string `json:"nextHopNetwork,omitempty"` + + // Priority: Breaks ties between Routes of equal specificity. Routes + // with smaller values win when tied with routes with larger values. + Priority int64 `json:"priority,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Tags: A list of instance tags to which this route applies. + Tags []string `json:"tags,omitempty"` + + // Warnings: If potential misconfigurations are detected for this route, + // this field will be populated with warning messages. + Warnings []*RouteWarnings `json:"warnings,omitempty"` +} + +type RouteWarnings struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*RouteWarningsData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type RouteWarningsData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type RouteList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The route resources. + Items []*Route `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type SerialPortOutput struct { + // Contents: The contents of the console output. + Contents string `json:"contents,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ServiceAccount struct { + // Email: Email address of the service account. + Email string `json:"email,omitempty"` + + // Scopes: The list of scopes to be made available for this service + // account. + Scopes []string `json:"scopes,omitempty"` +} + +type Snapshot struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSizeGb: Size of the persistent disk snapshot, specified in GB + // (output only). + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceDisk: The source disk used to create this snapshot. Once the + // source disk has been deleted from the system, this field will be + // cleared, and will not be set even if a disk with the same name has + // been re-created (output only). + SourceDisk string `json:"sourceDisk,omitempty"` + + // SourceDiskId: The 'id' value of the disk used to create this + // snapshot. This value may be used to determine whether the snapshot + // was taken from the current or a previous instance of a given disk + // name. + SourceDiskId string `json:"sourceDiskId,omitempty"` + + // Status: The status of the persistent disk snapshot (output only). + Status string `json:"status,omitempty"` +} + +type SnapshotList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent snapshot resources. + Items []*Snapshot `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Tags struct { + // Fingerprint: Fingerprint of this resource. A hash of the tags stored + // in this object. This field is used optimistic locking. An up-to-date + // tags fingerprint must be provided in order to modify tags. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: An array of tags. Each tag must be 1-63 characters long, and + // comply with RFC1035. + Items []string `json:"items,omitempty"` +} + +type TargetPool struct { + // BackupPool: This field is applicable only when the containing target + // pool is serving a forwarding rule as the primary pool, and its + // 'failoverRatio' field is properly set to a value between [0, + // 1]. + // + // 'backupPool' and 'failoverRatio' together define the fallback + // behavior of the primary target pool: if the ratio of the healthy VMs + // in the primary pool is at or below 'failoverRatio', traffic arriving + // at the load-balanced IP will be directed to the backup pool. + // + // In case + // where 'failoverRatio' and 'backupPool' are not set, or all the VMs in + // the backup pool are unhealthy, the traffic will be directed back to + // the primary pool in the "force" mode, where traffic will be spread to + // the healthy VMs with the best effort, or to all VMs when no VM is + // healthy. + BackupPool string `json:"backupPool,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // FailoverRatio: This field is applicable only when the containing + // target pool is serving a forwarding rule as the primary pool (i.e., + // not as a backup pool to some other target pool). The value of the + // field must be in [0, 1]. + // + // If set, 'backupPool' must also be set. They + // together define the fallback behavior of the primary target pool: if + // the ratio of the healthy VMs in the primary pool is at or below this + // number, traffic arriving at the load-balanced IP will be directed to + // the backup pool. + // + // In case where 'failoverRatio' is not set or all the + // VMs in the backup pool are unhealthy, the traffic will be directed + // back to the primary pool in the "force" mode, where traffic will be + // spread to the healthy VMs with the best effort, or to all VMs when no + // VM is healthy. + FailoverRatio float64 `json:"failoverRatio,omitempty"` + + // HealthChecks: A list of URLs to the HttpHealthCheck resource. A + // member VM in this pool is considered healthy if and only if all + // specified health checks pass. An empty list means all member VMs will + // be considered healthy at all times. + HealthChecks []string `json:"healthChecks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Instances: A list of resource URLs to the member VMs serving this + // pool. They must live in zones contained in the same region as this + // pool. + Instances []string `json:"instances,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Region: URL of the region where the target pool resides (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SessionAffinity: Sesssion affinity option, must be one of the + // following values: 'NONE': Connections from the same client IP may go + // to any VM in the pool; 'CLIENT_IP': Connections from the same client + // IP will go to the same VM in the pool while that VM remains healthy. + // 'CLIENT_IP_PROTO': Connections from the same client IP with the same + // IP protocol will go to the same VM in the pool while that VM remains + // healthy. + SessionAffinity string `json:"sessionAffinity,omitempty"` +} + +type TargetPoolAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped target pool lists. + Items *TargetPoolAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type TargetPoolAggregatedListItems struct { +} + +type TargetPoolInstanceHealth struct { + HealthStatus []*HealthStatus `json:"healthStatus,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` +} + +type TargetPoolList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The TargetPool resources. + Items []*TargetPool `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type TargetPoolsScopedList struct { + // TargetPools: List of target pools contained in this scope. + TargetPools []*TargetPool `json:"targetPools,omitempty"` + + // Warning: Informational warning which replaces the list of addresses + // when the list is empty. + Warning *TargetPoolsScopedListWarning `json:"warning,omitempty"` +} + +type TargetPoolsScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*TargetPoolsScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type TargetPoolsScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type TargetReference struct { + Target string `json:"target,omitempty"` +} + +type Zone struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this zone. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaintenanceWindows: Scheduled maintenance windows for the zone. When + // the zone is in a maintenance window, all resources which reside in + // the zone will be unavailable. + MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this zone. + Quotas []*Quota `json:"quotas,omitempty"` + + // Region: Full URL reference to the region which hosts the zone (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the zone. "UP" or "DOWN". + Status string `json:"status,omitempty"` +} + +type ZoneMaintenanceWindows struct { + // BeginTime: Begin time of the maintenance window, in RFC 3339 format. + BeginTime string `json:"beginTime,omitempty"` + + // Description: Textual description of the maintenance window. + Description string `json:"description,omitempty"` + + // EndTime: End time of the maintenance window, in RFC 3339 format. + EndTime string `json:"endTime,omitempty"` + + // Name: Name of the maintenance window. + Name string `json:"name,omitempty"` +} + +type ZoneList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The zone resources. + Items []*Zone `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +// method id "compute.addresses.aggregatedList": + +type AddressesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of addresses grouped by scope. +func (r *AddressesService) AggregatedList(project string) *AddressesAggregatedListCall { + c := &AddressesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *AddressesAggregatedListCall) Filter(filter string) *AddressesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *AddressesAggregatedListCall) MaxResults(maxResults int64) *AddressesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *AddressesAggregatedListCall) PageToken(pageToken string) *AddressesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AddressesAggregatedListCall) Do() (*AddressAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AddressAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of addresses grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.addresses.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/addresses", + // "response": { + // "$ref": "AddressAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.addresses.delete": + +type AddressesDeleteCall struct { + s *Service + project string + region string + address string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified address resource. +func (r *AddressesService) Delete(project string, region string, address string) *AddressesDeleteCall { + c := &AddressesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/addresses/{address}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified address resource.", + // "httpMethod": "DELETE", + // "id": "compute.addresses.delete", + // "parameterOrder": [ + // "project", + // "region", + // "address" + // ], + // "parameters": { + // "address": { + // "description": "Name of the address resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses/{address}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.addresses.get": + +type AddressesGetCall struct { + s *Service + project string + region string + address string + opt_ map[string]interface{} +} + +// Get: Returns the specified address resource. +func (r *AddressesService) Get(project string, region string, address string) *AddressesGetCall { + c := &AddressesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesGetCall) Do() (*Address, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/addresses/{address}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Address) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified address resource.", + // "httpMethod": "GET", + // "id": "compute.addresses.get", + // "parameterOrder": [ + // "project", + // "region", + // "address" + // ], + // "parameters": { + // "address": { + // "description": "Name of the address resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses/{address}", + // "response": { + // "$ref": "Address" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.addresses.insert": + +type AddressesInsertCall struct { + s *Service + project string + region string + address *Address + opt_ map[string]interface{} +} + +// Insert: Creates an address resource in the specified project using +// the data included in the request. +func (r *AddressesService) Insert(project string, region string, address *Address) *AddressesInsertCall { + c := &AddressesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.address) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an address resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.addresses.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses", + // "request": { + // "$ref": "Address" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.addresses.list": + +type AddressesListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of address resources contained within the +// specified region. +func (r *AddressesService) List(project string, region string) *AddressesListCall { + c := &AddressesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *AddressesListCall) Filter(filter string) *AddressesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *AddressesListCall) MaxResults(maxResults int64) *AddressesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *AddressesListCall) PageToken(pageToken string) *AddressesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AddressesListCall) Do() (*AddressList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AddressList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of address resources contained within the specified region.", + // "httpMethod": "GET", + // "id": "compute.addresses.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses", + // "response": { + // "$ref": "AddressList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.aggregatedList": + +type DisksAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of disks grouped by scope. +func (r *DisksService) AggregatedList(project string) *DisksAggregatedListCall { + c := &DisksAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksAggregatedListCall) Filter(filter string) *DisksAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *DisksAggregatedListCall) MaxResults(maxResults int64) *DisksAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksAggregatedListCall) PageToken(pageToken string) *DisksAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksAggregatedListCall) Do() (*DiskAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of disks grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.disks.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/disks", + // "response": { + // "$ref": "DiskAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.createSnapshot": + +type DisksCreateSnapshotCall struct { + s *Service + project string + zone string + disk string + snapshot *Snapshot + opt_ map[string]interface{} +} + +// CreateSnapshot: +func (r *DisksService) CreateSnapshot(project string, zone string, disk string, snapshot *Snapshot) *DisksCreateSnapshotCall { + c := &DisksCreateSnapshotCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + c.snapshot = snapshot + return c +} + +func (c *DisksCreateSnapshotCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/disks/{disk}/createSnapshot") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "compute.disks.createSnapshot", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot", + // "request": { + // "$ref": "Snapshot" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.delete": + +type DisksDeleteCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk resource. +func (r *DisksService) Delete(project string, zone string, disk string) *DisksDeleteCall { + c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk resource.", + // "httpMethod": "DELETE", + // "id": "compute.disks.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.get": + +type DisksGetCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk resource. +func (r *DisksService) Get(project string, zone string, disk string) *DisksGetCall { + c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksGetCall) Do() (*Disk, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Disk) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk resource.", + // "httpMethod": "GET", + // "id": "compute.disks.get", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Disk" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.insert": + +type DisksInsertCall struct { + s *Service + project string + zone string + disk *Disk + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk resource in the specified project +// using the data included in the request. +func (r *DisksService) Insert(project string, zone string, disk *Disk) *DisksInsertCall { + c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +// SourceImage sets the optional parameter "sourceImage": Source image +// to restore onto a disk. +func (c *DisksInsertCall) SourceImage(sourceImage string) *DisksInsertCall { + c.opt_["sourceImage"] = sourceImage + return c +} + +func (c *DisksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["sourceImage"]; ok { + params.Set("sourceImage", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.disks.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "sourceImage": { + // "description": "Optional. Source image to restore onto a disk.", + // "location": "query", + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "request": { + // "$ref": "Disk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.list": + +type DisksListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk resources contained +// within the specified zone. +func (r *DisksService) List(project string, zone string) *DisksListCall { + c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksListCall) Filter(filter string) *DisksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksListCall) PageToken(pageToken string) *DisksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksListCall) Do() (*DiskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.disks.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "response": { + // "$ref": "DiskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.delete": + +type FirewallsDeleteCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified firewall resource. +func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall { + c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified firewall resource.", + // "httpMethod": "DELETE", + // "id": "compute.firewalls.delete", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.get": + +type FirewallsGetCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Get: Returns the specified firewall resource. +func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall { + c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsGetCall) Do() (*Firewall, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Firewall) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified firewall resource.", + // "httpMethod": "GET", + // "id": "compute.firewalls.get", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Firewall" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.insert": + +type FirewallsInsertCall struct { + s *Service + project string + firewall *Firewall + opt_ map[string]interface{} +} + +// Insert: Creates a firewall resource in the specified project using +// the data included in the request. +func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall { + c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a firewall resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.firewalls.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.list": + +type FirewallsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of firewall resources available to the +// specified project. +func (r *FirewallsService) List(project string) *FirewallsListCall { + c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *FirewallsListCall) Do() (*FirewallList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FirewallList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of firewall resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.firewalls.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "response": { + // "$ref": "FirewallList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.patch": + +type FirewallsPatchCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Patch: Updates the specified firewall resource with the data included +// in the request. This method supports patch semantics. +func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall { + c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.firewalls.patch", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.update": + +type FirewallsUpdateCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Update: Updates the specified firewall resource with the data +// included in the request. +func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall { + c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.firewalls.update", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.aggregatedList": + +type ForwardingRulesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of forwarding rules grouped by +// scope. +func (r *ForwardingRulesService) AggregatedList(project string) *ForwardingRulesAggregatedListCall { + c := &ForwardingRulesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ForwardingRulesAggregatedListCall) Filter(filter string) *ForwardingRulesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *ForwardingRulesAggregatedListCall) MaxResults(maxResults int64) *ForwardingRulesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ForwardingRulesAggregatedListCall) PageToken(pageToken string) *ForwardingRulesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ForwardingRulesAggregatedListCall) Do() (*ForwardingRuleAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRuleAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of forwarding rules grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/forwardingRules", + // "response": { + // "$ref": "ForwardingRuleAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.delete": + +type ForwardingRulesDeleteCall struct { + s *Service + project string + region string + forwardingRule string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified ForwardingRule resource. +func (r *ForwardingRulesService) Delete(project string, region string, forwardingRule string) *ForwardingRulesDeleteCall { + c := &ForwardingRulesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + return c +} + +func (c *ForwardingRulesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified ForwardingRule resource.", + // "httpMethod": "DELETE", + // "id": "compute.forwardingRules.delete", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.get": + +type ForwardingRulesGetCall struct { + s *Service + project string + region string + forwardingRule string + opt_ map[string]interface{} +} + +// Get: Returns the specified ForwardingRule resource. +func (r *ForwardingRulesService) Get(project string, region string, forwardingRule string) *ForwardingRulesGetCall { + c := &ForwardingRulesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + return c +} + +func (c *ForwardingRulesGetCall) Do() (*ForwardingRule, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified ForwardingRule resource.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.get", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + // "response": { + // "$ref": "ForwardingRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.insert": + +type ForwardingRulesInsertCall struct { + s *Service + project string + region string + forwardingrule *ForwardingRule + opt_ map[string]interface{} +} + +// Insert: Creates a ForwardingRule resource in the specified project +// and region using the data included in the request. +func (r *ForwardingRulesService) Insert(project string, region string, forwardingrule *ForwardingRule) *ForwardingRulesInsertCall { + c := &ForwardingRulesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingrule = forwardingrule + return c +} + +func (c *ForwardingRulesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a ForwardingRule resource in the specified project and region using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.forwardingRules.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules", + // "request": { + // "$ref": "ForwardingRule" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.list": + +type ForwardingRulesListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of ForwardingRule resources available to the +// specified project and region. +func (r *ForwardingRulesService) List(project string, region string) *ForwardingRulesListCall { + c := &ForwardingRulesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ForwardingRulesListCall) Filter(filter string) *ForwardingRulesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *ForwardingRulesListCall) MaxResults(maxResults int64) *ForwardingRulesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ForwardingRulesListCall) PageToken(pageToken string) *ForwardingRulesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ForwardingRulesListCall) Do() (*ForwardingRuleList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRuleList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules", + // "response": { + // "$ref": "ForwardingRuleList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.setTarget": + +type ForwardingRulesSetTargetCall struct { + s *Service + project string + region string + forwardingRule string + targetreference *TargetReference + opt_ map[string]interface{} +} + +// SetTarget: Changes target url for forwarding rule. +func (r *ForwardingRulesService) SetTarget(project string, region string, forwardingRule string, targetreference *TargetReference) *ForwardingRulesSetTargetCall { + c := &ForwardingRulesSetTargetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + c.targetreference = targetreference + return c +} + +func (c *ForwardingRulesSetTargetCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes target url for forwarding rule.", + // "httpMethod": "POST", + // "id": "compute.forwardingRules.setTarget", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource in which target is to be set.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", + // "request": { + // "$ref": "TargetReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.aggregatedList": + +type GlobalOperationsAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of all operations grouped by +// scope. +func (r *GlobalOperationsService) AggregatedList(project string) *GlobalOperationsAggregatedListCall { + c := &GlobalOperationsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *GlobalOperationsAggregatedListCall) Filter(filter string) *GlobalOperationsAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *GlobalOperationsAggregatedListCall) MaxResults(maxResults int64) *GlobalOperationsAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *GlobalOperationsAggregatedListCall) PageToken(pageToken string) *GlobalOperationsAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *GlobalOperationsAggregatedListCall) Do() (*OperationAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of all operations grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/operations", + // "response": { + // "$ref": "OperationAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.globalOperations.delete": + +type GlobalOperationsDeleteCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified operation resource. +func (r *GlobalOperationsService) Delete(project string, operation string) *GlobalOperationsDeleteCall { + c := &GlobalOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.globalOperations.delete", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.get": + +type GlobalOperationsGetCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified operation resource. +func (r *GlobalOperationsService) Get(project string, operation string) *GlobalOperationsGetCall { + c := &GlobalOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified operation resource.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.get", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.globalOperations.list": + +type GlobalOperationsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified project. +func (r *GlobalOperationsService) List(project string) *GlobalOperationsListCall { + c := &GlobalOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *GlobalOperationsListCall) Filter(filter string) *GlobalOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *GlobalOperationsListCall) PageToken(pageToken string) *GlobalOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *GlobalOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.delete": + +type HttpHealthChecksDeleteCall struct { + s *Service + project string + httpHealthCheck string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified HttpHealthCheck resource. +func (r *HttpHealthChecksService) Delete(project string, httpHealthCheck string) *HttpHealthChecksDeleteCall { + c := &HttpHealthChecksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + return c +} + +func (c *HttpHealthChecksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified HttpHealthCheck resource.", + // "httpMethod": "DELETE", + // "id": "compute.httpHealthChecks.delete", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.get": + +type HttpHealthChecksGetCall struct { + s *Service + project string + httpHealthCheck string + opt_ map[string]interface{} +} + +// Get: Returns the specified HttpHealthCheck resource. +func (r *HttpHealthChecksService) Get(project string, httpHealthCheck string) *HttpHealthChecksGetCall { + c := &HttpHealthChecksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + return c +} + +func (c *HttpHealthChecksGetCall) Do() (*HttpHealthCheck, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(HttpHealthCheck) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified HttpHealthCheck resource.", + // "httpMethod": "GET", + // "id": "compute.httpHealthChecks.get", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "response": { + // "$ref": "HttpHealthCheck" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.insert": + +type HttpHealthChecksInsertCall struct { + s *Service + project string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Insert: Creates a HttpHealthCheck resource in the specified project +// using the data included in the request. +func (r *HttpHealthChecksService) Insert(project string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksInsertCall { + c := &HttpHealthChecksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a HttpHealthCheck resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.httpHealthChecks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.list": + +type HttpHealthChecksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of HttpHealthCheck resources available to +// the specified project. +func (r *HttpHealthChecksService) List(project string) *HttpHealthChecksListCall { + c := &HttpHealthChecksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *HttpHealthChecksListCall) Filter(filter string) *HttpHealthChecksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *HttpHealthChecksListCall) MaxResults(maxResults int64) *HttpHealthChecksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *HttpHealthChecksListCall) PageToken(pageToken string) *HttpHealthChecksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *HttpHealthChecksListCall) Do() (*HttpHealthCheckList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(HttpHealthCheckList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.httpHealthChecks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks", + // "response": { + // "$ref": "HttpHealthCheckList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.patch": + +type HttpHealthChecksPatchCall struct { + s *Service + project string + httpHealthCheck string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Patch: Updates a HttpHealthCheck resource in the specified project +// using the data included in the request. This method supports patch +// semantics. +func (r *HttpHealthChecksService) Patch(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksPatchCall { + c := &HttpHealthChecksPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.httpHealthChecks.patch", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.update": + +type HttpHealthChecksUpdateCall struct { + s *Service + project string + httpHealthCheck string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Update: Updates a HttpHealthCheck resource in the specified project +// using the data included in the request. +func (r *HttpHealthChecksService) Update(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksUpdateCall { + c := &HttpHealthChecksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.httpHealthChecks.update", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.delete": + +type ImagesDeleteCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified image resource. +func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall { + c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified image resource.", + // "httpMethod": "DELETE", + // "id": "compute.images.delete", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.deprecate": + +type ImagesDeprecateCall struct { + s *Service + project string + image string + deprecationstatus *DeprecationStatus + opt_ map[string]interface{} +} + +// Deprecate: Sets the deprecation status of an image. If no message +// body is given, clears the deprecation status instead. +func (r *ImagesService) Deprecate(project string, image string, deprecationstatus *DeprecationStatus) *ImagesDeprecateCall { + c := &ImagesDeprecateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + c.deprecationstatus = deprecationstatus + return c +} + +func (c *ImagesDeprecateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/images/{image}/deprecate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + // "httpMethod": "POST", + // "id": "compute.images.deprecate", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Image name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}/deprecate", + // "request": { + // "$ref": "DeprecationStatus" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.get": + +type ImagesGetCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Get: Returns the specified image resource. +func (r *ImagesService) Get(project string, image string) *ImagesGetCall { + c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified image resource.", + // "httpMethod": "GET", + // "id": "compute.images.get", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.insert": + +type ImagesInsertCall struct { + s *Service + project string + image *Image + opt_ map[string]interface{} +} + +// Insert: Creates an image resource in the specified project using the +// data included in the request. +func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall { + c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an image resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.images.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "compute.images.list": + +type ImagesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of image resources available to the +// specified project. +func (r *ImagesService) List(project string) *ImagesListCall { + c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ImagesListCall) Filter(filter string) *ImagesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ImagesListCall) Do() (*ImageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ImageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of image resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.images.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "response": { + // "$ref": "ImageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.addAccessConfig": + +type InstancesAddAccessConfigCall struct { + s *Service + project string + zone string + instance string + networkInterface string + accessconfig *AccessConfig + opt_ map[string]interface{} +} + +// AddAccessConfig: Adds an access config to an instance's network +// interface. +func (r *InstancesService) AddAccessConfig(project string, zone string, instance string, networkInterface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall { + c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.networkInterface = networkInterface + c.accessconfig = accessconfig + return c +} + +func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/addAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an access config to an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.addAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "networkInterface" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "networkInterface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + // "request": { + // "$ref": "AccessConfig" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.aggregatedList": + +type InstancesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: +func (r *InstancesService) AggregatedList(project string) *InstancesAggregatedListCall { + c := &InstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesAggregatedListCall) Filter(filter string) *InstancesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *InstancesAggregatedListCall) MaxResults(maxResults int64) *InstancesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesAggregatedListCall) PageToken(pageToken string) *InstancesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesAggregatedListCall) Do() (*InstanceAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "compute.instances.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/instances", + // "response": { + // "$ref": "InstanceAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.attachDisk": + +type InstancesAttachDiskCall struct { + s *Service + project string + zone string + instance string + attacheddisk *AttachedDisk + opt_ map[string]interface{} +} + +// AttachDisk: Attaches a disk resource to an instance. +func (r *InstancesService) AttachDisk(project string, zone string, instance string, attacheddisk *AttachedDisk) *InstancesAttachDiskCall { + c := &InstancesAttachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.attacheddisk = attacheddisk + return c +} + +func (c *InstancesAttachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/attachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Attaches a disk resource to an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.attachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + // "request": { + // "$ref": "AttachedDisk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified instance resource. +func (r *InstancesService) Delete(project string, zone string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified instance resource.", + // "httpMethod": "DELETE", + // "id": "compute.instances.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.deleteAccessConfig": + +type InstancesDeleteAccessConfigCall struct { + s *Service + project string + zone string + instance string + accessConfig string + networkInterface string + opt_ map[string]interface{} +} + +// DeleteAccessConfig: Deletes an access config from an instance's +// network interface. +func (r *InstancesService) DeleteAccessConfig(project string, zone string, instance string, accessConfig string, networkInterface string) *InstancesDeleteAccessConfigCall { + c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.accessConfig = accessConfig + c.networkInterface = networkInterface + return c +} + +func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("accessConfig", fmt.Sprintf("%v", c.accessConfig)) + params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes an access config from an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.deleteAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "accessConfig", + // "networkInterface" + // ], + // "parameters": { + // "accessConfig": { + // "description": "Access config name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "networkInterface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.detachDisk": + +type InstancesDetachDiskCall struct { + s *Service + project string + zone string + instance string + deviceName string + opt_ map[string]interface{} +} + +// DetachDisk: Detaches a disk from an instance. +func (r *InstancesService) DetachDisk(project string, zone string, instance string, deviceName string) *InstancesDetachDiskCall { + c := &InstancesDetachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.deviceName = deviceName + return c +} + +func (c *InstancesDetachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("deviceName", fmt.Sprintf("%v", c.deviceName)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/detachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Detaches a disk from an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.detachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "deviceName" + // ], + // "parameters": { + // "deviceName": { + // "description": "Disk device name to detach.", + // "location": "query", + // "pattern": "\\w[\\w.-]{0,254}", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.get": + +type InstancesGetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Get: Returns the specified instance resource. +func (r *InstancesService) Get(project string, zone string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*Instance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Instance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance resource.", + // "httpMethod": "GET", + // "id": "compute.instances.get", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Instance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.getSerialPortOutput": + +type InstancesGetSerialPortOutputCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// GetSerialPortOutput: Returns the specified instance's serial port +// output. +func (r *InstancesService) GetSerialPortOutput(project string, zone string, instance string) *InstancesGetSerialPortOutputCall { + c := &InstancesGetSerialPortOutputCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetSerialPortOutputCall) Do() (*SerialPortOutput, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/serialPort") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SerialPortOutput) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance's serial port output.", + // "httpMethod": "GET", + // "id": "compute.instances.getSerialPortOutput", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + // "response": { + // "$ref": "SerialPortOutput" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + zone string + instance *Instance + opt_ map[string]interface{} +} + +// Insert: Creates an instance resource in the specified project using +// the data included in the request. +func (r *InstancesService) Insert(project string, zone string, instance *Instance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an instance resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "request": { + // "$ref": "Instance" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.list": + +type InstancesListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of instance resources contained within the +// specified zone. +func (r *InstancesService) List(project string, zone string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesListCall) Filter(filter string) *InstancesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstanceList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of instance resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.instances.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "response": { + // "$ref": "InstanceList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.reset": + +type InstancesResetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Reset: Performs a hard reset on the instance. +func (r *InstancesService) Reset(project string, zone string, instance string) *InstancesResetCall { + c := &InstancesResetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesResetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Performs a hard reset on the instance.", + // "httpMethod": "POST", + // "id": "compute.instances.reset", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/reset", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setMetadata": + +type InstancesSetMetadataCall struct { + s *Service + project string + zone string + instance string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetMetadata: Sets metadata for the specified instance to the data +// included in the request. +func (r *InstancesService) SetMetadata(project string, zone string, instance string, metadata *Metadata) *InstancesSetMetadataCall { + c := &InstancesSetMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.metadata = metadata + return c +} + +func (c *InstancesSetMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/setMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setMetadata", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setTags": + +type InstancesSetTagsCall struct { + s *Service + project string + zone string + instance string + tags *Tags + opt_ map[string]interface{} +} + +// SetTags: Sets tags for the specified instance to the data included in +// the request. +func (r *InstancesService) SetTags(project string, zone string, instance string, tags *Tags) *InstancesSetTagsCall { + c := &InstancesSetTagsCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.tags = tags + return c +} + +func (c *InstancesSetTagsCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/instances/{instance}/setTags") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets tags for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setTags", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setTags", + // "request": { + // "$ref": "Tags" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.kernels.get": + +type KernelsGetCall struct { + s *Service + project string + kernel string + opt_ map[string]interface{} +} + +// Get: Returns the specified kernel resource. +func (r *KernelsService) Get(project string, kernel string) *KernelsGetCall { + c := &KernelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.kernel = kernel + return c +} + +func (c *KernelsGetCall) Do() (*Kernel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/kernels/{kernel}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{kernel}", url.QueryEscape(c.kernel), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Kernel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified kernel resource.", + // "httpMethod": "GET", + // "id": "compute.kernels.get", + // "parameterOrder": [ + // "project", + // "kernel" + // ], + // "parameters": { + // "kernel": { + // "description": "Name of the kernel resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels/{kernel}", + // "response": { + // "$ref": "Kernel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.list": + +type KernelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of kernel resources available to the +// specified project. +func (r *KernelsService) List(project string) *KernelsListCall { + c := &KernelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *KernelsListCall) Filter(filter string) *KernelsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *KernelsListCall) PageToken(pageToken string) *KernelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *KernelsListCall) Do() (*KernelList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/kernels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(KernelList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of kernel resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.kernels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels", + // "response": { + // "$ref": "KernelList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.aggregatedList": + +type MachineTypesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of machine type resources grouped +// by scope. +func (r *MachineTypesService) AggregatedList(project string) *MachineTypesAggregatedListCall { + c := &MachineTypesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesAggregatedListCall) Filter(filter string) *MachineTypesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *MachineTypesAggregatedListCall) MaxResults(maxResults int64) *MachineTypesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesAggregatedListCall) PageToken(pageToken string) *MachineTypesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesAggregatedListCall) Do() (*MachineTypeAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/machineTypes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/machineTypes", + // "response": { + // "$ref": "MachineTypeAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.get": + +type MachineTypesGetCall struct { + s *Service + project string + zone string + machineType string + opt_ map[string]interface{} +} + +// Get: Returns the specified machine type resource. +func (r *MachineTypesService) Get(project string, zone string, machineType string) *MachineTypesGetCall { + c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.machineType = machineType + return c +} + +func (c *MachineTypesGetCall) Do() (*MachineType, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/machineTypes/{machineType}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{machineType}", url.QueryEscape(c.machineType), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineType) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified machine type resource.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.get", + // "parameterOrder": [ + // "project", + // "zone", + // "machineType" + // ], + // "parameters": { + // "machineType": { + // "description": "Name of the machine type resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/machineTypes/{machineType}", + // "response": { + // "$ref": "MachineType" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.list": + +type MachineTypesListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of machine type resources available to the +// specified project. +func (r *MachineTypesService) List(project string, zone string) *MachineTypesListCall { + c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesListCall) Do() (*MachineTypeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/machineTypes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/machineTypes", + // "response": { + // "$ref": "MachineTypeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.delete": + +type NetworksDeleteCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified network resource. +func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall { + c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified network resource.", + // "httpMethod": "DELETE", + // "id": "compute.networks.delete", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.get": + +type NetworksGetCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Get: Returns the specified network resource. +func (r *NetworksService) Get(project string, network string) *NetworksGetCall { + c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksGetCall) Do() (*Network, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Network) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified network resource.", + // "httpMethod": "GET", + // "id": "compute.networks.get", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Network" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.insert": + +type NetworksInsertCall struct { + s *Service + project string + network *Network + opt_ map[string]interface{} +} + +// Insert: Creates a network resource in the specified project using the +// data included in the request. +func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall { + c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.network) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a network resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.networks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "request": { + // "$ref": "Network" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.list": + +type NetworksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of network resources available to the +// specified project. +func (r *NetworksService) List(project string) *NetworksListCall { + c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *NetworksListCall) Filter(filter string) *NetworksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NetworksListCall) Do() (*NetworkList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(NetworkList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of network resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.networks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "response": { + // "$ref": "NetworkList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Returns the specified project resource. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified project resource.", + // "httpMethod": "GET", + // "id": "compute.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project resource to retrieve.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.setCommonInstanceMetadata": + +type ProjectsSetCommonInstanceMetadataCall struct { + s *Service + project string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetCommonInstanceMetadata: Sets metadata common to all instances +// within the specified project using the data included in the request. +func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall { + c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.metadata = metadata + return c +} + +func (c *ProjectsSetCommonInstanceMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/setCommonInstanceMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.projects.setCommonInstanceMetadata", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/setCommonInstanceMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.regionOperations.delete": + +type RegionOperationsDeleteCall struct { + s *Service + project string + region string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified region-specific operation resource. +func (r *RegionOperationsService) Delete(project string, region string, operation string) *RegionOperationsDeleteCall { + c := &RegionOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.operation = operation + return c +} + +func (c *RegionOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified region-specific operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.regionOperations.delete", + // "parameterOrder": [ + // "project", + // "region", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.regionOperations.get": + +type RegionOperationsGetCall struct { + s *Service + project string + region string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified region-specific operation resource. +func (r *RegionOperationsService) Get(project string, region string, operation string) *RegionOperationsGetCall { + c := &RegionOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.operation = operation + return c +} + +func (c *RegionOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified region-specific operation resource.", + // "httpMethod": "GET", + // "id": "compute.regionOperations.get", + // "parameterOrder": [ + // "project", + // "region", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regionOperations.list": + +type RegionOperationsListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified region. +func (r *RegionOperationsService) List(project string, region string) *RegionOperationsListCall { + c := &RegionOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RegionOperationsListCall) Filter(filter string) *RegionOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *RegionOperationsListCall) MaxResults(maxResults int64) *RegionOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RegionOperationsListCall) PageToken(pageToken string) *RegionOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RegionOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified region.", + // "httpMethod": "GET", + // "id": "compute.regionOperations.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regions.get": + +type RegionsGetCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// Get: Returns the specified region resource. +func (r *RegionsService) Get(project string, region string) *RegionsGetCall { + c := &RegionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +func (c *RegionsGetCall) Do() (*Region, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Region) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified region resource.", + // "httpMethod": "GET", + // "id": "compute.regions.get", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}", + // "response": { + // "$ref": "Region" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regions.list": + +type RegionsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of region resources available to the +// specified project. +func (r *RegionsService) List(project string) *RegionsListCall { + c := &RegionsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RegionsListCall) Filter(filter string) *RegionsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *RegionsListCall) MaxResults(maxResults int64) *RegionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RegionsListCall) PageToken(pageToken string) *RegionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RegionsListCall) Do() (*RegionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RegionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of region resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.regions.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions", + // "response": { + // "$ref": "RegionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.routes.delete": + +type RoutesDeleteCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified route resource. +func (r *RoutesService) Delete(project string, route string) *RoutesDeleteCall { + c := &RoutesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified route resource.", + // "httpMethod": "DELETE", + // "id": "compute.routes.delete", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.get": + +type RoutesGetCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Get: Returns the specified route resource. +func (r *RoutesService) Get(project string, route string) *RoutesGetCall { + c := &RoutesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesGetCall) Do() (*Route, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Route) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified route resource.", + // "httpMethod": "GET", + // "id": "compute.routes.get", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Route" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.routes.insert": + +type RoutesInsertCall struct { + s *Service + project string + route *Route + opt_ map[string]interface{} +} + +// Insert: Creates a route resource in the specified project using the +// data included in the request. +func (r *RoutesService) Insert(project string, route *Route) *RoutesInsertCall { + c := &RoutesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.route) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a route resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.routes.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "request": { + // "$ref": "Route" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.list": + +type RoutesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of route resources available to the +// specified project. +func (r *RoutesService) List(project string) *RoutesListCall { + c := &RoutesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RoutesListCall) Filter(filter string) *RoutesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RoutesListCall) PageToken(pageToken string) *RoutesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RoutesListCall) Do() (*RouteList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RouteList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of route resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.routes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "response": { + // "$ref": "RouteList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.delete": + +type SnapshotsDeleteCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk snapshot resource. +func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall { + c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk snapshot resource.", + // "httpMethod": "DELETE", + // "id": "compute.snapshots.delete", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.get": + +type SnapshotsGetCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk snapshot resource. +func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall { + c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsGetCall) Do() (*Snapshot, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Snapshot) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk snapshot resource.", + // "httpMethod": "GET", + // "id": "compute.snapshots.get", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Snapshot" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.list": + +type SnapshotsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk snapshot resources +// contained within the specified project. +func (r *SnapshotsService) List(project string) *SnapshotsListCall { + c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SnapshotsListCall) Do() (*SnapshotList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/global/snapshots") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SnapshotList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.snapshots.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots", + // "response": { + // "$ref": "SnapshotList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.addHealthCheck": + +type TargetPoolsAddHealthCheckCall struct { + s *Service + project string + region string + targetPool string + healthcheckreference *HealthCheckReference + opt_ map[string]interface{} +} + +// AddHealthCheck: Adds health check URL to targetPool. +func (r *TargetPoolsService) AddHealthCheck(project string, region string, targetPool string, healthcheckreference *HealthCheckReference) *TargetPoolsAddHealthCheckCall { + c := &TargetPoolsAddHealthCheckCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.healthcheckreference = healthcheckreference + return c +} + +func (c *TargetPoolsAddHealthCheckCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheckreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds health check URL to targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.addHealthCheck", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which health_check_url is to be added.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", + // "request": { + // "$ref": "HealthCheckReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.addInstance": + +type TargetPoolsAddInstanceCall struct { + s *Service + project string + region string + targetPool string + instancereference *InstanceReference + opt_ map[string]interface{} +} + +// AddInstance: Adds instance url to targetPool. +func (r *TargetPoolsService) AddInstance(project string, region string, targetPool string, instancereference *InstanceReference) *TargetPoolsAddInstanceCall { + c := &TargetPoolsAddInstanceCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.instancereference = instancereference + return c +} + +func (c *TargetPoolsAddInstanceCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addInstance") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds instance url to targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.addInstance", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which instance_url is to be added.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance", + // "request": { + // "$ref": "InstanceReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.aggregatedList": + +type TargetPoolsAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of target pools grouped by scope. +func (r *TargetPoolsService) AggregatedList(project string) *TargetPoolsAggregatedListCall { + c := &TargetPoolsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *TargetPoolsAggregatedListCall) Filter(filter string) *TargetPoolsAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *TargetPoolsAggregatedListCall) MaxResults(maxResults int64) *TargetPoolsAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *TargetPoolsAggregatedListCall) PageToken(pageToken string) *TargetPoolsAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TargetPoolsAggregatedListCall) Do() (*TargetPoolAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/aggregated/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of target pools grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.targetPools.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/targetPools", + // "response": { + // "$ref": "TargetPoolAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.delete": + +type TargetPoolsDeleteCall struct { + s *Service + project string + region string + targetPool string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified TargetPool resource. +func (r *TargetPoolsService) Delete(project string, region string, targetPool string) *TargetPoolsDeleteCall { + c := &TargetPoolsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + return c +} + +func (c *TargetPoolsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified TargetPool resource.", + // "httpMethod": "DELETE", + // "id": "compute.targetPools.delete", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.get": + +type TargetPoolsGetCall struct { + s *Service + project string + region string + targetPool string + opt_ map[string]interface{} +} + +// Get: Returns the specified TargetPool resource. +func (r *TargetPoolsService) Get(project string, region string, targetPool string) *TargetPoolsGetCall { + c := &TargetPoolsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + return c +} + +func (c *TargetPoolsGetCall) Do() (*TargetPool, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPool) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified TargetPool resource.", + // "httpMethod": "GET", + // "id": "compute.targetPools.get", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}", + // "response": { + // "$ref": "TargetPool" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.getHealth": + +type TargetPoolsGetHealthCall struct { + s *Service + project string + region string + targetPool string + instancereference *InstanceReference + opt_ map[string]interface{} +} + +// GetHealth: Gets the most recent health check results for each IP for +// the given instance that is referenced by given TargetPool. +func (r *TargetPoolsService) GetHealth(project string, region string, targetPool string, instancereference *InstanceReference) *TargetPoolsGetHealthCall { + c := &TargetPoolsGetHealthCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.instancereference = instancereference + return c +} + +func (c *TargetPoolsGetHealthCall) Do() (*TargetPoolInstanceHealth, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/getHealth") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolInstanceHealth) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.getHealth", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which the queried instance belongs.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth", + // "request": { + // "$ref": "InstanceReference" + // }, + // "response": { + // "$ref": "TargetPoolInstanceHealth" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.insert": + +type TargetPoolsInsertCall struct { + s *Service + project string + region string + targetpool *TargetPool + opt_ map[string]interface{} +} + +// Insert: Creates a TargetPool resource in the specified project and +// region using the data included in the request. +func (r *TargetPoolsService) Insert(project string, region string, targetpool *TargetPool) *TargetPoolsInsertCall { + c := &TargetPoolsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetpool = targetpool + return c +} + +func (c *TargetPoolsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a TargetPool resource in the specified project and region using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.targetPools.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools", + // "request": { + // "$ref": "TargetPool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.list": + +type TargetPoolsListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of TargetPool resources available to the +// specified project and region. +func (r *TargetPoolsService) List(project string, region string) *TargetPoolsListCall { + c := &TargetPoolsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *TargetPoolsListCall) Filter(filter string) *TargetPoolsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *TargetPoolsListCall) MaxResults(maxResults int64) *TargetPoolsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *TargetPoolsListCall) PageToken(pageToken string) *TargetPoolsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TargetPoolsListCall) Do() (*TargetPoolList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of TargetPool resources available to the specified project and region.", + // "httpMethod": "GET", + // "id": "compute.targetPools.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools", + // "response": { + // "$ref": "TargetPoolList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.removeHealthCheck": + +type TargetPoolsRemoveHealthCheckCall struct { + s *Service + project string + region string + targetPool string + healthcheckreference *HealthCheckReference + opt_ map[string]interface{} +} + +// RemoveHealthCheck: Removes health check URL from targetPool. +func (r *TargetPoolsService) RemoveHealthCheck(project string, region string, targetPool string, healthcheckreference *HealthCheckReference) *TargetPoolsRemoveHealthCheckCall { + c := &TargetPoolsRemoveHealthCheckCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.healthcheckreference = healthcheckreference + return c +} + +func (c *TargetPoolsRemoveHealthCheckCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.healthcheckreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes health check URL from targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.removeHealthCheck", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which health_check_url is to be removed.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", + // "request": { + // "$ref": "HealthCheckReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.removeInstance": + +type TargetPoolsRemoveInstanceCall struct { + s *Service + project string + region string + targetPool string + instancereference *InstanceReference + opt_ map[string]interface{} +} + +// RemoveInstance: Removes instance URL from targetPool. +func (r *TargetPoolsService) RemoveInstance(project string, region string, targetPool string, instancereference *InstanceReference) *TargetPoolsRemoveInstanceCall { + c := &TargetPoolsRemoveInstanceCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.instancereference = instancereference + return c +} + +func (c *TargetPoolsRemoveInstanceCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeInstance") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes instance URL from targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.removeInstance", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which instance_url is to be removed.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance", + // "request": { + // "$ref": "InstanceReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.setBackup": + +type TargetPoolsSetBackupCall struct { + s *Service + project string + region string + targetPool string + targetreference *TargetReference + opt_ map[string]interface{} +} + +// SetBackup: Changes backup pool configurations. +func (r *TargetPoolsService) SetBackup(project string, region string, targetPool string, targetreference *TargetReference) *TargetPoolsSetBackupCall { + c := &TargetPoolsSetBackupCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetreference = targetreference + return c +} + +// FailoverRatio sets the optional parameter "failoverRatio": New +// failoverRatio value for the containing target pool. +func (c *TargetPoolsSetBackupCall) FailoverRatio(failoverRatio float64) *TargetPoolsSetBackupCall { + c.opt_["failoverRatio"] = failoverRatio + return c +} + +func (c *TargetPoolsSetBackupCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["failoverRatio"]; ok { + params.Set("failoverRatio", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/regions/{region}/targetPools/{targetPool}/setBackup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes backup pool configurations.", + // "httpMethod": "POST", + // "id": "compute.targetPools.setBackup", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "failoverRatio": { + // "description": "New failoverRatio value for the containing target pool.", + // "format": "float", + // "location": "query", + // "type": "number" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource for which the backup is to be set.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup", + // "request": { + // "$ref": "TargetReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.zoneOperations.delete": + +type ZoneOperationsDeleteCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified zone-specific operation resource. +func (r *ZoneOperationsService) Delete(project string, zone string, operation string) *ZoneOperationsDeleteCall { + c := &ZoneOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified zone-specific operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.zoneOperations.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.zoneOperations.get": + +type ZoneOperationsGetCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified zone-specific operation resource. +func (r *ZoneOperationsService) Get(project string, zone string, operation string) *ZoneOperationsGetCall { + c := &ZoneOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified zone-specific operation resource.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.get", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zoneOperations.list": + +type ZoneOperationsListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified zone. +func (r *ZoneOperationsService) List(project string, zone string) *ZoneOperationsListCall { + c := &ZoneOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZoneOperationsListCall) Filter(filter string) *ZoneOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZoneOperationsListCall) PageToken(pageToken string) *ZoneOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZoneOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.get": + +type ZonesGetCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// Get: Returns the specified zone resource. +func (r *ZonesService) Get(project string, zone string) *ZonesGetCall { + c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +func (c *ZonesGetCall) Do() (*Zone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones/{zone}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Zone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified zone resource.", + // "httpMethod": "GET", + // "id": "compute.zones.get", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}", + // "response": { + // "$ref": "Zone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.list": + +type ZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of zone resources available to the specified +// project. +func (r *ZonesService) List(project string) *ZonesListCall { + c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZonesListCall) Filter(filter string) *ZonesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 100. +func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZonesListCall) Do() (*ZoneList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta15/projects/", "{project}/zones") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ZoneList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of zone resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.zones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones", + // "response": { + // "$ref": "ZoneList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-api.json b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-api.json new file mode 100644 index 0000000000000..c9614315c1cb0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-api.json @@ -0,0 +1,6919 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"R6H4aXXmd1SZaWpEcGSkC2StmNw/YUolxkzL_8Ggy-XySmNJLv4Q5RQ\"", + "discoveryVersion": "v1", + "id": "compute:v1beta16", + "name": "compute", + "version": "v1beta16", + "title": "Compute Engine API", + "description": "API for the Google Compute Engine service.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/compute_engine-16.png", + "x32": "http://www.google.com/images/icons/product/compute_engine-32.png" + }, + "documentationLink": "https://developers.google.com/compute/docs/reference/v1beta16", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/compute/v1beta16/projects/", + "basePath": "/compute/v1beta16/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "compute/v1beta16/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/compute": { + "description": "View and manage your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/compute.readonly": { + "description": "View your Google Compute Engine resources" + }, + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "AccessConfig": { + "id": "AccessConfig", + "type": "object", + "description": "An access configuration attached to an instance's network interface.", + "properties": { + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#accessConfig" + }, + "name": { + "type": "string", + "description": "Name of this access configuration." + }, + "natIP": { + "type": "string", + "description": "An external IP address associated with this instance. Specify an unused static IP address available to the project. If not specified, the external IP will be drawn from a shared ephemeral pool." + }, + "type": { + "type": "string", + "description": "Type of configuration. Must be set to \"ONE_TO_ONE_NAT\". This configures port-for-port NAT to the internet.", + "default": "ONE_TO_ONE_NAT", + "enum": [ + "ONE_TO_ONE_NAT" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "Address": { + "id": "Address", + "type": "object", + "description": "A reserved address resource.", + "properties": { + "address": { + "type": "string", + "description": "The IP address represented by this resource." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#address" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.addresses.insert" + ] + } + }, + "region": { + "type": "string", + "description": "URL of the region where the address resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "The status of the address (output only).", + "enum": [ + "IN_USE", + "RESERVED" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "users": { + "type": "array", + "description": "The resources that are using this address resource.", + "items": { + "type": "string" + } + } + } + }, + "AddressAggregatedList": { + "id": "AddressAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped address lists.", + "additionalProperties": { + "$ref": "AddressesScopedList", + "description": "Name of the scope containing this set of addresses." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#addressAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "AddressList": { + "id": "AddressList", + "type": "object", + "description": "Contains a list of address resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The address resources.", + "items": { + "$ref": "Address" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#addressList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "AddressesScopedList": { + "id": "AddressesScopedList", + "type": "object", + "properties": { + "addresses": { + "type": "array", + "description": "List of addresses contained in this scope.", + "items": { + "$ref": "Address" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of addresses when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "AttachedDisk": { + "id": "AttachedDisk", + "type": "object", + "description": "An instance-attached disk resource.", + "properties": { + "boot": { + "type": "boolean", + "description": "Indicates that this is a boot disk. VM will use the first partition of the disk for its root filesystem." + }, + "deviceName": { + "type": "string", + "description": "Persistent disk only; must be unique within the instance when specified. This represents a unique device name that is reflected into the /dev/ tree of a Linux operating system running within the instance. If not specified, a default will be chosen by the system." + }, + "index": { + "type": "integer", + "description": "A zero-based index to assign to this disk, where 0 is reserved for the boot disk. If not specified, the server will choose an appropriate value (output only).", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#attachedDisk" + }, + "mode": { + "type": "string", + "description": "The mode in which to attach this disk, either \"READ_WRITE\" or \"READ_ONLY\".", + "enum": [ + "READ_ONLY", + "READ_WRITE" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "source": { + "type": "string", + "description": "Persistent disk only; the URL of the persistent disk resource." + }, + "type": { + "type": "string", + "description": "Type of the disk, either \"SCRATCH\" or \"PERSISTENT\". Note that persistent disks must be created before you can specify them here.", + "enum": [ + "PERSISTENT", + "SCRATCH" + ], + "enumDescriptions": [ + "", + "" + ], + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + } + } + }, + "DeprecationStatus": { + "id": "DeprecationStatus", + "type": "object", + "description": "Deprecation status for a public resource.", + "properties": { + "deleted": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DELETED." + }, + "deprecated": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to DEPRECATED." + }, + "obsolete": { + "type": "string", + "description": "An optional RFC3339 timestamp on or after which the deprecation state of this resource will be changed to OBSOLETE." + }, + "replacement": { + "type": "string", + "description": "A URL of the suggested replacement for the deprecated resource. The deprecated resource and its replacement must be resources of the same kind." + }, + "state": { + "type": "string", + "description": "The deprecation state. Can be \"DEPRECATED\", \"OBSOLETE\", or \"DELETED\". Operations which create a new resource using a \"DEPRECATED\" resource will return successfully, but with a warning indicating the deprecated resource and recommending its replacement. New uses of \"OBSOLETE\" or \"DELETED\" resources will result in an error.", + "enum": [ + "DELETED", + "DEPRECATED", + "OBSOLETE" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "Disk": { + "id": "Disk", + "type": "object", + "description": "A persistent disk resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#disk" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.disks.insert" + ] + } + }, + "options": { + "type": "string", + "description": "Internal use only." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sizeGb": { + "type": "string", + "description": "Size of the persistent disk, specified in GB. This parameter is optional when creating a disk from a disk image or a snapshot, otherwise it is required.", + "format": "int64" + }, + "sourceImage": { + "type": "string", + "description": "The source image used to create this disk. Once the source image has been deleted from the system, this field will not be set, even if an image with the same name has been re-created." + }, + "sourceImageId": { + "type": "string", + "description": "The 'id' value of the image used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given image." + }, + "sourceSnapshot": { + "type": "string", + "description": "The source snapshot used to create this disk. Once the source snapshot has been deleted from the system, this field will be cleared, and will not be set even if a snapshot with the same name has been re-created." + }, + "sourceSnapshotId": { + "type": "string", + "description": "The 'id' value of the snapshot used to create this disk. This value may be used to determine whether the disk was created from the current or a previous instance of a given disk snapshot." + }, + "status": { + "type": "string", + "description": "The status of disk creation (output only).", + "enum": [ + "CREATING", + "FAILED", + "READY", + "RESTORING" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "zone": { + "type": "string", + "description": "URL of the zone where the disk resides (output only)." + } + } + }, + "DiskAggregatedList": { + "id": "DiskAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped disk lists.", + "additionalProperties": { + "$ref": "DisksScopedList", + "description": "Name of the scope containing this set of disks." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "DiskList": { + "id": "DiskList", + "type": "object", + "description": "Contains a list of persistent disk resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent disk resources.", + "items": { + "$ref": "Disk" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#diskList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "DisksScopedList": { + "id": "DisksScopedList", + "type": "object", + "properties": { + "disks": { + "type": "array", + "description": "List of disks contained in this scope.", + "items": { + "$ref": "Disk" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of disks when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Firewall": { + "id": "Firewall", + "type": "object", + "description": "A firewall resource.", + "properties": { + "allowed": { + "type": "array", + "description": "The list of rules specified by this firewall. Each rule specifies a protocol and port-range tuple that describes a permitted connection.", + "items": { + "type": "object", + "properties": { + "IPProtocol": { + "type": "string", + "description": "Required; this is the IP protocol that is allowed for this rule. This can either be a well known protocol string (tcp, udp or icmp) or the IP protocol number." + }, + "ports": { + "type": "array", + "description": "An optional list of ports which are allowed. It is an error to specify this for any protocol that isn't UDP or TCP. Each entry must be either an integer or a range. If not specified, connections through any port are allowed.\n\nExample inputs include: [\"22\"], [\"80\",\"443\"] and [\"12345-12349\"].", + "items": { + "type": "string" + } + } + } + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#firewall" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this firewall is applied; provided by the client when the firewall is created.", + "annotations": { + "required": [ + "compute.firewalls.insert", + "compute.firewalls.patch" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceRanges": { + "type": "array", + "description": "A list of IP address blocks expressed in CIDR format which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "sourceTags": { + "type": "array", + "description": "A list of instance tags which this rule applies to. One or both of sourceRanges and sourceTags may be set; an inbound connection is allowed if either the range or the tag of the source matches.", + "items": { + "type": "string" + } + }, + "targetTags": { + "type": "array", + "description": "A list of instance tags indicating sets of instances located on network which may make network connections as specified in allowed. If no targetTags are specified, the firewall rule applies to all instances on the specified network.", + "items": { + "type": "string" + } + } + } + }, + "FirewallList": { + "id": "FirewallList", + "type": "object", + "description": "Contains a list of firewall resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The firewall resources.", + "items": { + "$ref": "Firewall" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#firewallList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRule": { + "id": "ForwardingRule", + "type": "object", + "description": "A ForwardingRule resource. A ForwardingRule resource specifies which pool of target VMs to forward a packet to if it matches the given [IPAddress, IPProtocol, portRange] tuple.", + "properties": { + "IPAddress": { + "type": "string", + "description": "Value of the reserved IP address that this forwarding rule is serving on behalf of. The address resource must live in the same region as the forwarding rule. If left empty (default value), an ephemeral IP will be assigned." + }, + "IPProtocol": { + "type": "string", + "description": "The IP protocol to which this rule applies, can be either 'TCP' or 'UDP' (If left empty, will use TCP by default).", + "enum": [ + "TCP", + "UDP" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#forwardingRule" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "portRange": { + "type": "string", + "description": "If 'IPProtocol' is 'TCP' or 'UDP', only packets addressed to ports in the specified range will be forwarded to 'target'. If left empty (default value), all ports are forwarded. Forwarding rules with the same [IPAddress, IPProtocol] pair must have disjoint port ranges." + }, + "region": { + "type": "string", + "description": "URL of the region where the forwarding rule resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "target": { + "type": "string", + "description": "The URL of the target resource to receive the matched traffic. It must live in the same region as this forwarding rule." + } + } + }, + "ForwardingRuleAggregatedList": { + "id": "ForwardingRuleAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped forwarding rule lists.", + "additionalProperties": { + "$ref": "ForwardingRulesScopedList", + "description": "Name of the scope containing this set of addresses." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#forwardingRuleAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRuleList": { + "id": "ForwardingRuleList", + "type": "object", + "description": "Contains a list of ForwardingRule resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The ForwardingRule resources.", + "items": { + "$ref": "ForwardingRule" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#forwardingRuleList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "ForwardingRulesScopedList": { + "id": "ForwardingRulesScopedList", + "type": "object", + "properties": { + "forwardingRules": { + "type": "array", + "description": "List of forwarding rules contained in this scope.", + "items": { + "$ref": "ForwardingRule" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of forwarding rules when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "HealthCheckReference": { + "id": "HealthCheckReference", + "type": "object", + "properties": { + "healthCheck": { + "type": "string" + } + } + }, + "HealthStatus": { + "id": "HealthStatus", + "type": "object", + "properties": { + "healthState": { + "type": "string", + "description": "Health state of the instance.", + "enum": [ + "HEALTHY", + "UNHEALTHY" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "instance": { + "type": "string", + "description": "URL of the instance resource." + }, + "ipAddress": { + "type": "string", + "description": "The IP address represented by this resource." + } + } + }, + "HttpHealthCheck": { + "id": "HttpHealthCheck", + "type": "object", + "description": "An HttpHealthCheck resource. This resource defines a template for how individual VMs should be checked for health, via HTTP.", + "properties": { + "checkIntervalSec": { + "type": "integer", + "description": "How often (in seconds) to send a health check. The default value is 5 seconds.", + "format": "int32" + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "healthyThreshold": { + "type": "integer", + "description": "A so-far unhealthy VM will be marked healthy after this many consecutive successes. The default value is 2.", + "format": "int32" + }, + "host": { + "type": "string", + "description": "The value of the host header in the HTTP health check request. If left empty (default value), the public IP on behalf of which this health check is performed will be used." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#httpHealthCheck" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "port": { + "type": "integer", + "description": "The TCP port number for the HTTP health check request. The default value is 80.", + "format": "int32" + }, + "requestPath": { + "type": "string", + "description": "The request path of the HTTP health check request. The default value is \"/\"." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "timeoutSec": { + "type": "integer", + "description": "How long (in seconds) to wait before claiming failure. The default value is 5 seconds.", + "format": "int32" + }, + "unhealthyThreshold": { + "type": "integer", + "description": "A so-far healthy VM will be marked unhealthy after this many consecutive failures. The default value is 2.", + "format": "int32" + } + } + }, + "HttpHealthCheckList": { + "id": "HttpHealthCheckList", + "type": "object", + "description": "Contains a list of HttpHealthCheck resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The HttpHealthCheck resources.", + "items": { + "$ref": "HttpHealthCheck" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#httpHealthCheckList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "description": "A disk image resource.", + "properties": { + "archiveSizeBytes": { + "type": "string", + "description": "Size of the image tar.gz archive stored in Google Cloud Storage (in bytes).", + "format": "int64" + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this image." + }, + "description": { + "type": "string", + "description": "Textual description of the resource; provided by the client when the resource is created." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#image" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "preferredKernel": { + "type": "string", + "description": "An optional URL of the preferred kernel for use with this disk image. If not specified, a server defined default kernel will be used.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "rawDisk": { + "type": "object", + "description": "The raw disk image parameters.", + "properties": { + "containerType": { + "type": "string", + "description": "The format used to encode and transmit the block device. Should be TAR. This is just a container and transmission format and not a runtime format. Provided by the client when the disk image is created.", + "default": "TAR" + }, + "sha1Checksum": { + "type": "string", + "description": "An optional SHA1 checksum of the disk image before unpackaging; provided by the client when the disk image is created.", + "pattern": "[a-f0-9]{40}" + }, + "source": { + "type": "string", + "description": "The full Google Cloud Storage URL where the disk image is stored; provided by the client when the disk image is created.", + "annotations": { + "required": [ + "compute.images.insert" + ] + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceType": { + "type": "string", + "description": "Must be \"RAW\"; provided by the client when the disk image is created.", + "default": "RAW", + "enum": [ + "RAW" + ], + "enumDescriptions": [ + "" + ], + "annotations": { + "required": [ + "compute.images.insert" + ] + } + }, + "status": { + "type": "string", + "description": "Status of the image (output only). It will be one of the following READY - after image has been successfully created and is ready for use FAILED - if creating the image fails for some reason PENDING - the image creation is in progress An image can be used to create other resources suck as instances only after the image has been successfully created and the status is set to READY.", + "enum": [ + "FAILED", + "PENDING", + "READY" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "ImageList": { + "id": "ImageList", + "type": "object", + "description": "Contains a list of disk image resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The disk image resources.", + "items": { + "$ref": "Image" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#imageList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "description": "An instance resource.", + "properties": { + "canIpForward": { + "type": "boolean", + "description": "Allows this instance to send packets with source IP addresses other than its own and receive packets with destination IP addresses other than its own. If this instance will be used as an IP gateway or it will be set as the next-hop in a Route resource, say true. If unsure, leave this set to false." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "disks": { + "type": "array", + "description": "Array of disks associated with this instance. Persistent disks must be created before you can assign them.", + "items": { + "$ref": "AttachedDisk" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "image": { + "type": "string", + "description": "An optional URL of the disk image resource to be installed on this instance; provided by the client when the instance is created. Alternatively to passing the image, the client may choose to boot from a persistent disk, by setting boot=true flag on one of the entries in disks[] collection." + }, + "kernel": { + "type": "string", + "description": "URL of the kernel resource to use when booting. In case of booting from persistent disk, this parameter is required. When booting from a disk image, it is optional, but may be provided to use a different kernel than the one associated with the image." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#instance" + }, + "machineType": { + "type": "string", + "description": "URL of the machine type resource describing which machine type to use to host the instance; provided by the client when the instance is created.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "metadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs assigned to this instance. Consists of custom metadata or predefined keys; see Instance documentation for more information." + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkInterfaces": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "NetworkInterface" + } + }, + "scheduling": { + "$ref": "Scheduling", + "description": "Scheduling options for this instance." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + }, + "serviceAccounts": { + "type": "array", + "description": "A list of service accounts each with specified scopes, for which access tokens are to be made available to the instance through metadata queries.", + "items": { + "$ref": "ServiceAccount" + } + }, + "status": { + "type": "string", + "description": "Instance status. One of the following values: \"PROVISIONING\", \"STAGING\", \"RUNNING\", \"STOPPING\", \"STOPPED\", \"TERMINATED\" (output only).", + "enum": [ + "PROVISIONING", + "RUNNING", + "STAGING", + "STOPPED", + "STOPPING", + "TERMINATED" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "statusMessage": { + "type": "string", + "description": "An optional, human-readable explanation of the status (output only)." + }, + "tags": { + "$ref": "Tags", + "description": "A list of tags to be applied to this instance. Used to identify valid sources or targets for network firewalls. Provided by the client on instance creation. The tags can be later modified by the setTags method. Each tag within the list must comply with RFC1035." + }, + "zone": { + "type": "string", + "description": "URL of the zone where the instance resides (output only)." + } + } + }, + "InstanceAggregatedList": { + "id": "InstanceAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped instance lists.", + "additionalProperties": { + "$ref": "InstancesScopedList", + "description": "Name of the scope containing this set of instances." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "InstanceList": { + "id": "InstanceList", + "type": "object", + "description": "Contains a list of instance resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "A list of instance resources.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#instanceList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "InstanceReference": { + "id": "InstanceReference", + "type": "object", + "properties": { + "instance": { + "type": "string" + } + } + }, + "InstancesScopedList": { + "id": "InstancesScopedList", + "type": "object", + "properties": { + "instances": { + "type": "array", + "description": "List of instances contained in this scope.", + "items": { + "$ref": "Instance" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of instances when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Kernel": { + "id": "Kernel", + "type": "object", + "description": "A kernel resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this kernel." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#kernel" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "KernelList": { + "id": "KernelList", + "type": "object", + "description": "Contains a list of kernel resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The kernel resources.", + "items": { + "$ref": "Kernel" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#kernelList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineType": { + "id": "MachineType", + "type": "object", + "description": "A machine type resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this machine type." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "guestCpus": { + "type": "integer", + "description": "Count of CPUs exposed to the instance.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "imageSpaceGb": { + "type": "integer", + "description": "Space allotted for the image, defined in GB.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#machineType" + }, + "maximumPersistentDisks": { + "type": "integer", + "description": "Maximum persistent disks allowed.", + "format": "int32" + }, + "maximumPersistentDisksSizeGb": { + "type": "string", + "description": "Maximum total persistent disks size (GB) allowed.", + "format": "int64" + }, + "memoryMb": { + "type": "integer", + "description": "Physical memory assigned to the instance, defined in MB.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "Name of the resource.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "scratchDisks": { + "type": "array", + "description": "List of extended scratch disks assigned to the instance.", + "items": { + "type": "object", + "properties": { + "diskGb": { + "type": "integer", + "description": "Size of the scratch disk, defined in GB.", + "format": "int32" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "zone": { + "type": "string", + "description": "Url of the zone where the machine type resides (output only)." + } + } + }, + "MachineTypeAggregatedList": { + "id": "MachineTypeAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped machine type lists.", + "additionalProperties": { + "$ref": "MachineTypesScopedList", + "description": "Name of the scope containing this set of machine types." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineTypeList": { + "id": "MachineTypeList", + "type": "object", + "description": "Contains a list of machine type resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The machine type resources.", + "items": { + "$ref": "MachineType" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#machineTypeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "MachineTypesScopedList": { + "id": "MachineTypesScopedList", + "type": "object", + "properties": { + "machineTypes": { + "type": "array", + "description": "List of machine types contained in this scope.", + "items": { + "$ref": "MachineType" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of machine types when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Metadata": { + "id": "Metadata", + "type": "object", + "description": "A metadata key/value entry.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the metadata's contents. This field is used for optimistic locking. An up-to-date metadata fingerprint must be provided in order to modify metadata.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "Array of key/value pairs. The total size of all keys and values must be less than 512 KB.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "Key for the metadata entry. Keys must conform to the following regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is reflected as part of a URL in the metadata server. Additionally, to avoid ambiguity, keys must not conflict with any other metadata keys for the project.", + "pattern": "[a-zA-Z0-9-_]{1,128}", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + }, + "value": { + "type": "string", + "description": "Value for the metadata entry. These are free-form strings, and only have meaning as interpreted by the image running in the instance. The only restriction placed on values is that their size must be less than or equal to 32768 bytes.", + "annotations": { + "required": [ + "compute.instances.insert", + "compute.projects.setCommonInstanceMetadata" + ] + } + } + } + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#metadata" + } + } + }, + "Network": { + "id": "Network", + "type": "object", + "description": "A network resource.", + "properties": { + "IPv4Range": { + "type": "string", + "description": "Required; The range of internal addresses that are legal on this network. This range is a CIDR specification, for example: 192.168.0.0/16. Provided by the client when the network is created.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}/[0-9]{1,2}", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "gatewayIPv4": { + "type": "string", + "description": "An optional address that is used for default routing to other networks. This must be within the range specified by IPv4Range, and is typically the first usable address in that range. If not specified, the default value is the first usable address in IPv4Range.", + "pattern": "[0-9]{1,3}(?:\\.[0-9]{1,3}){3}" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#network" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.networks.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "NetworkInterface": { + "id": "NetworkInterface", + "type": "object", + "description": "A network interface resource attached to an instance.", + "properties": { + "accessConfigs": { + "type": "array", + "description": "Array of configurations for this interface. This specifies how this interface is configured to interact with other network services, such as connecting to the internet. Currently, ONE_TO_ONE_NAT is the only access config supported. If there are no accessConfigs specified, then this instance will have no external internet access.", + "items": { + "$ref": "AccessConfig" + } + }, + "name": { + "type": "string", + "description": "Name of the network interface, determined by the server; for network devices, these are e.g. eth0, eth1, etc. (output only)." + }, + "network": { + "type": "string", + "description": "URL of the network resource attached to this interface.", + "annotations": { + "required": [ + "compute.instances.insert" + ] + } + }, + "networkIP": { + "type": "string", + "description": "An optional IPV4 internal network address assigned to the instance for this network interface (output only)." + } + } + }, + "NetworkList": { + "id": "NetworkList", + "type": "object", + "description": "Contains a list of network resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The network resources.", + "items": { + "$ref": "Network" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#networkList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Operation": { + "id": "Operation", + "type": "object", + "description": "An operation resource, used to manage asynchronous API requests.", + "properties": { + "clientOperationId": { + "type": "string", + "description": "An optional identifier specified by the client when the mutation was initiated. Must be unique for all operation resources in the project (output only)." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "endTime": { + "type": "string", + "description": "The time that this operation was completed. This is in RFC 3339 format (output only)." + }, + "error": { + "type": "object", + "description": "If errors occurred during processing of this operation, this field will be populated (output only).", + "properties": { + "errors": { + "type": "array", + "description": "The array of errors encountered while processing this operation.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The error type identifier for this error." + }, + "location": { + "type": "string", + "description": "Indicates the field in the request which caused the error. This property is optional." + }, + "message": { + "type": "string", + "description": "An optional, human-readable error message." + } + } + } + } + } + }, + "httpErrorMessage": { + "type": "string", + "description": "If operation fails, the HTTP error message returned, e.g. NOT FOUND. (output only)." + }, + "httpErrorStatusCode": { + "type": "integer", + "description": "If operation fails, the HTTP error status code returned, e.g. 404. (output only).", + "format": "int32" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "insertTime": { + "type": "string", + "description": "The time that this operation was requested. This is in RFC 3339 format (output only)." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#operation" + }, + "name": { + "type": "string", + "description": "Name of the resource (output only)." + }, + "operationType": { + "type": "string", + "description": "Type of the operation. Examples include \"insert\", \"update\", and \"delete\" (output only)." + }, + "progress": { + "type": "integer", + "description": "An optional progress indicator that ranges from 0 to 100. There is no requirement that this be linear or support any granularity of operations. This should not be used to guess at when the operation will be complete. This number should be monotonically increasing as the operation progresses (output only).", + "format": "int32" + }, + "region": { + "type": "string", + "description": "URL of the region where the operation resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC 3339 format (output only)." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\", \"RUNNING\", or \"DONE\" (output only).", + "enum": [ + "DONE", + "PENDING", + "RUNNING" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "statusMessage": { + "type": "string", + "description": "An optional textual description of the current status of the operation (output only)." + }, + "targetId": { + "type": "string", + "description": "Unique target id which identifies a particular incarnation of the target (output only).", + "format": "uint64" + }, + "targetLink": { + "type": "string", + "description": "URL of the resource the operation is mutating (output only)." + }, + "user": { + "type": "string", + "description": "User who requested the operation, for example \"user@example.com\" (output only)." + }, + "warnings": { + "type": "array", + "description": "If warning messages generated during processing of this operation, this field will be populated (output only).", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + }, + "zone": { + "type": "string", + "description": "URL of the zone where the operation resides (output only)." + } + } + }, + "OperationAggregatedList": { + "id": "OperationAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped operation lists.", + "additionalProperties": { + "$ref": "OperationsScopedList", + "description": "Name of the scope containing this set of operations." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "OperationList": { + "id": "OperationList", + "type": "object", + "description": "Contains a list of operation resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The operation resources.", + "items": { + "$ref": "Operation" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#operationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "OperationsScopedList": { + "id": "OperationsScopedList", + "type": "object", + "properties": { + "operations": { + "type": "array", + "description": "List of operations contained in this scope.", + "items": { + "$ref": "Operation" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of operations when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project resource. Projects can be created only in the APIs Console. Unless marked otherwise, values can only be modified in the console.", + "properties": { + "commonInstanceMetadata": { + "$ref": "Metadata", + "description": "Metadata key/value pairs available to all instances contained in this project." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#project" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this project.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "Quota": { + "id": "Quota", + "type": "object", + "description": "A quotas entry.", + "properties": { + "limit": { + "type": "number", + "description": "Quota limit for this metric.", + "format": "double" + }, + "metric": { + "type": "string", + "description": "Name of the quota metric.", + "enum": [ + "CPUS", + "DISKS", + "DISKS_TOTAL_GB", + "EPHEMERAL_ADDRESSES", + "FIREWALLS", + "FORWARDING_RULES", + "HEALTH_CHECKS", + "IMAGES", + "IMAGES_TOTAL_GB", + "INSTANCES", + "IN_USE_ADDRESSES", + "KERNELS", + "KERNELS_TOTAL_GB", + "NETWORKS", + "OPERATIONS", + "ROUTES", + "SNAPSHOTS", + "STATIC_ADDRESSES", + "TARGET_POOLS" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "usage": { + "type": "number", + "description": "Current usage of this metric.", + "format": "double" + } + } + }, + "Region": { + "id": "Region", + "type": "object", + "description": "Region resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this region." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#region" + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "quotas": { + "type": "array", + "description": "Quotas assigned to this region.", + "items": { + "$ref": "Quota" + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the region, \"UP\" or \"DOWN\".", + "enum": [ + "DOWN", + "UP" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "zones": { + "type": "array", + "description": "A list of zones homed in this region, in the form of resource URLs.", + "items": { + "type": "string" + } + } + } + }, + "RegionList": { + "id": "RegionList", + "type": "object", + "description": "Contains a list of region resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The region resources.", + "items": { + "$ref": "Region" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#regionList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Route": { + "id": "Route", + "type": "object", + "description": "The route resource. A Route is a rule that specifies how certain packets should be handled by the virtual network. Routes are associated with VMs by tag and the set of Routes for a particular VM is called its routing table. For each packet leaving a VM, the system searches that VM's routing table for a single best matching Route. Routes match packets by destination IP address, preferring smaller or more specific ranges over larger ones. If there is a tie, the system selects the Route with the smallest priority value. If there is still a tie, it uses the layer three and four packet headers to select just one of the remaining matching Routes. The packet is then forwarded as specified by the next_hop field of the winning Route -- either to another VM destination, a VM gateway or a GCE operated gateway. Packets that do not match any Route in the sending VM's routing table will be dropped.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "destRange": { + "type": "string", + "description": "Which packets does this route apply to?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#route" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "network": { + "type": "string", + "description": "URL of the network to which this route is applied; provided by the client when the route is created.", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "nextHopGateway": { + "type": "string", + "description": "The URL to a gateway that should handle matching packets." + }, + "nextHopInstance": { + "type": "string", + "description": "The URL to an instance that should handle matching packets." + }, + "nextHopIp": { + "type": "string", + "description": "The network IP address of an instance that should handle matching packets." + }, + "nextHopNetwork": { + "type": "string", + "description": "The URL of the local network if it should handle matching packets." + }, + "priority": { + "type": "integer", + "description": "Breaks ties between Routes of equal specificity. Routes with smaller values win when tied with routes with larger values.", + "format": "uint32", + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "tags": { + "type": "array", + "description": "A list of instance tags to which this route applies.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "compute.routes.insert" + ] + } + }, + "warnings": { + "type": "array", + "description": "If potential misconfigurations are detected for this route, this field will be populated with warning messages.", + "items": { + "type": "object", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + } + }, + "RouteList": { + "id": "RouteList", + "type": "object", + "description": "Contains a list of route resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The route resources.", + "items": { + "$ref": "Route" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#routeList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Scheduling": { + "id": "Scheduling", + "type": "object", + "description": "Scheduling options for an Instance.", + "properties": { + "automaticRestart": { + "type": "boolean", + "description": "Whether the Instance should be automatically restarted whenever it is terminated by Compute Engine (not terminated by user)." + }, + "onHostMaintenance": { + "type": "string", + "description": "How the instance should behave when the host machine undergoes maintenance that may temporarily impact instance performance.", + "enum": [ + "MIGRATE", + "TERMINATE" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + }, + "SerialPortOutput": { + "id": "SerialPortOutput", + "type": "object", + "description": "An instance serial console output.", + "properties": { + "contents": { + "type": "string", + "description": "The contents of the console output." + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#serialPortOutput" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + } + } + }, + "ServiceAccount": { + "id": "ServiceAccount", + "type": "object", + "description": "A service account.", + "properties": { + "email": { + "type": "string", + "description": "Email address of the service account." + }, + "scopes": { + "type": "array", + "description": "The list of scopes to be made available for this service account.", + "items": { + "type": "string" + } + } + } + }, + "Snapshot": { + "id": "Snapshot", + "type": "object", + "description": "A persistent disk snapshot resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "diskSizeGb": { + "type": "string", + "description": "Size of the persistent disk snapshot, specified in GB (output only).", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#snapshot" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sourceDisk": { + "type": "string", + "description": "The source disk used to create this snapshot. Once the source disk has been deleted from the system, this field will be cleared, and will not be set even if a disk with the same name has been re-created (output only)." + }, + "sourceDiskId": { + "type": "string", + "description": "The 'id' value of the disk used to create this snapshot. This value may be used to determine whether the snapshot was taken from the current or a previous instance of a given disk name." + }, + "status": { + "type": "string", + "description": "The status of the persistent disk snapshot (output only).", + "enum": [ + "CREATING", + "DELETING", + "FAILED", + "READY", + "UPLOADING" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "storageBytes": { + "type": "string", + "description": "A size of the the storage used by the snapshot. As snapshots share storage this number is expected to change with snapshot creation/deletion.", + "format": "int64" + }, + "storageBytesStatus": { + "type": "string", + "description": "An indicator whether storageBytes is in a stable state, or it is being adjusted as a result of shared storage reallocation.", + "enum": [ + "UPDATING", + "UP_TO_DATE" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + }, + "SnapshotList": { + "id": "SnapshotList", + "type": "object", + "description": "Contains a list of persistent disk snapshot resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The persistent snapshot resources.", + "items": { + "$ref": "Snapshot" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#snapshotList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "Tags": { + "id": "Tags", + "type": "object", + "description": "A set of instance tags.", + "properties": { + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the tags stored in this object. This field is used optimistic locking. An up-to-date tags fingerprint must be provided in order to modify tags.", + "format": "byte" + }, + "items": { + "type": "array", + "description": "An array of tags. Each tag must be 1-63 characters long, and comply with RFC1035.", + "items": { + "type": "string" + } + } + } + }, + "TargetPool": { + "id": "TargetPool", + "type": "object", + "description": "A TargetPool resource. This resource defines a pool of VMs, associated HttpHealthCheck resources, and the fallback TargetPool.", + "properties": { + "backupPool": { + "type": "string", + "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool, and its 'failoverRatio' field is properly set to a value between [0, 1].\n\n'backupPool' and 'failoverRatio' together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below 'failoverRatio', traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' and 'backupPool' are not set, or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy." + }, + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "description": { + "type": "string", + "description": "An optional textual description of the resource; provided by the client when the resource is created." + }, + "failoverRatio": { + "type": "number", + "description": "This field is applicable only when the containing target pool is serving a forwarding rule as the primary pool (i.e., not as a backup pool to some other target pool). The value of the field must be in [0, 1].\n\nIf set, 'backupPool' must also be set. They together define the fallback behavior of the primary target pool: if the ratio of the healthy VMs in the primary pool is at or below this number, traffic arriving at the load-balanced IP will be directed to the backup pool.\n\nIn case where 'failoverRatio' is not set or all the VMs in the backup pool are unhealthy, the traffic will be directed back to the primary pool in the \"force\" mode, where traffic will be spread to the healthy VMs with the best effort, or to all VMs when no VM is healthy.", + "format": "float" + }, + "healthChecks": { + "type": "array", + "description": "A list of URLs to the HttpHealthCheck resource. A member VM in this pool is considered healthy if and only if all specified health checks pass. An empty list means all member VMs will be considered healthy at all times.", + "items": { + "type": "string" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "instances": { + "type": "array", + "description": "A list of resource URLs to the member VMs serving this pool. They must live in zones contained in the same region as this pool.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#targetPool" + }, + "name": { + "type": "string", + "description": "Name of the resource; provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035.", + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?" + }, + "region": { + "type": "string", + "description": "URL of the region where the target pool resides (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "sessionAffinity": { + "type": "string", + "description": "Sesssion affinity option, must be one of the following values: 'NONE': Connections from the same client IP may go to any VM in the pool; 'CLIENT_IP': Connections from the same client IP will go to the same VM in the pool while that VM remains healthy. 'CLIENT_IP_PROTO': Connections from the same client IP with the same IP protocol will go to the same VM in the pool while that VM remains healthy.", + "enum": [ + "CLIENT_IP", + "CLIENT_IP_PROTO", + "NONE" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "TargetPoolAggregatedList": { + "id": "TargetPoolAggregatedList", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "object", + "description": "A map of scoped target pool lists.", + "additionalProperties": { + "$ref": "TargetPoolsScopedList", + "description": "Name of the scope containing this set of target pools." + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolAggregatedList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "TargetPoolInstanceHealth": { + "id": "TargetPoolInstanceHealth", + "type": "object", + "properties": { + "healthStatus": { + "type": "array", + "items": { + "$ref": "HealthStatus" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolInstanceHealth" + } + } + }, + "TargetPoolList": { + "id": "TargetPoolList", + "type": "object", + "description": "Contains a list of TargetPool resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The TargetPool resources.", + "items": { + "$ref": "TargetPool" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#targetPoolList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + }, + "TargetPoolsAddHealthCheckRequest": { + "id": "TargetPoolsAddHealthCheckRequest", + "type": "object", + "properties": { + "healthChecks": { + "type": "array", + "description": "Health check URLs to be added to targetPool.", + "items": { + "$ref": "HealthCheckReference" + } + } + } + }, + "TargetPoolsAddInstanceRequest": { + "id": "TargetPoolsAddInstanceRequest", + "type": "object", + "properties": { + "instances": { + "type": "array", + "description": "URLs of the instances to be added to targetPool.", + "items": { + "$ref": "InstanceReference" + } + } + } + }, + "TargetPoolsRemoveHealthCheckRequest": { + "id": "TargetPoolsRemoveHealthCheckRequest", + "type": "object", + "properties": { + "healthChecks": { + "type": "array", + "description": "Health check URLs to be removed from targetPool.", + "items": { + "$ref": "HealthCheckReference" + } + } + } + }, + "TargetPoolsRemoveInstanceRequest": { + "id": "TargetPoolsRemoveInstanceRequest", + "type": "object", + "properties": { + "instances": { + "type": "array", + "description": "URLs of the instances to be removed from targetPool.", + "items": { + "$ref": "InstanceReference" + } + } + } + }, + "TargetPoolsScopedList": { + "id": "TargetPoolsScopedList", + "type": "object", + "properties": { + "targetPools": { + "type": "array", + "description": "List of target pools contained in this scope.", + "items": { + "$ref": "TargetPool" + } + }, + "warning": { + "type": "object", + "description": "Informational warning which replaces the list of addresses when the list is empty.", + "properties": { + "code": { + "type": "string", + "description": "The warning type identifier for this warning.", + "enum": [ + "DEPRECATED_RESOURCE_USED", + "DISK_SIZE_LARGER_THAN_IMAGE_SIZE", + "INJECTED_KERNELS_DEPRECATED", + "NEXT_HOP_ADDRESS_NOT_ASSIGNED", + "NEXT_HOP_CANNOT_IP_FORWARD", + "NEXT_HOP_INSTANCE_NOT_FOUND", + "NEXT_HOP_INSTANCE_NOT_ON_NETWORK", + "NEXT_HOP_NOT_RUNNING", + "NO_RESULTS_ON_PAGE", + "REQUIRED_TOS_AGREEMENT", + "UNREACHABLE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "data": { + "type": "array", + "description": "Metadata for this warning in 'key: value' format.", + "items": { + "type": "object", + "properties": { + "key": { + "type": "string", + "description": "A key for the warning data." + }, + "value": { + "type": "string", + "description": "A warning data value corresponding to the key." + } + } + } + }, + "message": { + "type": "string", + "description": "Optional human-readable details for this warning." + } + } + } + } + }, + "TargetReference": { + "id": "TargetReference", + "type": "object", + "properties": { + "target": { + "type": "string" + } + } + }, + "Zone": { + "id": "Zone", + "type": "object", + "description": "A zone resource.", + "properties": { + "creationTimestamp": { + "type": "string", + "description": "Creation timestamp in RFC3339 text format (output only)." + }, + "deprecated": { + "$ref": "DeprecationStatus", + "description": "The deprecation status associated with this zone." + }, + "description": { + "type": "string", + "description": "Textual description of the resource." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Type of the resource.", + "default": "compute#zone" + }, + "maintenanceWindows": { + "type": "array", + "description": "Scheduled maintenance windows for the zone. When the zone is in a maintenance window, all resources which reside in the zone will be unavailable.", + "items": { + "type": "object", + "properties": { + "beginTime": { + "type": "string", + "description": "Begin time of the maintenance window, in RFC 3339 format." + }, + "description": { + "type": "string", + "description": "Textual description of the maintenance window." + }, + "endTime": { + "type": "string", + "description": "End time of the maintenance window, in RFC 3339 format." + }, + "name": { + "type": "string", + "description": "Name of the maintenance window." + } + } + } + }, + "name": { + "type": "string", + "description": "Name of the resource." + }, + "region": { + "type": "string", + "description": "Full URL reference to the region which hosts the zone (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for the resource (output only)." + }, + "status": { + "type": "string", + "description": "Status of the zone. \"UP\" or \"DOWN\".", + "enum": [ + "DOWN", + "UP" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + }, + "ZoneList": { + "id": "ZoneList", + "type": "object", + "description": "Contains a list of zone resources.", + "properties": { + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "items": { + "type": "array", + "description": "The zone resources.", + "items": { + "$ref": "Zone" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "compute#zoneList" + }, + "nextPageToken": { + "type": "string", + "description": "A token used to continue a truncated list request (output only)." + }, + "selfLink": { + "type": "string", + "description": "Server defined URL for this resource (output only)." + } + } + } + }, + "resources": { + "addresses": { + "methods": { + "aggregatedList": { + "id": "compute.addresses.aggregatedList", + "path": "{project}/aggregated/addresses", + "httpMethod": "GET", + "description": "Retrieves the list of addresses grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "AddressAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.addresses.delete", + "path": "{project}/regions/{region}/addresses/{address}", + "httpMethod": "DELETE", + "description": "Deletes the specified address resource.", + "parameters": { + "address": { + "type": "string", + "description": "Name of the address resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "address" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.addresses.get", + "path": "{project}/regions/{region}/addresses/{address}", + "httpMethod": "GET", + "description": "Returns the specified address resource.", + "parameters": { + "address": { + "type": "string", + "description": "Name of the address resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "address" + ], + "response": { + "$ref": "Address" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.addresses.insert", + "path": "{project}/regions/{region}/addresses", + "httpMethod": "POST", + "description": "Creates an address resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "Address" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.addresses.list", + "path": "{project}/regions/{region}/addresses", + "httpMethod": "GET", + "description": "Retrieves the list of address resources contained within the specified region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "AddressList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "disks": { + "methods": { + "aggregatedList": { + "id": "compute.disks.aggregatedList", + "path": "{project}/aggregated/disks", + "httpMethod": "GET", + "description": "Retrieves the list of disks grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "DiskAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "createSnapshot": { + "id": "compute.disks.createSnapshot", + "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot", + "httpMethod": "POST", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to snapshot.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "request": { + "$ref": "Snapshot" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.disks.delete", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.disks.get", + "path": "{project}/zones/{zone}/disks/{disk}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk resource.", + "parameters": { + "disk": { + "type": "string", + "description": "Name of the persistent disk resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "disk" + ], + "response": { + "$ref": "Disk" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.disks.insert", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "POST", + "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "sourceImage": { + "type": "string", + "description": "Optional. Source image to restore onto a disk.", + "location": "query" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Disk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.disks.list", + "path": "{project}/zones/{zone}/disks", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "DiskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "firewalls": { + "methods": { + "delete": { + "id": "compute.firewalls.delete", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "DELETE", + "description": "Deletes the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.firewalls.get", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "GET", + "description": "Returns the specified firewall resource.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "response": { + "$ref": "Firewall" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.firewalls.insert", + "path": "{project}/global/firewalls", + "httpMethod": "POST", + "description": "Creates a firewall resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.firewalls.list", + "path": "{project}/global/firewalls", + "httpMethod": "GET", + "description": "Retrieves the list of firewall resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "FirewallList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.firewalls.patch", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PATCH", + "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.firewalls.update", + "path": "{project}/global/firewalls/{firewall}", + "httpMethod": "PUT", + "description": "Updates the specified firewall resource with the data included in the request.", + "parameters": { + "firewall": { + "type": "string", + "description": "Name of the firewall resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "firewall" + ], + "request": { + "$ref": "Firewall" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "forwardingRules": { + "methods": { + "aggregatedList": { + "id": "compute.forwardingRules.aggregatedList", + "path": "{project}/aggregated/forwardingRules", + "httpMethod": "GET", + "description": "Retrieves the list of forwarding rules grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ForwardingRuleAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.forwardingRules.delete", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + "httpMethod": "DELETE", + "description": "Deletes the specified ForwardingRule resource.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.forwardingRules.get", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + "httpMethod": "GET", + "description": "Returns the specified ForwardingRule resource.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "response": { + "$ref": "ForwardingRule" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.forwardingRules.insert", + "path": "{project}/regions/{region}/forwardingRules", + "httpMethod": "POST", + "description": "Creates a ForwardingRule resource in the specified project and region using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "ForwardingRule" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.forwardingRules.list", + "path": "{project}/regions/{region}/forwardingRules", + "httpMethod": "GET", + "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "ForwardingRuleList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setTarget": { + "id": "compute.forwardingRules.setTarget", + "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", + "httpMethod": "POST", + "description": "Changes target url for forwarding rule.", + "parameters": { + "forwardingRule": { + "type": "string", + "description": "Name of the ForwardingRule resource in which target is to be set.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "forwardingRule" + ], + "request": { + "$ref": "TargetReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "globalOperations": { + "methods": { + "aggregatedList": { + "id": "compute.globalOperations.aggregatedList", + "path": "{project}/aggregated/operations", + "httpMethod": "GET", + "description": "Retrieves the list of all operations grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.globalOperations.delete", + "path": "{project}/global/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.globalOperations.get", + "path": "{project}/global/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.globalOperations.list", + "path": "{project}/global/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "httpHealthChecks": { + "methods": { + "delete": { + "id": "compute.httpHealthChecks.delete", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "DELETE", + "description": "Deletes the specified HttpHealthCheck resource.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.httpHealthChecks.get", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "GET", + "description": "Returns the specified HttpHealthCheck resource.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "response": { + "$ref": "HttpHealthCheck" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.httpHealthChecks.insert", + "path": "{project}/global/httpHealthChecks", + "httpMethod": "POST", + "description": "Creates a HttpHealthCheck resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.httpHealthChecks.list", + "path": "{project}/global/httpHealthChecks", + "httpMethod": "GET", + "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "HttpHealthCheckList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "patch": { + "id": "compute.httpHealthChecks.patch", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "PATCH", + "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "update": { + "id": "compute.httpHealthChecks.update", + "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + "httpMethod": "PUT", + "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.", + "parameters": { + "httpHealthCheck": { + "type": "string", + "description": "Name of the HttpHealthCheck resource to update.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "httpHealthCheck" + ], + "request": { + "$ref": "HttpHealthCheck" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "images": { + "methods": { + "delete": { + "id": "compute.images.delete", + "path": "{project}/global/images/{image}", + "httpMethod": "DELETE", + "description": "Deletes the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deprecate": { + "id": "compute.images.deprecate", + "path": "{project}/global/images/{image}/deprecate", + "httpMethod": "POST", + "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + "parameters": { + "image": { + "type": "string", + "description": "Image name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "request": { + "$ref": "DeprecationStatus" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.images.get", + "path": "{project}/global/images/{image}", + "httpMethod": "GET", + "description": "Returns the specified image resource.", + "parameters": { + "image": { + "type": "string", + "description": "Name of the image resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "image" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.images.insert", + "path": "{project}/global/images", + "httpMethod": "POST", + "description": "Creates an image resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "list": { + "id": "compute.images.list", + "path": "{project}/global/images", + "httpMethod": "GET", + "description": "Retrieves the list of image resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ImageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "instances": { + "methods": { + "addAccessConfig": { + "id": "compute.instances.addAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + "httpMethod": "POST", + "description": "Adds an access config to an instance's network interface.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "networkInterface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "networkInterface" + ], + "request": { + "$ref": "AccessConfig" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "aggregatedList": { + "id": "compute.instances.aggregatedList", + "path": "{project}/aggregated/instances", + "httpMethod": "GET", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstanceAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "attachDisk": { + "id": "compute.instances.attachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + "httpMethod": "POST", + "description": "Attaches a disk resource to an instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "AttachedDisk" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "delete": { + "id": "compute.instances.delete", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "deleteAccessConfig": { + "id": "compute.instances.deleteAccessConfig", + "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + "httpMethod": "POST", + "description": "Deletes an access config from an instance's network interface.", + "parameters": { + "accessConfig": { + "type": "string", + "description": "Access config name.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "networkInterface": { + "type": "string", + "description": "Network interface name.", + "required": true, + "location": "query" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "accessConfig", + "networkInterface" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "detachDisk": { + "id": "compute.instances.detachDisk", + "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + "httpMethod": "POST", + "description": "Detaches a disk from an instance.", + "parameters": { + "deviceName": { + "type": "string", + "description": "Disk device name to detach.", + "required": true, + "pattern": "\\w[\\w.-]{0,254}", + "location": "query" + }, + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance", + "deviceName" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.instances.get", + "path": "{project}/zones/{zone}/instances/{instance}", + "httpMethod": "GET", + "description": "Returns the specified instance resource.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Instance" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getSerialPortOutput": { + "id": "compute.instances.getSerialPortOutput", + "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + "httpMethod": "GET", + "description": "Returns the specified instance's serial port output.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "SerialPortOutput" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.instances.insert", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "POST", + "description": "Creates an instance resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "request": { + "$ref": "Instance" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.instances.list", + "path": "{project}/zones/{zone}/instances", + "httpMethod": "GET", + "description": "Retrieves the list of instance resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "InstanceList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "reset": { + "id": "compute.instances.reset", + "path": "{project}/zones/{zone}/instances/{instance}/reset", + "httpMethod": "POST", + "description": "Performs a hard reset on the instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setMetadata": { + "id": "compute.instances.setMetadata", + "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + "httpMethod": "POST", + "description": "Sets metadata for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setScheduling": { + "id": "compute.instances.setScheduling", + "path": "{project}/zones/{zone}/instances/{instance}/setScheduling", + "httpMethod": "POST", + "description": "Sets an instance's scheduling options.", + "parameters": { + "instance": { + "type": "string", + "description": "Instance name.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Project name.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Scheduling" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setTags": { + "id": "compute.instances.setTags", + "path": "{project}/zones/{zone}/instances/{instance}/setTags", + "httpMethod": "POST", + "description": "Sets tags for the specified instance to the data included in the request.", + "parameters": { + "instance": { + "type": "string", + "description": "Name of the instance scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "instance" + ], + "request": { + "$ref": "Tags" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "kernels": { + "methods": { + "get": { + "id": "compute.kernels.get", + "path": "{project}/global/kernels/{kernel}", + "httpMethod": "GET", + "description": "Returns the specified kernel resource.", + "parameters": { + "kernel": { + "type": "string", + "description": "Name of the kernel resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "kernel" + ], + "response": { + "$ref": "Kernel" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.kernels.list", + "path": "{project}/global/kernels", + "httpMethod": "GET", + "description": "Retrieves the list of kernel resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "KernelList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "machineTypes": { + "methods": { + "aggregatedList": { + "id": "compute.machineTypes.aggregatedList", + "path": "{project}/aggregated/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "MachineTypeAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "get": { + "id": "compute.machineTypes.get", + "path": "{project}/zones/{zone}/machineTypes/{machineType}", + "httpMethod": "GET", + "description": "Returns the specified machine type resource.", + "parameters": { + "machineType": { + "type": "string", + "description": "Name of the machine type resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "machineType" + ], + "response": { + "$ref": "MachineType" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.machineTypes.list", + "path": "{project}/zones/{zone}/machineTypes", + "httpMethod": "GET", + "description": "Retrieves the list of machine type resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "MachineTypeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "networks": { + "methods": { + "delete": { + "id": "compute.networks.delete", + "path": "{project}/global/networks/{network}", + "httpMethod": "DELETE", + "description": "Deletes the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.networks.get", + "path": "{project}/global/networks/{network}", + "httpMethod": "GET", + "description": "Returns the specified network resource.", + "parameters": { + "network": { + "type": "string", + "description": "Name of the network resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "network" + ], + "response": { + "$ref": "Network" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.networks.insert", + "path": "{project}/global/networks", + "httpMethod": "POST", + "description": "Creates a network resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Network" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.networks.list", + "path": "{project}/global/networks", + "httpMethod": "GET", + "description": "Retrieves the list of network resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "NetworkList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "compute.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Returns the specified project resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project resource to retrieve.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "setCommonInstanceMetadata": { + "id": "compute.projects.setCommonInstanceMetadata", + "path": "{project}/setCommonInstanceMetadata", + "httpMethod": "POST", + "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Metadata" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "regionOperations": { + "methods": { + "delete": { + "id": "compute.regionOperations.delete", + "path": "{project}/regions/{region}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified region-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.regionOperations.get", + "path": "{project}/regions/{region}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified region-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.regionOperations.list", + "path": "{project}/regions/{region}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "regions": { + "methods": { + "get": { + "id": "compute.regions.get", + "path": "{project}/regions/{region}", + "httpMethod": "GET", + "description": "Returns the specified region resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "Region" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.regions.list", + "path": "{project}/regions", + "httpMethod": "GET", + "description": "Retrieves the list of region resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "RegionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "routes": { + "methods": { + "delete": { + "id": "compute.routes.delete", + "path": "{project}/global/routes/{route}", + "httpMethod": "DELETE", + "description": "Deletes the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.routes.get", + "path": "{project}/global/routes/{route}", + "httpMethod": "GET", + "description": "Returns the specified route resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "route": { + "type": "string", + "description": "Name of the route resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "route" + ], + "response": { + "$ref": "Route" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.routes.insert", + "path": "{project}/global/routes", + "httpMethod": "POST", + "description": "Creates a route resource in the specified project using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Route" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.routes.list", + "path": "{project}/global/routes", + "httpMethod": "GET", + "description": "Retrieves the list of route resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "RouteList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "snapshots": { + "methods": { + "delete": { + "id": "compute.snapshots.delete", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "DELETE", + "description": "Deletes the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.snapshots.get", + "path": "{project}/global/snapshots/{snapshot}", + "httpMethod": "GET", + "description": "Returns the specified persistent disk snapshot resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "snapshot": { + "type": "string", + "description": "Name of the persistent disk snapshot resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "snapshot" + ], + "response": { + "$ref": "Snapshot" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.snapshots.list", + "path": "{project}/global/snapshots", + "httpMethod": "GET", + "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "SnapshotList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "targetPools": { + "methods": { + "addHealthCheck": { + "id": "compute.targetPools.addHealthCheck", + "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", + "httpMethod": "POST", + "description": "Adds health check URL to targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which health_check_url is to be added.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetPoolsAddHealthCheckRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "addInstance": { + "id": "compute.targetPools.addInstance", + "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance", + "httpMethod": "POST", + "description": "Adds instance url to targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which instance_url is to be added.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetPoolsAddInstanceRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "aggregatedList": { + "id": "compute.targetPools.aggregatedList", + "path": "{project}/aggregated/targetPools", + "httpMethod": "GET", + "description": "Retrieves the list of target pools grouped by scope.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "TargetPoolAggregatedList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "delete": { + "id": "compute.targetPools.delete", + "path": "{project}/regions/{region}/targetPools/{targetPool}", + "httpMethod": "DELETE", + "description": "Deletes the specified TargetPool resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.targetPools.get", + "path": "{project}/regions/{region}/targetPools/{targetPool}", + "httpMethod": "GET", + "description": "Returns the specified TargetPool resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "response": { + "$ref": "TargetPool" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "getHealth": { + "id": "compute.targetPools.getHealth", + "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth", + "httpMethod": "POST", + "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which the queried instance belongs.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "InstanceReference" + }, + "response": { + "$ref": "TargetPoolInstanceHealth" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "insert": { + "id": "compute.targetPools.insert", + "path": "{project}/regions/{region}/targetPools", + "httpMethod": "POST", + "description": "Creates a TargetPool resource in the specified project and region using the data included in the request.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "request": { + "$ref": "TargetPool" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "list": { + "id": "compute.targetPools.list", + "path": "{project}/regions/{region}/targetPools", + "httpMethod": "GET", + "description": "Retrieves the list of TargetPool resources available to the specified project and region.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region" + ], + "response": { + "$ref": "TargetPoolList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "removeHealthCheck": { + "id": "compute.targetPools.removeHealthCheck", + "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", + "httpMethod": "POST", + "description": "Removes health check URL from targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which health_check_url is to be removed.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetPoolsRemoveHealthCheckRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "removeInstance": { + "id": "compute.targetPools.removeInstance", + "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance", + "httpMethod": "POST", + "description": "Removes instance URL from targetPool.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource to which instance_url is to be removed.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetPoolsRemoveInstanceRequest" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "setBackup": { + "id": "compute.targetPools.setBackup", + "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup", + "httpMethod": "POST", + "description": "Changes backup pool configurations.", + "parameters": { + "failoverRatio": { + "type": "number", + "description": "New failoverRatio value for the containing target pool.", + "format": "float", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "region": { + "type": "string", + "description": "Name of the region scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "targetPool": { + "type": "string", + "description": "Name of the TargetPool resource for which the backup is to be set.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "region", + "targetPool" + ], + "request": { + "$ref": "TargetReference" + }, + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + } + } + }, + "zoneOperations": { + "methods": { + "delete": { + "id": "compute.zoneOperations.delete", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "DELETE", + "description": "Deletes the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to delete.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "scopes": [ + "https://www.googleapis.com/auth/compute" + ] + }, + "get": { + "id": "compute.zoneOperations.get", + "path": "{project}/zones/{zone}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves the specified zone-specific operation resource.", + "parameters": { + "operation": { + "type": "string", + "description": "Name of the operation resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone", + "operation" + ], + "response": { + "$ref": "Operation" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zoneOperations.list", + "path": "{project}/zones/{zone}/operations", + "httpMethod": "GET", + "description": "Retrieves the list of operation resources contained within the specified zone.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone scoping this request.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "OperationList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + }, + "zones": { + "methods": { + "get": { + "id": "compute.zones.get", + "path": "{project}/zones/{zone}", + "httpMethod": "GET", + "description": "Returns the specified zone resource.", + "parameters": { + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + }, + "zone": { + "type": "string", + "description": "Name of the zone resource to return.", + "required": true, + "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + "location": "path" + } + }, + "parameterOrder": [ + "project", + "zone" + ], + "response": { + "$ref": "Zone" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + }, + "list": { + "id": "compute.zones.list", + "path": "{project}/zones", + "httpMethod": "GET", + "description": "Retrieves the list of zone resources available to the specified project.", + "parameters": { + "filter": { + "type": "string", + "description": "Optional. Filter expression for filtering listed resources.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + "default": "500", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Name of the project scoping this request.", + "required": true, + "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ZoneList" + }, + "scopes": [ + "https://www.googleapis.com/auth/compute", + "https://www.googleapis.com/auth/compute.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-gen.go b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-gen.go new file mode 100644 index 0000000000000..e3dd956b9111a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/compute/v1beta16/compute-gen.go @@ -0,0 +1,10928 @@ +// Package compute provides access to the Compute Engine API. +// +// See https://developers.google.com/compute/docs/reference/v1beta16 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/compute/v1beta16" +// ... +// computeService, err := compute.New(oauthHttpClient) +package compute + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "compute:v1beta16" +const apiName = "compute" +const apiVersion = "v1beta16" +const basePath = "https://www.googleapis.com/compute/v1beta16/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Compute Engine resources + ComputeScope = "https://www.googleapis.com/auth/compute" + + // View your Google Compute Engine resources + ComputeReadonlyScope = "https://www.googleapis.com/auth/compute.readonly" + + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Addresses = NewAddressesService(s) + s.Disks = NewDisksService(s) + s.Firewalls = NewFirewallsService(s) + s.ForwardingRules = NewForwardingRulesService(s) + s.GlobalOperations = NewGlobalOperationsService(s) + s.HttpHealthChecks = NewHttpHealthChecksService(s) + s.Images = NewImagesService(s) + s.Instances = NewInstancesService(s) + s.Kernels = NewKernelsService(s) + s.MachineTypes = NewMachineTypesService(s) + s.Networks = NewNetworksService(s) + s.Projects = NewProjectsService(s) + s.RegionOperations = NewRegionOperationsService(s) + s.Regions = NewRegionsService(s) + s.Routes = NewRoutesService(s) + s.Snapshots = NewSnapshotsService(s) + s.TargetPools = NewTargetPoolsService(s) + s.ZoneOperations = NewZoneOperationsService(s) + s.Zones = NewZonesService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Addresses *AddressesService + + Disks *DisksService + + Firewalls *FirewallsService + + ForwardingRules *ForwardingRulesService + + GlobalOperations *GlobalOperationsService + + HttpHealthChecks *HttpHealthChecksService + + Images *ImagesService + + Instances *InstancesService + + Kernels *KernelsService + + MachineTypes *MachineTypesService + + Networks *NetworksService + + Projects *ProjectsService + + RegionOperations *RegionOperationsService + + Regions *RegionsService + + Routes *RoutesService + + Snapshots *SnapshotsService + + TargetPools *TargetPoolsService + + ZoneOperations *ZoneOperationsService + + Zones *ZonesService +} + +func NewAddressesService(s *Service) *AddressesService { + rs := &AddressesService{s: s} + return rs +} + +type AddressesService struct { + s *Service +} + +func NewDisksService(s *Service) *DisksService { + rs := &DisksService{s: s} + return rs +} + +type DisksService struct { + s *Service +} + +func NewFirewallsService(s *Service) *FirewallsService { + rs := &FirewallsService{s: s} + return rs +} + +type FirewallsService struct { + s *Service +} + +func NewForwardingRulesService(s *Service) *ForwardingRulesService { + rs := &ForwardingRulesService{s: s} + return rs +} + +type ForwardingRulesService struct { + s *Service +} + +func NewGlobalOperationsService(s *Service) *GlobalOperationsService { + rs := &GlobalOperationsService{s: s} + return rs +} + +type GlobalOperationsService struct { + s *Service +} + +func NewHttpHealthChecksService(s *Service) *HttpHealthChecksService { + rs := &HttpHealthChecksService{s: s} + return rs +} + +type HttpHealthChecksService struct { + s *Service +} + +func NewImagesService(s *Service) *ImagesService { + rs := &ImagesService{s: s} + return rs +} + +type ImagesService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewKernelsService(s *Service) *KernelsService { + rs := &KernelsService{s: s} + return rs +} + +type KernelsService struct { + s *Service +} + +func NewMachineTypesService(s *Service) *MachineTypesService { + rs := &MachineTypesService{s: s} + return rs +} + +type MachineTypesService struct { + s *Service +} + +func NewNetworksService(s *Service) *NetworksService { + rs := &NetworksService{s: s} + return rs +} + +type NetworksService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewRegionOperationsService(s *Service) *RegionOperationsService { + rs := &RegionOperationsService{s: s} + return rs +} + +type RegionOperationsService struct { + s *Service +} + +func NewRegionsService(s *Service) *RegionsService { + rs := &RegionsService{s: s} + return rs +} + +type RegionsService struct { + s *Service +} + +func NewRoutesService(s *Service) *RoutesService { + rs := &RoutesService{s: s} + return rs +} + +type RoutesService struct { + s *Service +} + +func NewSnapshotsService(s *Service) *SnapshotsService { + rs := &SnapshotsService{s: s} + return rs +} + +type SnapshotsService struct { + s *Service +} + +func NewTargetPoolsService(s *Service) *TargetPoolsService { + rs := &TargetPoolsService{s: s} + return rs +} + +type TargetPoolsService struct { + s *Service +} + +func NewZoneOperationsService(s *Service) *ZoneOperationsService { + rs := &ZoneOperationsService{s: s} + return rs +} + +type ZoneOperationsService struct { + s *Service +} + +func NewZonesService(s *Service) *ZonesService { + rs := &ZonesService{s: s} + return rs +} + +type ZonesService struct { + s *Service +} + +type AccessConfig struct { + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of this access configuration. + Name string `json:"name,omitempty"` + + // NatIP: An external IP address associated with this instance. Specify + // an unused static IP address available to the project. If not + // specified, the external IP will be drawn from a shared ephemeral + // pool. + NatIP string `json:"natIP,omitempty"` + + // Type: Type of configuration. Must be set to "ONE_TO_ONE_NAT". This + // configures port-for-port NAT to the internet. + Type string `json:"type,omitempty"` +} + +type Address struct { + // Address: The IP address represented by this resource. + Address string `json:"address,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Region: URL of the region where the address resides (output only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the address (output only). + Status string `json:"status,omitempty"` + + // Users: The resources that are using this address resource. + Users []string `json:"users,omitempty"` +} + +type AddressAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped address lists. + Items *AddressAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type AddressAggregatedListItems struct { +} + +type AddressList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The address resources. + Items []*Address `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type AddressesScopedList struct { + // Addresses: List of addresses contained in this scope. + Addresses []*Address `json:"addresses,omitempty"` + + // Warning: Informational warning which replaces the list of addresses + // when the list is empty. + Warning *AddressesScopedListWarning `json:"warning,omitempty"` +} + +type AddressesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*AddressesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type AddressesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type AttachedDisk struct { + // Boot: Indicates that this is a boot disk. VM will use the first + // partition of the disk for its root filesystem. + Boot bool `json:"boot,omitempty"` + + // DeviceName: Persistent disk only; must be unique within the instance + // when specified. This represents a unique device name that is + // reflected into the /dev/ tree of a Linux operating system running + // within the instance. If not specified, a default will be chosen by + // the system. + DeviceName string `json:"deviceName,omitempty"` + + // Index: A zero-based index to assign to this disk, where 0 is reserved + // for the boot disk. If not specified, the server will choose an + // appropriate value (output only). + Index int64 `json:"index,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Mode: The mode in which to attach this disk, either "READ_WRITE" or + // "READ_ONLY". + Mode string `json:"mode,omitempty"` + + // Source: Persistent disk only; the URL of the persistent disk + // resource. + Source string `json:"source,omitempty"` + + // Type: Type of the disk, either "SCRATCH" or "PERSISTENT". Note that + // persistent disks must be created before you can specify them here. + Type string `json:"type,omitempty"` +} + +type DeprecationStatus struct { + // Deleted: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DELETED. + Deleted string `json:"deleted,omitempty"` + + // Deprecated: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to DEPRECATED. + Deprecated string `json:"deprecated,omitempty"` + + // Obsolete: An optional RFC3339 timestamp on or after which the + // deprecation state of this resource will be changed to OBSOLETE. + Obsolete string `json:"obsolete,omitempty"` + + // Replacement: A URL of the suggested replacement for the deprecated + // resource. The deprecated resource and its replacement must be + // resources of the same kind. + Replacement string `json:"replacement,omitempty"` + + // State: The deprecation state. Can be "DEPRECATED", "OBSOLETE", or + // "DELETED". Operations which create a new resource using a + // "DEPRECATED" resource will return successfully, but with a warning + // indicating the deprecated resource and recommending its replacement. + // New uses of "OBSOLETE" or "DELETED" resources will result in an + // error. + State string `json:"state,omitempty"` +} + +type Disk struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Options: Internal use only. + Options string `json:"options,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SizeGb: Size of the persistent disk, specified in GB. This parameter + // is optional when creating a disk from a disk image or a snapshot, + // otherwise it is required. + SizeGb int64 `json:"sizeGb,omitempty,string"` + + // SourceImage: The source image used to create this disk. Once the + // source image has been deleted from the system, this field will not be + // set, even if an image with the same name has been re-created. + SourceImage string `json:"sourceImage,omitempty"` + + // SourceImageId: The 'id' value of the image used to create this disk. + // This value may be used to determine whether the disk was created from + // the current or a previous instance of a given image. + SourceImageId string `json:"sourceImageId,omitempty"` + + // SourceSnapshot: The source snapshot used to create this disk. Once + // the source snapshot has been deleted from the system, this field will + // be cleared, and will not be set even if a snapshot with the same name + // has been re-created. + SourceSnapshot string `json:"sourceSnapshot,omitempty"` + + // SourceSnapshotId: The 'id' value of the snapshot used to create this + // disk. This value may be used to determine whether the disk was + // created from the current or a previous instance of a given disk + // snapshot. + SourceSnapshotId string `json:"sourceSnapshotId,omitempty"` + + // Status: The status of disk creation (output only). + Status string `json:"status,omitempty"` + + // Zone: URL of the zone where the disk resides (output only). + Zone string `json:"zone,omitempty"` +} + +type DiskAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped disk lists. + Items *DiskAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type DiskAggregatedListItems struct { +} + +type DiskList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent disk resources. + Items []*Disk `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type DisksScopedList struct { + // Disks: List of disks contained in this scope. + Disks []*Disk `json:"disks,omitempty"` + + // Warning: Informational warning which replaces the list of disks when + // the list is empty. + Warning *DisksScopedListWarning `json:"warning,omitempty"` +} + +type DisksScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*DisksScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type DisksScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Firewall struct { + // Allowed: The list of rules specified by this firewall. Each rule + // specifies a protocol and port-range tuple that describes a permitted + // connection. + Allowed []*FirewallAllowed `json:"allowed,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this firewall is applied; + // provided by the client when the firewall is created. + Network string `json:"network,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceRanges: A list of IP address blocks expressed in CIDR format + // which this rule applies to. One or both of sourceRanges and + // sourceTags may be set; an inbound connection is allowed if either the + // range or the tag of the source matches. + SourceRanges []string `json:"sourceRanges,omitempty"` + + // SourceTags: A list of instance tags which this rule applies to. One + // or both of sourceRanges and sourceTags may be set; an inbound + // connection is allowed if either the range or the tag of the source + // matches. + SourceTags []string `json:"sourceTags,omitempty"` + + // TargetTags: A list of instance tags indicating sets of instances + // located on network which may make network connections as specified in + // allowed. If no targetTags are specified, the firewall rule applies to + // all instances on the specified network. + TargetTags []string `json:"targetTags,omitempty"` +} + +type FirewallAllowed struct { + // IPProtocol: Required; this is the IP protocol that is allowed for + // this rule. This can either be a well known protocol string (tcp, udp + // or icmp) or the IP protocol number. + IPProtocol string `json:"IPProtocol,omitempty"` + + // Ports: An optional list of ports which are allowed. It is an error to + // specify this for any protocol that isn't UDP or TCP. Each entry must + // be either an integer or a range. If not specified, connections + // through any port are allowed. + // + // Example inputs include: ["22"], + // ["80","443"] and ["12345-12349"]. + Ports []string `json:"ports,omitempty"` +} + +type FirewallList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The firewall resources. + Items []*Firewall `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRule struct { + // IPAddress: Value of the reserved IP address that this forwarding rule + // is serving on behalf of. The address resource must live in the same + // region as the forwarding rule. If left empty (default value), an + // ephemeral IP will be assigned. + IPAddress string `json:"IPAddress,omitempty"` + + // IPProtocol: The IP protocol to which this rule applies, can be either + // 'TCP' or 'UDP' (If left empty, will use TCP by default). + IPProtocol string `json:"IPProtocol,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PortRange: If 'IPProtocol' is 'TCP' or 'UDP', only packets addressed + // to ports in the specified range will be forwarded to 'target'. If + // left empty (default value), all ports are forwarded. Forwarding rules + // with the same [IPAddress, IPProtocol] pair must have disjoint port + // ranges. + PortRange string `json:"portRange,omitempty"` + + // Region: URL of the region where the forwarding rule resides (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Target: The URL of the target resource to receive the matched + // traffic. It must live in the same region as this forwarding rule. + Target string `json:"target,omitempty"` +} + +type ForwardingRuleAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped forwarding rule lists. + Items *ForwardingRuleAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRuleAggregatedListItems struct { +} + +type ForwardingRuleList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The ForwardingRule resources. + Items []*ForwardingRule `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ForwardingRulesScopedList struct { + // ForwardingRules: List of forwarding rules contained in this scope. + ForwardingRules []*ForwardingRule `json:"forwardingRules,omitempty"` + + // Warning: Informational warning which replaces the list of forwarding + // rules when the list is empty. + Warning *ForwardingRulesScopedListWarning `json:"warning,omitempty"` +} + +type ForwardingRulesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*ForwardingRulesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type ForwardingRulesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type HealthCheckReference struct { + HealthCheck string `json:"healthCheck,omitempty"` +} + +type HealthStatus struct { + // HealthState: Health state of the instance. + HealthState string `json:"healthState,omitempty"` + + // Instance: URL of the instance resource. + Instance string `json:"instance,omitempty"` + + // IpAddress: The IP address represented by this resource. + IpAddress string `json:"ipAddress,omitempty"` +} + +type HttpHealthCheck struct { + // CheckIntervalSec: How often (in seconds) to send a health check. The + // default value is 5 seconds. + CheckIntervalSec int64 `json:"checkIntervalSec,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // HealthyThreshold: A so-far unhealthy VM will be marked healthy after + // this many consecutive successes. The default value is 2. + HealthyThreshold int64 `json:"healthyThreshold,omitempty"` + + // Host: The value of the host header in the HTTP health check request. + // If left empty (default value), the public IP on behalf of which this + // health check is performed will be used. + Host string `json:"host,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Port: The TCP port number for the HTTP health check request. The + // default value is 80. + Port int64 `json:"port,omitempty"` + + // RequestPath: The request path of the HTTP health check request. The + // default value is "/". + RequestPath string `json:"requestPath,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // TimeoutSec: How long (in seconds) to wait before claiming failure. + // The default value is 5 seconds. + TimeoutSec int64 `json:"timeoutSec,omitempty"` + + // UnhealthyThreshold: A so-far healthy VM will be marked unhealthy + // after this many consecutive failures. The default value is 2. + UnhealthyThreshold int64 `json:"unhealthyThreshold,omitempty"` +} + +type HttpHealthCheckList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The HttpHealthCheck resources. + Items []*HttpHealthCheck `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Image struct { + // ArchiveSizeBytes: Size of the image tar.gz archive stored in Google + // Cloud Storage (in bytes). + ArchiveSizeBytes int64 `json:"archiveSizeBytes,omitempty,string"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this image. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource; provided by the + // client when the resource is created. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // PreferredKernel: An optional URL of the preferred kernel for use with + // this disk image. If not specified, a server defined default kernel + // will be used. + PreferredKernel string `json:"preferredKernel,omitempty"` + + // RawDisk: The raw disk image parameters. + RawDisk *ImageRawDisk `json:"rawDisk,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceType: Must be "RAW"; provided by the client when the disk image + // is created. + SourceType string `json:"sourceType,omitempty"` + + // Status: Status of the image (output only). It will be one of the + // following READY - after image has been successfully created and is + // ready for use FAILED - if creating the image fails for some reason + // PENDING - the image creation is in progress An image can be used to + // create other resources suck as instances only after the image has + // been successfully created and the status is set to READY. + Status string `json:"status,omitempty"` +} + +type ImageRawDisk struct { + // ContainerType: The format used to encode and transmit the block + // device. Should be TAR. This is just a container and transmission + // format and not a runtime format. Provided by the client when the disk + // image is created. + ContainerType string `json:"containerType,omitempty"` + + // Sha1Checksum: An optional SHA1 checksum of the disk image before + // unpackaging; provided by the client when the disk image is created. + Sha1Checksum string `json:"sha1Checksum,omitempty"` + + // Source: The full Google Cloud Storage URL where the disk image is + // stored; provided by the client when the disk image is created. + Source string `json:"source,omitempty"` +} + +type ImageList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The disk image resources. + Items []*Image `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Instance struct { + // CanIpForward: Allows this instance to send packets with source IP + // addresses other than its own and receive packets with destination IP + // addresses other than its own. If this instance will be used as an IP + // gateway or it will be set as the next-hop in a Route resource, say + // true. If unsure, leave this set to false. + CanIpForward bool `json:"canIpForward,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // Disks: Array of disks associated with this instance. Persistent disks + // must be created before you can assign them. + Disks []*AttachedDisk `json:"disks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Image: An optional URL of the disk image resource to be installed on + // this instance; provided by the client when the instance is created. + // Alternatively to passing the image, the client may choose to boot + // from a persistent disk, by setting boot=true flag on one of the + // entries in disks[] collection. + Image string `json:"image,omitempty"` + + // Kernel: URL of the kernel resource to use when booting. In case of + // booting from persistent disk, this parameter is required. When + // booting from a disk image, it is optional, but may be provided to use + // a different kernel than the one associated with the image. + Kernel string `json:"kernel,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MachineType: URL of the machine type resource describing which + // machine type to use to host the instance; provided by the client when + // the instance is created. + MachineType string `json:"machineType,omitempty"` + + // Metadata: Metadata key/value pairs assigned to this instance. + // Consists of custom metadata or predefined keys; see Instance + // documentation for more information. + Metadata *Metadata `json:"metadata,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // NetworkInterfaces: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + NetworkInterfaces []*NetworkInterface `json:"networkInterfaces,omitempty"` + + // Scheduling: Scheduling options for this instance. + Scheduling *Scheduling `json:"scheduling,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // ServiceAccounts: A list of service accounts each with specified + // scopes, for which access tokens are to be made available to the + // instance through metadata queries. + ServiceAccounts []*ServiceAccount `json:"serviceAccounts,omitempty"` + + // Status: Instance status. One of the following values: "PROVISIONING", + // "STAGING", "RUNNING", "STOPPING", "STOPPED", "TERMINATED" (output + // only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional, human-readable explanation of the status + // (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // Tags: A list of tags to be applied to this instance. Used to identify + // valid sources or targets for network firewalls. Provided by the + // client on instance creation. The tags can be later modified by the + // setTags method. Each tag within the list must comply with RFC1035. + Tags *Tags `json:"tags,omitempty"` + + // Zone: URL of the zone where the instance resides (output only). + Zone string `json:"zone,omitempty"` +} + +type InstanceAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped instance lists. + Items *InstanceAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type InstanceAggregatedListItems struct { +} + +type InstanceList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A list of instance resources. + Items []*Instance `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type InstanceReference struct { + Instance string `json:"instance,omitempty"` +} + +type InstancesScopedList struct { + // Instances: List of instances contained in this scope. + Instances []*Instance `json:"instances,omitempty"` + + // Warning: Informational warning which replaces the list of instances + // when the list is empty. + Warning *InstancesScopedListWarning `json:"warning,omitempty"` +} + +type InstancesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*InstancesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type InstancesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Kernel struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this kernel. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type KernelList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The kernel resources. + Items []*Kernel `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineType struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this machine type. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // GuestCpus: Count of CPUs exposed to the instance. + GuestCpus int64 `json:"guestCpus,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // ImageSpaceGb: Space allotted for the image, defined in GB. + ImageSpaceGb int64 `json:"imageSpaceGb,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaximumPersistentDisks: Maximum persistent disks allowed. + MaximumPersistentDisks int64 `json:"maximumPersistentDisks,omitempty"` + + // MaximumPersistentDisksSizeGb: Maximum total persistent disks size + // (GB) allowed. + MaximumPersistentDisksSizeGb int64 `json:"maximumPersistentDisksSizeGb,omitempty,string"` + + // MemoryMb: Physical memory assigned to the instance, defined in MB. + MemoryMb int64 `json:"memoryMb,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // ScratchDisks: List of extended scratch disks assigned to the + // instance. + ScratchDisks []*MachineTypeScratchDisks `json:"scratchDisks,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Zone: Url of the zone where the machine type resides (output only). + Zone string `json:"zone,omitempty"` +} + +type MachineTypeScratchDisks struct { + // DiskGb: Size of the scratch disk, defined in GB. + DiskGb int64 `json:"diskGb,omitempty"` +} + +type MachineTypeAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped machine type lists. + Items *MachineTypeAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypeAggregatedListItems struct { +} + +type MachineTypeList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The machine type resources. + Items []*MachineType `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type MachineTypesScopedList struct { + // MachineTypes: List of machine types contained in this scope. + MachineTypes []*MachineType `json:"machineTypes,omitempty"` + + // Warning: Informational warning which replaces the list of machine + // types when the list is empty. + Warning *MachineTypesScopedListWarning `json:"warning,omitempty"` +} + +type MachineTypesScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*MachineTypesScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type MachineTypesScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Metadata struct { + // Fingerprint: Fingerprint of this resource. A hash of the metadata's + // contents. This field is used for optimistic locking. An up-to-date + // metadata fingerprint must be provided in order to modify metadata. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: Array of key/value pairs. The total size of all keys and + // values must be less than 512 KB. + Items []*MetadataItems `json:"items,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` +} + +type MetadataItems struct { + // Key: Key for the metadata entry. Keys must conform to the following + // regexp: [a-zA-Z0-9-_]+, and be less than 128 bytes in length. This is + // reflected as part of a URL in the metadata server. Additionally, to + // avoid ambiguity, keys must not conflict with any other metadata keys + // for the project. + Key string `json:"key,omitempty"` + + // Value: Value for the metadata entry. These are free-form strings, and + // only have meaning as interpreted by the image running in the + // instance. The only restriction placed on values is that their size + // must be less than or equal to 32768 bytes. + Value string `json:"value,omitempty"` +} + +type Network struct { + // IPv4Range: Required; The range of internal addresses that are legal + // on this network. This range is a CIDR specification, for example: + // 192.168.0.0/16. Provided by the client when the network is created. + IPv4Range string `json:"IPv4Range,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // GatewayIPv4: An optional address that is used for default routing to + // other networks. This must be within the range specified by IPv4Range, + // and is typically the first usable address in that range. If not + // specified, the default value is the first usable address in + // IPv4Range. + GatewayIPv4 string `json:"gatewayIPv4,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type NetworkInterface struct { + // AccessConfigs: Array of configurations for this interface. This + // specifies how this interface is configured to interact with other + // network services, such as connecting to the internet. Currently, + // ONE_TO_ONE_NAT is the only access config supported. If there are no + // accessConfigs specified, then this instance will have no external + // internet access. + AccessConfigs []*AccessConfig `json:"accessConfigs,omitempty"` + + // Name: Name of the network interface, determined by the server; for + // network devices, these are e.g. eth0, eth1, etc. (output only). + Name string `json:"name,omitempty"` + + // Network: URL of the network resource attached to this interface. + Network string `json:"network,omitempty"` + + // NetworkIP: An optional IPV4 internal network address assigned to the + // instance for this network interface (output only). + NetworkIP string `json:"networkIP,omitempty"` +} + +type NetworkList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The network resources. + Items []*Network `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Operation struct { + // ClientOperationId: An optional identifier specified by the client + // when the mutation was initiated. Must be unique for all operation + // resources in the project (output only). + ClientOperationId string `json:"clientOperationId,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // EndTime: The time that this operation was completed. This is in RFC + // 3339 format (output only). + EndTime string `json:"endTime,omitempty"` + + // Error: If errors occurred during processing of this operation, this + // field will be populated (output only). + Error *OperationError `json:"error,omitempty"` + + // HttpErrorMessage: If operation fails, the HTTP error message + // returned, e.g. NOT FOUND. (output only). + HttpErrorMessage string `json:"httpErrorMessage,omitempty"` + + // HttpErrorStatusCode: If operation fails, the HTTP error status code + // returned, e.g. 404. (output only). + HttpErrorStatusCode int64 `json:"httpErrorStatusCode,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // InsertTime: The time that this operation was requested. This is in + // RFC 3339 format (output only). + InsertTime string `json:"insertTime,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource (output only). + Name string `json:"name,omitempty"` + + // OperationType: Type of the operation. Examples include "insert", + // "update", and "delete" (output only). + OperationType string `json:"operationType,omitempty"` + + // Progress: An optional progress indicator that ranges from 0 to 100. + // There is no requirement that this be linear or support any + // granularity of operations. This should not be used to guess at when + // the operation will be complete. This number should be monotonically + // increasing as the operation progresses (output only). + Progress int64 `json:"progress,omitempty"` + + // Region: URL of the region where the operation resides (output only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC 3339 format (output only). + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING", "RUNNING", or "DONE" (output only). + Status string `json:"status,omitempty"` + + // StatusMessage: An optional textual description of the current status + // of the operation (output only). + StatusMessage string `json:"statusMessage,omitempty"` + + // TargetId: Unique target id which identifies a particular incarnation + // of the target (output only). + TargetId uint64 `json:"targetId,omitempty,string"` + + // TargetLink: URL of the resource the operation is mutating (output + // only). + TargetLink string `json:"targetLink,omitempty"` + + // User: User who requested the operation, for example + // "user@example.com" (output only). + User string `json:"user,omitempty"` + + // Warnings: If warning messages generated during processing of this + // operation, this field will be populated (output only). + Warnings []*OperationWarnings `json:"warnings,omitempty"` + + // Zone: URL of the zone where the operation resides (output only). + Zone string `json:"zone,omitempty"` +} + +type OperationError struct { + // Errors: The array of errors encountered while processing this + // operation. + Errors []*OperationErrorErrors `json:"errors,omitempty"` +} + +type OperationErrorErrors struct { + // Code: The error type identifier for this error. + Code string `json:"code,omitempty"` + + // Location: Indicates the field in the request which caused the error. + // This property is optional. + Location string `json:"location,omitempty"` + + // Message: An optional, human-readable error message. + Message string `json:"message,omitempty"` +} + +type OperationWarnings struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*OperationWarningsData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type OperationWarningsData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type OperationAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped operation lists. + Items *OperationAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type OperationAggregatedListItems struct { +} + +type OperationList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The operation resources. + Items []*Operation `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type OperationsScopedList struct { + // Operations: List of operations contained in this scope. + Operations []*Operation `json:"operations,omitempty"` + + // Warning: Informational warning which replaces the list of operations + // when the list is empty. + Warning *OperationsScopedListWarning `json:"warning,omitempty"` +} + +type OperationsScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*OperationsScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type OperationsScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type Project struct { + // CommonInstanceMetadata: Metadata key/value pairs available to all + // instances contained in this project. + CommonInstanceMetadata *Metadata `json:"commonInstanceMetadata,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this project. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Quota struct { + // Limit: Quota limit for this metric. + Limit float64 `json:"limit,omitempty"` + + // Metric: Name of the quota metric. + Metric string `json:"metric,omitempty"` + + // Usage: Current usage of this metric. + Usage float64 `json:"usage,omitempty"` +} + +type Region struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this region. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Quotas: Quotas assigned to this region. + Quotas []*Quota `json:"quotas,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the region, "UP" or "DOWN". + Status string `json:"status,omitempty"` + + // Zones: A list of zones homed in this region, in the form of resource + // URLs. + Zones []string `json:"zones,omitempty"` +} + +type RegionList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The region resources. + Items []*Region `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Route struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DestRange: Which packets does this route apply to? + DestRange string `json:"destRange,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Network: URL of the network to which this route is applied; provided + // by the client when the route is created. + Network string `json:"network,omitempty"` + + // NextHopGateway: The URL to a gateway that should handle matching + // packets. + NextHopGateway string `json:"nextHopGateway,omitempty"` + + // NextHopInstance: The URL to an instance that should handle matching + // packets. + NextHopInstance string `json:"nextHopInstance,omitempty"` + + // NextHopIp: The network IP address of an instance that should handle + // matching packets. + NextHopIp string `json:"nextHopIp,omitempty"` + + // NextHopNetwork: The URL of the local network if it should handle + // matching packets. + NextHopNetwork string `json:"nextHopNetwork,omitempty"` + + // Priority: Breaks ties between Routes of equal specificity. Routes + // with smaller values win when tied with routes with larger values. + Priority int64 `json:"priority,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Tags: A list of instance tags to which this route applies. + Tags []string `json:"tags,omitempty"` + + // Warnings: If potential misconfigurations are detected for this route, + // this field will be populated with warning messages. + Warnings []*RouteWarnings `json:"warnings,omitempty"` +} + +type RouteWarnings struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*RouteWarningsData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type RouteWarningsData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type RouteList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The route resources. + Items []*Route `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Scheduling struct { + // AutomaticRestart: Whether the Instance should be automatically + // restarted whenever it is terminated by Compute Engine (not terminated + // by user). + AutomaticRestart bool `json:"automaticRestart,omitempty"` + + // OnHostMaintenance: How the instance should behave when the host + // machine undergoes maintenance that may temporarily impact instance + // performance. + OnHostMaintenance string `json:"onHostMaintenance,omitempty"` +} + +type SerialPortOutput struct { + // Contents: The contents of the console output. + Contents string `json:"contents,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type ServiceAccount struct { + // Email: Email address of the service account. + Email string `json:"email,omitempty"` + + // Scopes: The list of scopes to be made available for this service + // account. + Scopes []string `json:"scopes,omitempty"` +} + +type Snapshot struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // DiskSizeGb: Size of the persistent disk snapshot, specified in GB + // (output only). + DiskSizeGb int64 `json:"diskSizeGb,omitempty,string"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SourceDisk: The source disk used to create this snapshot. Once the + // source disk has been deleted from the system, this field will be + // cleared, and will not be set even if a disk with the same name has + // been re-created (output only). + SourceDisk string `json:"sourceDisk,omitempty"` + + // SourceDiskId: The 'id' value of the disk used to create this + // snapshot. This value may be used to determine whether the snapshot + // was taken from the current or a previous instance of a given disk + // name. + SourceDiskId string `json:"sourceDiskId,omitempty"` + + // Status: The status of the persistent disk snapshot (output only). + Status string `json:"status,omitempty"` + + // StorageBytes: A size of the the storage used by the snapshot. As + // snapshots share storage this number is expected to change with + // snapshot creation/deletion. + StorageBytes int64 `json:"storageBytes,omitempty,string"` + + // StorageBytesStatus: An indicator whether storageBytes is in a stable + // state, or it is being adjusted as a result of shared storage + // reallocation. + StorageBytesStatus string `json:"storageBytesStatus,omitempty"` +} + +type SnapshotList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The persistent snapshot resources. + Items []*Snapshot `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type Tags struct { + // Fingerprint: Fingerprint of this resource. A hash of the tags stored + // in this object. This field is used optimistic locking. An up-to-date + // tags fingerprint must be provided in order to modify tags. + Fingerprint string `json:"fingerprint,omitempty"` + + // Items: An array of tags. Each tag must be 1-63 characters long, and + // comply with RFC1035. + Items []string `json:"items,omitempty"` +} + +type TargetPool struct { + // BackupPool: This field is applicable only when the containing target + // pool is serving a forwarding rule as the primary pool, and its + // 'failoverRatio' field is properly set to a value between [0, + // 1]. + // + // 'backupPool' and 'failoverRatio' together define the fallback + // behavior of the primary target pool: if the ratio of the healthy VMs + // in the primary pool is at or below 'failoverRatio', traffic arriving + // at the load-balanced IP will be directed to the backup pool. + // + // In case + // where 'failoverRatio' and 'backupPool' are not set, or all the VMs in + // the backup pool are unhealthy, the traffic will be directed back to + // the primary pool in the "force" mode, where traffic will be spread to + // the healthy VMs with the best effort, or to all VMs when no VM is + // healthy. + BackupPool string `json:"backupPool,omitempty"` + + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Description: An optional textual description of the resource; + // provided by the client when the resource is created. + Description string `json:"description,omitempty"` + + // FailoverRatio: This field is applicable only when the containing + // target pool is serving a forwarding rule as the primary pool (i.e., + // not as a backup pool to some other target pool). The value of the + // field must be in [0, 1]. + // + // If set, 'backupPool' must also be set. They + // together define the fallback behavior of the primary target pool: if + // the ratio of the healthy VMs in the primary pool is at or below this + // number, traffic arriving at the load-balanced IP will be directed to + // the backup pool. + // + // In case where 'failoverRatio' is not set or all the + // VMs in the backup pool are unhealthy, the traffic will be directed + // back to the primary pool in the "force" mode, where traffic will be + // spread to the healthy VMs with the best effort, or to all VMs when no + // VM is healthy. + FailoverRatio float64 `json:"failoverRatio,omitempty"` + + // HealthChecks: A list of URLs to the HttpHealthCheck resource. A + // member VM in this pool is considered healthy if and only if all + // specified health checks pass. An empty list means all member VMs will + // be considered healthy at all times. + HealthChecks []string `json:"healthChecks,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Instances: A list of resource URLs to the member VMs serving this + // pool. They must live in zones contained in the same region as this + // pool. + Instances []string `json:"instances,omitempty"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // Name: Name of the resource; provided by the client when the resource + // is created. The name must be 1-63 characters long, and comply with + // RFC1035. + Name string `json:"name,omitempty"` + + // Region: URL of the region where the target pool resides (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // SessionAffinity: Sesssion affinity option, must be one of the + // following values: 'NONE': Connections from the same client IP may go + // to any VM in the pool; 'CLIENT_IP': Connections from the same client + // IP will go to the same VM in the pool while that VM remains healthy. + // 'CLIENT_IP_PROTO': Connections from the same client IP with the same + // IP protocol will go to the same VM in the pool while that VM remains + // healthy. + SessionAffinity string `json:"sessionAffinity,omitempty"` +} + +type TargetPoolAggregatedList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: A map of scoped target pool lists. + Items *TargetPoolAggregatedListItems `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type TargetPoolAggregatedListItems struct { +} + +type TargetPoolInstanceHealth struct { + HealthStatus []*HealthStatus `json:"healthStatus,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` +} + +type TargetPoolList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The TargetPool resources. + Items []*TargetPool `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +type TargetPoolsAddHealthCheckRequest struct { + // HealthChecks: Health check URLs to be added to targetPool. + HealthChecks []*HealthCheckReference `json:"healthChecks,omitempty"` +} + +type TargetPoolsAddInstanceRequest struct { + // Instances: URLs of the instances to be added to targetPool. + Instances []*InstanceReference `json:"instances,omitempty"` +} + +type TargetPoolsRemoveHealthCheckRequest struct { + // HealthChecks: Health check URLs to be removed from targetPool. + HealthChecks []*HealthCheckReference `json:"healthChecks,omitempty"` +} + +type TargetPoolsRemoveInstanceRequest struct { + // Instances: URLs of the instances to be removed from targetPool. + Instances []*InstanceReference `json:"instances,omitempty"` +} + +type TargetPoolsScopedList struct { + // TargetPools: List of target pools contained in this scope. + TargetPools []*TargetPool `json:"targetPools,omitempty"` + + // Warning: Informational warning which replaces the list of addresses + // when the list is empty. + Warning *TargetPoolsScopedListWarning `json:"warning,omitempty"` +} + +type TargetPoolsScopedListWarning struct { + // Code: The warning type identifier for this warning. + Code string `json:"code,omitempty"` + + // Data: Metadata for this warning in 'key: value' format. + Data []*TargetPoolsScopedListWarningData `json:"data,omitempty"` + + // Message: Optional human-readable details for this warning. + Message string `json:"message,omitempty"` +} + +type TargetPoolsScopedListWarningData struct { + // Key: A key for the warning data. + Key string `json:"key,omitempty"` + + // Value: A warning data value corresponding to the key. + Value string `json:"value,omitempty"` +} + +type TargetReference struct { + Target string `json:"target,omitempty"` +} + +type Zone struct { + // CreationTimestamp: Creation timestamp in RFC3339 text format (output + // only). + CreationTimestamp string `json:"creationTimestamp,omitempty"` + + // Deprecated: The deprecation status associated with this zone. + Deprecated *DeprecationStatus `json:"deprecated,omitempty"` + + // Description: Textual description of the resource. + Description string `json:"description,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id uint64 `json:"id,omitempty,string"` + + // Kind: Type of the resource. + Kind string `json:"kind,omitempty"` + + // MaintenanceWindows: Scheduled maintenance windows for the zone. When + // the zone is in a maintenance window, all resources which reside in + // the zone will be unavailable. + MaintenanceWindows []*ZoneMaintenanceWindows `json:"maintenanceWindows,omitempty"` + + // Name: Name of the resource. + Name string `json:"name,omitempty"` + + // Region: Full URL reference to the region which hosts the zone (output + // only). + Region string `json:"region,omitempty"` + + // SelfLink: Server defined URL for the resource (output only). + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the zone. "UP" or "DOWN". + Status string `json:"status,omitempty"` +} + +type ZoneMaintenanceWindows struct { + // BeginTime: Begin time of the maintenance window, in RFC 3339 format. + BeginTime string `json:"beginTime,omitempty"` + + // Description: Textual description of the maintenance window. + Description string `json:"description,omitempty"` + + // EndTime: End time of the maintenance window, in RFC 3339 format. + EndTime string `json:"endTime,omitempty"` + + // Name: Name of the maintenance window. + Name string `json:"name,omitempty"` +} + +type ZoneList struct { + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Items: The zone resources. + Items []*Zone `json:"items,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token used to continue a truncated list request + // (output only). + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Server defined URL for this resource (output only). + SelfLink string `json:"selfLink,omitempty"` +} + +// method id "compute.addresses.aggregatedList": + +type AddressesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of addresses grouped by scope. +func (r *AddressesService) AggregatedList(project string) *AddressesAggregatedListCall { + c := &AddressesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *AddressesAggregatedListCall) Filter(filter string) *AddressesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *AddressesAggregatedListCall) MaxResults(maxResults int64) *AddressesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *AddressesAggregatedListCall) PageToken(pageToken string) *AddressesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AddressesAggregatedListCall) Do() (*AddressAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AddressAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of addresses grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.addresses.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/addresses", + // "response": { + // "$ref": "AddressAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.addresses.delete": + +type AddressesDeleteCall struct { + s *Service + project string + region string + address string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified address resource. +func (r *AddressesService) Delete(project string, region string, address string) *AddressesDeleteCall { + c := &AddressesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/addresses/{address}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified address resource.", + // "httpMethod": "DELETE", + // "id": "compute.addresses.delete", + // "parameterOrder": [ + // "project", + // "region", + // "address" + // ], + // "parameters": { + // "address": { + // "description": "Name of the address resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses/{address}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.addresses.get": + +type AddressesGetCall struct { + s *Service + project string + region string + address string + opt_ map[string]interface{} +} + +// Get: Returns the specified address resource. +func (r *AddressesService) Get(project string, region string, address string) *AddressesGetCall { + c := &AddressesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesGetCall) Do() (*Address, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/addresses/{address}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{address}", url.QueryEscape(c.address), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Address) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified address resource.", + // "httpMethod": "GET", + // "id": "compute.addresses.get", + // "parameterOrder": [ + // "project", + // "region", + // "address" + // ], + // "parameters": { + // "address": { + // "description": "Name of the address resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses/{address}", + // "response": { + // "$ref": "Address" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.addresses.insert": + +type AddressesInsertCall struct { + s *Service + project string + region string + address *Address + opt_ map[string]interface{} +} + +// Insert: Creates an address resource in the specified project using +// the data included in the request. +func (r *AddressesService) Insert(project string, region string, address *Address) *AddressesInsertCall { + c := &AddressesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.address = address + return c +} + +func (c *AddressesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.address) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an address resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.addresses.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses", + // "request": { + // "$ref": "Address" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.addresses.list": + +type AddressesListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of address resources contained within the +// specified region. +func (r *AddressesService) List(project string, region string) *AddressesListCall { + c := &AddressesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *AddressesListCall) Filter(filter string) *AddressesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *AddressesListCall) MaxResults(maxResults int64) *AddressesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *AddressesListCall) PageToken(pageToken string) *AddressesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AddressesListCall) Do() (*AddressList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/addresses") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AddressList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of address resources contained within the specified region.", + // "httpMethod": "GET", + // "id": "compute.addresses.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/addresses", + // "response": { + // "$ref": "AddressList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.aggregatedList": + +type DisksAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of disks grouped by scope. +func (r *DisksService) AggregatedList(project string) *DisksAggregatedListCall { + c := &DisksAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksAggregatedListCall) Filter(filter string) *DisksAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *DisksAggregatedListCall) MaxResults(maxResults int64) *DisksAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksAggregatedListCall) PageToken(pageToken string) *DisksAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksAggregatedListCall) Do() (*DiskAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of disks grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.disks.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/disks", + // "response": { + // "$ref": "DiskAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.createSnapshot": + +type DisksCreateSnapshotCall struct { + s *Service + project string + zone string + disk string + snapshot *Snapshot + opt_ map[string]interface{} +} + +// CreateSnapshot: +func (r *DisksService) CreateSnapshot(project string, zone string, disk string, snapshot *Snapshot) *DisksCreateSnapshotCall { + c := &DisksCreateSnapshotCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + c.snapshot = snapshot + return c +} + +func (c *DisksCreateSnapshotCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.snapshot) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/disks/{disk}/createSnapshot") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "compute.disks.createSnapshot", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to snapshot.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}/createSnapshot", + // "request": { + // "$ref": "Snapshot" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.delete": + +type DisksDeleteCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk resource. +func (r *DisksService) Delete(project string, zone string, disk string) *DisksDeleteCall { + c := &DisksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk resource.", + // "httpMethod": "DELETE", + // "id": "compute.disks.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.get": + +type DisksGetCall struct { + s *Service + project string + zone string + disk string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk resource. +func (r *DisksService) Get(project string, zone string, disk string) *DisksGetCall { + c := &DisksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +func (c *DisksGetCall) Do() (*Disk, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/disks/{disk}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{disk}", url.QueryEscape(c.disk), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Disk) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk resource.", + // "httpMethod": "GET", + // "id": "compute.disks.get", + // "parameterOrder": [ + // "project", + // "zone", + // "disk" + // ], + // "parameters": { + // "disk": { + // "description": "Name of the persistent disk resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks/{disk}", + // "response": { + // "$ref": "Disk" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.disks.insert": + +type DisksInsertCall struct { + s *Service + project string + zone string + disk *Disk + opt_ map[string]interface{} +} + +// Insert: Creates a persistent disk resource in the specified project +// using the data included in the request. +func (r *DisksService) Insert(project string, zone string, disk *Disk) *DisksInsertCall { + c := &DisksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.disk = disk + return c +} + +// SourceImage sets the optional parameter "sourceImage": Source image +// to restore onto a disk. +func (c *DisksInsertCall) SourceImage(sourceImage string) *DisksInsertCall { + c.opt_["sourceImage"] = sourceImage + return c +} + +func (c *DisksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.disk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["sourceImage"]; ok { + params.Set("sourceImage", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a persistent disk resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.disks.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "sourceImage": { + // "description": "Optional. Source image to restore onto a disk.", + // "location": "query", + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "request": { + // "$ref": "Disk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.disks.list": + +type DisksListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk resources contained +// within the specified zone. +func (r *DisksService) List(project string, zone string) *DisksListCall { + c := &DisksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *DisksListCall) Filter(filter string) *DisksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *DisksListCall) MaxResults(maxResults int64) *DisksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *DisksListCall) PageToken(pageToken string) *DisksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DisksListCall) Do() (*DiskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/disks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DiskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.disks.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/disks", + // "response": { + // "$ref": "DiskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.delete": + +type FirewallsDeleteCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified firewall resource. +func (r *FirewallsService) Delete(project string, firewall string) *FirewallsDeleteCall { + c := &FirewallsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified firewall resource.", + // "httpMethod": "DELETE", + // "id": "compute.firewalls.delete", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.get": + +type FirewallsGetCall struct { + s *Service + project string + firewall string + opt_ map[string]interface{} +} + +// Get: Returns the specified firewall resource. +func (r *FirewallsService) Get(project string, firewall string) *FirewallsGetCall { + c := &FirewallsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsGetCall) Do() (*Firewall, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Firewall) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified firewall resource.", + // "httpMethod": "GET", + // "id": "compute.firewalls.get", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "response": { + // "$ref": "Firewall" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.insert": + +type FirewallsInsertCall struct { + s *Service + project string + firewall *Firewall + opt_ map[string]interface{} +} + +// Insert: Creates a firewall resource in the specified project using +// the data included in the request. +func (r *FirewallsService) Insert(project string, firewall *Firewall) *FirewallsInsertCall { + c := &FirewallsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + return c +} + +func (c *FirewallsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a firewall resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.firewalls.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.list": + +type FirewallsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of firewall resources available to the +// specified project. +func (r *FirewallsService) List(project string) *FirewallsListCall { + c := &FirewallsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *FirewallsListCall) Filter(filter string) *FirewallsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *FirewallsListCall) MaxResults(maxResults int64) *FirewallsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *FirewallsListCall) PageToken(pageToken string) *FirewallsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *FirewallsListCall) Do() (*FirewallList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FirewallList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of firewall resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.firewalls.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls", + // "response": { + // "$ref": "FirewallList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.firewalls.patch": + +type FirewallsPatchCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Patch: Updates the specified firewall resource with the data included +// in the request. This method supports patch semantics. +func (r *FirewallsService) Patch(project string, firewall string, firewall2 *Firewall) *FirewallsPatchCall { + c := &FirewallsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.firewalls.patch", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.firewalls.update": + +type FirewallsUpdateCall struct { + s *Service + project string + firewall string + firewall2 *Firewall + opt_ map[string]interface{} +} + +// Update: Updates the specified firewall resource with the data +// included in the request. +func (r *FirewallsService) Update(project string, firewall string, firewall2 *Firewall) *FirewallsUpdateCall { + c := &FirewallsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.firewall = firewall + c.firewall2 = firewall2 + return c +} + +func (c *FirewallsUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.firewall2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/firewalls/{firewall}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{firewall}", url.QueryEscape(c.firewall), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified firewall resource with the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.firewalls.update", + // "parameterOrder": [ + // "project", + // "firewall" + // ], + // "parameters": { + // "firewall": { + // "description": "Name of the firewall resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/firewalls/{firewall}", + // "request": { + // "$ref": "Firewall" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.aggregatedList": + +type ForwardingRulesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of forwarding rules grouped by +// scope. +func (r *ForwardingRulesService) AggregatedList(project string) *ForwardingRulesAggregatedListCall { + c := &ForwardingRulesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ForwardingRulesAggregatedListCall) Filter(filter string) *ForwardingRulesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *ForwardingRulesAggregatedListCall) MaxResults(maxResults int64) *ForwardingRulesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ForwardingRulesAggregatedListCall) PageToken(pageToken string) *ForwardingRulesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ForwardingRulesAggregatedListCall) Do() (*ForwardingRuleAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRuleAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of forwarding rules grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/forwardingRules", + // "response": { + // "$ref": "ForwardingRuleAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.delete": + +type ForwardingRulesDeleteCall struct { + s *Service + project string + region string + forwardingRule string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified ForwardingRule resource. +func (r *ForwardingRulesService) Delete(project string, region string, forwardingRule string) *ForwardingRulesDeleteCall { + c := &ForwardingRulesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + return c +} + +func (c *ForwardingRulesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified ForwardingRule resource.", + // "httpMethod": "DELETE", + // "id": "compute.forwardingRules.delete", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.get": + +type ForwardingRulesGetCall struct { + s *Service + project string + region string + forwardingRule string + opt_ map[string]interface{} +} + +// Get: Returns the specified ForwardingRule resource. +func (r *ForwardingRulesService) Get(project string, region string, forwardingRule string) *ForwardingRulesGetCall { + c := &ForwardingRulesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + return c +} + +func (c *ForwardingRulesGetCall) Do() (*ForwardingRule, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified ForwardingRule resource.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.get", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}", + // "response": { + // "$ref": "ForwardingRule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.insert": + +type ForwardingRulesInsertCall struct { + s *Service + project string + region string + forwardingrule *ForwardingRule + opt_ map[string]interface{} +} + +// Insert: Creates a ForwardingRule resource in the specified project +// and region using the data included in the request. +func (r *ForwardingRulesService) Insert(project string, region string, forwardingrule *ForwardingRule) *ForwardingRulesInsertCall { + c := &ForwardingRulesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingrule = forwardingrule + return c +} + +func (c *ForwardingRulesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.forwardingrule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a ForwardingRule resource in the specified project and region using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.forwardingRules.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules", + // "request": { + // "$ref": "ForwardingRule" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.forwardingRules.list": + +type ForwardingRulesListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of ForwardingRule resources available to the +// specified project and region. +func (r *ForwardingRulesService) List(project string, region string) *ForwardingRulesListCall { + c := &ForwardingRulesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ForwardingRulesListCall) Filter(filter string) *ForwardingRulesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *ForwardingRulesListCall) MaxResults(maxResults int64) *ForwardingRulesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ForwardingRulesListCall) PageToken(pageToken string) *ForwardingRulesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ForwardingRulesListCall) Do() (*ForwardingRuleList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/forwardingRules") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ForwardingRuleList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of ForwardingRule resources available to the specified project and region.", + // "httpMethod": "GET", + // "id": "compute.forwardingRules.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules", + // "response": { + // "$ref": "ForwardingRuleList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.forwardingRules.setTarget": + +type ForwardingRulesSetTargetCall struct { + s *Service + project string + region string + forwardingRule string + targetreference *TargetReference + opt_ map[string]interface{} +} + +// SetTarget: Changes target url for forwarding rule. +func (r *ForwardingRulesService) SetTarget(project string, region string, forwardingRule string, targetreference *TargetReference) *ForwardingRulesSetTargetCall { + c := &ForwardingRulesSetTargetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.forwardingRule = forwardingRule + c.targetreference = targetreference + return c +} + +func (c *ForwardingRulesSetTargetCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{forwardingRule}", url.QueryEscape(c.forwardingRule), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes target url for forwarding rule.", + // "httpMethod": "POST", + // "id": "compute.forwardingRules.setTarget", + // "parameterOrder": [ + // "project", + // "region", + // "forwardingRule" + // ], + // "parameters": { + // "forwardingRule": { + // "description": "Name of the ForwardingRule resource in which target is to be set.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/forwardingRules/{forwardingRule}/setTarget", + // "request": { + // "$ref": "TargetReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.aggregatedList": + +type GlobalOperationsAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of all operations grouped by +// scope. +func (r *GlobalOperationsService) AggregatedList(project string) *GlobalOperationsAggregatedListCall { + c := &GlobalOperationsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *GlobalOperationsAggregatedListCall) Filter(filter string) *GlobalOperationsAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *GlobalOperationsAggregatedListCall) MaxResults(maxResults int64) *GlobalOperationsAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *GlobalOperationsAggregatedListCall) PageToken(pageToken string) *GlobalOperationsAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *GlobalOperationsAggregatedListCall) Do() (*OperationAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of all operations grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/operations", + // "response": { + // "$ref": "OperationAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.globalOperations.delete": + +type GlobalOperationsDeleteCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified operation resource. +func (r *GlobalOperationsService) Delete(project string, operation string) *GlobalOperationsDeleteCall { + c := &GlobalOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.globalOperations.delete", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.globalOperations.get": + +type GlobalOperationsGetCall struct { + s *Service + project string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified operation resource. +func (r *GlobalOperationsService) Get(project string, operation string) *GlobalOperationsGetCall { + c := &GlobalOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.operation = operation + return c +} + +func (c *GlobalOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified operation resource.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.get", + // "parameterOrder": [ + // "project", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.globalOperations.list": + +type GlobalOperationsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified project. +func (r *GlobalOperationsService) List(project string) *GlobalOperationsListCall { + c := &GlobalOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *GlobalOperationsListCall) Filter(filter string) *GlobalOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *GlobalOperationsListCall) MaxResults(maxResults int64) *GlobalOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *GlobalOperationsListCall) PageToken(pageToken string) *GlobalOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *GlobalOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.globalOperations.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.delete": + +type HttpHealthChecksDeleteCall struct { + s *Service + project string + httpHealthCheck string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified HttpHealthCheck resource. +func (r *HttpHealthChecksService) Delete(project string, httpHealthCheck string) *HttpHealthChecksDeleteCall { + c := &HttpHealthChecksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + return c +} + +func (c *HttpHealthChecksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified HttpHealthCheck resource.", + // "httpMethod": "DELETE", + // "id": "compute.httpHealthChecks.delete", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.get": + +type HttpHealthChecksGetCall struct { + s *Service + project string + httpHealthCheck string + opt_ map[string]interface{} +} + +// Get: Returns the specified HttpHealthCheck resource. +func (r *HttpHealthChecksService) Get(project string, httpHealthCheck string) *HttpHealthChecksGetCall { + c := &HttpHealthChecksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + return c +} + +func (c *HttpHealthChecksGetCall) Do() (*HttpHealthCheck, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(HttpHealthCheck) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified HttpHealthCheck resource.", + // "httpMethod": "GET", + // "id": "compute.httpHealthChecks.get", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "response": { + // "$ref": "HttpHealthCheck" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.insert": + +type HttpHealthChecksInsertCall struct { + s *Service + project string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Insert: Creates a HttpHealthCheck resource in the specified project +// using the data included in the request. +func (r *HttpHealthChecksService) Insert(project string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksInsertCall { + c := &HttpHealthChecksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a HttpHealthCheck resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.httpHealthChecks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.list": + +type HttpHealthChecksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of HttpHealthCheck resources available to +// the specified project. +func (r *HttpHealthChecksService) List(project string) *HttpHealthChecksListCall { + c := &HttpHealthChecksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *HttpHealthChecksListCall) Filter(filter string) *HttpHealthChecksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *HttpHealthChecksListCall) MaxResults(maxResults int64) *HttpHealthChecksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *HttpHealthChecksListCall) PageToken(pageToken string) *HttpHealthChecksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *HttpHealthChecksListCall) Do() (*HttpHealthCheckList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(HttpHealthCheckList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of HttpHealthCheck resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.httpHealthChecks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks", + // "response": { + // "$ref": "HttpHealthCheckList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.httpHealthChecks.patch": + +type HttpHealthChecksPatchCall struct { + s *Service + project string + httpHealthCheck string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Patch: Updates a HttpHealthCheck resource in the specified project +// using the data included in the request. This method supports patch +// semantics. +func (r *HttpHealthChecksService) Patch(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksPatchCall { + c := &HttpHealthChecksPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksPatchCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "compute.httpHealthChecks.patch", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.httpHealthChecks.update": + +type HttpHealthChecksUpdateCall struct { + s *Service + project string + httpHealthCheck string + httphealthcheck *HttpHealthCheck + opt_ map[string]interface{} +} + +// Update: Updates a HttpHealthCheck resource in the specified project +// using the data included in the request. +func (r *HttpHealthChecksService) Update(project string, httpHealthCheck string, httphealthcheck *HttpHealthCheck) *HttpHealthChecksUpdateCall { + c := &HttpHealthChecksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.httpHealthCheck = httpHealthCheck + c.httphealthcheck = httphealthcheck + return c +} + +func (c *HttpHealthChecksUpdateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.httphealthcheck) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/httpHealthChecks/{httpHealthCheck}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{httpHealthCheck}", url.QueryEscape(c.httpHealthCheck), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a HttpHealthCheck resource in the specified project using the data included in the request.", + // "httpMethod": "PUT", + // "id": "compute.httpHealthChecks.update", + // "parameterOrder": [ + // "project", + // "httpHealthCheck" + // ], + // "parameters": { + // "httpHealthCheck": { + // "description": "Name of the HttpHealthCheck resource to update.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/httpHealthChecks/{httpHealthCheck}", + // "request": { + // "$ref": "HttpHealthCheck" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.delete": + +type ImagesDeleteCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified image resource. +func (r *ImagesService) Delete(project string, image string) *ImagesDeleteCall { + c := &ImagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified image resource.", + // "httpMethod": "DELETE", + // "id": "compute.images.delete", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.deprecate": + +type ImagesDeprecateCall struct { + s *Service + project string + image string + deprecationstatus *DeprecationStatus + opt_ map[string]interface{} +} + +// Deprecate: Sets the deprecation status of an image. If no message +// body is given, clears the deprecation status instead. +func (r *ImagesService) Deprecate(project string, image string, deprecationstatus *DeprecationStatus) *ImagesDeprecateCall { + c := &ImagesDeprecateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + c.deprecationstatus = deprecationstatus + return c +} + +func (c *ImagesDeprecateCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.deprecationstatus) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/images/{image}/deprecate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the deprecation status of an image. If no message body is given, clears the deprecation status instead.", + // "httpMethod": "POST", + // "id": "compute.images.deprecate", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Image name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}/deprecate", + // "request": { + // "$ref": "DeprecationStatus" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.images.get": + +type ImagesGetCall struct { + s *Service + project string + image string + opt_ map[string]interface{} +} + +// Get: Returns the specified image resource. +func (r *ImagesService) Get(project string, image string) *ImagesGetCall { + c := &ImagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/images/{image}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{image}", url.QueryEscape(c.image), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified image resource.", + // "httpMethod": "GET", + // "id": "compute.images.get", + // "parameterOrder": [ + // "project", + // "image" + // ], + // "parameters": { + // "image": { + // "description": "Name of the image resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images/{image}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.images.insert": + +type ImagesInsertCall struct { + s *Service + project string + image *Image + opt_ map[string]interface{} +} + +// Insert: Creates an image resource in the specified project using the +// data included in the request. +func (r *ImagesService) Insert(project string, image *Image) *ImagesInsertCall { + c := &ImagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.image = image + return c +} + +func (c *ImagesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an image resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.images.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "compute.images.list": + +type ImagesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of image resources available to the +// specified project. +func (r *ImagesService) List(project string) *ImagesListCall { + c := &ImagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ImagesListCall) Filter(filter string) *ImagesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *ImagesListCall) MaxResults(maxResults int64) *ImagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ImagesListCall) PageToken(pageToken string) *ImagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ImagesListCall) Do() (*ImageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/images") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ImageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of image resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.images.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/images", + // "response": { + // "$ref": "ImageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.addAccessConfig": + +type InstancesAddAccessConfigCall struct { + s *Service + project string + zone string + instance string + networkInterface string + accessconfig *AccessConfig + opt_ map[string]interface{} +} + +// AddAccessConfig: Adds an access config to an instance's network +// interface. +func (r *InstancesService) AddAccessConfig(project string, zone string, instance string, networkInterface string, accessconfig *AccessConfig) *InstancesAddAccessConfigCall { + c := &InstancesAddAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.networkInterface = networkInterface + c.accessconfig = accessconfig + return c +} + +func (c *InstancesAddAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.accessconfig) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/addAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds an access config to an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.addAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "networkInterface" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "networkInterface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/addAccessConfig", + // "request": { + // "$ref": "AccessConfig" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.aggregatedList": + +type InstancesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: +func (r *InstancesService) AggregatedList(project string) *InstancesAggregatedListCall { + c := &InstancesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesAggregatedListCall) Filter(filter string) *InstancesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *InstancesAggregatedListCall) MaxResults(maxResults int64) *InstancesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesAggregatedListCall) PageToken(pageToken string) *InstancesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesAggregatedListCall) Do() (*InstanceAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "compute.instances.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/instances", + // "response": { + // "$ref": "InstanceAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.attachDisk": + +type InstancesAttachDiskCall struct { + s *Service + project string + zone string + instance string + attacheddisk *AttachedDisk + opt_ map[string]interface{} +} + +// AttachDisk: Attaches a disk resource to an instance. +func (r *InstancesService) AttachDisk(project string, zone string, instance string, attacheddisk *AttachedDisk) *InstancesAttachDiskCall { + c := &InstancesAttachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.attacheddisk = attacheddisk + return c +} + +func (c *InstancesAttachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.attacheddisk) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/attachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Attaches a disk resource to an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.attachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/attachDisk", + // "request": { + // "$ref": "AttachedDisk" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified instance resource. +func (r *InstancesService) Delete(project string, zone string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified instance resource.", + // "httpMethod": "DELETE", + // "id": "compute.instances.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.deleteAccessConfig": + +type InstancesDeleteAccessConfigCall struct { + s *Service + project string + zone string + instance string + accessConfig string + networkInterface string + opt_ map[string]interface{} +} + +// DeleteAccessConfig: Deletes an access config from an instance's +// network interface. +func (r *InstancesService) DeleteAccessConfig(project string, zone string, instance string, accessConfig string, networkInterface string) *InstancesDeleteAccessConfigCall { + c := &InstancesDeleteAccessConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.accessConfig = accessConfig + c.networkInterface = networkInterface + return c +} + +func (c *InstancesDeleteAccessConfigCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("accessConfig", fmt.Sprintf("%v", c.accessConfig)) + params.Set("networkInterface", fmt.Sprintf("%v", c.networkInterface)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes an access config from an instance's network interface.", + // "httpMethod": "POST", + // "id": "compute.instances.deleteAccessConfig", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "accessConfig", + // "networkInterface" + // ], + // "parameters": { + // "accessConfig": { + // "description": "Access config name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "networkInterface": { + // "description": "Network interface name.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/deleteAccessConfig", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.detachDisk": + +type InstancesDetachDiskCall struct { + s *Service + project string + zone string + instance string + deviceName string + opt_ map[string]interface{} +} + +// DetachDisk: Detaches a disk from an instance. +func (r *InstancesService) DetachDisk(project string, zone string, instance string, deviceName string) *InstancesDetachDiskCall { + c := &InstancesDetachDiskCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.deviceName = deviceName + return c +} + +func (c *InstancesDetachDiskCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("deviceName", fmt.Sprintf("%v", c.deviceName)) + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/detachDisk") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Detaches a disk from an instance.", + // "httpMethod": "POST", + // "id": "compute.instances.detachDisk", + // "parameterOrder": [ + // "project", + // "zone", + // "instance", + // "deviceName" + // ], + // "parameters": { + // "deviceName": { + // "description": "Disk device name to detach.", + // "location": "query", + // "pattern": "\\w[\\w.-]{0,254}", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/detachDisk", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.get": + +type InstancesGetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Get: Returns the specified instance resource. +func (r *InstancesService) Get(project string, zone string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*Instance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Instance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance resource.", + // "httpMethod": "GET", + // "id": "compute.instances.get", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}", + // "response": { + // "$ref": "Instance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.getSerialPortOutput": + +type InstancesGetSerialPortOutputCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// GetSerialPortOutput: Returns the specified instance's serial port +// output. +func (r *InstancesService) GetSerialPortOutput(project string, zone string, instance string) *InstancesGetSerialPortOutputCall { + c := &InstancesGetSerialPortOutputCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesGetSerialPortOutputCall) Do() (*SerialPortOutput, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/serialPort") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SerialPortOutput) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified instance's serial port output.", + // "httpMethod": "GET", + // "id": "compute.instances.getSerialPortOutput", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/serialPort", + // "response": { + // "$ref": "SerialPortOutput" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + zone string + instance *Instance + opt_ map[string]interface{} +} + +// Insert: Creates an instance resource in the specified project using +// the data included in the request. +func (r *InstancesService) Insert(project string, zone string, instance *Instance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an instance resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.insert", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "request": { + // "$ref": "Instance" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.list": + +type InstancesListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of instance resources contained within the +// specified zone. +func (r *InstancesService) List(project string, zone string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *InstancesListCall) Filter(filter string) *InstancesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstanceList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of instance resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.instances.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances", + // "response": { + // "$ref": "InstanceList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.instances.reset": + +type InstancesResetCall struct { + s *Service + project string + zone string + instance string + opt_ map[string]interface{} +} + +// Reset: Performs a hard reset on the instance. +func (r *InstancesService) Reset(project string, zone string, instance string) *InstancesResetCall { + c := &InstancesResetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + return c +} + +func (c *InstancesResetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Performs a hard reset on the instance.", + // "httpMethod": "POST", + // "id": "compute.instances.reset", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/reset", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setMetadata": + +type InstancesSetMetadataCall struct { + s *Service + project string + zone string + instance string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetMetadata: Sets metadata for the specified instance to the data +// included in the request. +func (r *InstancesService) SetMetadata(project string, zone string, instance string, metadata *Metadata) *InstancesSetMetadataCall { + c := &InstancesSetMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.metadata = metadata + return c +} + +func (c *InstancesSetMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/setMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setMetadata", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setScheduling": + +type InstancesSetSchedulingCall struct { + s *Service + project string + zone string + instance string + scheduling *Scheduling + opt_ map[string]interface{} +} + +// SetScheduling: Sets an instance's scheduling options. +func (r *InstancesService) SetScheduling(project string, zone string, instance string, scheduling *Scheduling) *InstancesSetSchedulingCall { + c := &InstancesSetSchedulingCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.scheduling = scheduling + return c +} + +func (c *InstancesSetSchedulingCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.scheduling) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/setScheduling") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets an instance's scheduling options.", + // "httpMethod": "POST", + // "id": "compute.instances.setScheduling", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Instance name.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project name.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setScheduling", + // "request": { + // "$ref": "Scheduling" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.instances.setTags": + +type InstancesSetTagsCall struct { + s *Service + project string + zone string + instance string + tags *Tags + opt_ map[string]interface{} +} + +// SetTags: Sets tags for the specified instance to the data included in +// the request. +func (r *InstancesService) SetTags(project string, zone string, instance string, tags *Tags) *InstancesSetTagsCall { + c := &InstancesSetTagsCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.instance = instance + c.tags = tags + return c +} + +func (c *InstancesSetTagsCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tags) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/instances/{instance}/setTags") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets tags for the specified instance to the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.instances.setTags", + // "parameterOrder": [ + // "project", + // "zone", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Name of the instance scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/instances/{instance}/setTags", + // "request": { + // "$ref": "Tags" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.kernels.get": + +type KernelsGetCall struct { + s *Service + project string + kernel string + opt_ map[string]interface{} +} + +// Get: Returns the specified kernel resource. +func (r *KernelsService) Get(project string, kernel string) *KernelsGetCall { + c := &KernelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.kernel = kernel + return c +} + +func (c *KernelsGetCall) Do() (*Kernel, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/kernels/{kernel}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{kernel}", url.QueryEscape(c.kernel), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Kernel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified kernel resource.", + // "httpMethod": "GET", + // "id": "compute.kernels.get", + // "parameterOrder": [ + // "project", + // "kernel" + // ], + // "parameters": { + // "kernel": { + // "description": "Name of the kernel resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels/{kernel}", + // "response": { + // "$ref": "Kernel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.kernels.list": + +type KernelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of kernel resources available to the +// specified project. +func (r *KernelsService) List(project string) *KernelsListCall { + c := &KernelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *KernelsListCall) Filter(filter string) *KernelsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *KernelsListCall) MaxResults(maxResults int64) *KernelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *KernelsListCall) PageToken(pageToken string) *KernelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *KernelsListCall) Do() (*KernelList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/kernels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(KernelList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of kernel resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.kernels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/kernels", + // "response": { + // "$ref": "KernelList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.aggregatedList": + +type MachineTypesAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of machine type resources grouped +// by scope. +func (r *MachineTypesService) AggregatedList(project string) *MachineTypesAggregatedListCall { + c := &MachineTypesAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesAggregatedListCall) Filter(filter string) *MachineTypesAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *MachineTypesAggregatedListCall) MaxResults(maxResults int64) *MachineTypesAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesAggregatedListCall) PageToken(pageToken string) *MachineTypesAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesAggregatedListCall) Do() (*MachineTypeAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/machineTypes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/machineTypes", + // "response": { + // "$ref": "MachineTypeAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.get": + +type MachineTypesGetCall struct { + s *Service + project string + zone string + machineType string + opt_ map[string]interface{} +} + +// Get: Returns the specified machine type resource. +func (r *MachineTypesService) Get(project string, zone string, machineType string) *MachineTypesGetCall { + c := &MachineTypesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.machineType = machineType + return c +} + +func (c *MachineTypesGetCall) Do() (*MachineType, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/machineTypes/{machineType}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{machineType}", url.QueryEscape(c.machineType), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineType) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified machine type resource.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.get", + // "parameterOrder": [ + // "project", + // "zone", + // "machineType" + // ], + // "parameters": { + // "machineType": { + // "description": "Name of the machine type resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/machineTypes/{machineType}", + // "response": { + // "$ref": "MachineType" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.machineTypes.list": + +type MachineTypesListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of machine type resources available to the +// specified project. +func (r *MachineTypesService) List(project string, zone string) *MachineTypesListCall { + c := &MachineTypesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *MachineTypesListCall) Filter(filter string) *MachineTypesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *MachineTypesListCall) MaxResults(maxResults int64) *MachineTypesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *MachineTypesListCall) PageToken(pageToken string) *MachineTypesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MachineTypesListCall) Do() (*MachineTypeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/machineTypes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MachineTypeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of machine type resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.machineTypes.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/machineTypes", + // "response": { + // "$ref": "MachineTypeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.delete": + +type NetworksDeleteCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified network resource. +func (r *NetworksService) Delete(project string, network string) *NetworksDeleteCall { + c := &NetworksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified network resource.", + // "httpMethod": "DELETE", + // "id": "compute.networks.delete", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.get": + +type NetworksGetCall struct { + s *Service + project string + network string + opt_ map[string]interface{} +} + +// Get: Returns the specified network resource. +func (r *NetworksService) Get(project string, network string) *NetworksGetCall { + c := &NetworksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksGetCall) Do() (*Network, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/networks/{network}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{network}", url.QueryEscape(c.network), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Network) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified network resource.", + // "httpMethod": "GET", + // "id": "compute.networks.get", + // "parameterOrder": [ + // "project", + // "network" + // ], + // "parameters": { + // "network": { + // "description": "Name of the network resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks/{network}", + // "response": { + // "$ref": "Network" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.networks.insert": + +type NetworksInsertCall struct { + s *Service + project string + network *Network + opt_ map[string]interface{} +} + +// Insert: Creates a network resource in the specified project using the +// data included in the request. +func (r *NetworksService) Insert(project string, network *Network) *NetworksInsertCall { + c := &NetworksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.network = network + return c +} + +func (c *NetworksInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.network) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a network resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.networks.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "request": { + // "$ref": "Network" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.networks.list": + +type NetworksListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of network resources available to the +// specified project. +func (r *NetworksService) List(project string) *NetworksListCall { + c := &NetworksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *NetworksListCall) Filter(filter string) *NetworksListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *NetworksListCall) MaxResults(maxResults int64) *NetworksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *NetworksListCall) PageToken(pageToken string) *NetworksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *NetworksListCall) Do() (*NetworkList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/networks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(NetworkList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of network resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.networks.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/networks", + // "response": { + // "$ref": "NetworkList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Returns the specified project resource. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified project resource.", + // "httpMethod": "GET", + // "id": "compute.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project resource to retrieve.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.projects.setCommonInstanceMetadata": + +type ProjectsSetCommonInstanceMetadataCall struct { + s *Service + project string + metadata *Metadata + opt_ map[string]interface{} +} + +// SetCommonInstanceMetadata: Sets metadata common to all instances +// within the specified project using the data included in the request. +func (r *ProjectsService) SetCommonInstanceMetadata(project string, metadata *Metadata) *ProjectsSetCommonInstanceMetadataCall { + c := &ProjectsSetCommonInstanceMetadataCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.metadata = metadata + return c +} + +func (c *ProjectsSetCommonInstanceMetadataCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.metadata) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/setCommonInstanceMetadata") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets metadata common to all instances within the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.projects.setCommonInstanceMetadata", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/setCommonInstanceMetadata", + // "request": { + // "$ref": "Metadata" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.regionOperations.delete": + +type RegionOperationsDeleteCall struct { + s *Service + project string + region string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified region-specific operation resource. +func (r *RegionOperationsService) Delete(project string, region string, operation string) *RegionOperationsDeleteCall { + c := &RegionOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.operation = operation + return c +} + +func (c *RegionOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified region-specific operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.regionOperations.delete", + // "parameterOrder": [ + // "project", + // "region", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.regionOperations.get": + +type RegionOperationsGetCall struct { + s *Service + project string + region string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified region-specific operation resource. +func (r *RegionOperationsService) Get(project string, region string, operation string) *RegionOperationsGetCall { + c := &RegionOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.operation = operation + return c +} + +func (c *RegionOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified region-specific operation resource.", + // "httpMethod": "GET", + // "id": "compute.regionOperations.get", + // "parameterOrder": [ + // "project", + // "region", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regionOperations.list": + +type RegionOperationsListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified region. +func (r *RegionOperationsService) List(project string, region string) *RegionOperationsListCall { + c := &RegionOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RegionOperationsListCall) Filter(filter string) *RegionOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *RegionOperationsListCall) MaxResults(maxResults int64) *RegionOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RegionOperationsListCall) PageToken(pageToken string) *RegionOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RegionOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified region.", + // "httpMethod": "GET", + // "id": "compute.regionOperations.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regions.get": + +type RegionsGetCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// Get: Returns the specified region resource. +func (r *RegionsService) Get(project string, region string) *RegionsGetCall { + c := &RegionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +func (c *RegionsGetCall) Do() (*Region, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Region) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified region resource.", + // "httpMethod": "GET", + // "id": "compute.regions.get", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}", + // "response": { + // "$ref": "Region" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.regions.list": + +type RegionsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of region resources available to the +// specified project. +func (r *RegionsService) List(project string) *RegionsListCall { + c := &RegionsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RegionsListCall) Filter(filter string) *RegionsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *RegionsListCall) MaxResults(maxResults int64) *RegionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RegionsListCall) PageToken(pageToken string) *RegionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RegionsListCall) Do() (*RegionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RegionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of region resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.regions.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions", + // "response": { + // "$ref": "RegionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.routes.delete": + +type RoutesDeleteCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified route resource. +func (r *RoutesService) Delete(project string, route string) *RoutesDeleteCall { + c := &RoutesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified route resource.", + // "httpMethod": "DELETE", + // "id": "compute.routes.delete", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.get": + +type RoutesGetCall struct { + s *Service + project string + route string + opt_ map[string]interface{} +} + +// Get: Returns the specified route resource. +func (r *RoutesService) Get(project string, route string) *RoutesGetCall { + c := &RoutesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesGetCall) Do() (*Route, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/routes/{route}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{route}", url.QueryEscape(c.route), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Route) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified route resource.", + // "httpMethod": "GET", + // "id": "compute.routes.get", + // "parameterOrder": [ + // "project", + // "route" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "route": { + // "description": "Name of the route resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes/{route}", + // "response": { + // "$ref": "Route" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.routes.insert": + +type RoutesInsertCall struct { + s *Service + project string + route *Route + opt_ map[string]interface{} +} + +// Insert: Creates a route resource in the specified project using the +// data included in the request. +func (r *RoutesService) Insert(project string, route *Route) *RoutesInsertCall { + c := &RoutesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.route = route + return c +} + +func (c *RoutesInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.route) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a route resource in the specified project using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.routes.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "request": { + // "$ref": "Route" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.routes.list": + +type RoutesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of route resources available to the +// specified project. +func (r *RoutesService) List(project string) *RoutesListCall { + c := &RoutesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *RoutesListCall) Filter(filter string) *RoutesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *RoutesListCall) MaxResults(maxResults int64) *RoutesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *RoutesListCall) PageToken(pageToken string) *RoutesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RoutesListCall) Do() (*RouteList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/routes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RouteList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of route resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.routes.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/routes", + // "response": { + // "$ref": "RouteList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.delete": + +type SnapshotsDeleteCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified persistent disk snapshot resource. +func (r *SnapshotsService) Delete(project string, snapshot string) *SnapshotsDeleteCall { + c := &SnapshotsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified persistent disk snapshot resource.", + // "httpMethod": "DELETE", + // "id": "compute.snapshots.delete", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.snapshots.get": + +type SnapshotsGetCall struct { + s *Service + project string + snapshot string + opt_ map[string]interface{} +} + +// Get: Returns the specified persistent disk snapshot resource. +func (r *SnapshotsService) Get(project string, snapshot string) *SnapshotsGetCall { + c := &SnapshotsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.snapshot = snapshot + return c +} + +func (c *SnapshotsGetCall) Do() (*Snapshot, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/snapshots/{snapshot}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{snapshot}", url.QueryEscape(c.snapshot), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Snapshot) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified persistent disk snapshot resource.", + // "httpMethod": "GET", + // "id": "compute.snapshots.get", + // "parameterOrder": [ + // "project", + // "snapshot" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "snapshot": { + // "description": "Name of the persistent disk snapshot resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots/{snapshot}", + // "response": { + // "$ref": "Snapshot" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.snapshots.list": + +type SnapshotsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of persistent disk snapshot resources +// contained within the specified project. +func (r *SnapshotsService) List(project string) *SnapshotsListCall { + c := &SnapshotsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *SnapshotsListCall) Filter(filter string) *SnapshotsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *SnapshotsListCall) MaxResults(maxResults int64) *SnapshotsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *SnapshotsListCall) PageToken(pageToken string) *SnapshotsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SnapshotsListCall) Do() (*SnapshotList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/global/snapshots") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SnapshotList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of persistent disk snapshot resources contained within the specified project.", + // "httpMethod": "GET", + // "id": "compute.snapshots.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/global/snapshots", + // "response": { + // "$ref": "SnapshotList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.addHealthCheck": + +type TargetPoolsAddHealthCheckCall struct { + s *Service + project string + region string + targetPool string + targetpoolsaddhealthcheckrequest *TargetPoolsAddHealthCheckRequest + opt_ map[string]interface{} +} + +// AddHealthCheck: Adds health check URL to targetPool. +func (r *TargetPoolsService) AddHealthCheck(project string, region string, targetPool string, targetpoolsaddhealthcheckrequest *TargetPoolsAddHealthCheckRequest) *TargetPoolsAddHealthCheckCall { + c := &TargetPoolsAddHealthCheckCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetpoolsaddhealthcheckrequest = targetpoolsaddhealthcheckrequest + return c +} + +func (c *TargetPoolsAddHealthCheckCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddhealthcheckrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds health check URL to targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.addHealthCheck", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which health_check_url is to be added.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/addHealthCheck", + // "request": { + // "$ref": "TargetPoolsAddHealthCheckRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.addInstance": + +type TargetPoolsAddInstanceCall struct { + s *Service + project string + region string + targetPool string + targetpoolsaddinstancerequest *TargetPoolsAddInstanceRequest + opt_ map[string]interface{} +} + +// AddInstance: Adds instance url to targetPool. +func (r *TargetPoolsService) AddInstance(project string, region string, targetPool string, targetpoolsaddinstancerequest *TargetPoolsAddInstanceRequest) *TargetPoolsAddInstanceCall { + c := &TargetPoolsAddInstanceCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetpoolsaddinstancerequest = targetpoolsaddinstancerequest + return c +} + +func (c *TargetPoolsAddInstanceCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsaddinstancerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/addInstance") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds instance url to targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.addInstance", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which instance_url is to be added.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/addInstance", + // "request": { + // "$ref": "TargetPoolsAddInstanceRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.aggregatedList": + +type TargetPoolsAggregatedListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// AggregatedList: Retrieves the list of target pools grouped by scope. +func (r *TargetPoolsService) AggregatedList(project string) *TargetPoolsAggregatedListCall { + c := &TargetPoolsAggregatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *TargetPoolsAggregatedListCall) Filter(filter string) *TargetPoolsAggregatedListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *TargetPoolsAggregatedListCall) MaxResults(maxResults int64) *TargetPoolsAggregatedListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *TargetPoolsAggregatedListCall) PageToken(pageToken string) *TargetPoolsAggregatedListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TargetPoolsAggregatedListCall) Do() (*TargetPoolAggregatedList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/aggregated/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolAggregatedList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of target pools grouped by scope.", + // "httpMethod": "GET", + // "id": "compute.targetPools.aggregatedList", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/aggregated/targetPools", + // "response": { + // "$ref": "TargetPoolAggregatedList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.delete": + +type TargetPoolsDeleteCall struct { + s *Service + project string + region string + targetPool string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified TargetPool resource. +func (r *TargetPoolsService) Delete(project string, region string, targetPool string) *TargetPoolsDeleteCall { + c := &TargetPoolsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + return c +} + +func (c *TargetPoolsDeleteCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the specified TargetPool resource.", + // "httpMethod": "DELETE", + // "id": "compute.targetPools.delete", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.get": + +type TargetPoolsGetCall struct { + s *Service + project string + region string + targetPool string + opt_ map[string]interface{} +} + +// Get: Returns the specified TargetPool resource. +func (r *TargetPoolsService) Get(project string, region string, targetPool string) *TargetPoolsGetCall { + c := &TargetPoolsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + return c +} + +func (c *TargetPoolsGetCall) Do() (*TargetPool, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPool) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified TargetPool resource.", + // "httpMethod": "GET", + // "id": "compute.targetPools.get", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}", + // "response": { + // "$ref": "TargetPool" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.getHealth": + +type TargetPoolsGetHealthCall struct { + s *Service + project string + region string + targetPool string + instancereference *InstanceReference + opt_ map[string]interface{} +} + +// GetHealth: Gets the most recent health check results for each IP for +// the given instance that is referenced by given TargetPool. +func (r *TargetPoolsService) GetHealth(project string, region string, targetPool string, instancereference *InstanceReference) *TargetPoolsGetHealthCall { + c := &TargetPoolsGetHealthCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.instancereference = instancereference + return c +} + +func (c *TargetPoolsGetHealthCall) Do() (*TargetPoolInstanceHealth, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancereference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/getHealth") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolInstanceHealth) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the most recent health check results for each IP for the given instance that is referenced by given TargetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.getHealth", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which the queried instance belongs.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/getHealth", + // "request": { + // "$ref": "InstanceReference" + // }, + // "response": { + // "$ref": "TargetPoolInstanceHealth" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.insert": + +type TargetPoolsInsertCall struct { + s *Service + project string + region string + targetpool *TargetPool + opt_ map[string]interface{} +} + +// Insert: Creates a TargetPool resource in the specified project and +// region using the data included in the request. +func (r *TargetPoolsService) Insert(project string, region string, targetpool *TargetPool) *TargetPoolsInsertCall { + c := &TargetPoolsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetpool = targetpool + return c +} + +func (c *TargetPoolsInsertCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpool) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a TargetPool resource in the specified project and region using the data included in the request.", + // "httpMethod": "POST", + // "id": "compute.targetPools.insert", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools", + // "request": { + // "$ref": "TargetPool" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.list": + +type TargetPoolsListCall struct { + s *Service + project string + region string + opt_ map[string]interface{} +} + +// List: Retrieves the list of TargetPool resources available to the +// specified project and region. +func (r *TargetPoolsService) List(project string, region string) *TargetPoolsListCall { + c := &TargetPoolsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *TargetPoolsListCall) Filter(filter string) *TargetPoolsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *TargetPoolsListCall) MaxResults(maxResults int64) *TargetPoolsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *TargetPoolsListCall) PageToken(pageToken string) *TargetPoolsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TargetPoolsListCall) Do() (*TargetPoolList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TargetPoolList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of TargetPool resources available to the specified project and region.", + // "httpMethod": "GET", + // "id": "compute.targetPools.list", + // "parameterOrder": [ + // "project", + // "region" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools", + // "response": { + // "$ref": "TargetPoolList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.targetPools.removeHealthCheck": + +type TargetPoolsRemoveHealthCheckCall struct { + s *Service + project string + region string + targetPool string + targetpoolsremovehealthcheckrequest *TargetPoolsRemoveHealthCheckRequest + opt_ map[string]interface{} +} + +// RemoveHealthCheck: Removes health check URL from targetPool. +func (r *TargetPoolsService) RemoveHealthCheck(project string, region string, targetPool string, targetpoolsremovehealthcheckrequest *TargetPoolsRemoveHealthCheckRequest) *TargetPoolsRemoveHealthCheckCall { + c := &TargetPoolsRemoveHealthCheckCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetpoolsremovehealthcheckrequest = targetpoolsremovehealthcheckrequest + return c +} + +func (c *TargetPoolsRemoveHealthCheckCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremovehealthcheckrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes health check URL from targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.removeHealthCheck", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which health_check_url is to be removed.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/removeHealthCheck", + // "request": { + // "$ref": "TargetPoolsRemoveHealthCheckRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.removeInstance": + +type TargetPoolsRemoveInstanceCall struct { + s *Service + project string + region string + targetPool string + targetpoolsremoveinstancerequest *TargetPoolsRemoveInstanceRequest + opt_ map[string]interface{} +} + +// RemoveInstance: Removes instance URL from targetPool. +func (r *TargetPoolsService) RemoveInstance(project string, region string, targetPool string, targetpoolsremoveinstancerequest *TargetPoolsRemoveInstanceRequest) *TargetPoolsRemoveInstanceCall { + c := &TargetPoolsRemoveInstanceCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetpoolsremoveinstancerequest = targetpoolsremoveinstancerequest + return c +} + +func (c *TargetPoolsRemoveInstanceCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetpoolsremoveinstancerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/removeInstance") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes instance URL from targetPool.", + // "httpMethod": "POST", + // "id": "compute.targetPools.removeInstance", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource to which instance_url is to be removed.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/removeInstance", + // "request": { + // "$ref": "TargetPoolsRemoveInstanceRequest" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.targetPools.setBackup": + +type TargetPoolsSetBackupCall struct { + s *Service + project string + region string + targetPool string + targetreference *TargetReference + opt_ map[string]interface{} +} + +// SetBackup: Changes backup pool configurations. +func (r *TargetPoolsService) SetBackup(project string, region string, targetPool string, targetreference *TargetReference) *TargetPoolsSetBackupCall { + c := &TargetPoolsSetBackupCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.region = region + c.targetPool = targetPool + c.targetreference = targetreference + return c +} + +// FailoverRatio sets the optional parameter "failoverRatio": New +// failoverRatio value for the containing target pool. +func (c *TargetPoolsSetBackupCall) FailoverRatio(failoverRatio float64) *TargetPoolsSetBackupCall { + c.opt_["failoverRatio"] = failoverRatio + return c +} + +func (c *TargetPoolsSetBackupCall) Do() (*Operation, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.targetreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["failoverRatio"]; ok { + params.Set("failoverRatio", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/regions/{region}/targetPools/{targetPool}/setBackup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{region}", url.QueryEscape(c.region), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{targetPool}", url.QueryEscape(c.targetPool), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes backup pool configurations.", + // "httpMethod": "POST", + // "id": "compute.targetPools.setBackup", + // "parameterOrder": [ + // "project", + // "region", + // "targetPool" + // ], + // "parameters": { + // "failoverRatio": { + // "description": "New failoverRatio value for the containing target pool.", + // "format": "float", + // "location": "query", + // "type": "number" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "region": { + // "description": "Name of the region scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "targetPool": { + // "description": "Name of the TargetPool resource for which the backup is to be set.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/regions/{region}/targetPools/{targetPool}/setBackup", + // "request": { + // "$ref": "TargetReference" + // }, + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.zoneOperations.delete": + +type ZoneOperationsDeleteCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified zone-specific operation resource. +func (r *ZoneOperationsService) Delete(project string, zone string, operation string) *ZoneOperationsDeleteCall { + c := &ZoneOperationsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified zone-specific operation resource.", + // "httpMethod": "DELETE", + // "id": "compute.zoneOperations.delete", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to delete.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "scopes": [ + // "https://www.googleapis.com/auth/compute" + // ] + // } + +} + +// method id "compute.zoneOperations.get": + +type ZoneOperationsGetCall struct { + s *Service + project string + zone string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves the specified zone-specific operation resource. +func (r *ZoneOperationsService) Get(project string, zone string, operation string) *ZoneOperationsGetCall { + c := &ZoneOperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + c.operation = operation + return c +} + +func (c *ZoneOperationsGetCall) Do() (*Operation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Operation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the specified zone-specific operation resource.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.get", + // "parameterOrder": [ + // "project", + // "zone", + // "operation" + // ], + // "parameters": { + // "operation": { + // "description": "Name of the operation resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations/{operation}", + // "response": { + // "$ref": "Operation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zoneOperations.list": + +type ZoneOperationsListCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// List: Retrieves the list of operation resources contained within the +// specified zone. +func (r *ZoneOperationsService) List(project string, zone string) *ZoneOperationsListCall { + c := &ZoneOperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZoneOperationsListCall) Filter(filter string) *ZoneOperationsListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *ZoneOperationsListCall) MaxResults(maxResults int64) *ZoneOperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZoneOperationsListCall) PageToken(pageToken string) *ZoneOperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZoneOperationsListCall) Do() (*OperationList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of operation resources contained within the specified zone.", + // "httpMethod": "GET", + // "id": "compute.zoneOperations.list", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone scoping this request.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}/operations", + // "response": { + // "$ref": "OperationList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.get": + +type ZonesGetCall struct { + s *Service + project string + zone string + opt_ map[string]interface{} +} + +// Get: Returns the specified zone resource. +func (r *ZonesService) Get(project string, zone string) *ZonesGetCall { + c := &ZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.zone = zone + return c +} + +func (c *ZonesGetCall) Do() (*Zone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones/{zone}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{zone}", url.QueryEscape(c.zone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Zone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified zone resource.", + // "httpMethod": "GET", + // "id": "compute.zones.get", + // "parameterOrder": [ + // "project", + // "zone" + // ], + // "parameters": { + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // }, + // "zone": { + // "description": "Name of the zone resource to return.", + // "location": "path", + // "pattern": "[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones/{zone}", + // "response": { + // "$ref": "Zone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} + +// method id "compute.zones.list": + +type ZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Retrieves the list of zone resources available to the specified +// project. +func (r *ZonesService) List(project string) *ZonesListCall { + c := &ZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// Filter sets the optional parameter "filter": Filter expression for +// filtering listed resources. +func (c *ZonesListCall) Filter(filter string) *ZonesListCall { + c.opt_["filter"] = filter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum count of +// results to be returned. Maximum value is 500 and default value is +// 500. +func (c *ZonesListCall) MaxResults(maxResults int64) *ZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Tag returned by a +// previous list request truncated by maxResults. Used to continue a +// previous list request. +func (c *ZonesListCall) PageToken(pageToken string) *ZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ZonesListCall) Do() (*ZoneList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/compute/v1beta16/projects/", "{project}/zones") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ZoneList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of zone resources available to the specified project.", + // "httpMethod": "GET", + // "id": "compute.zones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "filter": { + // "description": "Optional. Filter expression for filtering listed resources.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "500", + // "description": "Optional. Maximum count of results to be returned. Maximum value is 500 and default value is 500.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. Tag returned by a previous list request truncated by maxResults. Used to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Name of the project scoping this request.", + // "location": "path", + // "pattern": "(?:(?:[-a-z0-9]{1,63}\\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?))", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/zones", + // "response": { + // "$ref": "ZoneList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/compute", + // "https://www.googleapis.com/auth/compute.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-api.json b/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-api.json new file mode 100644 index 0000000000000..2e62a938dd62c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-api.json @@ -0,0 +1,1090 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/PS-rvsWcMt99OOrOfl1upLydS0Y\"", + "discoveryVersion": "v1", + "id": "coordinate:v1", + "name": "coordinate", + "version": "v1", + "title": "Google Maps Coordinate API", + "description": "Lets you view and manage jobs in a Coordinate team.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/coordinate/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/coordinate/v1/teams/", + "basePath": "/coordinate/v1/teams/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "coordinate/v1/teams/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/coordinate": { + "description": "View and manage your Google Maps Coordinate jobs" + }, + "https://www.googleapis.com/auth/coordinate.readonly": { + "description": "View your Google Coordinate jobs" + } + } + } + }, + "schemas": { + "CustomField": { + "id": "CustomField", + "type": "object", + "description": "Custom field.", + "properties": { + "customFieldId": { + "type": "string", + "description": "Custom field id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Identifies this object as a custom field.", + "default": "coordinate#customField" + }, + "value": { + "type": "string", + "description": "Custom field value." + } + } + }, + "CustomFieldDef": { + "id": "CustomFieldDef", + "type": "object", + "description": "Custom field definition.", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether the field is enabled." + }, + "id": { + "type": "string", + "description": "Custom field id.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Identifies this object as a custom field definition.", + "default": "coordinate#customFieldDef" + }, + "name": { + "type": "string", + "description": "Custom field name." + }, + "requiredForCheckout": { + "type": "boolean", + "description": "Whether the field is required for checkout." + }, + "type": { + "type": "string", + "description": "Custom field type." + } + } + }, + "CustomFieldDefListResponse": { + "id": "CustomFieldDefListResponse", + "type": "object", + "description": "Collection of custom field definitions for a team.", + "properties": { + "items": { + "type": "array", + "description": "Collection of custom field definitions in a team.", + "items": { + "$ref": "CustomFieldDef" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a collection of custom field definitions in a team.", + "default": "coordinate#customFieldDefList" + } + } + }, + "CustomFields": { + "id": "CustomFields", + "type": "object", + "description": "Collection of custom fields.", + "properties": { + "customField": { + "type": "array", + "description": "Collection of custom fields.", + "items": { + "$ref": "CustomField" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a collection of custom fields.", + "default": "coordinate#customFields" + } + } + }, + "Job": { + "id": "Job", + "type": "object", + "description": "A job.", + "properties": { + "id": { + "type": "string", + "description": "Job id.", + "format": "uint64" + }, + "jobChange": { + "type": "array", + "description": "List of job changes since it was created. The first change corresponds to the state of the job when it was created.", + "items": { + "$ref": "JobChange" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a job.", + "default": "coordinate#job" + }, + "state": { + "$ref": "JobState", + "description": "Current job state." + } + } + }, + "JobChange": { + "id": "JobChange", + "type": "object", + "description": "Change to a job. For example assigning the job to a different worker.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies this object as a job change.", + "default": "coordinate#jobChange" + }, + "state": { + "$ref": "JobState", + "description": "Change applied to the job. Only the fields that were changed are set." + }, + "timestamp": { + "type": "string", + "description": "Time at which this change was applied.", + "format": "uint64" + } + } + }, + "JobListResponse": { + "id": "JobListResponse", + "type": "object", + "description": "Response from a List Jobs request.", + "properties": { + "items": { + "type": "array", + "description": "Jobs in the collection.", + "items": { + "$ref": "Job" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a list of jobs.", + "default": "coordinate#jobList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to provide to get the next page of results." + } + } + }, + "JobState": { + "id": "JobState", + "type": "object", + "description": "Current state of a job.", + "properties": { + "assignee": { + "type": "string", + "description": "Email address of the assignee." + }, + "customFields": { + "$ref": "CustomFields", + "description": "Custom fields." + }, + "customerName": { + "type": "string", + "description": "Customer name." + }, + "customerPhoneNumber": { + "type": "string", + "description": "Customer phone number." + }, + "kind": { + "type": "string", + "description": "Identifies this object as a job state.", + "default": "coordinate#jobState" + }, + "location": { + "$ref": "Location", + "description": "Job location." + }, + "note": { + "type": "array", + "description": "Note added to the job.", + "items": { + "type": "string" + } + }, + "progress": { + "type": "string", + "description": "Job progress." + }, + "title": { + "type": "string", + "description": "Job title." + } + } + }, + "Location": { + "id": "Location", + "type": "object", + "description": "Location of a job.", + "properties": { + "addressLine": { + "type": "array", + "description": "Address.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a location.", + "default": "coordinate#location" + }, + "lat": { + "type": "number", + "description": "Latitude.", + "format": "double" + }, + "lng": { + "type": "number", + "description": "Longitude.", + "format": "double" + } + } + }, + "LocationListResponse": { + "id": "LocationListResponse", + "type": "object", + "description": "Response from a List Locations request.", + "properties": { + "items": { + "type": "array", + "description": "Locations in the collection.", + "items": { + "$ref": "LocationRecord" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a list of locations.", + "default": "coordinate#locationList" + }, + "nextPageToken": { + "type": "string", + "description": "A token to provide to get the next page of results." + }, + "tokenPagination": { + "$ref": "TokenPagination", + "description": "Pagination information for token pagination." + } + } + }, + "LocationRecord": { + "id": "LocationRecord", + "type": "object", + "description": "Recorded location of a worker.", + "properties": { + "collectionTime": { + "type": "string", + "description": "The collection time in milliseconds since the epoch.", + "format": "int64" + }, + "confidenceRadius": { + "type": "number", + "description": "The location accuracy in meters. This is the radius of a 95% confidence interval around the location measurement.", + "format": "double" + }, + "kind": { + "type": "string", + "description": "Identifies this object as a location.", + "default": "coordinate#locationRecord" + }, + "latitude": { + "type": "number", + "description": "Latitude.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "Longitude.", + "format": "double" + } + } + }, + "Schedule": { + "id": "Schedule", + "type": "object", + "description": "Job schedule.", + "properties": { + "allDay": { + "type": "boolean", + "description": "Whether the job is scheduled for the whole day. Time of day in start/end times is ignored if this is true." + }, + "duration": { + "type": "string", + "description": "Job duration in milliseconds.", + "format": "uint64" + }, + "endTime": { + "type": "string", + "description": "Scheduled end time in milliseconds since epoch.", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Identifies this object as a job schedule.", + "default": "coordinate#schedule" + }, + "startTime": { + "type": "string", + "description": "Scheduled start time in milliseconds since epoch.", + "format": "uint64" + } + } + }, + "TokenPagination": { + "id": "TokenPagination", + "type": "object", + "description": "Pagination information.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies this object as pagination information.", + "default": "coordinate#tokenPagination" + }, + "nextPageToken": { + "type": "string", + "description": "A token to provide to get the next page of results." + }, + "previousPageToken": { + "type": "string", + "description": "A token to provide to get the previous page of results." + } + } + }, + "Worker": { + "id": "Worker", + "type": "object", + "description": "A worker in a Coordinate team.", + "properties": { + "id": { + "type": "string", + "description": "Worker email address." + }, + "kind": { + "type": "string", + "description": "Identifies this object as a worker.", + "default": "coordinate#worker" + } + } + }, + "WorkerListResponse": { + "id": "WorkerListResponse", + "type": "object", + "description": "Response from a List Workers request.", + "properties": { + "items": { + "type": "array", + "description": "Workers in the collection.", + "items": { + "$ref": "Worker" + } + }, + "kind": { + "type": "string", + "description": "Identifies this object as a list of workers.", + "default": "coordinate#workerList" + } + } + } + }, + "resources": { + "customFieldDef": { + "methods": { + "list": { + "id": "coordinate.customFieldDef.list", + "path": "{teamId}/custom_fields", + "httpMethod": "GET", + "description": "Retrieves a list of custom field definitions for a team.", + "parameters": { + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId" + ], + "response": { + "$ref": "CustomFieldDefListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + } + } + }, + "jobs": { + "methods": { + "get": { + "id": "coordinate.jobs.get", + "path": "{teamId}/jobs/{jobId}", + "httpMethod": "GET", + "description": "Retrieves a job, including all the changes made to the job.", + "parameters": { + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + }, + "insert": { + "id": "coordinate.jobs.insert", + "path": "{teamId}/jobs", + "httpMethod": "POST", + "description": "Inserts a new job. Only the state field of the job should be set.", + "parameters": { + "address": { + "type": "string", + "description": "Job address as newline (Unix) separated string", + "required": true, + "location": "query" + }, + "assignee": { + "type": "string", + "description": "Assignee email address, or empty string to unassign.", + "location": "query" + }, + "customField": { + "type": "string", + "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + "repeated": true, + "location": "query" + }, + "customerName": { + "type": "string", + "description": "Customer name", + "location": "query" + }, + "customerPhoneNumber": { + "type": "string", + "description": "Customer phone number", + "location": "query" + }, + "lat": { + "type": "number", + "description": "The latitude coordinate of this job's location.", + "required": true, + "format": "double", + "location": "query" + }, + "lng": { + "type": "number", + "description": "The longitude coordinate of this job's location.", + "required": true, + "format": "double", + "location": "query" + }, + "note": { + "type": "string", + "description": "Job note as newline (Unix) separated string", + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + }, + "title": { + "type": "string", + "description": "Job title", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "teamId", + "address", + "lat", + "lng", + "title" + ], + "request": { + "$ref": "Job" + }, + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate" + ] + }, + "list": { + "id": "coordinate.jobs.list", + "path": "{teamId}/jobs", + "httpMethod": "GET", + "description": "Retrieves jobs created or modified since the given timestamp.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return in one page.", + "format": "uint32", + "location": "query" + }, + "minModifiedTimestampMs": { + "type": "string", + "description": "Minimum time a job was modified in milliseconds since epoch.", + "format": "uint64", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token", + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId" + ], + "response": { + "$ref": "JobListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + }, + "patch": { + "id": "coordinate.jobs.patch", + "path": "{teamId}/jobs/{jobId}", + "httpMethod": "PATCH", + "description": "Updates a job. Fields that are set in the job state will be updated. This method supports patch semantics.", + "parameters": { + "address": { + "type": "string", + "description": "Job address as newline (Unix) separated string", + "location": "query" + }, + "assignee": { + "type": "string", + "description": "Assignee email address, or empty string to unassign.", + "location": "query" + }, + "customField": { + "type": "string", + "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + "repeated": true, + "location": "query" + }, + "customerName": { + "type": "string", + "description": "Customer name", + "location": "query" + }, + "customerPhoneNumber": { + "type": "string", + "description": "Customer phone number", + "location": "query" + }, + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "lat": { + "type": "number", + "description": "The latitude coordinate of this job's location.", + "format": "double", + "location": "query" + }, + "lng": { + "type": "number", + "description": "The longitude coordinate of this job's location.", + "format": "double", + "location": "query" + }, + "note": { + "type": "string", + "description": "Job note as newline (Unix) separated string", + "location": "query" + }, + "progress": { + "type": "string", + "description": "Job progress", + "enum": [ + "COMPLETED", + "IN_PROGRESS", + "NOT_ACCEPTED", + "NOT_STARTED", + "OBSOLETE" + ], + "enumDescriptions": [ + "Completed", + "In progress", + "Not accepted", + "Not started", + "Obsolete" + ], + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + }, + "title": { + "type": "string", + "description": "Job title", + "location": "query" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "request": { + "$ref": "Job" + }, + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate" + ] + }, + "update": { + "id": "coordinate.jobs.update", + "path": "{teamId}/jobs/{jobId}", + "httpMethod": "PUT", + "description": "Updates a job. Fields that are set in the job state will be updated.", + "parameters": { + "address": { + "type": "string", + "description": "Job address as newline (Unix) separated string", + "location": "query" + }, + "assignee": { + "type": "string", + "description": "Assignee email address, or empty string to unassign.", + "location": "query" + }, + "customField": { + "type": "string", + "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + "repeated": true, + "location": "query" + }, + "customerName": { + "type": "string", + "description": "Customer name", + "location": "query" + }, + "customerPhoneNumber": { + "type": "string", + "description": "Customer phone number", + "location": "query" + }, + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "lat": { + "type": "number", + "description": "The latitude coordinate of this job's location.", + "format": "double", + "location": "query" + }, + "lng": { + "type": "number", + "description": "The longitude coordinate of this job's location.", + "format": "double", + "location": "query" + }, + "note": { + "type": "string", + "description": "Job note as newline (Unix) separated string", + "location": "query" + }, + "progress": { + "type": "string", + "description": "Job progress", + "enum": [ + "COMPLETED", + "IN_PROGRESS", + "NOT_ACCEPTED", + "NOT_STARTED", + "OBSOLETE" + ], + "enumDescriptions": [ + "Completed", + "In progress", + "Not accepted", + "Not started", + "Obsolete" + ], + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + }, + "title": { + "type": "string", + "description": "Job title", + "location": "query" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "request": { + "$ref": "Job" + }, + "response": { + "$ref": "Job" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate" + ] + } + } + }, + "location": { + "methods": { + "list": { + "id": "coordinate.location.list", + "path": "{teamId}/workers/{workerEmail}/locations", + "httpMethod": "GET", + "description": "Retrieves a list of locations for a worker.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return in one page.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token", + "location": "query" + }, + "startTimestampMs": { + "type": "string", + "description": "Start timestamp in milliseconds since the epoch.", + "required": true, + "format": "uint64", + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + }, + "workerEmail": { + "type": "string", + "description": "Worker email address.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId", + "workerEmail", + "startTimestampMs" + ], + "response": { + "$ref": "LocationListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + } + } + }, + "schedule": { + "methods": { + "get": { + "id": "coordinate.schedule.get", + "path": "{teamId}/jobs/{jobId}/schedule", + "httpMethod": "GET", + "description": "Retrieves the schedule for a job.", + "parameters": { + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "response": { + "$ref": "Schedule" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + }, + "patch": { + "id": "coordinate.schedule.patch", + "path": "{teamId}/jobs/{jobId}/schedule", + "httpMethod": "PATCH", + "description": "Replaces the schedule of a job with the provided schedule. This method supports patch semantics.", + "parameters": { + "allDay": { + "type": "boolean", + "description": "Whether the job is scheduled for the whole day. Time of day in start/end times is ignored if this is true.", + "location": "query" + }, + "duration": { + "type": "string", + "description": "Job duration in milliseconds.", + "format": "uint64", + "location": "query" + }, + "endTime": { + "type": "string", + "description": "Scheduled end time in milliseconds since epoch.", + "format": "uint64", + "location": "query" + }, + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "startTime": { + "type": "string", + "description": "Scheduled start time in milliseconds since epoch.", + "format": "uint64", + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "request": { + "$ref": "Schedule" + }, + "response": { + "$ref": "Schedule" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate" + ] + }, + "update": { + "id": "coordinate.schedule.update", + "path": "{teamId}/jobs/{jobId}/schedule", + "httpMethod": "PUT", + "description": "Replaces the schedule of a job with the provided schedule.", + "parameters": { + "allDay": { + "type": "boolean", + "description": "Whether the job is scheduled for the whole day. Time of day in start/end times is ignored if this is true.", + "location": "query" + }, + "duration": { + "type": "string", + "description": "Job duration in milliseconds.", + "format": "uint64", + "location": "query" + }, + "endTime": { + "type": "string", + "description": "Scheduled end time in milliseconds since epoch.", + "format": "uint64", + "location": "query" + }, + "jobId": { + "type": "string", + "description": "Job number", + "required": true, + "format": "uint64", + "location": "path" + }, + "startTime": { + "type": "string", + "description": "Scheduled start time in milliseconds since epoch.", + "format": "uint64", + "location": "query" + }, + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId", + "jobId" + ], + "request": { + "$ref": "Schedule" + }, + "response": { + "$ref": "Schedule" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate" + ] + } + } + }, + "worker": { + "methods": { + "list": { + "id": "coordinate.worker.list", + "path": "{teamId}/workers", + "httpMethod": "GET", + "description": "Retrieves a list of workers in a team.", + "parameters": { + "teamId": { + "type": "string", + "description": "Team ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "teamId" + ], + "response": { + "$ref": "WorkerListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/coordinate", + "https://www.googleapis.com/auth/coordinate.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-gen.go b/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-gen.go new file mode 100644 index 0000000000000..86f0b09f379a3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/coordinate/v1/coordinate-gen.go @@ -0,0 +1,1841 @@ +// Package coordinate provides access to the Google Maps Coordinate API. +// +// See https://developers.google.com/coordinate/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/coordinate/v1" +// ... +// coordinateService, err := coordinate.New(oauthHttpClient) +package coordinate + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "coordinate:v1" +const apiName = "coordinate" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/coordinate/v1/teams/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Maps Coordinate jobs + CoordinateScope = "https://www.googleapis.com/auth/coordinate" + + // View your Google Coordinate jobs + CoordinateReadonlyScope = "https://www.googleapis.com/auth/coordinate.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.CustomFieldDef = NewCustomFieldDefService(s) + s.Jobs = NewJobsService(s) + s.Location = NewLocationService(s) + s.Schedule = NewScheduleService(s) + s.Worker = NewWorkerService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + CustomFieldDef *CustomFieldDefService + + Jobs *JobsService + + Location *LocationService + + Schedule *ScheduleService + + Worker *WorkerService +} + +func NewCustomFieldDefService(s *Service) *CustomFieldDefService { + rs := &CustomFieldDefService{s: s} + return rs +} + +type CustomFieldDefService struct { + s *Service +} + +func NewJobsService(s *Service) *JobsService { + rs := &JobsService{s: s} + return rs +} + +type JobsService struct { + s *Service +} + +func NewLocationService(s *Service) *LocationService { + rs := &LocationService{s: s} + return rs +} + +type LocationService struct { + s *Service +} + +func NewScheduleService(s *Service) *ScheduleService { + rs := &ScheduleService{s: s} + return rs +} + +type ScheduleService struct { + s *Service +} + +func NewWorkerService(s *Service) *WorkerService { + rs := &WorkerService{s: s} + return rs +} + +type WorkerService struct { + s *Service +} + +type CustomField struct { + // CustomFieldId: Custom field id. + CustomFieldId int64 `json:"customFieldId,omitempty,string"` + + // Kind: Identifies this object as a custom field. + Kind string `json:"kind,omitempty"` + + // Value: Custom field value. + Value string `json:"value,omitempty"` +} + +type CustomFieldDef struct { + // Enabled: Whether the field is enabled. + Enabled bool `json:"enabled,omitempty"` + + // Id: Custom field id. + Id int64 `json:"id,omitempty,string"` + + // Kind: Identifies this object as a custom field definition. + Kind string `json:"kind,omitempty"` + + // Name: Custom field name. + Name string `json:"name,omitempty"` + + // RequiredForCheckout: Whether the field is required for checkout. + RequiredForCheckout bool `json:"requiredForCheckout,omitempty"` + + // Type: Custom field type. + Type string `json:"type,omitempty"` +} + +type CustomFieldDefListResponse struct { + // Items: Collection of custom field definitions in a team. + Items []*CustomFieldDef `json:"items,omitempty"` + + // Kind: Identifies this object as a collection of custom field + // definitions in a team. + Kind string `json:"kind,omitempty"` +} + +type CustomFields struct { + // CustomField: Collection of custom fields. + CustomField []*CustomField `json:"customField,omitempty"` + + // Kind: Identifies this object as a collection of custom fields. + Kind string `json:"kind,omitempty"` +} + +type Job struct { + // Id: Job id. + Id uint64 `json:"id,omitempty,string"` + + // JobChange: List of job changes since it was created. The first change + // corresponds to the state of the job when it was created. + JobChange []*JobChange `json:"jobChange,omitempty"` + + // Kind: Identifies this object as a job. + Kind string `json:"kind,omitempty"` + + // State: Current job state. + State *JobState `json:"state,omitempty"` +} + +type JobChange struct { + // Kind: Identifies this object as a job change. + Kind string `json:"kind,omitempty"` + + // State: Change applied to the job. Only the fields that were changed + // are set. + State *JobState `json:"state,omitempty"` + + // Timestamp: Time at which this change was applied. + Timestamp uint64 `json:"timestamp,omitempty,string"` +} + +type JobListResponse struct { + // Items: Jobs in the collection. + Items []*Job `json:"items,omitempty"` + + // Kind: Identifies this object as a list of jobs. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to provide to get the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type JobState struct { + // Assignee: Email address of the assignee. + Assignee string `json:"assignee,omitempty"` + + // CustomFields: Custom fields. + CustomFields *CustomFields `json:"customFields,omitempty"` + + // CustomerName: Customer name. + CustomerName string `json:"customerName,omitempty"` + + // CustomerPhoneNumber: Customer phone number. + CustomerPhoneNumber string `json:"customerPhoneNumber,omitempty"` + + // Kind: Identifies this object as a job state. + Kind string `json:"kind,omitempty"` + + // Location: Job location. + Location *Location `json:"location,omitempty"` + + // Note: Note added to the job. + Note []string `json:"note,omitempty"` + + // Progress: Job progress. + Progress string `json:"progress,omitempty"` + + // Title: Job title. + Title string `json:"title,omitempty"` +} + +type Location struct { + // AddressLine: Address. + AddressLine []string `json:"addressLine,omitempty"` + + // Kind: Identifies this object as a location. + Kind string `json:"kind,omitempty"` + + // Lat: Latitude. + Lat float64 `json:"lat,omitempty"` + + // Lng: Longitude. + Lng float64 `json:"lng,omitempty"` +} + +type LocationListResponse struct { + // Items: Locations in the collection. + Items []*LocationRecord `json:"items,omitempty"` + + // Kind: Identifies this object as a list of locations. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to provide to get the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TokenPagination: Pagination information for token pagination. + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` +} + +type LocationRecord struct { + // CollectionTime: The collection time in milliseconds since the epoch. + CollectionTime int64 `json:"collectionTime,omitempty,string"` + + // ConfidenceRadius: The location accuracy in meters. This is the radius + // of a 95% confidence interval around the location measurement. + ConfidenceRadius float64 `json:"confidenceRadius,omitempty"` + + // Kind: Identifies this object as a location. + Kind string `json:"kind,omitempty"` + + // Latitude: Latitude. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: Longitude. + Longitude float64 `json:"longitude,omitempty"` +} + +type Schedule struct { + // AllDay: Whether the job is scheduled for the whole day. Time of day + // in start/end times is ignored if this is true. + AllDay bool `json:"allDay,omitempty"` + + // Duration: Job duration in milliseconds. + Duration uint64 `json:"duration,omitempty,string"` + + // EndTime: Scheduled end time in milliseconds since epoch. + EndTime uint64 `json:"endTime,omitempty,string"` + + // Kind: Identifies this object as a job schedule. + Kind string `json:"kind,omitempty"` + + // StartTime: Scheduled start time in milliseconds since epoch. + StartTime uint64 `json:"startTime,omitempty,string"` +} + +type TokenPagination struct { + // Kind: Identifies this object as pagination information. + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to provide to get the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PreviousPageToken: A token to provide to get the previous page of + // results. + PreviousPageToken string `json:"previousPageToken,omitempty"` +} + +type Worker struct { + // Id: Worker email address. + Id string `json:"id,omitempty"` + + // Kind: Identifies this object as a worker. + Kind string `json:"kind,omitempty"` +} + +type WorkerListResponse struct { + // Items: Workers in the collection. + Items []*Worker `json:"items,omitempty"` + + // Kind: Identifies this object as a list of workers. + Kind string `json:"kind,omitempty"` +} + +// method id "coordinate.customFieldDef.list": + +type CustomFieldDefListCall struct { + s *Service + teamId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of custom field definitions for a team. +func (r *CustomFieldDefService) List(teamId string) *CustomFieldDefListCall { + c := &CustomFieldDefListCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + return c +} + +func (c *CustomFieldDefListCall) Do() (*CustomFieldDefListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/custom_fields") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CustomFieldDefListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of custom field definitions for a team.", + // "httpMethod": "GET", + // "id": "coordinate.customFieldDef.list", + // "parameterOrder": [ + // "teamId" + // ], + // "parameters": { + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/custom_fields", + // "response": { + // "$ref": "CustomFieldDefListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} + +// method id "coordinate.jobs.get": + +type JobsGetCall struct { + s *Service + teamId string + jobId uint64 + opt_ map[string]interface{} +} + +// Get: Retrieves a job, including all the changes made to the job. +func (r *JobsService) Get(teamId string, jobId uint64) *JobsGetCall { + c := &JobsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + return c +} + +func (c *JobsGetCall) Do() (*Job, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a job, including all the changes made to the job.", + // "httpMethod": "GET", + // "id": "coordinate.jobs.get", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}", + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} + +// method id "coordinate.jobs.insert": + +type JobsInsertCall struct { + s *Service + teamId string + address string + lat float64 + lng float64 + title string + job *Job + opt_ map[string]interface{} +} + +// Insert: Inserts a new job. Only the state field of the job should be +// set. +func (r *JobsService) Insert(teamId string, address string, lat float64, lng float64, title string, job *Job) *JobsInsertCall { + c := &JobsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.address = address + c.lat = lat + c.lng = lng + c.title = title + c.job = job + return c +} + +// Assignee sets the optional parameter "assignee": Assignee email +// address, or empty string to unassign. +func (c *JobsInsertCall) Assignee(assignee string) *JobsInsertCall { + c.opt_["assignee"] = assignee + return c +} + +// CustomField sets the optional parameter "customField": Map from +// custom field id (from /team//custom_fields) to the field value. For +// example '123=Alice' +func (c *JobsInsertCall) CustomField(customField string) *JobsInsertCall { + c.opt_["customField"] = customField + return c +} + +// CustomerName sets the optional parameter "customerName": Customer +// name +func (c *JobsInsertCall) CustomerName(customerName string) *JobsInsertCall { + c.opt_["customerName"] = customerName + return c +} + +// CustomerPhoneNumber sets the optional parameter +// "customerPhoneNumber": Customer phone number +func (c *JobsInsertCall) CustomerPhoneNumber(customerPhoneNumber string) *JobsInsertCall { + c.opt_["customerPhoneNumber"] = customerPhoneNumber + return c +} + +// Note sets the optional parameter "note": Job note as newline (Unix) +// separated string +func (c *JobsInsertCall) Note(note string) *JobsInsertCall { + c.opt_["note"] = note + return c +} + +func (c *JobsInsertCall) Do() (*Job, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.job) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("address", fmt.Sprintf("%v", c.address)) + params.Set("lat", fmt.Sprintf("%v", c.lat)) + params.Set("lng", fmt.Sprintf("%v", c.lng)) + params.Set("title", fmt.Sprintf("%v", c.title)) + if v, ok := c.opt_["assignee"]; ok { + params.Set("assignee", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customField"]; ok { + params.Set("customField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerName"]; ok { + params.Set("customerName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerPhoneNumber"]; ok { + params.Set("customerPhoneNumber", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["note"]; ok { + params.Set("note", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new job. Only the state field of the job should be set.", + // "httpMethod": "POST", + // "id": "coordinate.jobs.insert", + // "parameterOrder": [ + // "teamId", + // "address", + // "lat", + // "lng", + // "title" + // ], + // "parameters": { + // "address": { + // "description": "Job address as newline (Unix) separated string", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "assignee": { + // "description": "Assignee email address, or empty string to unassign.", + // "location": "query", + // "type": "string" + // }, + // "customField": { + // "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "customerName": { + // "description": "Customer name", + // "location": "query", + // "type": "string" + // }, + // "customerPhoneNumber": { + // "description": "Customer phone number", + // "location": "query", + // "type": "string" + // }, + // "lat": { + // "description": "The latitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "required": true, + // "type": "number" + // }, + // "lng": { + // "description": "The longitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "required": true, + // "type": "number" + // }, + // "note": { + // "description": "Job note as newline (Unix) separated string", + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "title": { + // "description": "Job title", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs", + // "request": { + // "$ref": "Job" + // }, + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate" + // ] + // } + +} + +// method id "coordinate.jobs.list": + +type JobsListCall struct { + s *Service + teamId string + opt_ map[string]interface{} +} + +// List: Retrieves jobs created or modified since the given timestamp. +func (r *JobsService) List(teamId string) *JobsListCall { + c := &JobsListCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return in one page. +func (c *JobsListCall) MaxResults(maxResults int64) *JobsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MinModifiedTimestampMs sets the optional parameter +// "minModifiedTimestampMs": Minimum time a job was modified in +// milliseconds since epoch. +func (c *JobsListCall) MinModifiedTimestampMs(minModifiedTimestampMs uint64) *JobsListCall { + c.opt_["minModifiedTimestampMs"] = minModifiedTimestampMs + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +func (c *JobsListCall) PageToken(pageToken string) *JobsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *JobsListCall) Do() (*JobListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minModifiedTimestampMs"]; ok { + params.Set("minModifiedTimestampMs", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(JobListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves jobs created or modified since the given timestamp.", + // "httpMethod": "GET", + // "id": "coordinate.jobs.list", + // "parameterOrder": [ + // "teamId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return in one page.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "minModifiedTimestampMs": { + // "description": "Minimum time a job was modified in milliseconds since epoch.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token", + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs", + // "response": { + // "$ref": "JobListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} + +// method id "coordinate.jobs.patch": + +type JobsPatchCall struct { + s *Service + teamId string + jobId uint64 + job *Job + opt_ map[string]interface{} +} + +// Patch: Updates a job. Fields that are set in the job state will be +// updated. This method supports patch semantics. +func (r *JobsService) Patch(teamId string, jobId uint64, job *Job) *JobsPatchCall { + c := &JobsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + c.job = job + return c +} + +// Address sets the optional parameter "address": Job address as newline +// (Unix) separated string +func (c *JobsPatchCall) Address(address string) *JobsPatchCall { + c.opt_["address"] = address + return c +} + +// Assignee sets the optional parameter "assignee": Assignee email +// address, or empty string to unassign. +func (c *JobsPatchCall) Assignee(assignee string) *JobsPatchCall { + c.opt_["assignee"] = assignee + return c +} + +// CustomField sets the optional parameter "customField": Map from +// custom field id (from /team//custom_fields) to the field value. For +// example '123=Alice' +func (c *JobsPatchCall) CustomField(customField string) *JobsPatchCall { + c.opt_["customField"] = customField + return c +} + +// CustomerName sets the optional parameter "customerName": Customer +// name +func (c *JobsPatchCall) CustomerName(customerName string) *JobsPatchCall { + c.opt_["customerName"] = customerName + return c +} + +// CustomerPhoneNumber sets the optional parameter +// "customerPhoneNumber": Customer phone number +func (c *JobsPatchCall) CustomerPhoneNumber(customerPhoneNumber string) *JobsPatchCall { + c.opt_["customerPhoneNumber"] = customerPhoneNumber + return c +} + +// Lat sets the optional parameter "lat": The latitude coordinate of +// this job's location. +func (c *JobsPatchCall) Lat(lat float64) *JobsPatchCall { + c.opt_["lat"] = lat + return c +} + +// Lng sets the optional parameter "lng": The longitude coordinate of +// this job's location. +func (c *JobsPatchCall) Lng(lng float64) *JobsPatchCall { + c.opt_["lng"] = lng + return c +} + +// Note sets the optional parameter "note": Job note as newline (Unix) +// separated string +func (c *JobsPatchCall) Note(note string) *JobsPatchCall { + c.opt_["note"] = note + return c +} + +// Progress sets the optional parameter "progress": Job progress +func (c *JobsPatchCall) Progress(progress string) *JobsPatchCall { + c.opt_["progress"] = progress + return c +} + +// Title sets the optional parameter "title": Job title +func (c *JobsPatchCall) Title(title string) *JobsPatchCall { + c.opt_["title"] = title + return c +} + +func (c *JobsPatchCall) Do() (*Job, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.job) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["address"]; ok { + params.Set("address", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["assignee"]; ok { + params.Set("assignee", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customField"]; ok { + params.Set("customField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerName"]; ok { + params.Set("customerName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerPhoneNumber"]; ok { + params.Set("customerPhoneNumber", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lat"]; ok { + params.Set("lat", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lng"]; ok { + params.Set("lng", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["note"]; ok { + params.Set("note", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["progress"]; ok { + params.Set("progress", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["title"]; ok { + params.Set("title", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a job. Fields that are set in the job state will be updated. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "coordinate.jobs.patch", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "address": { + // "description": "Job address as newline (Unix) separated string", + // "location": "query", + // "type": "string" + // }, + // "assignee": { + // "description": "Assignee email address, or empty string to unassign.", + // "location": "query", + // "type": "string" + // }, + // "customField": { + // "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "customerName": { + // "description": "Customer name", + // "location": "query", + // "type": "string" + // }, + // "customerPhoneNumber": { + // "description": "Customer phone number", + // "location": "query", + // "type": "string" + // }, + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "lat": { + // "description": "The latitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "lng": { + // "description": "The longitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "note": { + // "description": "Job note as newline (Unix) separated string", + // "location": "query", + // "type": "string" + // }, + // "progress": { + // "description": "Job progress", + // "enum": [ + // "COMPLETED", + // "IN_PROGRESS", + // "NOT_ACCEPTED", + // "NOT_STARTED", + // "OBSOLETE" + // ], + // "enumDescriptions": [ + // "Completed", + // "In progress", + // "Not accepted", + // "Not started", + // "Obsolete" + // ], + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "title": { + // "description": "Job title", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}", + // "request": { + // "$ref": "Job" + // }, + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate" + // ] + // } + +} + +// method id "coordinate.jobs.update": + +type JobsUpdateCall struct { + s *Service + teamId string + jobId uint64 + job *Job + opt_ map[string]interface{} +} + +// Update: Updates a job. Fields that are set in the job state will be +// updated. +func (r *JobsService) Update(teamId string, jobId uint64, job *Job) *JobsUpdateCall { + c := &JobsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + c.job = job + return c +} + +// Address sets the optional parameter "address": Job address as newline +// (Unix) separated string +func (c *JobsUpdateCall) Address(address string) *JobsUpdateCall { + c.opt_["address"] = address + return c +} + +// Assignee sets the optional parameter "assignee": Assignee email +// address, or empty string to unassign. +func (c *JobsUpdateCall) Assignee(assignee string) *JobsUpdateCall { + c.opt_["assignee"] = assignee + return c +} + +// CustomField sets the optional parameter "customField": Map from +// custom field id (from /team//custom_fields) to the field value. For +// example '123=Alice' +func (c *JobsUpdateCall) CustomField(customField string) *JobsUpdateCall { + c.opt_["customField"] = customField + return c +} + +// CustomerName sets the optional parameter "customerName": Customer +// name +func (c *JobsUpdateCall) CustomerName(customerName string) *JobsUpdateCall { + c.opt_["customerName"] = customerName + return c +} + +// CustomerPhoneNumber sets the optional parameter +// "customerPhoneNumber": Customer phone number +func (c *JobsUpdateCall) CustomerPhoneNumber(customerPhoneNumber string) *JobsUpdateCall { + c.opt_["customerPhoneNumber"] = customerPhoneNumber + return c +} + +// Lat sets the optional parameter "lat": The latitude coordinate of +// this job's location. +func (c *JobsUpdateCall) Lat(lat float64) *JobsUpdateCall { + c.opt_["lat"] = lat + return c +} + +// Lng sets the optional parameter "lng": The longitude coordinate of +// this job's location. +func (c *JobsUpdateCall) Lng(lng float64) *JobsUpdateCall { + c.opt_["lng"] = lng + return c +} + +// Note sets the optional parameter "note": Job note as newline (Unix) +// separated string +func (c *JobsUpdateCall) Note(note string) *JobsUpdateCall { + c.opt_["note"] = note + return c +} + +// Progress sets the optional parameter "progress": Job progress +func (c *JobsUpdateCall) Progress(progress string) *JobsUpdateCall { + c.opt_["progress"] = progress + return c +} + +// Title sets the optional parameter "title": Job title +func (c *JobsUpdateCall) Title(title string) *JobsUpdateCall { + c.opt_["title"] = title + return c +} + +func (c *JobsUpdateCall) Do() (*Job, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.job) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["address"]; ok { + params.Set("address", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["assignee"]; ok { + params.Set("assignee", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customField"]; ok { + params.Set("customField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerName"]; ok { + params.Set("customerName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerPhoneNumber"]; ok { + params.Set("customerPhoneNumber", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lat"]; ok { + params.Set("lat", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lng"]; ok { + params.Set("lng", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["note"]; ok { + params.Set("note", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["progress"]; ok { + params.Set("progress", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["title"]; ok { + params.Set("title", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Job) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a job. Fields that are set in the job state will be updated.", + // "httpMethod": "PUT", + // "id": "coordinate.jobs.update", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "address": { + // "description": "Job address as newline (Unix) separated string", + // "location": "query", + // "type": "string" + // }, + // "assignee": { + // "description": "Assignee email address, or empty string to unassign.", + // "location": "query", + // "type": "string" + // }, + // "customField": { + // "description": "Map from custom field id (from /team//custom_fields) to the field value. For example '123=Alice'", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "customerName": { + // "description": "Customer name", + // "location": "query", + // "type": "string" + // }, + // "customerPhoneNumber": { + // "description": "Customer phone number", + // "location": "query", + // "type": "string" + // }, + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "lat": { + // "description": "The latitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "lng": { + // "description": "The longitude coordinate of this job's location.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "note": { + // "description": "Job note as newline (Unix) separated string", + // "location": "query", + // "type": "string" + // }, + // "progress": { + // "description": "Job progress", + // "enum": [ + // "COMPLETED", + // "IN_PROGRESS", + // "NOT_ACCEPTED", + // "NOT_STARTED", + // "OBSOLETE" + // ], + // "enumDescriptions": [ + // "Completed", + // "In progress", + // "Not accepted", + // "Not started", + // "Obsolete" + // ], + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "title": { + // "description": "Job title", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}", + // "request": { + // "$ref": "Job" + // }, + // "response": { + // "$ref": "Job" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate" + // ] + // } + +} + +// method id "coordinate.location.list": + +type LocationListCall struct { + s *Service + teamId string + workerEmail string + startTimestampMs uint64 + opt_ map[string]interface{} +} + +// List: Retrieves a list of locations for a worker. +func (r *LocationService) List(teamId string, workerEmail string, startTimestampMs uint64) *LocationListCall { + c := &LocationListCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.workerEmail = workerEmail + c.startTimestampMs = startTimestampMs + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return in one page. +func (c *LocationListCall) MaxResults(maxResults int64) *LocationListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +func (c *LocationListCall) PageToken(pageToken string) *LocationListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *LocationListCall) Do() (*LocationListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("startTimestampMs", fmt.Sprintf("%v", c.startTimestampMs)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/workers/{workerEmail}/locations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{workerEmail}", url.QueryEscape(c.workerEmail), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LocationListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of locations for a worker.", + // "httpMethod": "GET", + // "id": "coordinate.location.list", + // "parameterOrder": [ + // "teamId", + // "workerEmail", + // "startTimestampMs" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return in one page.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token", + // "location": "query", + // "type": "string" + // }, + // "startTimestampMs": { + // "description": "Start timestamp in milliseconds since the epoch.", + // "format": "uint64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "workerEmail": { + // "description": "Worker email address.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/workers/{workerEmail}/locations", + // "response": { + // "$ref": "LocationListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} + +// method id "coordinate.schedule.get": + +type ScheduleGetCall struct { + s *Service + teamId string + jobId uint64 + opt_ map[string]interface{} +} + +// Get: Retrieves the schedule for a job. +func (r *ScheduleService) Get(teamId string, jobId uint64) *ScheduleGetCall { + c := &ScheduleGetCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + return c +} + +func (c *ScheduleGetCall) Do() (*Schedule, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}/schedule") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Schedule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the schedule for a job.", + // "httpMethod": "GET", + // "id": "coordinate.schedule.get", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}/schedule", + // "response": { + // "$ref": "Schedule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} + +// method id "coordinate.schedule.patch": + +type SchedulePatchCall struct { + s *Service + teamId string + jobId uint64 + schedule *Schedule + opt_ map[string]interface{} +} + +// Patch: Replaces the schedule of a job with the provided schedule. +// This method supports patch semantics. +func (r *ScheduleService) Patch(teamId string, jobId uint64, schedule *Schedule) *SchedulePatchCall { + c := &SchedulePatchCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + c.schedule = schedule + return c +} + +// AllDay sets the optional parameter "allDay": Whether the job is +// scheduled for the whole day. Time of day in start/end times is +// ignored if this is true. +func (c *SchedulePatchCall) AllDay(allDay bool) *SchedulePatchCall { + c.opt_["allDay"] = allDay + return c +} + +// Duration sets the optional parameter "duration": Job duration in +// milliseconds. +func (c *SchedulePatchCall) Duration(duration uint64) *SchedulePatchCall { + c.opt_["duration"] = duration + return c +} + +// EndTime sets the optional parameter "endTime": Scheduled end time in +// milliseconds since epoch. +func (c *SchedulePatchCall) EndTime(endTime uint64) *SchedulePatchCall { + c.opt_["endTime"] = endTime + return c +} + +// StartTime sets the optional parameter "startTime": Scheduled start +// time in milliseconds since epoch. +func (c *SchedulePatchCall) StartTime(startTime uint64) *SchedulePatchCall { + c.opt_["startTime"] = startTime + return c +} + +func (c *SchedulePatchCall) Do() (*Schedule, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.schedule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["allDay"]; ok { + params.Set("allDay", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["duration"]; ok { + params.Set("duration", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endTime"]; ok { + params.Set("endTime", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startTime"]; ok { + params.Set("startTime", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}/schedule") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Schedule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Replaces the schedule of a job with the provided schedule. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "coordinate.schedule.patch", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "allDay": { + // "description": "Whether the job is scheduled for the whole day. Time of day in start/end times is ignored if this is true.", + // "location": "query", + // "type": "boolean" + // }, + // "duration": { + // "description": "Job duration in milliseconds.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "endTime": { + // "description": "Scheduled end time in milliseconds since epoch.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startTime": { + // "description": "Scheduled start time in milliseconds since epoch.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}/schedule", + // "request": { + // "$ref": "Schedule" + // }, + // "response": { + // "$ref": "Schedule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate" + // ] + // } + +} + +// method id "coordinate.schedule.update": + +type ScheduleUpdateCall struct { + s *Service + teamId string + jobId uint64 + schedule *Schedule + opt_ map[string]interface{} +} + +// Update: Replaces the schedule of a job with the provided schedule. +func (r *ScheduleService) Update(teamId string, jobId uint64, schedule *Schedule) *ScheduleUpdateCall { + c := &ScheduleUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + c.jobId = jobId + c.schedule = schedule + return c +} + +// AllDay sets the optional parameter "allDay": Whether the job is +// scheduled for the whole day. Time of day in start/end times is +// ignored if this is true. +func (c *ScheduleUpdateCall) AllDay(allDay bool) *ScheduleUpdateCall { + c.opt_["allDay"] = allDay + return c +} + +// Duration sets the optional parameter "duration": Job duration in +// milliseconds. +func (c *ScheduleUpdateCall) Duration(duration uint64) *ScheduleUpdateCall { + c.opt_["duration"] = duration + return c +} + +// EndTime sets the optional parameter "endTime": Scheduled end time in +// milliseconds since epoch. +func (c *ScheduleUpdateCall) EndTime(endTime uint64) *ScheduleUpdateCall { + c.opt_["endTime"] = endTime + return c +} + +// StartTime sets the optional parameter "startTime": Scheduled start +// time in milliseconds since epoch. +func (c *ScheduleUpdateCall) StartTime(startTime uint64) *ScheduleUpdateCall { + c.opt_["startTime"] = startTime + return c +} + +func (c *ScheduleUpdateCall) Do() (*Schedule, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.schedule) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["allDay"]; ok { + params.Set("allDay", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["duration"]; ok { + params.Set("duration", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endTime"]; ok { + params.Set("endTime", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startTime"]; ok { + params.Set("startTime", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/jobs/{jobId}/schedule") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{jobId}", strconv.FormatUint(c.jobId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Schedule) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Replaces the schedule of a job with the provided schedule.", + // "httpMethod": "PUT", + // "id": "coordinate.schedule.update", + // "parameterOrder": [ + // "teamId", + // "jobId" + // ], + // "parameters": { + // "allDay": { + // "description": "Whether the job is scheduled for the whole day. Time of day in start/end times is ignored if this is true.", + // "location": "query", + // "type": "boolean" + // }, + // "duration": { + // "description": "Job duration in milliseconds.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "endTime": { + // "description": "Scheduled end time in milliseconds since epoch.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "jobId": { + // "description": "Job number", + // "format": "uint64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startTime": { + // "description": "Scheduled start time in milliseconds since epoch.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/jobs/{jobId}/schedule", + // "request": { + // "$ref": "Schedule" + // }, + // "response": { + // "$ref": "Schedule" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate" + // ] + // } + +} + +// method id "coordinate.worker.list": + +type WorkerListCall struct { + s *Service + teamId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of workers in a team. +func (r *WorkerService) List(teamId string) *WorkerListCall { + c := &WorkerListCall{s: r.s, opt_: make(map[string]interface{})} + c.teamId = teamId + return c +} + +func (c *WorkerListCall) Do() (*WorkerListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{teamId}/workers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{teamId}", url.QueryEscape(c.teamId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(WorkerListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of workers in a team.", + // "httpMethod": "GET", + // "id": "coordinate.worker.list", + // "parameterOrder": [ + // "teamId" + // ], + // "parameters": { + // "teamId": { + // "description": "Team ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{teamId}/workers", + // "response": { + // "$ref": "WorkerListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/coordinate", + // "https://www.googleapis.com/auth/coordinate.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-api.json b/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-api.json new file mode 100644 index 0000000000000..17c3f4f1b5bf0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-api.json @@ -0,0 +1,813 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5fAOCCT-EMDzKZ0hPKCYdJUAc9k\"", + "discoveryVersion": "v1", + "id": "customsearch:v1", + "name": "customsearch", + "version": "v1", + "title": "CustomSearch API", + "description": "Lets you search over a website or collection of websites", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/custom-search/v1/using_rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/customsearch/", + "basePath": "/customsearch/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "customsearch/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "atom", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Context": { + "id": "Context", + "type": "object", + "properties": { + "facets": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "object", + "properties": { + "anchor": { + "type": "string" + }, + "label": { + "type": "string" + }, + "label_with_op": { + "type": "string" + } + } + } + } + }, + "title": { + "type": "string" + } + } + }, + "Promotion": { + "id": "Promotion", + "type": "object", + "properties": { + "bodyLines": { + "type": "array", + "items": { + "type": "object", + "properties": { + "htmlTitle": { + "type": "string" + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + }, + "url": { + "type": "string" + } + } + } + }, + "displayLink": { + "type": "string" + }, + "htmlTitle": { + "type": "string" + }, + "image": { + "type": "object", + "properties": { + "height": { + "type": "integer", + "format": "int32" + }, + "source": { + "type": "string" + }, + "width": { + "type": "integer", + "format": "int32" + } + } + }, + "link": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "Query": { + "id": "Query", + "type": "object", + "properties": { + "count": { + "type": "integer", + "format": "int32" + }, + "cr": { + "type": "string" + }, + "cref": { + "type": "string" + }, + "cx": { + "type": "string" + }, + "dateRestrict": { + "type": "string" + }, + "disableCnTwTranslation": { + "type": "string" + }, + "exactTerms": { + "type": "string" + }, + "excludeTerms": { + "type": "string" + }, + "fileType": { + "type": "string" + }, + "filter": { + "type": "string" + }, + "gl": { + "type": "string" + }, + "googleHost": { + "type": "string" + }, + "highRange": { + "type": "string" + }, + "hl": { + "type": "string" + }, + "hq": { + "type": "string" + }, + "imgColorType": { + "type": "string" + }, + "imgDominantColor": { + "type": "string" + }, + "imgSize": { + "type": "string" + }, + "imgType": { + "type": "string" + }, + "inputEncoding": { + "type": "string" + }, + "language": { + "type": "string" + }, + "linkSite": { + "type": "string" + }, + "lowRange": { + "type": "string" + }, + "orTerms": { + "type": "string" + }, + "outputEncoding": { + "type": "string" + }, + "relatedSite": { + "type": "string" + }, + "rights": { + "type": "string" + }, + "safe": { + "type": "string" + }, + "searchTerms": { + "type": "string" + }, + "searchType": { + "type": "string" + }, + "siteSearch": { + "type": "string" + }, + "siteSearchFilter": { + "type": "string" + }, + "sort": { + "type": "string" + }, + "startIndex": { + "type": "integer", + "format": "int32" + }, + "startPage": { + "type": "integer", + "format": "int32" + }, + "title": { + "type": "string" + }, + "totalResults": { + "type": "string", + "format": "int64" + } + } + }, + "Result": { + "id": "Result", + "type": "object", + "properties": { + "cacheId": { + "type": "string" + }, + "displayLink": { + "type": "string" + }, + "fileFormat": { + "type": "string" + }, + "formattedUrl": { + "type": "string" + }, + "htmlFormattedUrl": { + "type": "string" + }, + "htmlSnippet": { + "type": "string" + }, + "htmlTitle": { + "type": "string" + }, + "image": { + "type": "object", + "properties": { + "byteSize": { + "type": "integer", + "format": "int32" + }, + "contextLink": { + "type": "string" + }, + "height": { + "type": "integer", + "format": "int32" + }, + "thumbnailHeight": { + "type": "integer", + "format": "int32" + }, + "thumbnailLink": { + "type": "string" + }, + "thumbnailWidth": { + "type": "integer", + "format": "int32" + }, + "width": { + "type": "integer", + "format": "int32" + } + } + }, + "kind": { + "type": "string", + "default": "customsearch#result" + }, + "labels": { + "type": "array", + "items": { + "type": "object", + "properties": { + "displayName": { + "type": "string" + }, + "label_with_op": { + "type": "string" + }, + "name": { + "type": "string" + } + } + } + }, + "link": { + "type": "string" + }, + "mime": { + "type": "string" + }, + "pagemap": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "any" + } + } + } + }, + "snippet": { + "type": "string" + }, + "title": { + "type": "string" + } + } + }, + "Search": { + "id": "Search", + "type": "object", + "properties": { + "context": { + "$ref": "Context" + }, + "items": { + "type": "array", + "items": { + "$ref": "Result" + } + }, + "kind": { + "type": "string", + "default": "customsearch#search" + }, + "promotions": { + "type": "array", + "items": { + "$ref": "Promotion" + } + }, + "queries": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "Query" + } + } + }, + "searchInformation": { + "type": "object", + "properties": { + "formattedSearchTime": { + "type": "string" + }, + "formattedTotalResults": { + "type": "string" + }, + "searchTime": { + "type": "number", + "format": "double" + }, + "totalResults": { + "type": "string", + "format": "int64" + } + } + }, + "spelling": { + "type": "object", + "properties": { + "correctedQuery": { + "type": "string" + }, + "htmlCorrectedQuery": { + "type": "string" + } + } + }, + "url": { + "type": "object", + "properties": { + "template": { + "type": "string", + "default": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&cref={cref?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json" + }, + "type": { + "type": "string", + "default": "application/json" + } + } + } + } + } + }, + "resources": { + "cse": { + "methods": { + "list": { + "id": "search.cse.list", + "path": "v1", + "httpMethod": "GET", + "description": "Returns metadata about the search performed, metadata about the custom search engine used for the search, and the search results.", + "parameters": { + "c2coff": { + "type": "string", + "description": "Turns off the translation between zh-CN and zh-TW.", + "location": "query" + }, + "cr": { + "type": "string", + "description": "Country restrict(s).", + "location": "query" + }, + "cref": { + "type": "string", + "description": "The URL of a linked custom search engine", + "location": "query" + }, + "cx": { + "type": "string", + "description": "The custom search engine ID to scope this search query", + "location": "query" + }, + "dateRestrict": { + "type": "string", + "description": "Specifies all search results are from a time period", + "location": "query" + }, + "exactTerms": { + "type": "string", + "description": "Identifies a phrase that all documents in the search results must contain", + "location": "query" + }, + "excludeTerms": { + "type": "string", + "description": "Identifies a word or phrase that should not appear in any documents in the search results", + "location": "query" + }, + "fileType": { + "type": "string", + "description": "Returns images of a specified type. Some of the allowed values are: bmp, gif, png, jpg, svg, pdf, ...", + "location": "query" + }, + "filter": { + "type": "string", + "description": "Controls turning on or off the duplicate content filter.", + "enum": [ + "0", + "1" + ], + "enumDescriptions": [ + "Turns off duplicate content filter.", + "Turns on duplicate content filter." + ], + "location": "query" + }, + "gl": { + "type": "string", + "description": "Geolocation of end user.", + "location": "query" + }, + "googlehost": { + "type": "string", + "description": "The local Google domain to use to perform the search.", + "location": "query" + }, + "highRange": { + "type": "string", + "description": "Creates a range in form as_nlo value..as_nhi value and attempts to append it to query", + "location": "query" + }, + "hl": { + "type": "string", + "description": "Sets the user interface language.", + "location": "query" + }, + "hq": { + "type": "string", + "description": "Appends the extra query terms to the query.", + "location": "query" + }, + "imgColorType": { + "type": "string", + "description": "Returns black and white, grayscale, or color images: mono, gray, and color.", + "enum": [ + "color", + "gray", + "mono" + ], + "enumDescriptions": [ + "color", + "gray", + "mono" + ], + "location": "query" + }, + "imgDominantColor": { + "type": "string", + "description": "Returns images of a specific dominant color: yellow, green, teal, blue, purple, pink, white, gray, black and brown.", + "enum": [ + "black", + "blue", + "brown", + "gray", + "green", + "pink", + "purple", + "teal", + "white", + "yellow" + ], + "enumDescriptions": [ + "black", + "blue", + "brown", + "gray", + "green", + "pink", + "purple", + "teal", + "white", + "yellow" + ], + "location": "query" + }, + "imgSize": { + "type": "string", + "description": "Returns images of a specified size, where size can be one of: icon, small, medium, large, xlarge, xxlarge, and huge.", + "enum": [ + "huge", + "icon", + "large", + "medium", + "small", + "xlarge", + "xxlarge" + ], + "enumDescriptions": [ + "huge", + "icon", + "large", + "medium", + "small", + "xlarge", + "xxlarge" + ], + "location": "query" + }, + "imgType": { + "type": "string", + "description": "Returns images of a type, which can be one of: clipart, face, lineart, news, and photo.", + "enum": [ + "clipart", + "face", + "lineart", + "news", + "photo" + ], + "enumDescriptions": [ + "clipart", + "face", + "lineart", + "news", + "photo" + ], + "location": "query" + }, + "linkSite": { + "type": "string", + "description": "Specifies that all search results should contain a link to a particular URL", + "location": "query" + }, + "lowRange": { + "type": "string", + "description": "Creates a range in form as_nlo value..as_nhi value and attempts to append it to query", + "location": "query" + }, + "lr": { + "type": "string", + "description": "The language restriction for the search results", + "enum": [ + "lang_ar", + "lang_bg", + "lang_ca", + "lang_cs", + "lang_da", + "lang_de", + "lang_el", + "lang_en", + "lang_es", + "lang_et", + "lang_fi", + "lang_fr", + "lang_hr", + "lang_hu", + "lang_id", + "lang_is", + "lang_it", + "lang_iw", + "lang_ja", + "lang_ko", + "lang_lt", + "lang_lv", + "lang_nl", + "lang_no", + "lang_pl", + "lang_pt", + "lang_ro", + "lang_ru", + "lang_sk", + "lang_sl", + "lang_sr", + "lang_sv", + "lang_tr", + "lang_zh-CN", + "lang_zh-TW" + ], + "enumDescriptions": [ + "Arabic", + "Bulgarian", + "Catalan", + "Czech", + "Danish", + "German", + "Greek", + "English", + "Spanish", + "Estonian", + "Finnish", + "French", + "Croatian", + "Hungarian", + "Indonesian", + "Icelandic", + "Italian", + "Hebrew", + "Japanese", + "Korean", + "Lithuanian", + "Latvian", + "Dutch", + "Norwegian", + "Polish", + "Portuguese", + "Romanian", + "Russian", + "Slovak", + "Slovenian", + "Serbian", + "Swedish", + "Turkish", + "Chinese (Simplified)", + "Chinese (Traditional)" + ], + "location": "query" + }, + "num": { + "type": "integer", + "description": "Number of search results to return", + "default": "10", + "format": "uint32", + "location": "query" + }, + "orTerms": { + "type": "string", + "description": "Provides additional search terms to check for in a document, where each document in the search results must contain at least one of the additional search terms", + "location": "query" + }, + "q": { + "type": "string", + "description": "Query", + "required": true, + "location": "query" + }, + "relatedSite": { + "type": "string", + "description": "Specifies that all search results should be pages that are related to the specified URL", + "location": "query" + }, + "rights": { + "type": "string", + "description": "Filters based on licensing. Supported values include: cc_publicdomain, cc_attribute, cc_sharealike, cc_noncommercial, cc_nonderived and combinations of these.", + "location": "query" + }, + "safe": { + "type": "string", + "description": "Search safety level", + "default": "off", + "enum": [ + "high", + "medium", + "off" + ], + "enumDescriptions": [ + "Enables highest level of safe search filtering.", + "Enables moderate safe search filtering.", + "Disables safe search filtering." + ], + "location": "query" + }, + "searchType": { + "type": "string", + "description": "Specifies the search type: image.", + "enum": [ + "image" + ], + "enumDescriptions": [ + "custom image search" + ], + "location": "query" + }, + "siteSearch": { + "type": "string", + "description": "Specifies all search results should be pages from a given site", + "location": "query" + }, + "siteSearchFilter": { + "type": "string", + "description": "Controls whether to include or exclude results from the site named in the as_sitesearch parameter", + "enum": [ + "e", + "i" + ], + "enumDescriptions": [ + "exclude", + "include" + ], + "location": "query" + }, + "sort": { + "type": "string", + "description": "The sort expression to apply to the results", + "location": "query" + }, + "start": { + "type": "integer", + "description": "The index of the first result to return", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "q" + ], + "response": { + "$ref": "Search" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-gen.go b/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-gen.go new file mode 100644 index 0000000000000..eb62d25c235bf --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/customsearch/v1/customsearch-gen.go @@ -0,0 +1,999 @@ +// Package customsearch provides access to the CustomSearch API. +// +// See https://developers.google.com/custom-search/v1/using_rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/customsearch/v1" +// ... +// customsearchService, err := customsearch.New(oauthHttpClient) +package customsearch + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "customsearch:v1" +const apiName = "customsearch" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/customsearch/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Cse = NewCseService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Cse *CseService +} + +func NewCseService(s *Service) *CseService { + rs := &CseService{s: s} + return rs +} + +type CseService struct { + s *Service +} + +type Context struct { + Facets [][]*ContextFacetsItem `json:"facets,omitempty"` + + Title string `json:"title,omitempty"` +} + +type ContextFacetsItem struct { + Anchor string `json:"anchor,omitempty"` + + Label string `json:"label,omitempty"` + + Label_with_op string `json:"label_with_op,omitempty"` +} + +type Promotion struct { + BodyLines []*PromotionBodyLines `json:"bodyLines,omitempty"` + + DisplayLink string `json:"displayLink,omitempty"` + + HtmlTitle string `json:"htmlTitle,omitempty"` + + Image *PromotionImage `json:"image,omitempty"` + + Link string `json:"link,omitempty"` + + Title string `json:"title,omitempty"` +} + +type PromotionBodyLines struct { + HtmlTitle string `json:"htmlTitle,omitempty"` + + Link string `json:"link,omitempty"` + + Title string `json:"title,omitempty"` + + Url string `json:"url,omitempty"` +} + +type PromotionImage struct { + Height int64 `json:"height,omitempty"` + + Source string `json:"source,omitempty"` + + Width int64 `json:"width,omitempty"` +} + +type Query struct { + Count int64 `json:"count,omitempty"` + + Cr string `json:"cr,omitempty"` + + Cref string `json:"cref,omitempty"` + + Cx string `json:"cx,omitempty"` + + DateRestrict string `json:"dateRestrict,omitempty"` + + DisableCnTwTranslation string `json:"disableCnTwTranslation,omitempty"` + + ExactTerms string `json:"exactTerms,omitempty"` + + ExcludeTerms string `json:"excludeTerms,omitempty"` + + FileType string `json:"fileType,omitempty"` + + Filter string `json:"filter,omitempty"` + + Gl string `json:"gl,omitempty"` + + GoogleHost string `json:"googleHost,omitempty"` + + HighRange string `json:"highRange,omitempty"` + + Hl string `json:"hl,omitempty"` + + Hq string `json:"hq,omitempty"` + + ImgColorType string `json:"imgColorType,omitempty"` + + ImgDominantColor string `json:"imgDominantColor,omitempty"` + + ImgSize string `json:"imgSize,omitempty"` + + ImgType string `json:"imgType,omitempty"` + + InputEncoding string `json:"inputEncoding,omitempty"` + + Language string `json:"language,omitempty"` + + LinkSite string `json:"linkSite,omitempty"` + + LowRange string `json:"lowRange,omitempty"` + + OrTerms string `json:"orTerms,omitempty"` + + OutputEncoding string `json:"outputEncoding,omitempty"` + + RelatedSite string `json:"relatedSite,omitempty"` + + Rights string `json:"rights,omitempty"` + + Safe string `json:"safe,omitempty"` + + SearchTerms string `json:"searchTerms,omitempty"` + + SearchType string `json:"searchType,omitempty"` + + SiteSearch string `json:"siteSearch,omitempty"` + + SiteSearchFilter string `json:"siteSearchFilter,omitempty"` + + Sort string `json:"sort,omitempty"` + + StartIndex int64 `json:"startIndex,omitempty"` + + StartPage int64 `json:"startPage,omitempty"` + + Title string `json:"title,omitempty"` + + TotalResults int64 `json:"totalResults,omitempty,string"` +} + +type Result struct { + CacheId string `json:"cacheId,omitempty"` + + DisplayLink string `json:"displayLink,omitempty"` + + FileFormat string `json:"fileFormat,omitempty"` + + FormattedUrl string `json:"formattedUrl,omitempty"` + + HtmlFormattedUrl string `json:"htmlFormattedUrl,omitempty"` + + HtmlSnippet string `json:"htmlSnippet,omitempty"` + + HtmlTitle string `json:"htmlTitle,omitempty"` + + Image *ResultImage `json:"image,omitempty"` + + Kind string `json:"kind,omitempty"` + + Labels []*ResultLabels `json:"labels,omitempty"` + + Link string `json:"link,omitempty"` + + Mime string `json:"mime,omitempty"` + + Pagemap *ResultPagemap `json:"pagemap,omitempty"` + + Snippet string `json:"snippet,omitempty"` + + Title string `json:"title,omitempty"` +} + +type ResultImage struct { + ByteSize int64 `json:"byteSize,omitempty"` + + ContextLink string `json:"contextLink,omitempty"` + + Height int64 `json:"height,omitempty"` + + ThumbnailHeight int64 `json:"thumbnailHeight,omitempty"` + + ThumbnailLink string `json:"thumbnailLink,omitempty"` + + ThumbnailWidth int64 `json:"thumbnailWidth,omitempty"` + + Width int64 `json:"width,omitempty"` +} + +type ResultLabels struct { + DisplayName string `json:"displayName,omitempty"` + + Label_with_op string `json:"label_with_op,omitempty"` + + Name string `json:"name,omitempty"` +} + +type ResultPagemap struct { +} + +type Search struct { + Context *Context `json:"context,omitempty"` + + Items []*Result `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` + + Promotions []*Promotion `json:"promotions,omitempty"` + + Queries *SearchQueries `json:"queries,omitempty"` + + SearchInformation *SearchSearchInformation `json:"searchInformation,omitempty"` + + Spelling *SearchSpelling `json:"spelling,omitempty"` + + Url *SearchUrl `json:"url,omitempty"` +} + +type SearchQueries struct { +} + +type SearchSearchInformation struct { + FormattedSearchTime string `json:"formattedSearchTime,omitempty"` + + FormattedTotalResults string `json:"formattedTotalResults,omitempty"` + + SearchTime float64 `json:"searchTime,omitempty"` + + TotalResults int64 `json:"totalResults,omitempty,string"` +} + +type SearchSpelling struct { + CorrectedQuery string `json:"correctedQuery,omitempty"` + + HtmlCorrectedQuery string `json:"htmlCorrectedQuery,omitempty"` +} + +type SearchUrl struct { + Template string `json:"template,omitempty"` + + Type string `json:"type,omitempty"` +} + +// method id "search.cse.list": + +type CseListCall struct { + s *Service + q string + opt_ map[string]interface{} +} + +// List: Returns metadata about the search performed, metadata about the +// custom search engine used for the search, and the search results. +func (r *CseService) List(q string) *CseListCall { + c := &CseListCall{s: r.s, opt_: make(map[string]interface{})} + c.q = q + return c +} + +// C2coff sets the optional parameter "c2coff": Turns off the +// translation between zh-CN and zh-TW. +func (c *CseListCall) C2coff(c2coff string) *CseListCall { + c.opt_["c2coff"] = c2coff + return c +} + +// Cr sets the optional parameter "cr": Country restrict(s). +func (c *CseListCall) Cr(cr string) *CseListCall { + c.opt_["cr"] = cr + return c +} + +// Cref sets the optional parameter "cref": The URL of a linked custom +// search engine +func (c *CseListCall) Cref(cref string) *CseListCall { + c.opt_["cref"] = cref + return c +} + +// Cx sets the optional parameter "cx": The custom search engine ID to +// scope this search query +func (c *CseListCall) Cx(cx string) *CseListCall { + c.opt_["cx"] = cx + return c +} + +// DateRestrict sets the optional parameter "dateRestrict": Specifies +// all search results are from a time period +func (c *CseListCall) DateRestrict(dateRestrict string) *CseListCall { + c.opt_["dateRestrict"] = dateRestrict + return c +} + +// ExactTerms sets the optional parameter "exactTerms": Identifies a +// phrase that all documents in the search results must contain +func (c *CseListCall) ExactTerms(exactTerms string) *CseListCall { + c.opt_["exactTerms"] = exactTerms + return c +} + +// ExcludeTerms sets the optional parameter "excludeTerms": Identifies a +// word or phrase that should not appear in any documents in the search +// results +func (c *CseListCall) ExcludeTerms(excludeTerms string) *CseListCall { + c.opt_["excludeTerms"] = excludeTerms + return c +} + +// FileType sets the optional parameter "fileType": Returns images of a +// specified type. Some of the allowed values are: bmp, gif, png, jpg, +// svg, pdf, ... +func (c *CseListCall) FileType(fileType string) *CseListCall { + c.opt_["fileType"] = fileType + return c +} + +// Filter sets the optional parameter "filter": Controls turning on or +// off the duplicate content filter. +func (c *CseListCall) Filter(filter string) *CseListCall { + c.opt_["filter"] = filter + return c +} + +// Gl sets the optional parameter "gl": Geolocation of end user. +func (c *CseListCall) Gl(gl string) *CseListCall { + c.opt_["gl"] = gl + return c +} + +// Googlehost sets the optional parameter "googlehost": The local Google +// domain to use to perform the search. +func (c *CseListCall) Googlehost(googlehost string) *CseListCall { + c.opt_["googlehost"] = googlehost + return c +} + +// HighRange sets the optional parameter "highRange": Creates a range in +// form as_nlo value..as_nhi value and attempts to append it to query +func (c *CseListCall) HighRange(highRange string) *CseListCall { + c.opt_["highRange"] = highRange + return c +} + +// Hl sets the optional parameter "hl": Sets the user interface +// language. +func (c *CseListCall) Hl(hl string) *CseListCall { + c.opt_["hl"] = hl + return c +} + +// Hq sets the optional parameter "hq": Appends the extra query terms to +// the query. +func (c *CseListCall) Hq(hq string) *CseListCall { + c.opt_["hq"] = hq + return c +} + +// ImgColorType sets the optional parameter "imgColorType": Returns +// black and white, grayscale, or color images: mono, gray, and color. +func (c *CseListCall) ImgColorType(imgColorType string) *CseListCall { + c.opt_["imgColorType"] = imgColorType + return c +} + +// ImgDominantColor sets the optional parameter "imgDominantColor": +// Returns images of a specific dominant color: yellow, green, teal, +// blue, purple, pink, white, gray, black and brown. +func (c *CseListCall) ImgDominantColor(imgDominantColor string) *CseListCall { + c.opt_["imgDominantColor"] = imgDominantColor + return c +} + +// ImgSize sets the optional parameter "imgSize": Returns images of a +// specified size, where size can be one of: icon, small, medium, large, +// xlarge, xxlarge, and huge. +func (c *CseListCall) ImgSize(imgSize string) *CseListCall { + c.opt_["imgSize"] = imgSize + return c +} + +// ImgType sets the optional parameter "imgType": Returns images of a +// type, which can be one of: clipart, face, lineart, news, and photo. +func (c *CseListCall) ImgType(imgType string) *CseListCall { + c.opt_["imgType"] = imgType + return c +} + +// LinkSite sets the optional parameter "linkSite": Specifies that all +// search results should contain a link to a particular URL +func (c *CseListCall) LinkSite(linkSite string) *CseListCall { + c.opt_["linkSite"] = linkSite + return c +} + +// LowRange sets the optional parameter "lowRange": Creates a range in +// form as_nlo value..as_nhi value and attempts to append it to query +func (c *CseListCall) LowRange(lowRange string) *CseListCall { + c.opt_["lowRange"] = lowRange + return c +} + +// Lr sets the optional parameter "lr": The language restriction for the +// search results +func (c *CseListCall) Lr(lr string) *CseListCall { + c.opt_["lr"] = lr + return c +} + +// Num sets the optional parameter "num": Number of search results to +// return +func (c *CseListCall) Num(num int64) *CseListCall { + c.opt_["num"] = num + return c +} + +// OrTerms sets the optional parameter "orTerms": Provides additional +// search terms to check for in a document, where each document in the +// search results must contain at least one of the additional search +// terms +func (c *CseListCall) OrTerms(orTerms string) *CseListCall { + c.opt_["orTerms"] = orTerms + return c +} + +// RelatedSite sets the optional parameter "relatedSite": Specifies that +// all search results should be pages that are related to the specified +// URL +func (c *CseListCall) RelatedSite(relatedSite string) *CseListCall { + c.opt_["relatedSite"] = relatedSite + return c +} + +// Rights sets the optional parameter "rights": Filters based on +// licensing. Supported values include: cc_publicdomain, cc_attribute, +// cc_sharealike, cc_noncommercial, cc_nonderived and combinations of +// these. +func (c *CseListCall) Rights(rights string) *CseListCall { + c.opt_["rights"] = rights + return c +} + +// Safe sets the optional parameter "safe": Search safety level +func (c *CseListCall) Safe(safe string) *CseListCall { + c.opt_["safe"] = safe + return c +} + +// SearchType sets the optional parameter "searchType": Specifies the +// search type: image. +func (c *CseListCall) SearchType(searchType string) *CseListCall { + c.opt_["searchType"] = searchType + return c +} + +// SiteSearch sets the optional parameter "siteSearch": Specifies all +// search results should be pages from a given site +func (c *CseListCall) SiteSearch(siteSearch string) *CseListCall { + c.opt_["siteSearch"] = siteSearch + return c +} + +// SiteSearchFilter sets the optional parameter "siteSearchFilter": +// Controls whether to include or exclude results from the site named in +// the as_sitesearch parameter +func (c *CseListCall) SiteSearchFilter(siteSearchFilter string) *CseListCall { + c.opt_["siteSearchFilter"] = siteSearchFilter + return c +} + +// Sort sets the optional parameter "sort": The sort expression to apply +// to the results +func (c *CseListCall) Sort(sort string) *CseListCall { + c.opt_["sort"] = sort + return c +} + +// Start sets the optional parameter "start": The index of the first +// result to return +func (c *CseListCall) Start(start int64) *CseListCall { + c.opt_["start"] = start + return c +} + +func (c *CseListCall) Do() (*Search, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("q", fmt.Sprintf("%v", c.q)) + if v, ok := c.opt_["c2coff"]; ok { + params.Set("c2coff", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cr"]; ok { + params.Set("cr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cref"]; ok { + params.Set("cref", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cx"]; ok { + params.Set("cx", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dateRestrict"]; ok { + params.Set("dateRestrict", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["exactTerms"]; ok { + params.Set("exactTerms", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["excludeTerms"]; ok { + params.Set("excludeTerms", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fileType"]; ok { + params.Set("fileType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["gl"]; ok { + params.Set("gl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["googlehost"]; ok { + params.Set("googlehost", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["highRange"]; ok { + params.Set("highRange", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["hq"]; ok { + params.Set("hq", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["imgColorType"]; ok { + params.Set("imgColorType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["imgDominantColor"]; ok { + params.Set("imgDominantColor", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["imgSize"]; ok { + params.Set("imgSize", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["imgType"]; ok { + params.Set("imgType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["linkSite"]; ok { + params.Set("linkSite", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lowRange"]; ok { + params.Set("lowRange", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lr"]; ok { + params.Set("lr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["num"]; ok { + params.Set("num", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orTerms"]; ok { + params.Set("orTerms", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["relatedSite"]; ok { + params.Set("relatedSite", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["rights"]; ok { + params.Set("rights", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["safe"]; ok { + params.Set("safe", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["searchType"]; ok { + params.Set("searchType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["siteSearch"]; ok { + params.Set("siteSearch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["siteSearchFilter"]; ok { + params.Set("siteSearchFilter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start"]; ok { + params.Set("start", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "v1") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Search) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns metadata about the search performed, metadata about the custom search engine used for the search, and the search results.", + // "httpMethod": "GET", + // "id": "search.cse.list", + // "parameterOrder": [ + // "q" + // ], + // "parameters": { + // "c2coff": { + // "description": "Turns off the translation between zh-CN and zh-TW.", + // "location": "query", + // "type": "string" + // }, + // "cr": { + // "description": "Country restrict(s).", + // "location": "query", + // "type": "string" + // }, + // "cref": { + // "description": "The URL of a linked custom search engine", + // "location": "query", + // "type": "string" + // }, + // "cx": { + // "description": "The custom search engine ID to scope this search query", + // "location": "query", + // "type": "string" + // }, + // "dateRestrict": { + // "description": "Specifies all search results are from a time period", + // "location": "query", + // "type": "string" + // }, + // "exactTerms": { + // "description": "Identifies a phrase that all documents in the search results must contain", + // "location": "query", + // "type": "string" + // }, + // "excludeTerms": { + // "description": "Identifies a word or phrase that should not appear in any documents in the search results", + // "location": "query", + // "type": "string" + // }, + // "fileType": { + // "description": "Returns images of a specified type. Some of the allowed values are: bmp, gif, png, jpg, svg, pdf, ...", + // "location": "query", + // "type": "string" + // }, + // "filter": { + // "description": "Controls turning on or off the duplicate content filter.", + // "enum": [ + // "0", + // "1" + // ], + // "enumDescriptions": [ + // "Turns off duplicate content filter.", + // "Turns on duplicate content filter." + // ], + // "location": "query", + // "type": "string" + // }, + // "gl": { + // "description": "Geolocation of end user.", + // "location": "query", + // "type": "string" + // }, + // "googlehost": { + // "description": "The local Google domain to use to perform the search.", + // "location": "query", + // "type": "string" + // }, + // "highRange": { + // "description": "Creates a range in form as_nlo value..as_nhi value and attempts to append it to query", + // "location": "query", + // "type": "string" + // }, + // "hl": { + // "description": "Sets the user interface language.", + // "location": "query", + // "type": "string" + // }, + // "hq": { + // "description": "Appends the extra query terms to the query.", + // "location": "query", + // "type": "string" + // }, + // "imgColorType": { + // "description": "Returns black and white, grayscale, or color images: mono, gray, and color.", + // "enum": [ + // "color", + // "gray", + // "mono" + // ], + // "enumDescriptions": [ + // "color", + // "gray", + // "mono" + // ], + // "location": "query", + // "type": "string" + // }, + // "imgDominantColor": { + // "description": "Returns images of a specific dominant color: yellow, green, teal, blue, purple, pink, white, gray, black and brown.", + // "enum": [ + // "black", + // "blue", + // "brown", + // "gray", + // "green", + // "pink", + // "purple", + // "teal", + // "white", + // "yellow" + // ], + // "enumDescriptions": [ + // "black", + // "blue", + // "brown", + // "gray", + // "green", + // "pink", + // "purple", + // "teal", + // "white", + // "yellow" + // ], + // "location": "query", + // "type": "string" + // }, + // "imgSize": { + // "description": "Returns images of a specified size, where size can be one of: icon, small, medium, large, xlarge, xxlarge, and huge.", + // "enum": [ + // "huge", + // "icon", + // "large", + // "medium", + // "small", + // "xlarge", + // "xxlarge" + // ], + // "enumDescriptions": [ + // "huge", + // "icon", + // "large", + // "medium", + // "small", + // "xlarge", + // "xxlarge" + // ], + // "location": "query", + // "type": "string" + // }, + // "imgType": { + // "description": "Returns images of a type, which can be one of: clipart, face, lineart, news, and photo.", + // "enum": [ + // "clipart", + // "face", + // "lineart", + // "news", + // "photo" + // ], + // "enumDescriptions": [ + // "clipart", + // "face", + // "lineart", + // "news", + // "photo" + // ], + // "location": "query", + // "type": "string" + // }, + // "linkSite": { + // "description": "Specifies that all search results should contain a link to a particular URL", + // "location": "query", + // "type": "string" + // }, + // "lowRange": { + // "description": "Creates a range in form as_nlo value..as_nhi value and attempts to append it to query", + // "location": "query", + // "type": "string" + // }, + // "lr": { + // "description": "The language restriction for the search results", + // "enum": [ + // "lang_ar", + // "lang_bg", + // "lang_ca", + // "lang_cs", + // "lang_da", + // "lang_de", + // "lang_el", + // "lang_en", + // "lang_es", + // "lang_et", + // "lang_fi", + // "lang_fr", + // "lang_hr", + // "lang_hu", + // "lang_id", + // "lang_is", + // "lang_it", + // "lang_iw", + // "lang_ja", + // "lang_ko", + // "lang_lt", + // "lang_lv", + // "lang_nl", + // "lang_no", + // "lang_pl", + // "lang_pt", + // "lang_ro", + // "lang_ru", + // "lang_sk", + // "lang_sl", + // "lang_sr", + // "lang_sv", + // "lang_tr", + // "lang_zh-CN", + // "lang_zh-TW" + // ], + // "enumDescriptions": [ + // "Arabic", + // "Bulgarian", + // "Catalan", + // "Czech", + // "Danish", + // "German", + // "Greek", + // "English", + // "Spanish", + // "Estonian", + // "Finnish", + // "French", + // "Croatian", + // "Hungarian", + // "Indonesian", + // "Icelandic", + // "Italian", + // "Hebrew", + // "Japanese", + // "Korean", + // "Lithuanian", + // "Latvian", + // "Dutch", + // "Norwegian", + // "Polish", + // "Portuguese", + // "Romanian", + // "Russian", + // "Slovak", + // "Slovenian", + // "Serbian", + // "Swedish", + // "Turkish", + // "Chinese (Simplified)", + // "Chinese (Traditional)" + // ], + // "location": "query", + // "type": "string" + // }, + // "num": { + // "default": "10", + // "description": "Number of search results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orTerms": { + // "description": "Provides additional search terms to check for in a document, where each document in the search results must contain at least one of the additional search terms", + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "relatedSite": { + // "description": "Specifies that all search results should be pages that are related to the specified URL", + // "location": "query", + // "type": "string" + // }, + // "rights": { + // "description": "Filters based on licensing. Supported values include: cc_publicdomain, cc_attribute, cc_sharealike, cc_noncommercial, cc_nonderived and combinations of these.", + // "location": "query", + // "type": "string" + // }, + // "safe": { + // "default": "off", + // "description": "Search safety level", + // "enum": [ + // "high", + // "medium", + // "off" + // ], + // "enumDescriptions": [ + // "Enables highest level of safe search filtering.", + // "Enables moderate safe search filtering.", + // "Disables safe search filtering." + // ], + // "location": "query", + // "type": "string" + // }, + // "searchType": { + // "description": "Specifies the search type: image.", + // "enum": [ + // "image" + // ], + // "enumDescriptions": [ + // "custom image search" + // ], + // "location": "query", + // "type": "string" + // }, + // "siteSearch": { + // "description": "Specifies all search results should be pages from a given site", + // "location": "query", + // "type": "string" + // }, + // "siteSearchFilter": { + // "description": "Controls whether to include or exclude results from the site named in the as_sitesearch parameter", + // "enum": [ + // "e", + // "i" + // ], + // "enumDescriptions": [ + // "exclude", + // "include" + // ], + // "location": "query", + // "type": "string" + // }, + // "sort": { + // "description": "The sort expression to apply to the results", + // "location": "query", + // "type": "string" + // }, + // "start": { + // "description": "The index of the first result to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "v1", + // "response": { + // "$ref": "Search" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-api.json b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-api.json new file mode 100644 index 0000000000000..4f7c64db390bd --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-api.json @@ -0,0 +1,991 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/YrLZoq09n__afr7YsPCxL5HrUUs\"", + "discoveryVersion": "v1", + "id": "datastore:v1beta1", + "name": "datastore", + "version": "v1beta1", + "title": "Google Cloud Datastore API", + "description": "API for accessing Google Cloud Datastore.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/datastore/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/datastore/v1beta1/datasets/", + "basePath": "/datastore/v1beta1/datasets/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "datastore/v1beta1/datasets/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "proto", + "enum": [ + "json", + "proto" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/datastore": { + "description": "View and manage your Google Cloud Datastore data" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + } + } + } + }, + "schemas": { + "AllocateIdsRequest": { + "id": "AllocateIdsRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.AllocateIdsRequest", + "properties": { + "keys": { + "type": "array", + "description": "A list of keys with incomplete key paths to allocate IDs for. No key may be reserved/read-only.", + "items": { + "$ref": "Key" + } + } + } + }, + "AllocateIdsResponse": { + "id": "AllocateIdsResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.AllocateIdsResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "keys": { + "type": "array", + "description": "The keys specified in the request (in the same order), each with its key path completed with a newly allocated ID.", + "items": { + "$ref": "Key" + } + } + } + }, + "BeginTransactionRequest": { + "id": "BeginTransactionRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BeginTransactionRequest", + "properties": { + "isolationLevel": { + "type": "string", + "description": "The transaction isolation level. Either snapshot or serializable. The default isolation level is snapshot isolation, which means that another transaction may not concurrently modify the data that is modified by this transaction. Optionally, a transaction can request to be made serializable which means that another transaction cannot concurrently modify the data that is read or modified by this transaction." + } + } + }, + "BeginTransactionResponse": { + "id": "BeginTransactionResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BeginTransactionResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "transaction": { + "type": "string", + "description": "The transaction identifier (always present).", + "format": "byte" + } + } + }, + "BlindWriteRequest": { + "id": "BlindWriteRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BlindWriteRequest", + "properties": { + "mutation": { + "$ref": "Mutation", + "description": "The mutation to perform." + } + } + }, + "BlindWriteResponse": { + "id": "BlindWriteResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BlindWriteResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "mutationResult": { + "$ref": "MutationResult", + "description": "The result of performing the mutation (always present)." + } + } + }, + "CommitRequest": { + "id": "CommitRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CommitRequest", + "properties": { + "mutation": { + "$ref": "Mutation", + "description": "The mutation to perform. Optional." + }, + "transaction": { + "type": "string", + "description": "The transaction identifier, returned by a call to beginTransaction. Must be set when mode is TRANSACTIONAL.", + "format": "byte" + } + } + }, + "CommitResponse": { + "id": "CommitResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CommitResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "mutationResult": { + "$ref": "MutationResult", + "description": "The result of performing the mutation (if any)." + } + } + }, + "CompositeFilter": { + "id": "CompositeFilter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CompositeFilter", + "properties": { + "filters": { + "type": "array", + "description": "The list of filters to combine. Must contain at least one filter.", + "items": { + "$ref": "Filter" + } + }, + "operator": { + "type": "string", + "description": "The operator for combining multiple filters. Only \"and\" is currently supported." + } + } + }, + "Entity": { + "id": "Entity", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Entity", + "properties": { + "key": { + "$ref": "Key", + "description": "The entity's key.\n\nAn entity must have a key, unless otherwise documented (for example, an entity in Value.entityValue may have no key). An entity's kind is its key's path's last element's kind, or null if it has no key." + }, + "properties": { + "type": "object", + "description": "The entity's properties.", + "additionalProperties": { + "$ref": "Property", + "description": "The name of the property. Properties with names matching regex \"__.*__\" are reserved. A reserved property name is forbidden in certain documented contexts. The name cannot be \"\"." + } + } + } + }, + "EntityResult": { + "id": "EntityResult", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.EntityResult", + "properties": { + "entity": { + "$ref": "Entity", + "description": "The resulting entity." + } + } + }, + "Filter": { + "id": "Filter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Filter", + "properties": { + "compositeFilter": { + "$ref": "CompositeFilter", + "description": "A composite filter." + }, + "propertyFilter": { + "$ref": "PropertyFilter", + "description": "A filter on a property." + } + } + }, + "GqlQuery": { + "id": "GqlQuery", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.GqlQuery", + "properties": { + "allowLiteral": { + "type": "boolean", + "description": "When false, the query string must not contain a literal." + }, + "nameArgs": { + "type": "array", + "description": "A named argument must set field GqlQueryArg.name. No two named arguments may have the same name. For each non-reserved named binding site in the query string, there must be a named argument with that name, but not necessarily the inverse.", + "items": { + "$ref": "GqlQueryArg" + } + }, + "numberArgs": { + "type": "array", + "description": "Numbered binding site @1 references the first numbered argument, effectively using 1-based indexing, rather than the usual 0. A numbered argument must NOT set field GqlQueryArg.name. For each binding site numbered i in query_string, there must be an ith numbered argument. The inverse must also be true.", + "items": { + "$ref": "GqlQueryArg" + } + }, + "queryString": { + "type": "string" + } + } + }, + "GqlQueryArg": { + "id": "GqlQueryArg", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.GqlQueryArg", + "properties": { + "cursor": { + "type": "string", + "format": "byte" + }, + "name": { + "type": "string", + "description": "Must match regex \"[A-Za-z_$][A-Za-z_$0-9]*\". Must not match regex \"__.*__\". Must not be \"\"." + }, + "value": { + "$ref": "Value" + } + } + }, + "Key": { + "id": "Key", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Key", + "properties": { + "partitionId": { + "$ref": "PartitionId", + "description": "Entities are partitioned into subsets, currently identified by a dataset (usually implicitly specified by the project) and namespace ID. Queries are scoped to a single partition." + }, + "path": { + "type": "array", + "description": "The entity path. An entity path consists of one or more elements composed of a kind and a string or numerical identifier, which identify entities. The first element identifies a root entity, the second element identifies a child of the root entity, the third element a child of the second entity, and so forth. The entities identified by all prefixes of the path are called the element's ancestors. An entity path is always fully complete: ALL of the entity's ancestors are required to be in the path along with the entity identifier itself. The only exception is that in some documented cases, the identifier in the last path element (for the entity) itself may be omitted. A path can never be empty.", + "items": { + "$ref": "KeyPathElement" + } + } + } + }, + "KeyPathElement": { + "id": "KeyPathElement", + "type": "object", + "description": "A (kind, ID/name) pair used to construct a key path.\n\nAt most one of name or ID may be set. If either is set, the element is complete. If neither is set, the element is incomplete.", + "externalTypeName": "apphosting.client.datastoreservice.proto.Key.PathElement", + "properties": { + "id": { + "type": "string", + "description": "The ID of the entity. Always \u003e 0.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of the entity. Kinds matching regex \"__.*__\" are reserved/read-only. Cannot be \"\"." + }, + "name": { + "type": "string", + "description": "The name of the entity. Names matching regex \"__.*__\" are reserved/read-only. Cannot be \"\"." + } + } + }, + "KindExpression": { + "id": "KindExpression", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.KindExpression", + "properties": { + "name": { + "type": "string", + "description": "The name of the kind." + } + } + }, + "LookupRequest": { + "id": "LookupRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.LookupRequest", + "properties": { + "keys": { + "type": "array", + "description": "Keys of entities to look up from the datastore.", + "items": { + "$ref": "Key" + } + }, + "readOptions": { + "$ref": "ReadOptions", + "description": "Options for this lookup request. Optional." + } + } + }, + "LookupResponse": { + "id": "LookupResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.LookupResponse", + "properties": { + "deferred": { + "type": "array", + "description": "A list of keys that were not looked up due to resource constraints.", + "items": { + "$ref": "Key" + } + }, + "found": { + "type": "array", + "description": "Entities found.", + "items": { + "$ref": "EntityResult" + } + }, + "header": { + "$ref": "ResponseHeader" + }, + "missing": { + "type": "array", + "description": "Entities not found, with only the key populated.", + "items": { + "$ref": "EntityResult" + } + } + } + }, + "Mutation": { + "id": "Mutation", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Mutation", + "properties": { + "delete": { + "type": "array", + "description": "Keys of entities to delete. Each key must have a complete key path and must not be reserved/read-only.", + "items": { + "$ref": "Key" + } + }, + "force": { + "type": "boolean", + "description": "Ignore a user specified read-only period. Optional." + }, + "insert": { + "type": "array", + "description": "Entities to insert. Each inserted entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "insertAutoId": { + "type": "array", + "description": "Insert entities with a newly allocated ID. Each inserted entity's key must omit the final identifier in its path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "update": { + "type": "array", + "description": "Entities to update. Each updated entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "upsert": { + "type": "array", + "description": "Entities to upsert. Each upserted entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + } + } + }, + "MutationResult": { + "id": "MutationResult", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.MutationResult", + "properties": { + "indexUpdates": { + "type": "integer", + "description": "Number of index writes.", + "format": "int32" + }, + "insertAutoIdKeys": { + "type": "array", + "description": "Keys for insertAutoId entities. One per entity from the request, in the same order.", + "items": { + "$ref": "Key" + } + } + } + }, + "PartitionId": { + "id": "PartitionId", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PartitionId", + "properties": { + "datasetId": { + "type": "string", + "description": "The dataset ID." + }, + "namespace": { + "type": "string", + "description": "The namespace." + } + } + }, + "Property": { + "id": "Property", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Property", + "properties": { + "multi": { + "type": "boolean", + "description": "If this property contains a list of values. Input values may explicitly set multi to false, but otherwise false is always represented by omitting multi." + }, + "values": { + "type": "array", + "description": "The value(s) of the property. When multi is false there is always exactly one value. When multi is true there are always one or more values. Each value can have only one value property populated. For example, you cannot have a values list of { values: [ { integerValue: 22, stringValue: \"a\" } ] }, but you can have { multi: true, values: [ { integerValue: 22 }, { stringValue: \"a\" } ] }.", + "items": { + "$ref": "Value" + } + } + } + }, + "PropertyExpression": { + "id": "PropertyExpression", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyExpression", + "properties": { + "aggregationFunction": { + "type": "string", + "description": "The aggregation function to apply to the property. Optional. Can only be used when grouping by at least one property. Must then be set on all properties in the projection that are not being grouped by. Aggregation functions: first selects the first result as determined by the query's order." + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to project." + } + } + }, + "PropertyFilter": { + "id": "PropertyFilter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyFilter", + "properties": { + "operator": { + "type": "string", + "description": "The operator to filter by. One of lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, equal, or hasAncestor." + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to filter by." + }, + "value": { + "$ref": "Value", + "description": "The value to compare the property to." + } + } + }, + "PropertyOrder": { + "id": "PropertyOrder", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyOrder", + "properties": { + "direction": { + "type": "string", + "description": "The direction to order by. One of ascending or descending. Optional, defaults to ascending." + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to order by." + } + } + }, + "PropertyReference": { + "id": "PropertyReference", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyReference", + "properties": { + "name": { + "type": "string", + "description": "The name of the property." + } + } + }, + "Query": { + "id": "Query", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Query", + "properties": { + "endCursor": { + "type": "string", + "description": "An ending point for the query results. Optional. Query cursors are returned in query result batches.", + "format": "byte" + }, + "filter": { + "$ref": "Filter", + "description": "The filter to apply (optional)." + }, + "groupBy": { + "type": "array", + "description": "The properties to group by (if empty, no grouping is applied to the result set).", + "items": { + "$ref": "PropertyReference" + } + }, + "kinds": { + "type": "array", + "description": "The kinds to query (if empty, returns entities from all kinds).", + "items": { + "$ref": "KindExpression" + } + }, + "limit": { + "type": "integer", + "description": "The maximum number of results to return. Applies after all other constraints. Optional.", + "format": "int32" + }, + "offset": { + "type": "integer", + "description": "The number of results to skip. Applies before limit, but after all other constraints (optional, defaults to 0).", + "format": "int32" + }, + "order": { + "type": "array", + "description": "The order to apply to the query results (if empty, order is unspecified).", + "items": { + "$ref": "PropertyOrder" + } + }, + "projection": { + "type": "array", + "description": "The projection to return. If not set the entire entity is returned.", + "items": { + "$ref": "PropertyExpression" + } + }, + "startCursor": { + "type": "string", + "description": "A starting point for the query results. Optional. Query cursors are returned in query result batches.", + "format": "byte" + } + } + }, + "QueryResultBatch": { + "id": "QueryResultBatch", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.QueryResultBatch", + "properties": { + "endCursor": { + "type": "string", + "description": "A cursor that points to the position after the last result in the batch. May be absent.", + "format": "byte" + }, + "entityResultType": { + "type": "string", + "description": "The result type for every entity in entityResults. full for full entities, projection for entities with only projected properties, keyOnly for entities with only a key." + }, + "entityResults": { + "type": "array", + "description": "The results for this batch.", + "items": { + "$ref": "EntityResult" + } + }, + "moreResults": { + "type": "string", + "description": "The state of the query after the current batch. One of notFinished, moreResultsAfterLimit, noMoreResults." + }, + "skippedResults": { + "type": "integer", + "description": "The number of results skipped because of Query.offset.", + "format": "int32" + } + } + }, + "ReadOptions": { + "id": "ReadOptions", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.ReadOptions", + "properties": { + "readConsistency": { + "type": "string", + "description": "The read consistency to use. One of default, strong, or eventual. Cannot be set when transaction is set. Lookup and ancestor queries default to strong, global queries default to eventual and cannot be set to strong. Optional. Default is default." + }, + "transaction": { + "type": "string", + "description": "The transaction to use. Optional.", + "format": "byte" + } + } + }, + "ResponseHeader": { + "id": "ResponseHeader", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.ResponseHeader", + "properties": { + "kind": { + "type": "string", + "description": "The kind, fixed to \"datastore#responseHeader\".", + "default": "datastore#responseHeader" + } + } + }, + "RollbackRequest": { + "id": "RollbackRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RollbackRequest", + "properties": { + "transaction": { + "type": "string", + "description": "The transaction identifier, returned by a call to beginTransaction.", + "format": "byte" + } + } + }, + "RollbackResponse": { + "id": "RollbackResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RollbackResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + } + } + }, + "RunQueryRequest": { + "id": "RunQueryRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RunQueryRequest", + "properties": { + "gqlQuery": { + "$ref": "GqlQuery", + "description": "The GQL query to run. Either this field or field query must be set, but not both." + }, + "partitionId": { + "$ref": "PartitionId", + "description": "Entities are partitioned into subsets, identified by a dataset (usually implicitly specified by the project) and namespace ID. Queries are scoped to a single partition." + }, + "query": { + "$ref": "Query", + "description": "The query to run. Either this field or field gql_query must be set, but not both." + }, + "readOptions": { + "$ref": "ReadOptions", + "description": "The options for this query." + } + } + }, + "RunQueryResponse": { + "id": "RunQueryResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RunQueryResponse", + "properties": { + "batch": { + "$ref": "QueryResultBatch", + "description": "A batch of query results (always present)." + }, + "header": { + "$ref": "ResponseHeader" + } + } + }, + "Value": { + "id": "Value", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Value", + "properties": { + "blobKeyValue": { + "type": "string", + "description": "A blob key value." + }, + "blobValue": { + "type": "string", + "description": "A blob value.", + "format": "byte" + }, + "booleanValue": { + "type": "boolean", + "description": "A boolean value." + }, + "dateTimeValue": { + "type": "string", + "description": "A timestamp value.", + "format": "date-time" + }, + "doubleValue": { + "type": "number", + "description": "A double value.", + "format": "double" + }, + "entityValue": { + "$ref": "Entity", + "description": "An entity value. May have no key. May have a key with an incomplete key path. May have a reserved/read-only key." + }, + "indexed": { + "type": "boolean", + "description": "If the value should be indexed.\n\nThe indexed property may be set for a null value. When indexed is true, stringValue is limited to 500 characters and the blob value is limited to 500 bytes. Input values by default have indexed set to true; however, you can explicitly set indexed to true if you want. (An output value never has indexed explicitly set to true.) If a value is itself an entity, it cannot have indexed set to true." + }, + "integerValue": { + "type": "string", + "description": "An integer value.", + "format": "int64" + }, + "keyValue": { + "$ref": "Key", + "description": "A key value." + }, + "meaning": { + "type": "integer", + "description": "The meaning field is reserved and should not be used.", + "format": "int32" + }, + "stringValue": { + "type": "string", + "description": "A UTF-8 encoded string value." + } + } + } + }, + "resources": { + "datasets": { + "methods": { + "allocateIds": { + "id": "datastore.datasets.allocateIds", + "path": "{datasetId}/allocateIds", + "httpMethod": "POST", + "description": "Allocate IDs for incomplete keys (useful for referencing an entity before it is inserted).", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "AllocateIdsRequest" + }, + "response": { + "$ref": "AllocateIdsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "beginTransaction": { + "id": "datastore.datasets.beginTransaction", + "path": "{datasetId}/beginTransaction", + "httpMethod": "POST", + "description": "Begin a new transaction.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "BeginTransactionRequest" + }, + "response": { + "$ref": "BeginTransactionResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "blindWrite": { + "id": "datastore.datasets.blindWrite", + "path": "{datasetId}/blindWrite", + "httpMethod": "POST", + "description": "Create, delete or modify some entities outside a transaction.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "BlindWriteRequest" + }, + "response": { + "$ref": "BlindWriteResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "commit": { + "id": "datastore.datasets.commit", + "path": "{datasetId}/commit", + "httpMethod": "POST", + "description": "Commit a transaction, optionally creating, deleting or modifying some entities.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "CommitRequest" + }, + "response": { + "$ref": "CommitResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "lookup": { + "id": "datastore.datasets.lookup", + "path": "{datasetId}/lookup", + "httpMethod": "POST", + "description": "Look up some entities by key.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "LookupRequest" + }, + "response": { + "$ref": "LookupResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "rollback": { + "id": "datastore.datasets.rollback", + "path": "{datasetId}/rollback", + "httpMethod": "POST", + "description": "Roll back a transaction.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "RollbackRequest" + }, + "response": { + "$ref": "RollbackResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "runQuery": { + "id": "datastore.datasets.runQuery", + "path": "{datasetId}/runQuery", + "httpMethod": "POST", + "description": "Query for entities.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "RunQueryRequest" + }, + "response": { + "$ref": "RunQueryResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-gen.go b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-gen.go new file mode 100644 index 0000000000000..3aee8cea53c0b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta1/datastore-gen.go @@ -0,0 +1,1051 @@ +// Package datastore provides access to the Google Cloud Datastore API. +// +// See https://developers.google.com/datastore/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/datastore/v1beta1" +// ... +// datastoreService, err := datastore.New(oauthHttpClient) +package datastore + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "datastore:v1beta1" +const apiName = "datastore" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/datastore/v1beta1/datasets/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Cloud Datastore data + DatastoreScope = "https://www.googleapis.com/auth/datastore" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Datasets = NewDatasetsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Datasets *DatasetsService +} + +func NewDatasetsService(s *Service) *DatasetsService { + rs := &DatasetsService{s: s} + return rs +} + +type DatasetsService struct { + s *Service +} + +type AllocateIdsRequest struct { + // Keys: A list of keys with incomplete key paths to allocate IDs for. + // No key may be reserved/read-only. + Keys []*Key `json:"keys,omitempty"` +} + +type AllocateIdsResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // Keys: The keys specified in the request (in the same order), each + // with its key path completed with a newly allocated ID. + Keys []*Key `json:"keys,omitempty"` +} + +type BeginTransactionRequest struct { + // IsolationLevel: The transaction isolation level. Either snapshot or + // serializable. The default isolation level is snapshot isolation, + // which means that another transaction may not concurrently modify the + // data that is modified by this transaction. Optionally, a transaction + // can request to be made serializable which means that another + // transaction cannot concurrently modify the data that is read or + // modified by this transaction. + IsolationLevel string `json:"isolationLevel,omitempty"` +} + +type BeginTransactionResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // Transaction: The transaction identifier (always present). + Transaction string `json:"transaction,omitempty"` +} + +type BlindWriteRequest struct { + // Mutation: The mutation to perform. + Mutation *Mutation `json:"mutation,omitempty"` +} + +type BlindWriteResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // MutationResult: The result of performing the mutation (always + // present). + MutationResult *MutationResult `json:"mutationResult,omitempty"` +} + +type CommitRequest struct { + // Mutation: The mutation to perform. Optional. + Mutation *Mutation `json:"mutation,omitempty"` + + // Transaction: The transaction identifier, returned by a call to + // beginTransaction. Must be set when mode is TRANSACTIONAL. + Transaction string `json:"transaction,omitempty"` +} + +type CommitResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // MutationResult: The result of performing the mutation (if any). + MutationResult *MutationResult `json:"mutationResult,omitempty"` +} + +type CompositeFilter struct { + // Filters: The list of filters to combine. Must contain at least one + // filter. + Filters []*Filter `json:"filters,omitempty"` + + // Operator: The operator for combining multiple filters. Only "and" is + // currently supported. + Operator string `json:"operator,omitempty"` +} + +type Entity struct { + // Key: The entity's key. + // + // An entity must have a key, unless otherwise + // documented (for example, an entity in Value.entityValue may have no + // key). An entity's kind is its key's path's last element's kind, or + // null if it has no key. + Key *Key `json:"key,omitempty"` + + // Properties: The entity's properties. + Properties *EntityProperties `json:"properties,omitempty"` +} + +type EntityProperties struct { +} + +type EntityResult struct { + // Entity: The resulting entity. + Entity *Entity `json:"entity,omitempty"` +} + +type Filter struct { + // CompositeFilter: A composite filter. + CompositeFilter *CompositeFilter `json:"compositeFilter,omitempty"` + + // PropertyFilter: A filter on a property. + PropertyFilter *PropertyFilter `json:"propertyFilter,omitempty"` +} + +type GqlQuery struct { + // AllowLiteral: When false, the query string must not contain a + // literal. + AllowLiteral bool `json:"allowLiteral,omitempty"` + + // NameArgs: A named argument must set field GqlQueryArg.name. No two + // named arguments may have the same name. For each non-reserved named + // binding site in the query string, there must be a named argument with + // that name, but not necessarily the inverse. + NameArgs []*GqlQueryArg `json:"nameArgs,omitempty"` + + // NumberArgs: Numbered binding site @1 references the first numbered + // argument, effectively using 1-based indexing, rather than the usual + // 0. A numbered argument must NOT set field GqlQueryArg.name. For each + // binding site numbered i in query_string, there must be an ith + // numbered argument. The inverse must also be true. + NumberArgs []*GqlQueryArg `json:"numberArgs,omitempty"` + + QueryString string `json:"queryString,omitempty"` +} + +type GqlQueryArg struct { + Cursor string `json:"cursor,omitempty"` + + // Name: Must match regex "[A-Za-z_$][A-Za-z_$0-9]*". Must not match + // regex "__.*__". Must not be "". + Name string `json:"name,omitempty"` + + Value *Value `json:"value,omitempty"` +} + +type Key struct { + // PartitionId: Entities are partitioned into subsets, currently + // identified by a dataset (usually implicitly specified by the project) + // and namespace ID. Queries are scoped to a single partition. + PartitionId *PartitionId `json:"partitionId,omitempty"` + + // Path: The entity path. An entity path consists of one or more + // elements composed of a kind and a string or numerical identifier, + // which identify entities. The first element identifies a root entity, + // the second element identifies a child of the root entity, the third + // element a child of the second entity, and so forth. The entities + // identified by all prefixes of the path are called the element's + // ancestors. An entity path is always fully complete: ALL of the + // entity's ancestors are required to be in the path along with the + // entity identifier itself. The only exception is that in some + // documented cases, the identifier in the last path element (for the + // entity) itself may be omitted. A path can never be empty. + Path []*KeyPathElement `json:"path,omitempty"` +} + +type KeyPathElement struct { + // Id: The ID of the entity. Always > 0. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of the entity. Kinds matching regex "__.*__" are + // reserved/read-only. Cannot be "". + Kind string `json:"kind,omitempty"` + + // Name: The name of the entity. Names matching regex "__.*__" are + // reserved/read-only. Cannot be "". + Name string `json:"name,omitempty"` +} + +type KindExpression struct { + // Name: The name of the kind. + Name string `json:"name,omitempty"` +} + +type LookupRequest struct { + // Keys: Keys of entities to look up from the datastore. + Keys []*Key `json:"keys,omitempty"` + + // ReadOptions: Options for this lookup request. Optional. + ReadOptions *ReadOptions `json:"readOptions,omitempty"` +} + +type LookupResponse struct { + // Deferred: A list of keys that were not looked up due to resource + // constraints. + Deferred []*Key `json:"deferred,omitempty"` + + // Found: Entities found. + Found []*EntityResult `json:"found,omitempty"` + + Header *ResponseHeader `json:"header,omitempty"` + + // Missing: Entities not found, with only the key populated. + Missing []*EntityResult `json:"missing,omitempty"` +} + +type Mutation struct { + // Delete: Keys of entities to delete. Each key must have a complete key + // path and must not be reserved/read-only. + Delete []*Key `json:"delete,omitempty"` + + // Force: Ignore a user specified read-only period. Optional. + Force bool `json:"force,omitempty"` + + // Insert: Entities to insert. Each inserted entity's key must have a + // complete path and must not be reserved/read-only. + Insert []*Entity `json:"insert,omitempty"` + + // InsertAutoId: Insert entities with a newly allocated ID. Each + // inserted entity's key must omit the final identifier in its path and + // must not be reserved/read-only. + InsertAutoId []*Entity `json:"insertAutoId,omitempty"` + + // Update: Entities to update. Each updated entity's key must have a + // complete path and must not be reserved/read-only. + Update []*Entity `json:"update,omitempty"` + + // Upsert: Entities to upsert. Each upserted entity's key must have a + // complete path and must not be reserved/read-only. + Upsert []*Entity `json:"upsert,omitempty"` +} + +type MutationResult struct { + // IndexUpdates: Number of index writes. + IndexUpdates int64 `json:"indexUpdates,omitempty"` + + // InsertAutoIdKeys: Keys for insertAutoId entities. One per entity from + // the request, in the same order. + InsertAutoIdKeys []*Key `json:"insertAutoIdKeys,omitempty"` +} + +type PartitionId struct { + // DatasetId: The dataset ID. + DatasetId string `json:"datasetId,omitempty"` + + // Namespace: The namespace. + Namespace string `json:"namespace,omitempty"` +} + +type Property struct { + // Multi: If this property contains a list of values. Input values may + // explicitly set multi to false, but otherwise false is always + // represented by omitting multi. + Multi bool `json:"multi,omitempty"` + + // Values: The value(s) of the property. When multi is false there is + // always exactly one value. When multi is true there are always one or + // more values. Each value can have only one value property populated. + // For example, you cannot have a values list of { values: [ { + // integerValue: 22, stringValue: "a" } ] }, but you can have { multi: + // true, values: [ { integerValue: 22 }, { stringValue: "a" } ] }. + Values []*Value `json:"values,omitempty"` +} + +type PropertyExpression struct { + // AggregationFunction: The aggregation function to apply to the + // property. Optional. Can only be used when grouping by at least one + // property. Must then be set on all properties in the projection that + // are not being grouped by. Aggregation functions: first selects the + // first result as determined by the query's order. + AggregationFunction string `json:"aggregationFunction,omitempty"` + + // Property: The property to project. + Property *PropertyReference `json:"property,omitempty"` +} + +type PropertyFilter struct { + // Operator: The operator to filter by. One of lessThan, + // lessThanOrEqual, greaterThan, greaterThanOrEqual, equal, or + // hasAncestor. + Operator string `json:"operator,omitempty"` + + // Property: The property to filter by. + Property *PropertyReference `json:"property,omitempty"` + + // Value: The value to compare the property to. + Value *Value `json:"value,omitempty"` +} + +type PropertyOrder struct { + // Direction: The direction to order by. One of ascending or descending. + // Optional, defaults to ascending. + Direction string `json:"direction,omitempty"` + + // Property: The property to order by. + Property *PropertyReference `json:"property,omitempty"` +} + +type PropertyReference struct { + // Name: The name of the property. + Name string `json:"name,omitempty"` +} + +type Query struct { + // EndCursor: An ending point for the query results. Optional. Query + // cursors are returned in query result batches. + EndCursor string `json:"endCursor,omitempty"` + + // Filter: The filter to apply (optional). + Filter *Filter `json:"filter,omitempty"` + + // GroupBy: The properties to group by (if empty, no grouping is applied + // to the result set). + GroupBy []*PropertyReference `json:"groupBy,omitempty"` + + // Kinds: The kinds to query (if empty, returns entities from all + // kinds). + Kinds []*KindExpression `json:"kinds,omitempty"` + + // Limit: The maximum number of results to return. Applies after all + // other constraints. Optional. + Limit int64 `json:"limit,omitempty"` + + // Offset: The number of results to skip. Applies before limit, but + // after all other constraints (optional, defaults to 0). + Offset int64 `json:"offset,omitempty"` + + // Order: The order to apply to the query results (if empty, order is + // unspecified). + Order []*PropertyOrder `json:"order,omitempty"` + + // Projection: The projection to return. If not set the entire entity is + // returned. + Projection []*PropertyExpression `json:"projection,omitempty"` + + // StartCursor: A starting point for the query results. Optional. Query + // cursors are returned in query result batches. + StartCursor string `json:"startCursor,omitempty"` +} + +type QueryResultBatch struct { + // EndCursor: A cursor that points to the position after the last result + // in the batch. May be absent. + EndCursor string `json:"endCursor,omitempty"` + + // EntityResultType: The result type for every entity in entityResults. + // full for full entities, projection for entities with only projected + // properties, keyOnly for entities with only a key. + EntityResultType string `json:"entityResultType,omitempty"` + + // EntityResults: The results for this batch. + EntityResults []*EntityResult `json:"entityResults,omitempty"` + + // MoreResults: The state of the query after the current batch. One of + // notFinished, moreResultsAfterLimit, noMoreResults. + MoreResults string `json:"moreResults,omitempty"` + + // SkippedResults: The number of results skipped because of + // Query.offset. + SkippedResults int64 `json:"skippedResults,omitempty"` +} + +type ReadOptions struct { + // ReadConsistency: The read consistency to use. One of default, strong, + // or eventual. Cannot be set when transaction is set. Lookup and + // ancestor queries default to strong, global queries default to + // eventual and cannot be set to strong. Optional. Default is default. + ReadConsistency string `json:"readConsistency,omitempty"` + + // Transaction: The transaction to use. Optional. + Transaction string `json:"transaction,omitempty"` +} + +type ResponseHeader struct { + // Kind: The kind, fixed to "datastore#responseHeader". + Kind string `json:"kind,omitempty"` +} + +type RollbackRequest struct { + // Transaction: The transaction identifier, returned by a call to + // beginTransaction. + Transaction string `json:"transaction,omitempty"` +} + +type RollbackResponse struct { + Header *ResponseHeader `json:"header,omitempty"` +} + +type RunQueryRequest struct { + // GqlQuery: The GQL query to run. Either this field or field query must + // be set, but not both. + GqlQuery *GqlQuery `json:"gqlQuery,omitempty"` + + // PartitionId: Entities are partitioned into subsets, identified by a + // dataset (usually implicitly specified by the project) and namespace + // ID. Queries are scoped to a single partition. + PartitionId *PartitionId `json:"partitionId,omitempty"` + + // Query: The query to run. Either this field or field gql_query must be + // set, but not both. + Query *Query `json:"query,omitempty"` + + // ReadOptions: The options for this query. + ReadOptions *ReadOptions `json:"readOptions,omitempty"` +} + +type RunQueryResponse struct { + // Batch: A batch of query results (always present). + Batch *QueryResultBatch `json:"batch,omitempty"` + + Header *ResponseHeader `json:"header,omitempty"` +} + +type Value struct { + // BlobKeyValue: A blob key value. + BlobKeyValue string `json:"blobKeyValue,omitempty"` + + // BlobValue: A blob value. + BlobValue string `json:"blobValue,omitempty"` + + // BooleanValue: A boolean value. + BooleanValue bool `json:"booleanValue,omitempty"` + + // DateTimeValue: A timestamp value. + DateTimeValue string `json:"dateTimeValue,omitempty"` + + // DoubleValue: A double value. + DoubleValue float64 `json:"doubleValue,omitempty"` + + // EntityValue: An entity value. May have no key. May have a key with an + // incomplete key path. May have a reserved/read-only key. + EntityValue *Entity `json:"entityValue,omitempty"` + + // Indexed: If the value should be indexed. + // + // The indexed property may be + // set for a null value. When indexed is true, stringValue is limited to + // 500 characters and the blob value is limited to 500 bytes. Input + // values by default have indexed set to true; however, you can + // explicitly set indexed to true if you want. (An output value never + // has indexed explicitly set to true.) If a value is itself an entity, + // it cannot have indexed set to true. + Indexed bool `json:"indexed,omitempty"` + + // IntegerValue: An integer value. + IntegerValue int64 `json:"integerValue,omitempty,string"` + + // KeyValue: A key value. + KeyValue *Key `json:"keyValue,omitempty"` + + // Meaning: The meaning field is reserved and should not be used. + Meaning int64 `json:"meaning,omitempty"` + + // StringValue: A UTF-8 encoded string value. + StringValue string `json:"stringValue,omitempty"` +} + +// method id "datastore.datasets.allocateIds": + +type DatasetsAllocateIdsCall struct { + s *Service + datasetId string + allocateidsrequest *AllocateIdsRequest + opt_ map[string]interface{} +} + +// AllocateIds: Allocate IDs for incomplete keys (useful for referencing +// an entity before it is inserted). +func (r *DatasetsService) AllocateIds(datasetId string, allocateidsrequest *AllocateIdsRequest) *DatasetsAllocateIdsCall { + c := &DatasetsAllocateIdsCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.allocateidsrequest = allocateidsrequest + return c +} + +func (c *DatasetsAllocateIdsCall) Do() (*AllocateIdsResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/allocateIds") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AllocateIdsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Allocate IDs for incomplete keys (useful for referencing an entity before it is inserted).", + // "httpMethod": "POST", + // "id": "datastore.datasets.allocateIds", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/allocateIds", + // "request": { + // "$ref": "AllocateIdsRequest" + // }, + // "response": { + // "$ref": "AllocateIdsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.beginTransaction": + +type DatasetsBeginTransactionCall struct { + s *Service + datasetId string + begintransactionrequest *BeginTransactionRequest + opt_ map[string]interface{} +} + +// BeginTransaction: Begin a new transaction. +func (r *DatasetsService) BeginTransaction(datasetId string, begintransactionrequest *BeginTransactionRequest) *DatasetsBeginTransactionCall { + c := &DatasetsBeginTransactionCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.begintransactionrequest = begintransactionrequest + return c +} + +func (c *DatasetsBeginTransactionCall) Do() (*BeginTransactionResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/beginTransaction") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BeginTransactionResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin a new transaction.", + // "httpMethod": "POST", + // "id": "datastore.datasets.beginTransaction", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/beginTransaction", + // "request": { + // "$ref": "BeginTransactionRequest" + // }, + // "response": { + // "$ref": "BeginTransactionResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.blindWrite": + +type DatasetsBlindWriteCall struct { + s *Service + datasetId string + blindwriterequest *BlindWriteRequest + opt_ map[string]interface{} +} + +// BlindWrite: Create, delete or modify some entities outside a +// transaction. +func (r *DatasetsService) BlindWrite(datasetId string, blindwriterequest *BlindWriteRequest) *DatasetsBlindWriteCall { + c := &DatasetsBlindWriteCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.blindwriterequest = blindwriterequest + return c +} + +func (c *DatasetsBlindWriteCall) Do() (*BlindWriteResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.blindwriterequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/blindWrite") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlindWriteResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create, delete or modify some entities outside a transaction.", + // "httpMethod": "POST", + // "id": "datastore.datasets.blindWrite", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/blindWrite", + // "request": { + // "$ref": "BlindWriteRequest" + // }, + // "response": { + // "$ref": "BlindWriteResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.commit": + +type DatasetsCommitCall struct { + s *Service + datasetId string + commitrequest *CommitRequest + opt_ map[string]interface{} +} + +// Commit: Commit a transaction, optionally creating, deleting or +// modifying some entities. +func (r *DatasetsService) Commit(datasetId string, commitrequest *CommitRequest) *DatasetsCommitCall { + c := &DatasetsCommitCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.commitrequest = commitrequest + return c +} + +func (c *DatasetsCommitCall) Do() (*CommitResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/commit") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommitResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Commit a transaction, optionally creating, deleting or modifying some entities.", + // "httpMethod": "POST", + // "id": "datastore.datasets.commit", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/commit", + // "request": { + // "$ref": "CommitRequest" + // }, + // "response": { + // "$ref": "CommitResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.lookup": + +type DatasetsLookupCall struct { + s *Service + datasetId string + lookuprequest *LookupRequest + opt_ map[string]interface{} +} + +// Lookup: Look up some entities by key. +func (r *DatasetsService) Lookup(datasetId string, lookuprequest *LookupRequest) *DatasetsLookupCall { + c := &DatasetsLookupCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.lookuprequest = lookuprequest + return c +} + +func (c *DatasetsLookupCall) Do() (*LookupResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/lookup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LookupResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Look up some entities by key.", + // "httpMethod": "POST", + // "id": "datastore.datasets.lookup", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/lookup", + // "request": { + // "$ref": "LookupRequest" + // }, + // "response": { + // "$ref": "LookupResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.rollback": + +type DatasetsRollbackCall struct { + s *Service + datasetId string + rollbackrequest *RollbackRequest + opt_ map[string]interface{} +} + +// Rollback: Roll back a transaction. +func (r *DatasetsService) Rollback(datasetId string, rollbackrequest *RollbackRequest) *DatasetsRollbackCall { + c := &DatasetsRollbackCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.rollbackrequest = rollbackrequest + return c +} + +func (c *DatasetsRollbackCall) Do() (*RollbackResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/rollback") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RollbackResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Roll back a transaction.", + // "httpMethod": "POST", + // "id": "datastore.datasets.rollback", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/rollback", + // "request": { + // "$ref": "RollbackRequest" + // }, + // "response": { + // "$ref": "RollbackResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.runQuery": + +type DatasetsRunQueryCall struct { + s *Service + datasetId string + runqueryrequest *RunQueryRequest + opt_ map[string]interface{} +} + +// RunQuery: Query for entities. +func (r *DatasetsService) RunQuery(datasetId string, runqueryrequest *RunQueryRequest) *DatasetsRunQueryCall { + c := &DatasetsRunQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.runqueryrequest = runqueryrequest + return c +} + +func (c *DatasetsRunQueryCall) Do() (*RunQueryResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/runQuery") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RunQueryResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Query for entities.", + // "httpMethod": "POST", + // "id": "datastore.datasets.runQuery", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/runQuery", + // "request": { + // "$ref": "RunQueryRequest" + // }, + // "response": { + // "$ref": "RunQueryResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-api.json b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-api.json new file mode 100644 index 0000000000000..c493f385e98ad --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-api.json @@ -0,0 +1,1077 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/-F8QVVz5h8Pedx8KHkOr-HeXpnU\"", + "discoveryVersion": "v1", + "id": "datastore:v1beta2", + "name": "datastore", + "version": "v1beta2", + "title": "Google Cloud Datastore API", + "description": "API for accessing Google Cloud Datastore.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/datastore/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/datastore/v1beta2/datasets/", + "basePath": "/datastore/v1beta2/datasets/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "datastore/v1beta2/datasets/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "proto", + "enum": [ + "json", + "proto" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json", + "Responses with Content-Type of application/x-protobuf" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/datastore": { + "description": "View and manage your Google Cloud Datastore data" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + } + } + } + }, + "schemas": { + "AllocateIdsRequest": { + "id": "AllocateIdsRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.AllocateIdsRequest", + "properties": { + "keys": { + "type": "array", + "description": "A list of keys with incomplete key paths to allocate IDs for. No key may be reserved/read-only.", + "items": { + "$ref": "Key" + } + } + } + }, + "AllocateIdsResponse": { + "id": "AllocateIdsResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.AllocateIdsResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "keys": { + "type": "array", + "description": "The keys specified in the request (in the same order), each with its key path completed with a newly allocated ID.", + "items": { + "$ref": "Key" + } + } + } + }, + "BeginTransactionRequest": { + "id": "BeginTransactionRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BeginTransactionRequest", + "properties": { + "isolationLevel": { + "type": "string", + "description": "The transaction isolation level. Either snapshot or serializable. The default isolation level is snapshot isolation, which means that another transaction may not concurrently modify the data that is modified by this transaction. Optionally, a transaction can request to be made serializable which means that another transaction cannot concurrently modify the data that is read or modified by this transaction.", + "enum": [ + "SERIALIZABLE", + "SNAPSHOT" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + }, + "BeginTransactionResponse": { + "id": "BeginTransactionResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.BeginTransactionResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "transaction": { + "type": "string", + "description": "The transaction identifier (always present).", + "format": "byte" + } + } + }, + "CommitRequest": { + "id": "CommitRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CommitRequest", + "properties": { + "mode": { + "type": "string", + "description": "The type of commit to perform. Either TRANSACTIONAL or NON_TRANSACTIONAL.", + "enum": [ + "NON_TRANSACTIONAL", + "TRANSACTIONAL" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "mutation": { + "$ref": "Mutation", + "description": "The mutation to perform. Optional." + }, + "transaction": { + "type": "string", + "description": "The transaction identifier, returned by a call to beginTransaction. Must be set when mode is TRANSACTIONAL.", + "format": "byte" + } + } + }, + "CommitResponse": { + "id": "CommitResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CommitResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + }, + "mutationResult": { + "$ref": "MutationResult", + "description": "The result of performing the mutation (if any)." + } + } + }, + "CompositeFilter": { + "id": "CompositeFilter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.CompositeFilter", + "properties": { + "filters": { + "type": "array", + "description": "The list of filters to combine. Must contain at least one filter.", + "items": { + "$ref": "Filter" + } + }, + "operator": { + "type": "string", + "description": "The operator for combining multiple filters. Only \"and\" is currently supported.", + "enum": [ + "AND" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "Entity": { + "id": "Entity", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Entity", + "properties": { + "key": { + "$ref": "Key", + "description": "The entity's key.\n\nAn entity must have a key, unless otherwise documented (for example, an entity in Value.entityValue may have no key). An entity's kind is its key's path's last element's kind, or null if it has no key." + }, + "properties": { + "type": "object", + "description": "The entity's properties.", + "additionalProperties": { + "$ref": "Property", + "description": "The name of the property. Properties with names matching regex \"__.*__\" are reserved. A reserved property name is forbidden in certain documented contexts. The name cannot be \"\"." + } + } + } + }, + "EntityResult": { + "id": "EntityResult", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.EntityResult", + "properties": { + "entity": { + "$ref": "Entity", + "description": "The resulting entity." + } + } + }, + "Filter": { + "id": "Filter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Filter", + "properties": { + "compositeFilter": { + "$ref": "CompositeFilter", + "description": "A composite filter." + }, + "propertyFilter": { + "$ref": "PropertyFilter", + "description": "A filter on a property." + } + } + }, + "GqlQuery": { + "id": "GqlQuery", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.GqlQuery", + "properties": { + "allowLiteral": { + "type": "boolean", + "description": "When false, the query string must not contain a literal." + }, + "nameArgs": { + "type": "array", + "description": "A named argument must set field GqlQueryArg.name. No two named arguments may have the same name. For each non-reserved named binding site in the query string, there must be a named argument with that name, but not necessarily the inverse.", + "items": { + "$ref": "GqlQueryArg" + } + }, + "numberArgs": { + "type": "array", + "description": "Numbered binding site @1 references the first numbered argument, effectively using 1-based indexing, rather than the usual 0. A numbered argument must NOT set field GqlQueryArg.name. For each binding site numbered i in query_string, there must be an ith numbered argument. The inverse must also be true.", + "items": { + "$ref": "GqlQueryArg" + } + }, + "queryString": { + "type": "string" + } + } + }, + "GqlQueryArg": { + "id": "GqlQueryArg", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.GqlQueryArg", + "properties": { + "cursor": { + "type": "string", + "format": "byte" + }, + "name": { + "type": "string", + "description": "Must match regex \"[A-Za-z_$][A-Za-z_$0-9]*\". Must not match regex \"__.*__\". Must not be \"\"." + }, + "value": { + "$ref": "Value" + } + } + }, + "Key": { + "id": "Key", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Key", + "properties": { + "partitionId": { + "$ref": "PartitionId", + "description": "Entities are partitioned into subsets, currently identified by a dataset (usually implicitly specified by the project) and namespace ID. Queries are scoped to a single partition." + }, + "path": { + "type": "array", + "description": "The entity path. An entity path consists of one or more elements composed of a kind and a string or numerical identifier, which identify entities. The first element identifies a root entity, the second element identifies a child of the root entity, the third element a child of the second entity, and so forth. The entities identified by all prefixes of the path are called the element's ancestors. An entity path is always fully complete: ALL of the entity's ancestors are required to be in the path along with the entity identifier itself. The only exception is that in some documented cases, the identifier in the last path element (for the entity) itself may be omitted. A path can never be empty.", + "items": { + "$ref": "KeyPathElement" + } + } + } + }, + "KeyPathElement": { + "id": "KeyPathElement", + "type": "object", + "description": "A (kind, ID/name) pair used to construct a key path.\n\nAt most one of name or ID may be set. If either is set, the element is complete. If neither is set, the element is incomplete.", + "externalTypeName": "apphosting.client.datastoreservice.proto.Key.PathElement", + "properties": { + "id": { + "type": "string", + "description": "The ID of the entity. Always \u003e 0.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of the entity. Kinds matching regex \"__.*__\" are reserved/read-only. Cannot be \"\"." + }, + "name": { + "type": "string", + "description": "The name of the entity. Names matching regex \"__.*__\" are reserved/read-only. Cannot be \"\"." + } + } + }, + "KindExpression": { + "id": "KindExpression", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.KindExpression", + "properties": { + "name": { + "type": "string", + "description": "The name of the kind." + } + } + }, + "LookupRequest": { + "id": "LookupRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.LookupRequest", + "properties": { + "keys": { + "type": "array", + "description": "Keys of entities to look up from the datastore.", + "items": { + "$ref": "Key" + } + }, + "readOptions": { + "$ref": "ReadOptions", + "description": "Options for this lookup request. Optional." + } + } + }, + "LookupResponse": { + "id": "LookupResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.LookupResponse", + "properties": { + "deferred": { + "type": "array", + "description": "A list of keys that were not looked up due to resource constraints.", + "items": { + "$ref": "Key" + } + }, + "found": { + "type": "array", + "description": "Entities found.", + "items": { + "$ref": "EntityResult" + } + }, + "header": { + "$ref": "ResponseHeader" + }, + "missing": { + "type": "array", + "description": "Entities not found, with only the key populated.", + "items": { + "$ref": "EntityResult" + } + } + } + }, + "Mutation": { + "id": "Mutation", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Mutation", + "properties": { + "delete": { + "type": "array", + "description": "Keys of entities to delete. Each key must have a complete key path and must not be reserved/read-only.", + "items": { + "$ref": "Key" + } + }, + "force": { + "type": "boolean", + "description": "Ignore a user specified read-only period. Optional." + }, + "insert": { + "type": "array", + "description": "Entities to insert. Each inserted entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "insertAutoId": { + "type": "array", + "description": "Insert entities with a newly allocated ID. Each inserted entity's key must omit the final identifier in its path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "update": { + "type": "array", + "description": "Entities to update. Each updated entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + }, + "upsert": { + "type": "array", + "description": "Entities to upsert. Each upserted entity's key must have a complete path and must not be reserved/read-only.", + "items": { + "$ref": "Entity" + } + } + } + }, + "MutationResult": { + "id": "MutationResult", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.MutationResult", + "properties": { + "indexUpdates": { + "type": "integer", + "description": "Number of index writes.", + "format": "int32" + }, + "insertAutoIdKeys": { + "type": "array", + "description": "Keys for insertAutoId entities. One per entity from the request, in the same order.", + "items": { + "$ref": "Key" + } + } + } + }, + "PartitionId": { + "id": "PartitionId", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PartitionId", + "properties": { + "datasetId": { + "type": "string", + "description": "The dataset ID." + }, + "namespace": { + "type": "string", + "description": "The namespace." + } + } + }, + "Property": { + "id": "Property", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Property", + "properties": { + "blobKeyValue": { + "type": "string", + "description": "A blob key value." + }, + "blobValue": { + "type": "string", + "description": "A blob value.", + "format": "byte" + }, + "booleanValue": { + "type": "boolean", + "description": "A boolean value." + }, + "dateTimeValue": { + "type": "string", + "description": "A timestamp value.", + "format": "date-time" + }, + "doubleValue": { + "type": "number", + "description": "A double value.", + "format": "double" + }, + "entityValue": { + "$ref": "Entity", + "description": "An entity value. May have no key. May have a key with an incomplete key path. May have a reserved/read-only key." + }, + "indexed": { + "type": "boolean", + "description": "If the value should be indexed.\n\nThe indexed property may be set for a null value. When indexed is true, stringValue is limited to 500 characters and the blob value is limited to 500 bytes. Input values by default have indexed set to true; however, you can explicitly set indexed to true if you want. (An output value never has indexed explicitly set to true.) If a value is itself an entity, it cannot have indexed set to true." + }, + "integerValue": { + "type": "string", + "description": "An integer value.", + "format": "int64" + }, + "keyValue": { + "$ref": "Key", + "description": "A key value." + }, + "listValue": { + "type": "array", + "description": "A list value. Cannot contain another list value. Cannot also have a meaning and indexing set.", + "items": { + "$ref": "Value" + } + }, + "meaning": { + "type": "integer", + "description": "The meaning field is reserved and should not be used.", + "format": "int32" + }, + "stringValue": { + "type": "string", + "description": "A UTF-8 encoded string value." + } + } + }, + "PropertyExpression": { + "id": "PropertyExpression", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyExpression", + "properties": { + "aggregationFunction": { + "type": "string", + "description": "The aggregation function to apply to the property. Optional. Can only be used when grouping by at least one property. Must then be set on all properties in the projection that are not being grouped by. Aggregation functions: first selects the first result as determined by the query's order.", + "enum": [ + "FIRST" + ], + "enumDescriptions": [ + "" + ] + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to project." + } + } + }, + "PropertyFilter": { + "id": "PropertyFilter", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyFilter", + "properties": { + "operator": { + "type": "string", + "description": "The operator to filter by. One of lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, equal, or hasAncestor.", + "enum": [ + "EQUAL", + "GREATER_THAN", + "GREATER_THAN_OR_EQUAL", + "HAS_ANCESTOR", + "LESS_THAN", + "LESS_THAN_OR_EQUAL" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to filter by." + }, + "value": { + "$ref": "Value", + "description": "The value to compare the property to." + } + } + }, + "PropertyOrder": { + "id": "PropertyOrder", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyOrder", + "properties": { + "direction": { + "type": "string", + "description": "The direction to order by. One of ascending or descending. Optional, defaults to ascending.", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "property": { + "$ref": "PropertyReference", + "description": "The property to order by." + } + } + }, + "PropertyReference": { + "id": "PropertyReference", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.PropertyReference", + "properties": { + "name": { + "type": "string", + "description": "The name of the property." + } + } + }, + "Query": { + "id": "Query", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Query", + "properties": { + "endCursor": { + "type": "string", + "description": "An ending point for the query results. Optional. Query cursors are returned in query result batches.", + "format": "byte" + }, + "filter": { + "$ref": "Filter", + "description": "The filter to apply (optional)." + }, + "groupBy": { + "type": "array", + "description": "The properties to group by (if empty, no grouping is applied to the result set).", + "items": { + "$ref": "PropertyReference" + } + }, + "kinds": { + "type": "array", + "description": "The kinds to query (if empty, returns entities from all kinds).", + "items": { + "$ref": "KindExpression" + } + }, + "limit": { + "type": "integer", + "description": "The maximum number of results to return. Applies after all other constraints. Optional.", + "format": "int32" + }, + "offset": { + "type": "integer", + "description": "The number of results to skip. Applies before limit, but after all other constraints (optional, defaults to 0).", + "format": "int32" + }, + "order": { + "type": "array", + "description": "The order to apply to the query results (if empty, order is unspecified).", + "items": { + "$ref": "PropertyOrder" + } + }, + "projection": { + "type": "array", + "description": "The projection to return. If not set the entire entity is returned.", + "items": { + "$ref": "PropertyExpression" + } + }, + "startCursor": { + "type": "string", + "description": "A starting point for the query results. Optional. Query cursors are returned in query result batches.", + "format": "byte" + } + } + }, + "QueryResultBatch": { + "id": "QueryResultBatch", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.QueryResultBatch", + "properties": { + "endCursor": { + "type": "string", + "description": "A cursor that points to the position after the last result in the batch. May be absent.", + "format": "byte" + }, + "entityResultType": { + "type": "string", + "description": "The result type for every entity in entityResults. full for full entities, projection for entities with only projected properties, keyOnly for entities with only a key.", + "enum": [ + "FULL", + "KEY_ONLY", + "PROJECTION" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "entityResults": { + "type": "array", + "description": "The results for this batch.", + "items": { + "$ref": "EntityResult" + } + }, + "moreResults": { + "type": "string", + "description": "The state of the query after the current batch. One of notFinished, moreResultsAfterLimit, noMoreResults.", + "enum": [ + "MORE_RESULTS_AFTER_LIMIT", + "NOT_FINISHED", + "NO_MORE_RESULTS" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "skippedResults": { + "type": "integer", + "description": "The number of results skipped because of Query.offset.", + "format": "int32" + } + } + }, + "ReadOptions": { + "id": "ReadOptions", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.ReadOptions", + "properties": { + "readConsistency": { + "type": "string", + "description": "The read consistency to use. One of default, strong, or eventual. Cannot be set when transaction is set. Lookup and ancestor queries default to strong, global queries default to eventual and cannot be set to strong. Optional. Default is default.", + "enum": [ + "DEFAULT", + "EVENTUAL", + "STRONG" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "transaction": { + "type": "string", + "description": "The transaction to use. Optional.", + "format": "byte" + } + } + }, + "ResponseHeader": { + "id": "ResponseHeader", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.ResponseHeader", + "properties": { + "kind": { + "type": "string", + "description": "The kind, fixed to \"datastore#responseHeader\".", + "default": "datastore#responseHeader" + } + } + }, + "RollbackRequest": { + "id": "RollbackRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RollbackRequest", + "properties": { + "transaction": { + "type": "string", + "description": "The transaction identifier, returned by a call to beginTransaction.", + "format": "byte" + } + } + }, + "RollbackResponse": { + "id": "RollbackResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RollbackResponse", + "properties": { + "header": { + "$ref": "ResponseHeader" + } + } + }, + "RunQueryRequest": { + "id": "RunQueryRequest", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RunQueryRequest", + "properties": { + "gqlQuery": { + "$ref": "GqlQuery", + "description": "The GQL query to run. Either this field or field query must be set, but not both." + }, + "partitionId": { + "$ref": "PartitionId", + "description": "Entities are partitioned into subsets, identified by a dataset (usually implicitly specified by the project) and namespace ID. Queries are scoped to a single partition." + }, + "query": { + "$ref": "Query", + "description": "The query to run. Either this field or field gql_query must be set, but not both." + }, + "readOptions": { + "$ref": "ReadOptions", + "description": "The options for this query." + } + } + }, + "RunQueryResponse": { + "id": "RunQueryResponse", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.RunQueryResponse", + "properties": { + "batch": { + "$ref": "QueryResultBatch", + "description": "A batch of query results (always present)." + }, + "header": { + "$ref": "ResponseHeader" + } + } + }, + "Value": { + "id": "Value", + "type": "object", + "externalTypeName": "apphosting.client.datastoreservice.proto.Value", + "properties": { + "blobKeyValue": { + "type": "string", + "description": "A blob key value." + }, + "blobValue": { + "type": "string", + "description": "A blob value.", + "format": "byte" + }, + "booleanValue": { + "type": "boolean", + "description": "A boolean value." + }, + "dateTimeValue": { + "type": "string", + "description": "A timestamp value.", + "format": "date-time" + }, + "doubleValue": { + "type": "number", + "description": "A double value.", + "format": "double" + }, + "entityValue": { + "$ref": "Entity", + "description": "An entity value. May have no key. May have a key with an incomplete key path. May have a reserved/read-only key." + }, + "indexed": { + "type": "boolean", + "description": "If the value should be indexed.\n\nThe indexed property may be set for a null value. When indexed is true, stringValue is limited to 500 characters and the blob value is limited to 500 bytes. Input values by default have indexed set to true; however, you can explicitly set indexed to true if you want. (An output value never has indexed explicitly set to true.) If a value is itself an entity, it cannot have indexed set to true." + }, + "integerValue": { + "type": "string", + "description": "An integer value.", + "format": "int64" + }, + "keyValue": { + "$ref": "Key", + "description": "A key value." + }, + "listValue": { + "type": "array", + "description": "A list value. Cannot contain another list value. Cannot also have a meaning and indexing set.", + "items": { + "$ref": "Value" + } + }, + "meaning": { + "type": "integer", + "description": "The meaning field is reserved and should not be used.", + "format": "int32" + }, + "stringValue": { + "type": "string", + "description": "A UTF-8 encoded string value." + } + } + } + }, + "resources": { + "datasets": { + "methods": { + "allocateIds": { + "id": "datastore.datasets.allocateIds", + "path": "{datasetId}/allocateIds", + "httpMethod": "POST", + "description": "Allocate IDs for incomplete keys (useful for referencing an entity before it is inserted).", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "AllocateIdsRequest" + }, + "response": { + "$ref": "AllocateIdsResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "beginTransaction": { + "id": "datastore.datasets.beginTransaction", + "path": "{datasetId}/beginTransaction", + "httpMethod": "POST", + "description": "Begin a new transaction.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "BeginTransactionRequest" + }, + "response": { + "$ref": "BeginTransactionResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "commit": { + "id": "datastore.datasets.commit", + "path": "{datasetId}/commit", + "httpMethod": "POST", + "description": "Commit a transaction, optionally creating, deleting or modifying some entities.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "CommitRequest" + }, + "response": { + "$ref": "CommitResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "lookup": { + "id": "datastore.datasets.lookup", + "path": "{datasetId}/lookup", + "httpMethod": "POST", + "description": "Look up some entities by key.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "LookupRequest" + }, + "response": { + "$ref": "LookupResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "rollback": { + "id": "datastore.datasets.rollback", + "path": "{datasetId}/rollback", + "httpMethod": "POST", + "description": "Roll back a transaction.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "RollbackRequest" + }, + "response": { + "$ref": "RollbackResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + }, + "runQuery": { + "id": "datastore.datasets.runQuery", + "path": "{datasetId}/runQuery", + "httpMethod": "POST", + "description": "Query for entities.", + "parameters": { + "datasetId": { + "type": "string", + "description": "Identifies the dataset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "datasetId" + ], + "request": { + "$ref": "RunQueryRequest" + }, + "response": { + "$ref": "RunQueryResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/datastore", + "https://www.googleapis.com/auth/userinfo.email" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-gen.go b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-gen.go new file mode 100644 index 0000000000000..274b1ad67186b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/datastore/v1beta2/datastore-gen.go @@ -0,0 +1,1002 @@ +// Package datastore provides access to the Google Cloud Datastore API. +// +// See https://developers.google.com/datastore/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/datastore/v1beta2" +// ... +// datastoreService, err := datastore.New(oauthHttpClient) +package datastore + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "datastore:v1beta2" +const apiName = "datastore" +const apiVersion = "v1beta2" +const basePath = "https://www.googleapis.com/datastore/v1beta2/datasets/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Cloud Datastore data + DatastoreScope = "https://www.googleapis.com/auth/datastore" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Datasets = NewDatasetsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Datasets *DatasetsService +} + +func NewDatasetsService(s *Service) *DatasetsService { + rs := &DatasetsService{s: s} + return rs +} + +type DatasetsService struct { + s *Service +} + +type AllocateIdsRequest struct { + // Keys: A list of keys with incomplete key paths to allocate IDs for. + // No key may be reserved/read-only. + Keys []*Key `json:"keys,omitempty"` +} + +type AllocateIdsResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // Keys: The keys specified in the request (in the same order), each + // with its key path completed with a newly allocated ID. + Keys []*Key `json:"keys,omitempty"` +} + +type BeginTransactionRequest struct { + // IsolationLevel: The transaction isolation level. Either snapshot or + // serializable. The default isolation level is snapshot isolation, + // which means that another transaction may not concurrently modify the + // data that is modified by this transaction. Optionally, a transaction + // can request to be made serializable which means that another + // transaction cannot concurrently modify the data that is read or + // modified by this transaction. + IsolationLevel string `json:"isolationLevel,omitempty"` +} + +type BeginTransactionResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // Transaction: The transaction identifier (always present). + Transaction string `json:"transaction,omitempty"` +} + +type CommitRequest struct { + // Mode: The type of commit to perform. Either TRANSACTIONAL or + // NON_TRANSACTIONAL. + Mode string `json:"mode,omitempty"` + + // Mutation: The mutation to perform. Optional. + Mutation *Mutation `json:"mutation,omitempty"` + + // Transaction: The transaction identifier, returned by a call to + // beginTransaction. Must be set when mode is TRANSACTIONAL. + Transaction string `json:"transaction,omitempty"` +} + +type CommitResponse struct { + Header *ResponseHeader `json:"header,omitempty"` + + // MutationResult: The result of performing the mutation (if any). + MutationResult *MutationResult `json:"mutationResult,omitempty"` +} + +type CompositeFilter struct { + // Filters: The list of filters to combine. Must contain at least one + // filter. + Filters []*Filter `json:"filters,omitempty"` + + // Operator: The operator for combining multiple filters. Only "and" is + // currently supported. + Operator string `json:"operator,omitempty"` +} + +type Entity struct { + // Key: The entity's key. + // + // An entity must have a key, unless otherwise + // documented (for example, an entity in Value.entityValue may have no + // key). An entity's kind is its key's path's last element's kind, or + // null if it has no key. + Key *Key `json:"key,omitempty"` + + // Properties: The entity's properties. + Properties *EntityProperties `json:"properties,omitempty"` +} + +type EntityProperties struct { +} + +type EntityResult struct { + // Entity: The resulting entity. + Entity *Entity `json:"entity,omitempty"` +} + +type Filter struct { + // CompositeFilter: A composite filter. + CompositeFilter *CompositeFilter `json:"compositeFilter,omitempty"` + + // PropertyFilter: A filter on a property. + PropertyFilter *PropertyFilter `json:"propertyFilter,omitempty"` +} + +type GqlQuery struct { + // AllowLiteral: When false, the query string must not contain a + // literal. + AllowLiteral bool `json:"allowLiteral,omitempty"` + + // NameArgs: A named argument must set field GqlQueryArg.name. No two + // named arguments may have the same name. For each non-reserved named + // binding site in the query string, there must be a named argument with + // that name, but not necessarily the inverse. + NameArgs []*GqlQueryArg `json:"nameArgs,omitempty"` + + // NumberArgs: Numbered binding site @1 references the first numbered + // argument, effectively using 1-based indexing, rather than the usual + // 0. A numbered argument must NOT set field GqlQueryArg.name. For each + // binding site numbered i in query_string, there must be an ith + // numbered argument. The inverse must also be true. + NumberArgs []*GqlQueryArg `json:"numberArgs,omitempty"` + + QueryString string `json:"queryString,omitempty"` +} + +type GqlQueryArg struct { + Cursor string `json:"cursor,omitempty"` + + // Name: Must match regex "[A-Za-z_$][A-Za-z_$0-9]*". Must not match + // regex "__.*__". Must not be "". + Name string `json:"name,omitempty"` + + Value *Value `json:"value,omitempty"` +} + +type Key struct { + // PartitionId: Entities are partitioned into subsets, currently + // identified by a dataset (usually implicitly specified by the project) + // and namespace ID. Queries are scoped to a single partition. + PartitionId *PartitionId `json:"partitionId,omitempty"` + + // Path: The entity path. An entity path consists of one or more + // elements composed of a kind and a string or numerical identifier, + // which identify entities. The first element identifies a root entity, + // the second element identifies a child of the root entity, the third + // element a child of the second entity, and so forth. The entities + // identified by all prefixes of the path are called the element's + // ancestors. An entity path is always fully complete: ALL of the + // entity's ancestors are required to be in the path along with the + // entity identifier itself. The only exception is that in some + // documented cases, the identifier in the last path element (for the + // entity) itself may be omitted. A path can never be empty. + Path []*KeyPathElement `json:"path,omitempty"` +} + +type KeyPathElement struct { + // Id: The ID of the entity. Always > 0. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of the entity. Kinds matching regex "__.*__" are + // reserved/read-only. Cannot be "". + Kind string `json:"kind,omitempty"` + + // Name: The name of the entity. Names matching regex "__.*__" are + // reserved/read-only. Cannot be "". + Name string `json:"name,omitempty"` +} + +type KindExpression struct { + // Name: The name of the kind. + Name string `json:"name,omitempty"` +} + +type LookupRequest struct { + // Keys: Keys of entities to look up from the datastore. + Keys []*Key `json:"keys,omitempty"` + + // ReadOptions: Options for this lookup request. Optional. + ReadOptions *ReadOptions `json:"readOptions,omitempty"` +} + +type LookupResponse struct { + // Deferred: A list of keys that were not looked up due to resource + // constraints. + Deferred []*Key `json:"deferred,omitempty"` + + // Found: Entities found. + Found []*EntityResult `json:"found,omitempty"` + + Header *ResponseHeader `json:"header,omitempty"` + + // Missing: Entities not found, with only the key populated. + Missing []*EntityResult `json:"missing,omitempty"` +} + +type Mutation struct { + // Delete: Keys of entities to delete. Each key must have a complete key + // path and must not be reserved/read-only. + Delete []*Key `json:"delete,omitempty"` + + // Force: Ignore a user specified read-only period. Optional. + Force bool `json:"force,omitempty"` + + // Insert: Entities to insert. Each inserted entity's key must have a + // complete path and must not be reserved/read-only. + Insert []*Entity `json:"insert,omitempty"` + + // InsertAutoId: Insert entities with a newly allocated ID. Each + // inserted entity's key must omit the final identifier in its path and + // must not be reserved/read-only. + InsertAutoId []*Entity `json:"insertAutoId,omitempty"` + + // Update: Entities to update. Each updated entity's key must have a + // complete path and must not be reserved/read-only. + Update []*Entity `json:"update,omitempty"` + + // Upsert: Entities to upsert. Each upserted entity's key must have a + // complete path and must not be reserved/read-only. + Upsert []*Entity `json:"upsert,omitempty"` +} + +type MutationResult struct { + // IndexUpdates: Number of index writes. + IndexUpdates int64 `json:"indexUpdates,omitempty"` + + // InsertAutoIdKeys: Keys for insertAutoId entities. One per entity from + // the request, in the same order. + InsertAutoIdKeys []*Key `json:"insertAutoIdKeys,omitempty"` +} + +type PartitionId struct { + // DatasetId: The dataset ID. + DatasetId string `json:"datasetId,omitempty"` + + // Namespace: The namespace. + Namespace string `json:"namespace,omitempty"` +} + +type Property struct { + // BlobKeyValue: A blob key value. + BlobKeyValue string `json:"blobKeyValue,omitempty"` + + // BlobValue: A blob value. + BlobValue string `json:"blobValue,omitempty"` + + // BooleanValue: A boolean value. + BooleanValue bool `json:"booleanValue,omitempty"` + + // DateTimeValue: A timestamp value. + DateTimeValue string `json:"dateTimeValue,omitempty"` + + // DoubleValue: A double value. + DoubleValue float64 `json:"doubleValue,omitempty"` + + // EntityValue: An entity value. May have no key. May have a key with an + // incomplete key path. May have a reserved/read-only key. + EntityValue *Entity `json:"entityValue,omitempty"` + + // Indexed: If the value should be indexed. + // + // The indexed property may be + // set for a null value. When indexed is true, stringValue is limited to + // 500 characters and the blob value is limited to 500 bytes. Input + // values by default have indexed set to true; however, you can + // explicitly set indexed to true if you want. (An output value never + // has indexed explicitly set to true.) If a value is itself an entity, + // it cannot have indexed set to true. + Indexed bool `json:"indexed,omitempty"` + + // IntegerValue: An integer value. + IntegerValue int64 `json:"integerValue,omitempty,string"` + + // KeyValue: A key value. + KeyValue *Key `json:"keyValue,omitempty"` + + // ListValue: A list value. Cannot contain another list value. Cannot + // also have a meaning and indexing set. + ListValue []*Value `json:"listValue,omitempty"` + + // Meaning: The meaning field is reserved and should not be used. + Meaning int64 `json:"meaning,omitempty"` + + // StringValue: A UTF-8 encoded string value. + StringValue string `json:"stringValue,omitempty"` +} + +type PropertyExpression struct { + // AggregationFunction: The aggregation function to apply to the + // property. Optional. Can only be used when grouping by at least one + // property. Must then be set on all properties in the projection that + // are not being grouped by. Aggregation functions: first selects the + // first result as determined by the query's order. + AggregationFunction string `json:"aggregationFunction,omitempty"` + + // Property: The property to project. + Property *PropertyReference `json:"property,omitempty"` +} + +type PropertyFilter struct { + // Operator: The operator to filter by. One of lessThan, + // lessThanOrEqual, greaterThan, greaterThanOrEqual, equal, or + // hasAncestor. + Operator string `json:"operator,omitempty"` + + // Property: The property to filter by. + Property *PropertyReference `json:"property,omitempty"` + + // Value: The value to compare the property to. + Value *Value `json:"value,omitempty"` +} + +type PropertyOrder struct { + // Direction: The direction to order by. One of ascending or descending. + // Optional, defaults to ascending. + Direction string `json:"direction,omitempty"` + + // Property: The property to order by. + Property *PropertyReference `json:"property,omitempty"` +} + +type PropertyReference struct { + // Name: The name of the property. + Name string `json:"name,omitempty"` +} + +type Query struct { + // EndCursor: An ending point for the query results. Optional. Query + // cursors are returned in query result batches. + EndCursor string `json:"endCursor,omitempty"` + + // Filter: The filter to apply (optional). + Filter *Filter `json:"filter,omitempty"` + + // GroupBy: The properties to group by (if empty, no grouping is applied + // to the result set). + GroupBy []*PropertyReference `json:"groupBy,omitempty"` + + // Kinds: The kinds to query (if empty, returns entities from all + // kinds). + Kinds []*KindExpression `json:"kinds,omitempty"` + + // Limit: The maximum number of results to return. Applies after all + // other constraints. Optional. + Limit int64 `json:"limit,omitempty"` + + // Offset: The number of results to skip. Applies before limit, but + // after all other constraints (optional, defaults to 0). + Offset int64 `json:"offset,omitempty"` + + // Order: The order to apply to the query results (if empty, order is + // unspecified). + Order []*PropertyOrder `json:"order,omitempty"` + + // Projection: The projection to return. If not set the entire entity is + // returned. + Projection []*PropertyExpression `json:"projection,omitempty"` + + // StartCursor: A starting point for the query results. Optional. Query + // cursors are returned in query result batches. + StartCursor string `json:"startCursor,omitempty"` +} + +type QueryResultBatch struct { + // EndCursor: A cursor that points to the position after the last result + // in the batch. May be absent. + EndCursor string `json:"endCursor,omitempty"` + + // EntityResultType: The result type for every entity in entityResults. + // full for full entities, projection for entities with only projected + // properties, keyOnly for entities with only a key. + EntityResultType string `json:"entityResultType,omitempty"` + + // EntityResults: The results for this batch. + EntityResults []*EntityResult `json:"entityResults,omitempty"` + + // MoreResults: The state of the query after the current batch. One of + // notFinished, moreResultsAfterLimit, noMoreResults. + MoreResults string `json:"moreResults,omitempty"` + + // SkippedResults: The number of results skipped because of + // Query.offset. + SkippedResults int64 `json:"skippedResults,omitempty"` +} + +type ReadOptions struct { + // ReadConsistency: The read consistency to use. One of default, strong, + // or eventual. Cannot be set when transaction is set. Lookup and + // ancestor queries default to strong, global queries default to + // eventual and cannot be set to strong. Optional. Default is default. + ReadConsistency string `json:"readConsistency,omitempty"` + + // Transaction: The transaction to use. Optional. + Transaction string `json:"transaction,omitempty"` +} + +type ResponseHeader struct { + // Kind: The kind, fixed to "datastore#responseHeader". + Kind string `json:"kind,omitempty"` +} + +type RollbackRequest struct { + // Transaction: The transaction identifier, returned by a call to + // beginTransaction. + Transaction string `json:"transaction,omitempty"` +} + +type RollbackResponse struct { + Header *ResponseHeader `json:"header,omitempty"` +} + +type RunQueryRequest struct { + // GqlQuery: The GQL query to run. Either this field or field query must + // be set, but not both. + GqlQuery *GqlQuery `json:"gqlQuery,omitempty"` + + // PartitionId: Entities are partitioned into subsets, identified by a + // dataset (usually implicitly specified by the project) and namespace + // ID. Queries are scoped to a single partition. + PartitionId *PartitionId `json:"partitionId,omitempty"` + + // Query: The query to run. Either this field or field gql_query must be + // set, but not both. + Query *Query `json:"query,omitempty"` + + // ReadOptions: The options for this query. + ReadOptions *ReadOptions `json:"readOptions,omitempty"` +} + +type RunQueryResponse struct { + // Batch: A batch of query results (always present). + Batch *QueryResultBatch `json:"batch,omitempty"` + + Header *ResponseHeader `json:"header,omitempty"` +} + +type Value struct { + // BlobKeyValue: A blob key value. + BlobKeyValue string `json:"blobKeyValue,omitempty"` + + // BlobValue: A blob value. + BlobValue string `json:"blobValue,omitempty"` + + // BooleanValue: A boolean value. + BooleanValue bool `json:"booleanValue,omitempty"` + + // DateTimeValue: A timestamp value. + DateTimeValue string `json:"dateTimeValue,omitempty"` + + // DoubleValue: A double value. + DoubleValue float64 `json:"doubleValue,omitempty"` + + // EntityValue: An entity value. May have no key. May have a key with an + // incomplete key path. May have a reserved/read-only key. + EntityValue *Entity `json:"entityValue,omitempty"` + + // Indexed: If the value should be indexed. + // + // The indexed property may be + // set for a null value. When indexed is true, stringValue is limited to + // 500 characters and the blob value is limited to 500 bytes. Input + // values by default have indexed set to true; however, you can + // explicitly set indexed to true if you want. (An output value never + // has indexed explicitly set to true.) If a value is itself an entity, + // it cannot have indexed set to true. + Indexed bool `json:"indexed,omitempty"` + + // IntegerValue: An integer value. + IntegerValue int64 `json:"integerValue,omitempty,string"` + + // KeyValue: A key value. + KeyValue *Key `json:"keyValue,omitempty"` + + // ListValue: A list value. Cannot contain another list value. Cannot + // also have a meaning and indexing set. + ListValue []*Value `json:"listValue,omitempty"` + + // Meaning: The meaning field is reserved and should not be used. + Meaning int64 `json:"meaning,omitempty"` + + // StringValue: A UTF-8 encoded string value. + StringValue string `json:"stringValue,omitempty"` +} + +// method id "datastore.datasets.allocateIds": + +type DatasetsAllocateIdsCall struct { + s *Service + datasetId string + allocateidsrequest *AllocateIdsRequest + opt_ map[string]interface{} +} + +// AllocateIds: Allocate IDs for incomplete keys (useful for referencing +// an entity before it is inserted). +func (r *DatasetsService) AllocateIds(datasetId string, allocateidsrequest *AllocateIdsRequest) *DatasetsAllocateIdsCall { + c := &DatasetsAllocateIdsCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.allocateidsrequest = allocateidsrequest + return c +} + +func (c *DatasetsAllocateIdsCall) Do() (*AllocateIdsResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.allocateidsrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/allocateIds") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AllocateIdsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Allocate IDs for incomplete keys (useful for referencing an entity before it is inserted).", + // "httpMethod": "POST", + // "id": "datastore.datasets.allocateIds", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/allocateIds", + // "request": { + // "$ref": "AllocateIdsRequest" + // }, + // "response": { + // "$ref": "AllocateIdsResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.beginTransaction": + +type DatasetsBeginTransactionCall struct { + s *Service + datasetId string + begintransactionrequest *BeginTransactionRequest + opt_ map[string]interface{} +} + +// BeginTransaction: Begin a new transaction. +func (r *DatasetsService) BeginTransaction(datasetId string, begintransactionrequest *BeginTransactionRequest) *DatasetsBeginTransactionCall { + c := &DatasetsBeginTransactionCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.begintransactionrequest = begintransactionrequest + return c +} + +func (c *DatasetsBeginTransactionCall) Do() (*BeginTransactionResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.begintransactionrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/beginTransaction") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BeginTransactionResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin a new transaction.", + // "httpMethod": "POST", + // "id": "datastore.datasets.beginTransaction", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/beginTransaction", + // "request": { + // "$ref": "BeginTransactionRequest" + // }, + // "response": { + // "$ref": "BeginTransactionResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.commit": + +type DatasetsCommitCall struct { + s *Service + datasetId string + commitrequest *CommitRequest + opt_ map[string]interface{} +} + +// Commit: Commit a transaction, optionally creating, deleting or +// modifying some entities. +func (r *DatasetsService) Commit(datasetId string, commitrequest *CommitRequest) *DatasetsCommitCall { + c := &DatasetsCommitCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.commitrequest = commitrequest + return c +} + +func (c *DatasetsCommitCall) Do() (*CommitResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.commitrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/commit") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommitResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Commit a transaction, optionally creating, deleting or modifying some entities.", + // "httpMethod": "POST", + // "id": "datastore.datasets.commit", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/commit", + // "request": { + // "$ref": "CommitRequest" + // }, + // "response": { + // "$ref": "CommitResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.lookup": + +type DatasetsLookupCall struct { + s *Service + datasetId string + lookuprequest *LookupRequest + opt_ map[string]interface{} +} + +// Lookup: Look up some entities by key. +func (r *DatasetsService) Lookup(datasetId string, lookuprequest *LookupRequest) *DatasetsLookupCall { + c := &DatasetsLookupCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.lookuprequest = lookuprequest + return c +} + +func (c *DatasetsLookupCall) Do() (*LookupResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.lookuprequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/lookup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LookupResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Look up some entities by key.", + // "httpMethod": "POST", + // "id": "datastore.datasets.lookup", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/lookup", + // "request": { + // "$ref": "LookupRequest" + // }, + // "response": { + // "$ref": "LookupResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.rollback": + +type DatasetsRollbackCall struct { + s *Service + datasetId string + rollbackrequest *RollbackRequest + opt_ map[string]interface{} +} + +// Rollback: Roll back a transaction. +func (r *DatasetsService) Rollback(datasetId string, rollbackrequest *RollbackRequest) *DatasetsRollbackCall { + c := &DatasetsRollbackCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.rollbackrequest = rollbackrequest + return c +} + +func (c *DatasetsRollbackCall) Do() (*RollbackResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.rollbackrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/rollback") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RollbackResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Roll back a transaction.", + // "httpMethod": "POST", + // "id": "datastore.datasets.rollback", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/rollback", + // "request": { + // "$ref": "RollbackRequest" + // }, + // "response": { + // "$ref": "RollbackResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} + +// method id "datastore.datasets.runQuery": + +type DatasetsRunQueryCall struct { + s *Service + datasetId string + runqueryrequest *RunQueryRequest + opt_ map[string]interface{} +} + +// RunQuery: Query for entities. +func (r *DatasetsService) RunQuery(datasetId string, runqueryrequest *RunQueryRequest) *DatasetsRunQueryCall { + c := &DatasetsRunQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.datasetId = datasetId + c.runqueryrequest = runqueryrequest + return c +} + +func (c *DatasetsRunQueryCall) Do() (*RunQueryResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{datasetId}/runQuery") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{datasetId}", url.QueryEscape(c.datasetId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RunQueryResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Query for entities.", + // "httpMethod": "POST", + // "id": "datastore.datasets.runQuery", + // "parameterOrder": [ + // "datasetId" + // ], + // "parameters": { + // "datasetId": { + // "description": "Identifies the dataset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{datasetId}/runQuery", + // "request": { + // "$ref": "RunQueryRequest" + // }, + // "response": { + // "$ref": "RunQueryResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/datastore", + // "https://www.googleapis.com/auth/userinfo.email" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-api.json b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-api.json new file mode 100644 index 0000000000000..26c52c1f2511b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-api.json @@ -0,0 +1,1520 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/YdK1I3o4ZOUVUrD_2k7BkdHqzyQ\"", + "discoveryVersion": "v1", + "id": "dfareporting:v1.1", + "name": "dfareporting", + "version": "v1.1", + "title": "DFA Reporting API", + "description": "Lets you create, run and download reports.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/doubleclick-advertisers/reporting/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/dfareporting/v1.1/", + "basePath": "/dfareporting/v1.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "dfareporting/v1.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/dfareporting": { + "description": "View and manage DoubleClick for Advertisers reports" + } + } + } + }, + "schemas": { + "Activities": { + "id": "Activities", + "type": "object", + "description": "Represents an activity group.", + "properties": { + "filters": { + "type": "array", + "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#activities.", + "default": "dfareporting#activities" + }, + "metricNames": { + "type": "array", + "description": "List of names of floodlight activity metrics.", + "items": { + "type": "string" + } + } + } + }, + "CustomRichMediaEvents": { + "id": "CustomRichMediaEvents", + "type": "object", + "description": "Represents a Custom Rich Media Events group.", + "properties": { + "filteredEventIds": { + "type": "array", + "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.", + "default": "dfareporting#customRichMediaEvents" + } + } + }, + "DateRange": { + "id": "DateRange", + "type": "object", + "description": "Represents a date range.", + "properties": { + "endDate": { + "type": "string", + "description": "The end date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dateRange.", + "default": "dfareporting#dateRange" + }, + "relativeDateRange": { + "type": "string", + "description": "The date range relative to the date of when the report is run, one of: \n- \"TODAY\" \n- \"YESTERDAY\" \n- \"WEEK_TO_DATE\" \n- \"MONTH_TO_DATE\" \n- \"QUARTER_TO_DATE\" \n- \"YEAR_TO_DATE\" \n- \"PREVIOUS_WEEK\" \n- \"PREVIOUS_MONTH\" \n- \"PREVIOUS_QUARTER\" \n- \"PREVIOUS_YEAR\" \n- \"LAST_7_DAYS\" \n- \"LAST_30_DAYS\" \n- \"LAST_90_DAYS\" \n- \"LAST_365_DAYS\" \n- \"LAST_24_MONTHS\"" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "DimensionFilter": { + "id": "DimensionFilter", + "type": "object", + "description": "Represents a dimension filter.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension to filter." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.", + "default": "dfareporting#dimensionFilter" + }, + "value": { + "type": "string", + "description": "The value of the dimension to filter." + } + } + }, + "DimensionValue": { + "id": "DimensionValue", + "type": "object", + "description": "Represents a DimensionValue resource.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID associated with the value if available." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionValue.", + "default": "dfareporting#dimensionValue" + }, + "value": { + "type": "string", + "description": "The value of the dimension." + } + } + }, + "DimensionValueList": { + "id": "DimensionValueList", + "type": "object", + "description": "Represents the list of DimensionValue resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The dimension values returned in this response.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#dimensionValueList.", + "default": "dfareporting#dimensionValueList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "DimensionValueRequest": { + "id": "DimensionValueRequest", + "type": "object", + "description": "Represents a DimensionValuesRequest.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension for which values should be requested." + }, + "endDate": { + "type": "string", + "description": "The end date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "filters": { + "type": "array", + "description": "The list of filters by which to filter values. The filters are ANDed.", + "items": { + "$ref": "DimensionFilter" + } + }, + "kind": { + "type": "string", + "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest.", + "default": "dfareporting#dimensionValueRequest" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "Represents a File resource. A File contains the meta-data for a report run. It shows the status of the run and holds the urls to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name of the file." + }, + "format": { + "type": "string", + "description": "The output format of the report. Only available once the file is available." + }, + "id": { + "type": "string", + "description": "The unique ID of this report file.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#file.", + "default": "dfareporting#file" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp in milliseconds since epoch when this file was last modified.", + "format": "int64" + }, + "reportId": { + "type": "string", + "description": "The ID of the report this file was generated from.", + "format": "int64" + }, + "status": { + "type": "string", + "description": "The status of the report file, one of: \n- \"PROCESSING\" \n- \"REPORT_AVAILABLE\" \n- \"FAILED\" \n- \"CANCELLED\"" + }, + "urls": { + "type": "object", + "description": "The urls where the completed report file can be downloaded.", + "properties": { + "apiUrl": { + "type": "string", + "description": "The url for downloading the report data through the API." + }, + "browserUrl": { + "type": "string", + "description": "The url for downloading the report data through a browser." + } + } + } + } + }, + "FileList": { + "id": "FileList", + "type": "object", + "description": "Represents the list of File resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The files returned in this response.", + "items": { + "$ref": "File" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#fileList.", + "default": "dfareporting#fileList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "Recipient": { + "id": "Recipient", + "type": "object", + "description": "Represents a recipient.", + "properties": { + "deliveryType": { + "type": "string", + "description": "The delivery type for the recipient, one of: \n- \"ATTACHMENT\" \n- \"LINK\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "email": { + "type": "string", + "description": "The email address of the recipient.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#recipient.", + "default": "dfareporting#recipient" + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "Represents a Report resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this report belongs.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "activeGrpCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"ACTIVE_GRP\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.\nA valid active GRP report needs to have exactly one DimensionValue for the United States in addition to any advertiser or campaign dimension values.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "criteria": { + "type": "object", + "description": "The report criteria for a report of type \"STANDARD\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which this report should be run." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of standard dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "crossDimensionReachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".", + "properties": { + "breakdown": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimension": { + "type": "string", + "description": "The dimension option, one of: \n- \"ADVERTISER\" \n- \"CAMPAIGN\" \n- \"SITE_BY_ADVERTISER\" \n- \"SITE_BY_CAMPAIGN\"" + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.", + "items": { + "$ref": "DimensionValue" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "overlapMetricNames": { + "type": "array", + "description": "The list of names of overlap metrics the report should include.", + "items": { + "type": "string" + } + }, + "pivoted": { + "type": "boolean", + "description": "Whether the report is pivoted or not. Defaults to true." + } + } + }, + "delivery": { + "type": "object", + "description": "The report's email delivery settings.", + "properties": { + "emailOwner": { + "type": "boolean", + "description": "Whether the report should be emailed to the report owner." + }, + "emailOwnerDeliveryType": { + "type": "string", + "description": "The type of delivery for the owner to receive, if enabled. One of: \n- \"ATTACHMENT\" \n- \"LINK\"" + }, + "message": { + "type": "string", + "description": "The message to be sent with each email." + }, + "recipients": { + "type": "array", + "description": "The list of recipients to which to email the report.", + "items": { + "$ref": "Recipient" + } + } + } + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name used when generating report files for this report." + }, + "floodlightCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"FLOODLIGHT\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no cookie, but do have an exposure path." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + } + } + } + } + }, + "format": { + "type": "string", + "description": "The output format of the report, one of: \n- \"CSV\" \n- \"EXCEL\" If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format." + }, + "id": { + "type": "string", + "description": "The unique ID identifying this report resource.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#report.", + "default": "dfareporting#report" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.", + "format": "uint64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "name": { + "type": "string", + "description": "The name of the report.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "ownerProfileId": { + "type": "string", + "description": "The user profile id of the owner of this report.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "pathToConversionCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".", + "properties": { + "activityFilters": { + "type": "array", + "description": "The list of 'dfa:activity' values to filter on.", + "items": { + "$ref": "DimensionValue" + } + }, + "conversionDimensions": { + "type": "array", + "description": "The list of conversion dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "customFloodlightVariables": { + "type": "array", + "description": "The list of custom floodlight variables the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "perInteractionDimensions": { + "type": "array", + "description": "The list of per interaction dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "clicksLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "impressionsLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no cookie, but do have an exposure path." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + }, + "maximumClickInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumImpressionInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumInteractionGap": { + "type": "integer", + "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.", + "format": "int32" + }, + "pivotOnInteractionPath": { + "type": "boolean", + "description": "Enable pivoting on interaction path." + } + } + } + } + }, + "reachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"REACH\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reachByFrequencyMetricNames": { + "type": "array", + "description": "The list of names of Reach By Frequency metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "schedule": { + "type": "object", + "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".", + "properties": { + "active": { + "type": "boolean", + "description": "Whether the schedule is active or not. Must be set to either true or false.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "every": { + "type": "integer", + "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".", + "format": "int32" + }, + "expirationDate": { + "type": "string", + "description": "The expiration date when the scheduled report stops running.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeats": { + "type": "string", + "description": "The interval for which the report is repeated, one of: \n- \"DAILY\", also requires field \"every\" to be set. \n- \"WEEKLY\", also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. \n- \"TWICE_A_MONTH\" \n- \"MONTHLY\", also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. \n- \"QUARTERLY\" \n- \"YEARLY\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeatsOnWeekDays": { + "type": "array", + "description": "List of week days \"WEEKLY\" on which scheduled reports should run.", + "items": { + "type": "string" + } + }, + "runsOnDayOfMonth": { + "type": "string", + "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Possible values are: \n- DAY_OF_MONTH \n- WEEK_OF_MONTH \nExample: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month." + }, + "startDate": { + "type": "string", + "description": "Start date of date range for which scheduled reports should be run.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "subAccountId": { + "type": "string", + "description": "The subbaccount ID to which this report belongs if applicable.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The type of the report, one of: \n- STANDARD \n- REACH \n- ACTIVE_GRP \n- PATH_TO_CONVERSION \n- FLOODLIGHT \n- CROSS_DIMENSION_REACH", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "ReportList": { + "id": "ReportList", + "type": "object", + "description": "Represents the list of reports.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The reports returned in this response.", + "items": { + "$ref": "Report" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#reportList.", + "default": "dfareporting#reportList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "SortedDimension": { + "id": "SortedDimension", + "type": "object", + "description": "Represents a sorted dimension.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#sortedDimension.", + "default": "dfareporting#sortedDimension" + }, + "name": { + "type": "string", + "description": "The name of the dimension." + }, + "sortOrder": { + "type": "string", + "description": "An optional sort order for the dimension column, one of: \n- \"ASCENDING\" \n- \"DESCENDING\"" + } + } + }, + "UserProfile": { + "id": "UserProfile", + "type": "object", + "description": "Represents a UserProfile resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this profile belongs.", + "format": "int64" + }, + "accountName": { + "type": "string", + "description": "The account name this profile belongs to." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#userProfile.", + "default": "dfareporting#userProfile" + }, + "profileId": { + "type": "string", + "description": "The unique ID of the user profile.", + "format": "int64" + }, + "subAccountId": { + "type": "string", + "description": "The sub account ID this profile belongs to if applicable.", + "format": "int64" + }, + "subAccountName": { + "type": "string", + "description": "The sub account name this profile belongs to if applicable." + }, + "userName": { + "type": "string", + "description": "The user name." + } + } + }, + "UserProfileList": { + "id": "UserProfileList", + "type": "object", + "description": "Represents the list of user profiles.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The user profiles returned in this response.", + "items": { + "$ref": "UserProfile" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#userProfileList.", + "default": "dfareporting#userProfileList" + } + } + } + }, + "resources": { + "dimensionValues": { + "methods": { + "query": { + "id": "dfareporting.dimensionValues.query", + "path": "userprofiles/{profileId}/dimensionvalues/query", + "httpMethod": "POST", + "description": "Retrieves list of report dimension values for a list of filters.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "DimensionValueRequest" + }, + "response": { + "$ref": "DimensionValueList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "files": { + "methods": { + "list": { + "id": "dfareporting.files.list", + "path": "userprofiles/{profileId}/files", + "httpMethod": "GET", + "description": "Lists files for a user profile.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "reports": { + "methods": { + "delete": { + "id": "dfareporting.reports.delete", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "DELETE", + "description": "Deletes a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "get": { + "id": "dfareporting.reports.get", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "GET", + "description": "Retrieves a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "insert": { + "id": "dfareporting.reports.insert", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "POST", + "description": "Creates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.list", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "GET", + "description": "Retrieves list of reports.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME", + "NAME" + ], + "enumDescriptions": [ + "Sort by report ID.", + "Sort by 'lastModifiedTime' field.", + "Sort by name of reports." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "ReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "patch": { + "id": "dfareporting.reports.patch", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PATCH", + "description": "Updates a report. This method supports patch semantics.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "run": { + "id": "dfareporting.reports.run", + "path": "userprofiles/{profileId}/reports/{reportId}/run", + "httpMethod": "POST", + "description": "Runs a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + }, + "synchronous": { + "type": "boolean", + "description": "If set and true, tries to run the report synchronously.", + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "update": { + "id": "dfareporting.reports.update", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PUT", + "description": "Updates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + }, + "resources": { + "files": { + "methods": { + "get": { + "id": "dfareporting.reports.files.get", + "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.files.list", + "path": "userprofiles/{profileId}/reports/{reportId}/files", + "httpMethod": "GET", + "description": "Lists files for a report.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the parent report.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } + }, + "userProfiles": { + "methods": { + "get": { + "id": "dfareporting.userProfiles.get", + "path": "userprofiles/{profileId}", + "httpMethod": "GET", + "description": "Gets one user profile by ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "UserProfile" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.userProfiles.list", + "path": "userprofiles", + "httpMethod": "GET", + "description": "Retrieves list of user profiles for a user.", + "response": { + "$ref": "UserProfileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-gen.go b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-gen.go new file mode 100644 index 0000000000000..4caccdea8cbdc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.1/dfareporting-gen.go @@ -0,0 +1,2031 @@ +// Package dfareporting provides access to the DFA Reporting API. +// +// See https://developers.google.com/doubleclick-advertisers/reporting/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/dfareporting/v1.1" +// ... +// dfareportingService, err := dfareporting.New(oauthHttpClient) +package dfareporting + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "dfareporting:v1.1" +const apiName = "dfareporting" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/dfareporting/v1.1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage DoubleClick for Advertisers reports + DfareportingScope = "https://www.googleapis.com/auth/dfareporting" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.DimensionValues = NewDimensionValuesService(s) + s.Files = NewFilesService(s) + s.Reports = NewReportsService(s) + s.UserProfiles = NewUserProfilesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + DimensionValues *DimensionValuesService + + Files *FilesService + + Reports *ReportsService + + UserProfiles *UserProfilesService +} + +func NewDimensionValuesService(s *Service) *DimensionValuesService { + rs := &DimensionValuesService{s: s} + return rs +} + +type DimensionValuesService struct { + s *Service +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Files = NewReportsFilesService(s) + return rs +} + +type ReportsService struct { + s *Service + + Files *ReportsFilesService +} + +func NewReportsFilesService(s *Service) *ReportsFilesService { + rs := &ReportsFilesService{s: s} + return rs +} + +type ReportsFilesService struct { + s *Service +} + +func NewUserProfilesService(s *Service) *UserProfilesService { + rs := &UserProfilesService{s: s} + return rs +} + +type UserProfilesService struct { + s *Service +} + +type Activities struct { + // Filters: List of activity filters. The dimension values need to be + // all either of type "dfa:activity" or "dfa:activityGroup". + Filters []*DimensionValue `json:"filters,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#activities. + Kind string `json:"kind,omitempty"` + + // MetricNames: List of names of floodlight activity metrics. + MetricNames []string `json:"metricNames,omitempty"` +} + +type CustomRichMediaEvents struct { + // FilteredEventIds: List of custom rich media event IDs. Dimension + // values must be all of type dfa:richMediaEventTypeIdAndName. + FilteredEventIds []*DimensionValue `json:"filteredEventIds,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#customRichMediaEvents. + Kind string `json:"kind,omitempty"` +} + +type DateRange struct { + // EndDate: The end date of the date range, inclusive. A string of the + // format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dateRange. + Kind string `json:"kind,omitempty"` + + // RelativeDateRange: The date range relative to the date of when the + // report is run, one of: + // - "TODAY" + // - "YESTERDAY" + // - "WEEK_TO_DATE" + // + // - "MONTH_TO_DATE" + // - "QUARTER_TO_DATE" + // - "YEAR_TO_DATE" + // - + // "PREVIOUS_WEEK" + // - "PREVIOUS_MONTH" + // - "PREVIOUS_QUARTER" + // - + // "PREVIOUS_YEAR" + // - "LAST_7_DAYS" + // - "LAST_30_DAYS" + // - "LAST_90_DAYS" + // + // - "LAST_365_DAYS" + // - "LAST_24_MONTHS" + RelativeDateRange string `json:"relativeDateRange,omitempty"` + + // StartDate: The start date of the date range, inclusive. A string of + // the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type DimensionFilter struct { + // DimensionName: The name of the dimension to filter. + DimensionName string `json:"dimensionName,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionFilter. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension to filter. + Value string `json:"value,omitempty"` +} + +type DimensionValue struct { + // DimensionName: The name of the dimension. + DimensionName string `json:"dimensionName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID associated with the value if available. + Id string `json:"id,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionValue. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension. + Value string `json:"value,omitempty"` +} + +type DimensionValueList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The dimension values returned in this response. + Items []*DimensionValue `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#dimensionValueList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through dimension + // values. To retrieve the next page of results, set the next request's + // "pageToken" to the value of this field. The page token is only valid + // for a limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DimensionValueRequest struct { + // DimensionName: The name of the dimension for which values should be + // requested. + DimensionName string `json:"dimensionName,omitempty"` + + // EndDate: The end date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Filters: The list of filters by which to filter values. The filters + // are ANDed. + Filters []*DimensionFilter `json:"filters,omitempty"` + + // Kind: The kind of request this is, in this case + // dfareporting#dimensionValueRequest. + Kind string `json:"kind,omitempty"` + + // StartDate: The start date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type File struct { + // DateRange: The date range for which the file has report data. The + // date range will always be the absolute date range for which the + // report is run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name of the file. + FileName string `json:"fileName,omitempty"` + + // Format: The output format of the report. Only available once the file + // is available. + Format string `json:"format,omitempty"` + + // Id: The unique ID of this report file. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#file. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp in milliseconds since epoch when this + // file was last modified. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // ReportId: The ID of the report this file was generated from. + ReportId int64 `json:"reportId,omitempty,string"` + + // Status: The status of the report file, one of: + // - "PROCESSING" + // - + // "REPORT_AVAILABLE" + // - "FAILED" + // - "CANCELLED" + Status string `json:"status,omitempty"` + + // Urls: The urls where the completed report file can be downloaded. + Urls *FileUrls `json:"urls,omitempty"` +} + +type FileUrls struct { + // ApiUrl: The url for downloading the report data through the API. + ApiUrl string `json:"apiUrl,omitempty"` + + // BrowserUrl: The url for downloading the report data through a + // browser. + BrowserUrl string `json:"browserUrl,omitempty"` +} + +type FileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The files returned in this response. + Items []*File `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#fileList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through files. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Recipient struct { + // DeliveryType: The delivery type for the recipient, one of: + // - + // "ATTACHMENT" + // - "LINK" + DeliveryType string `json:"deliveryType,omitempty"` + + // Email: The email address of the recipient. + Email string `json:"email,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#recipient. + Kind string `json:"kind,omitempty"` +} + +type Report struct { + // AccountId: The account ID to which this report belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // ActiveGrpCriteria: The report criteria for a report of type + // "ACTIVE_GRP". + ActiveGrpCriteria *ReportActiveGrpCriteria `json:"activeGrpCriteria,omitempty"` + + // Criteria: The report criteria for a report of type "STANDARD". + Criteria *ReportCriteria `json:"criteria,omitempty"` + + // CrossDimensionReachCriteria: The report criteria for a report of type + // "CROSS_DIMENSION_REACH". + CrossDimensionReachCriteria *ReportCrossDimensionReachCriteria `json:"crossDimensionReachCriteria,omitempty"` + + // Delivery: The report's email delivery settings. + Delivery *ReportDelivery `json:"delivery,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name used when generating report files for this + // report. + FileName string `json:"fileName,omitempty"` + + // FloodlightCriteria: The report criteria for a report of type + // "FLOODLIGHT". + FloodlightCriteria *ReportFloodlightCriteria `json:"floodlightCriteria,omitempty"` + + // Format: The output format of the report, one of: + // - "CSV" + // - "EXCEL" + // If not specified, default format is "CSV". Note that the actual + // format in the completed report file might differ if for instance the + // report's size exceeds the format's capabilities. "CSV" will then be + // the fallback format. + Format string `json:"format,omitempty"` + + // Id: The unique ID identifying this report resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#report. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp (in milliseconds since epoch) of when + // this report was last modified. + LastModifiedTime uint64 `json:"lastModifiedTime,omitempty,string"` + + // Name: The name of the report. + Name string `json:"name,omitempty"` + + // OwnerProfileId: The user profile id of the owner of this report. + OwnerProfileId int64 `json:"ownerProfileId,omitempty,string"` + + // PathToConversionCriteria: The report criteria for a report of type + // "PATH_TO_CONVERSION". + PathToConversionCriteria *ReportPathToConversionCriteria `json:"pathToConversionCriteria,omitempty"` + + // ReachCriteria: The report criteria for a report of type "REACH". + ReachCriteria *ReportReachCriteria `json:"reachCriteria,omitempty"` + + // Schedule: The report's schedule. Can only be set if the report's + // 'dateRange' is a relative date range and the relative date range is + // not "TODAY". + Schedule *ReportSchedule `json:"schedule,omitempty"` + + // SubAccountId: The subbaccount ID to which this report belongs if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // Type: The type of the report, one of: + // - STANDARD + // - REACH + // - + // ACTIVE_GRP + // - PATH_TO_CONVERSION + // - FLOODLIGHT + // - + // CROSS_DIMENSION_REACH + Type string `json:"type,omitempty"` +} + +type ReportActiveGrpCriteria struct { + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + // A valid active GRP + // report needs to have exactly one DimensionValue for the United States + // in addition to any advertiser or campaign dimension values. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range for which this report should be run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of standard dimensions the report should + // include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCrossDimensionReachCriteria struct { + // Breakdown: The list of dimensions the report should include. + Breakdown []*SortedDimension `json:"breakdown,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Dimension: The dimension option, one of: + // - "ADVERTISER" + // - + // "CAMPAIGN" + // - "SITE_BY_ADVERTISER" + // - "SITE_BY_CAMPAIGN" + Dimension string `json:"dimension,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // OverlapMetricNames: The list of names of overlap metrics the report + // should include. + OverlapMetricNames []string `json:"overlapMetricNames,omitempty"` + + // Pivoted: Whether the report is pivoted or not. Defaults to true. + Pivoted bool `json:"pivoted,omitempty"` +} + +type ReportDelivery struct { + // EmailOwner: Whether the report should be emailed to the report owner. + EmailOwner bool `json:"emailOwner,omitempty"` + + // EmailOwnerDeliveryType: The type of delivery for the owner to + // receive, if enabled. One of: + // - "ATTACHMENT" + // - "LINK" + EmailOwnerDeliveryType string `json:"emailOwnerDeliveryType,omitempty"` + + // Message: The message to be sent with each email. + Message string `json:"message,omitempty"` + + // Recipients: The list of recipients to which to email the report. + Recipients []*Recipient `json:"recipients,omitempty"` +} + +type ReportFloodlightCriteria struct { + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportFloodlightCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportFloodlightCriteriaReportProperties struct { + // IncludeAttributedIPConversions: Include conversions that have no + // cookie, but do have an exposure path. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` +} + +type ReportPathToConversionCriteria struct { + // ActivityFilters: The list of 'dfa:activity' values to filter on. + ActivityFilters []*DimensionValue `json:"activityFilters,omitempty"` + + // ConversionDimensions: The list of conversion dimensions the report + // should include. + ConversionDimensions []*SortedDimension `json:"conversionDimensions,omitempty"` + + // CustomFloodlightVariables: The list of custom floodlight variables + // the report should include. + CustomFloodlightVariables []*SortedDimension `json:"customFloodlightVariables,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // PerInteractionDimensions: The list of per interaction dimensions the + // report should include. + PerInteractionDimensions []*SortedDimension `json:"perInteractionDimensions,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportPathToConversionCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportPathToConversionCriteriaReportProperties struct { + // ClicksLookbackWindow: DFA checks to see if a click interaction + // occurred within the specified period of time before a conversion. By + // default the value is pulled from Floodlight or you can manually enter + // a custom value. Valid values: 1-90. + ClicksLookbackWindow int64 `json:"clicksLookbackWindow,omitempty"` + + // ImpressionsLookbackWindow: DFA checks to see if an impression + // interaction occurred within the specified period of time before a + // conversion. By default the value is pulled from Floodlight or you can + // manually enter a custom value. Valid values: 1-90. + ImpressionsLookbackWindow int64 `json:"impressionsLookbackWindow,omitempty"` + + // IncludeAttributedIPConversions: Include conversions that have no + // cookie, but do have an exposure path. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` + + // MaximumClickInteractions: The maximum number of click interactions to + // include in the report. Advertisers currently paying for E2C reports + // get up to 200 (100 clicks, 100 impressions). If another advertiser in + // your network is paying for E2C, you can have up to 5 total exposures + // per report. + MaximumClickInteractions int64 `json:"maximumClickInteractions,omitempty"` + + // MaximumImpressionInteractions: The maximum number of click + // interactions to include in the report. Advertisers currently paying + // for E2C reports get up to 200 (100 clicks, 100 impressions). If + // another advertiser in your network is paying for E2C, you can have up + // to 5 total exposures per report. + MaximumImpressionInteractions int64 `json:"maximumImpressionInteractions,omitempty"` + + // MaximumInteractionGap: The maximum amount of time that can take place + // between interactions (clicks or impressions) by the same user. Valid + // values: 1-90. + MaximumInteractionGap int64 `json:"maximumInteractionGap,omitempty"` + + // PivotOnInteractionPath: Enable pivoting on interaction path. + PivotOnInteractionPath bool `json:"pivotOnInteractionPath,omitempty"` +} + +type ReportReachCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReachByFrequencyMetricNames: The list of names of Reach By Frequency + // metrics the report should include. + ReachByFrequencyMetricNames []string `json:"reachByFrequencyMetricNames,omitempty"` +} + +type ReportSchedule struct { + // Active: Whether the schedule is active or not. Must be set to either + // true or false. + Active bool `json:"active,omitempty"` + + // Every: Defines every how many days, weeks or months the report should + // be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or + // "MONTHLY". + Every int64 `json:"every,omitempty"` + + // ExpirationDate: The expiration date when the scheduled report stops + // running. + ExpirationDate string `json:"expirationDate,omitempty"` + + // Repeats: The interval for which the report is repeated, one of: + // - + // "DAILY", also requires field "every" to be set. + // - "WEEKLY", also + // requires fields "every" and "repeatsOnWeekDays" to be set. + // - + // "TWICE_A_MONTH" + // - "MONTHLY", also requires fields "every" and + // "runsOnDayOfMonth" to be set. + // - "QUARTERLY" + // - "YEARLY" + Repeats string `json:"repeats,omitempty"` + + // RepeatsOnWeekDays: List of week days "WEEKLY" on which scheduled + // reports should run. + RepeatsOnWeekDays []string `json:"repeatsOnWeekDays,omitempty"` + + // RunsOnDayOfMonth: Enum to define for "MONTHLY" scheduled reports + // whether reports should be repeated on the same day of the month as + // "startDate" or the same day of the week of the month. Possible values + // are: + // - DAY_OF_MONTH + // - WEEK_OF_MONTH + // Example: If 'startDate' is + // Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run + // subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" + // would run subsequent reports on the first Monday of the month. + RunsOnDayOfMonth string `json:"runsOnDayOfMonth,omitempty"` + + // StartDate: Start date of date range for which scheduled reports + // should be run. + StartDate string `json:"startDate,omitempty"` +} + +type ReportList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The reports returned in this response. + Items []*Report `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#reportList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through reports. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SortedDimension struct { + // Kind: The kind of resource this is, in this case + // dfareporting#sortedDimension. + Kind string `json:"kind,omitempty"` + + // Name: The name of the dimension. + Name string `json:"name,omitempty"` + + // SortOrder: An optional sort order for the dimension column, one of: + // + // - "ASCENDING" + // - "DESCENDING" + SortOrder string `json:"sortOrder,omitempty"` +} + +type UserProfile struct { + // AccountId: The account ID to which this profile belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // AccountName: The account name this profile belongs to. + AccountName string `json:"accountName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#userProfile. + Kind string `json:"kind,omitempty"` + + // ProfileId: The unique ID of the user profile. + ProfileId int64 `json:"profileId,omitempty,string"` + + // SubAccountId: The sub account ID this profile belongs to if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // SubAccountName: The sub account name this profile belongs to if + // applicable. + SubAccountName string `json:"subAccountName,omitempty"` + + // UserName: The user name. + UserName string `json:"userName,omitempty"` +} + +type UserProfileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The user profiles returned in this response. + Items []*UserProfile `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#userProfileList. + Kind string `json:"kind,omitempty"` +} + +// method id "dfareporting.dimensionValues.query": + +type DimensionValuesQueryCall struct { + s *Service + profileId int64 + dimensionvaluerequest *DimensionValueRequest + opt_ map[string]interface{} +} + +// Query: Retrieves list of report dimension values for a list of +// filters. +func (r *DimensionValuesService) Query(profileId int64, dimensionvaluerequest *DimensionValueRequest) *DimensionValuesQueryCall { + c := &DimensionValuesQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.dimensionvaluerequest = dimensionvaluerequest + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *DimensionValuesQueryCall) MaxResults(maxResults int64) *DimensionValuesQueryCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *DimensionValuesQueryCall) PageToken(pageToken string) *DimensionValuesQueryCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DimensionValuesQueryCall) Do() (*DimensionValueList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dimensionvaluerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/dimensionvalues/query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DimensionValueList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of report dimension values for a list of filters.", + // "httpMethod": "POST", + // "id": "dfareporting.dimensionValues.query", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/dimensionvalues/query", + // "request": { + // "$ref": "DimensionValueRequest" + // }, + // "response": { + // "$ref": "DimensionValueList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.files.list": + +type FilesListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a user profile. +func (r *FilesService) List(profileId int64) *FilesListCall { + c := &FilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *FilesListCall) MaxResults(maxResults int64) *FilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *FilesListCall) PageToken(pageToken string) *FilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *FilesListCall) SortField(sortField string) *FilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *FilesListCall) SortOrder(sortOrder string) *FilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *FilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a user profile.", + // "httpMethod": "GET", + // "id": "dfareporting.files.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.delete": + +type ReportsDeleteCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Delete: Deletes a report by its ID. +func (r *ReportsService) Delete(profileId int64, reportId int64) *ReportsDeleteCall { + c := &ReportsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a report by its ID.", + // "httpMethod": "DELETE", + // "id": "dfareporting.reports.delete", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.get": + +type ReportsGetCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report by its ID. +func (r *ReportsService) Get(profileId int64, reportId int64) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report by its ID.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.get", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.insert": + +type ReportsInsertCall struct { + s *Service + profileId int64 + report *Report + opt_ map[string]interface{} +} + +// Insert: Creates a report. +func (r *ReportsService) Insert(profileId int64, report *Report) *ReportsInsertCall { + c := &ReportsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.report = report + return c +} + +func (c *ReportsInsertCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.insert", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.list": + +type ReportsListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Retrieves list of reports. +func (r *ReportsService) List(profileId int64) *ReportsListCall { + c := &ReportsListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsListCall) MaxResults(maxResults int64) *ReportsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsListCall) PageToken(pageToken string) *ReportsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsListCall) SortField(sortField string) *ReportsListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsListCall) SortOrder(sortOrder string) *ReportsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsListCall) Do() (*ReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of reports.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME", + // "NAME" + // ], + // "enumDescriptions": [ + // "Sort by report ID.", + // "Sort by 'lastModifiedTime' field.", + // "Sort by name of reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "response": { + // "$ref": "ReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.patch": + +type ReportsPatchCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Patch: Updates a report. This method supports patch semantics. +func (r *ReportsService) Patch(profileId int64, reportId int64, report *Report) *ReportsPatchCall { + c := &ReportsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsPatchCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "dfareporting.reports.patch", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.run": + +type ReportsRunCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Run: Runs a report. +func (r *ReportsService) Run(profileId int64, reportId int64) *ReportsRunCall { + c := &ReportsRunCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// Synchronous sets the optional parameter "synchronous": If set and +// true, tries to run the report synchronously. +func (c *ReportsRunCall) Synchronous(synchronous bool) *ReportsRunCall { + c.opt_["synchronous"] = synchronous + return c +} + +func (c *ReportsRunCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["synchronous"]; ok { + params.Set("synchronous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/run") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.run", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "synchronous": { + // "description": "If set and true, tries to run the report synchronously.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/run", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.update": + +type ReportsUpdateCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Update: Updates a report. +func (r *ReportsService) Update(profileId int64, reportId int64, report *Report) *ReportsUpdateCall { + c := &ReportsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsUpdateCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report.", + // "httpMethod": "PUT", + // "id": "dfareporting.reports.update", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.get": + +type ReportsFilesGetCall struct { + s *Service + profileId int64 + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file. +func (r *ReportsFilesService) Get(profileId int64, reportId int64, fileId int64) *ReportsFilesGetCall { + c := &ReportsFilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *ReportsFilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.get", + // "parameterOrder": [ + // "profileId", + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.list": + +type ReportsFilesListCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a report. +func (r *ReportsFilesService) List(profileId int64, reportId int64) *ReportsFilesListCall { + c := &ReportsFilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsFilesListCall) MaxResults(maxResults int64) *ReportsFilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsFilesListCall) PageToken(pageToken string) *ReportsFilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsFilesListCall) SortField(sortField string) *ReportsFilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsFilesListCall) SortOrder(sortOrder string) *ReportsFilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsFilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a report.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.list", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the parent report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.get": + +type UserProfilesGetCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// Get: Gets one user profile by ID. +func (r *UserProfilesService) Get(profileId int64) *UserProfilesGetCall { + c := &UserProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +func (c *UserProfilesGetCall) Do() (*UserProfile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user profile by ID.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.get", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}", + // "response": { + // "$ref": "UserProfile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.list": + +type UserProfilesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves list of user profiles for a user. +func (r *UserProfilesService) List() *UserProfilesListCall { + c := &UserProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserProfilesListCall) Do() (*UserProfileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of user profiles for a user.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.list", + // "path": "userprofiles", + // "response": { + // "$ref": "UserProfileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-api.json b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-api.json new file mode 100644 index 0000000000000..73b159a6be33c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-api.json @@ -0,0 +1,1588 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/qvRmv3vpF4CuJWK6RzcX1h-stNI\"", + "discoveryVersion": "v1", + "id": "dfareporting:v1.2", + "name": "dfareporting", + "version": "v1.2", + "title": "DFA Reporting API", + "description": "Lets you create, run and download reports.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/doubleclick-advertisers/reporting/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/dfareporting/v1.2/", + "basePath": "/dfareporting/v1.2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "dfareporting/v1.2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/dfareporting": { + "description": "View and manage DoubleClick for Advertisers reports" + } + } + } + }, + "schemas": { + "Activities": { + "id": "Activities", + "type": "object", + "description": "Represents an activity group.", + "properties": { + "filters": { + "type": "array", + "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#activities.", + "default": "dfareporting#activities" + }, + "metricNames": { + "type": "array", + "description": "List of names of floodlight activity metrics.", + "items": { + "type": "string" + } + } + } + }, + "CustomRichMediaEvents": { + "id": "CustomRichMediaEvents", + "type": "object", + "description": "Represents a Custom Rich Media Events group.", + "properties": { + "filteredEventIds": { + "type": "array", + "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.", + "default": "dfareporting#customRichMediaEvents" + } + } + }, + "DateRange": { + "id": "DateRange", + "type": "object", + "description": "Represents a date range.", + "properties": { + "endDate": { + "type": "string", + "description": "The end date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dateRange.", + "default": "dfareporting#dateRange" + }, + "relativeDateRange": { + "type": "string", + "description": "The date range relative to the date of when the report is run, one of: \n- \"TODAY\" \n- \"YESTERDAY\" \n- \"WEEK_TO_DATE\" \n- \"MONTH_TO_DATE\" \n- \"QUARTER_TO_DATE\" \n- \"YEAR_TO_DATE\" \n- \"PREVIOUS_WEEK\" \n- \"PREVIOUS_MONTH\" \n- \"PREVIOUS_QUARTER\" \n- \"PREVIOUS_YEAR\" \n- \"LAST_7_DAYS\" \n- \"LAST_30_DAYS\" \n- \"LAST_90_DAYS\" \n- \"LAST_365_DAYS\" \n- \"LAST_24_MONTHS\"" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "DimensionFilter": { + "id": "DimensionFilter", + "type": "object", + "description": "Represents a dimension filter.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension to filter." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.", + "default": "dfareporting#dimensionFilter" + }, + "value": { + "type": "string", + "description": "The value of the dimension to filter." + } + } + }, + "DimensionValue": { + "id": "DimensionValue", + "type": "object", + "description": "Represents a DimensionValue resource.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID associated with the value if available." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionValue.", + "default": "dfareporting#dimensionValue" + }, + "matchType": { + "type": "string", + "description": "Determines how the 'value' field is matched when filtering. One of: \n- EXACT (default if not specified) \n- CONTAINS \n- BEGINS_WITH \n- WILDCARD_EXPRESSION (allowing '*' as a placeholder for variable length character sequences, it can be escaped with a backslash.) Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT." + }, + "value": { + "type": "string", + "description": "The value of the dimension." + } + } + }, + "DimensionValueList": { + "id": "DimensionValueList", + "type": "object", + "description": "Represents the list of DimensionValue resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The dimension values returned in this response.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#dimensionValueList.", + "default": "dfareporting#dimensionValueList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "DimensionValueRequest": { + "id": "DimensionValueRequest", + "type": "object", + "description": "Represents a DimensionValuesRequest.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension for which values should be requested." + }, + "endDate": { + "type": "string", + "description": "The end date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "filters": { + "type": "array", + "description": "The list of filters by which to filter values. The filters are ANDed.", + "items": { + "$ref": "DimensionFilter" + } + }, + "kind": { + "type": "string", + "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest.", + "default": "dfareporting#dimensionValueRequest" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "Represents a File resource. A File contains the meta-data for a report run. It shows the status of the run and holds the urls to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name of the file." + }, + "format": { + "type": "string", + "description": "The output format of the report. Only available once the file is available." + }, + "id": { + "type": "string", + "description": "The unique ID of this report file.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#file.", + "default": "dfareporting#file" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp in milliseconds since epoch when this file was last modified.", + "format": "int64" + }, + "reportId": { + "type": "string", + "description": "The ID of the report this file was generated from.", + "format": "int64" + }, + "status": { + "type": "string", + "description": "The status of the report file, one of: \n- \"PROCESSING\" \n- \"REPORT_AVAILABLE\" \n- \"FAILED\" \n- \"CANCELLED\"" + }, + "urls": { + "type": "object", + "description": "The urls where the completed report file can be downloaded.", + "properties": { + "apiUrl": { + "type": "string", + "description": "The url for downloading the report data through the API." + }, + "browserUrl": { + "type": "string", + "description": "The url for downloading the report data through a browser." + } + } + } + } + }, + "FileList": { + "id": "FileList", + "type": "object", + "description": "Represents the list of File resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The files returned in this response.", + "items": { + "$ref": "File" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#fileList.", + "default": "dfareporting#fileList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "Recipient": { + "id": "Recipient", + "type": "object", + "description": "Represents a recipient.", + "properties": { + "deliveryType": { + "type": "string", + "description": "The delivery type for the recipient, one of: \n- \"ATTACHMENT\" \n- \"LINK\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "email": { + "type": "string", + "description": "The email address of the recipient.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#recipient.", + "default": "dfareporting#recipient" + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "Represents a Report resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this report belongs.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "activeGrpCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"ACTIVE_GRP\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.\nA valid active GRP report needs to have exactly one DimensionValue for the United States in addition to any advertiser or campaign dimension values.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "criteria": { + "type": "object", + "description": "The report criteria for a report of type \"STANDARD\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which this report should be run." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of standard dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "crossDimensionReachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".", + "properties": { + "breakdown": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimension": { + "type": "string", + "description": "The dimension option, one of: \n- \"ADVERTISER\" \n- \"CAMPAIGN\" \n- \"SITE_BY_ADVERTISER\" \n- \"SITE_BY_CAMPAIGN\"" + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.", + "items": { + "$ref": "DimensionValue" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "overlapMetricNames": { + "type": "array", + "description": "The list of names of overlap metrics the report should include.", + "items": { + "type": "string" + } + }, + "pivoted": { + "type": "boolean", + "description": "Whether the report is pivoted or not. Defaults to true." + } + } + }, + "delivery": { + "type": "object", + "description": "The report's email delivery settings.", + "properties": { + "emailOwner": { + "type": "boolean", + "description": "Whether the report should be emailed to the report owner." + }, + "emailOwnerDeliveryType": { + "type": "string", + "description": "The type of delivery for the owner to receive, if enabled. One of: \n- \"ATTACHMENT\" \n- \"LINK\"" + }, + "message": { + "type": "string", + "description": "The message to be sent with each email." + }, + "recipients": { + "type": "array", + "description": "The list of recipients to which to email the report.", + "items": { + "$ref": "Recipient" + } + } + } + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name used when generating report files for this report." + }, + "floodlightCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"FLOODLIGHT\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no cookie, but do have an exposure path." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + } + } + } + } + }, + "format": { + "type": "string", + "description": "The output format of the report, one of: \n- \"CSV\" \n- \"EXCEL\" If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format." + }, + "id": { + "type": "string", + "description": "The unique ID identifying this report resource.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#report.", + "default": "dfareporting#report" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.", + "format": "uint64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "name": { + "type": "string", + "description": "The name of the report.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "ownerProfileId": { + "type": "string", + "description": "The user profile id of the owner of this report.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "pathToConversionCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".", + "properties": { + "activityFilters": { + "type": "array", + "description": "The list of 'dfa:activity' values to filter on.", + "items": { + "$ref": "DimensionValue" + } + }, + "conversionDimensions": { + "type": "array", + "description": "The list of conversion dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "customFloodlightVariables": { + "type": "array", + "description": "The list of custom floodlight variables the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "perInteractionDimensions": { + "type": "array", + "description": "The list of per interaction dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "clicksLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "impressionsLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no cookie, but do have an exposure path." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + }, + "maximumClickInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumImpressionInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumInteractionGap": { + "type": "integer", + "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.", + "format": "int32" + }, + "pivotOnInteractionPath": { + "type": "boolean", + "description": "Enable pivoting on interaction path." + } + } + } + } + }, + "reachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"REACH\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reachByFrequencyMetricNames": { + "type": "array", + "description": "The list of names of Reach By Frequency metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "schedule": { + "type": "object", + "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".", + "properties": { + "active": { + "type": "boolean", + "description": "Whether the schedule is active or not. Must be set to either true or false.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "every": { + "type": "integer", + "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".", + "format": "int32" + }, + "expirationDate": { + "type": "string", + "description": "The expiration date when the scheduled report stops running.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeats": { + "type": "string", + "description": "The interval for which the report is repeated, one of: \n- \"DAILY\", also requires field \"every\" to be set. \n- \"WEEKLY\", also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. \n- \"TWICE_A_MONTH\" \n- \"MONTHLY\", also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. \n- \"QUARTERLY\" \n- \"YEARLY\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeatsOnWeekDays": { + "type": "array", + "description": "List of week days \"WEEKLY\" on which scheduled reports should run.", + "items": { + "type": "string" + } + }, + "runsOnDayOfMonth": { + "type": "string", + "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Possible values are: \n- DAY_OF_MONTH \n- WEEK_OF_MONTH \nExample: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month." + }, + "startDate": { + "type": "string", + "description": "Start date of date range for which scheduled reports should be run.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "subAccountId": { + "type": "string", + "description": "The subbaccount ID to which this report belongs if applicable.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The type of the report, one of: \n- STANDARD \n- REACH \n- ACTIVE_GRP \n- PATH_TO_CONVERSION \n- FLOODLIGHT \n- CROSS_DIMENSION_REACH", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "ReportList": { + "id": "ReportList", + "type": "object", + "description": "Represents the list of reports.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The reports returned in this response.", + "items": { + "$ref": "Report" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#reportList.", + "default": "dfareporting#reportList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "SortedDimension": { + "id": "SortedDimension", + "type": "object", + "description": "Represents a sorted dimension.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#sortedDimension.", + "default": "dfareporting#sortedDimension" + }, + "name": { + "type": "string", + "description": "The name of the dimension." + }, + "sortOrder": { + "type": "string", + "description": "An optional sort order for the dimension column, one of: \n- \"ASCENDING\" \n- \"DESCENDING\"" + } + } + }, + "UserProfile": { + "id": "UserProfile", + "type": "object", + "description": "Represents a UserProfile resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this profile belongs.", + "format": "int64" + }, + "accountName": { + "type": "string", + "description": "The account name this profile belongs to." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#userProfile.", + "default": "dfareporting#userProfile" + }, + "profileId": { + "type": "string", + "description": "The unique ID of the user profile.", + "format": "int64" + }, + "subAccountId": { + "type": "string", + "description": "The sub account ID this profile belongs to if applicable.", + "format": "int64" + }, + "subAccountName": { + "type": "string", + "description": "The sub account name this profile belongs to if applicable." + }, + "userName": { + "type": "string", + "description": "The user name." + } + } + }, + "UserProfileList": { + "id": "UserProfileList", + "type": "object", + "description": "Represents the list of user profiles.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The user profiles returned in this response.", + "items": { + "$ref": "UserProfile" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#userProfileList.", + "default": "dfareporting#userProfileList" + } + } + } + }, + "resources": { + "dimensionValues": { + "methods": { + "query": { + "id": "dfareporting.dimensionValues.query", + "path": "userprofiles/{profileId}/dimensionvalues/query", + "httpMethod": "POST", + "description": "Retrieves list of report dimension values for a list of filters.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "DimensionValueRequest" + }, + "response": { + "$ref": "DimensionValueList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "files": { + "methods": { + "get": { + "id": "dfareporting.files.get", + "path": "reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file by its report ID and file ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ], + "supportsMediaDownload": true + }, + "list": { + "id": "dfareporting.files.list", + "path": "userprofiles/{profileId}/files", + "httpMethod": "GET", + "description": "Lists files for a user profile.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "scope": { + "type": "string", + "description": "The scope that defines which results are returned, default is 'MINE'.", + "default": "MINE", + "enum": [ + "ALL", + "MINE", + "SHARED_WITH_ME" + ], + "enumDescriptions": [ + "All files in account.", + "My files.", + "Files shared with me." + ], + "location": "query" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "reports": { + "methods": { + "delete": { + "id": "dfareporting.reports.delete", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "DELETE", + "description": "Deletes a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "get": { + "id": "dfareporting.reports.get", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "GET", + "description": "Retrieves a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "insert": { + "id": "dfareporting.reports.insert", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "POST", + "description": "Creates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.list", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "GET", + "description": "Retrieves list of reports.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "scope": { + "type": "string", + "description": "The scope that defines which results are returned, default is 'MINE'.", + "default": "MINE", + "enum": [ + "ALL", + "MINE" + ], + "enumDescriptions": [ + "All reports in account.", + "My reports." + ], + "location": "query" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME", + "NAME" + ], + "enumDescriptions": [ + "Sort by report ID.", + "Sort by 'lastModifiedTime' field.", + "Sort by name of reports." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "ReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "patch": { + "id": "dfareporting.reports.patch", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PATCH", + "description": "Updates a report. This method supports patch semantics.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "run": { + "id": "dfareporting.reports.run", + "path": "userprofiles/{profileId}/reports/{reportId}/run", + "httpMethod": "POST", + "description": "Runs a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + }, + "synchronous": { + "type": "boolean", + "description": "If set and true, tries to run the report synchronously.", + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "update": { + "id": "dfareporting.reports.update", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PUT", + "description": "Updates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + }, + "resources": { + "files": { + "methods": { + "get": { + "id": "dfareporting.reports.files.get", + "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ], + "supportsMediaDownload": true + }, + "list": { + "id": "dfareporting.reports.files.list", + "path": "userprofiles/{profileId}/reports/{reportId}/files", + "httpMethod": "GET", + "description": "Lists files for a report.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the parent report.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } + }, + "userProfiles": { + "methods": { + "get": { + "id": "dfareporting.userProfiles.get", + "path": "userprofiles/{profileId}", + "httpMethod": "GET", + "description": "Gets one user profile by ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "UserProfile" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.userProfiles.list", + "path": "userprofiles", + "httpMethod": "GET", + "description": "Retrieves list of user profiles for a user.", + "response": { + "$ref": "UserProfileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-gen.go b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-gen.go new file mode 100644 index 0000000000000..5a1a8e503bdbb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.2/dfareporting-gen.go @@ -0,0 +1,2171 @@ +// Package dfareporting provides access to the DFA Reporting API. +// +// See https://developers.google.com/doubleclick-advertisers/reporting/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/dfareporting/v1.2" +// ... +// dfareportingService, err := dfareporting.New(oauthHttpClient) +package dfareporting + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "dfareporting:v1.2" +const apiName = "dfareporting" +const apiVersion = "v1.2" +const basePath = "https://www.googleapis.com/dfareporting/v1.2/" + +// OAuth2 scopes used by this API. +const ( + // View and manage DoubleClick for Advertisers reports + DfareportingScope = "https://www.googleapis.com/auth/dfareporting" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.DimensionValues = NewDimensionValuesService(s) + s.Files = NewFilesService(s) + s.Reports = NewReportsService(s) + s.UserProfiles = NewUserProfilesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + DimensionValues *DimensionValuesService + + Files *FilesService + + Reports *ReportsService + + UserProfiles *UserProfilesService +} + +func NewDimensionValuesService(s *Service) *DimensionValuesService { + rs := &DimensionValuesService{s: s} + return rs +} + +type DimensionValuesService struct { + s *Service +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Files = NewReportsFilesService(s) + return rs +} + +type ReportsService struct { + s *Service + + Files *ReportsFilesService +} + +func NewReportsFilesService(s *Service) *ReportsFilesService { + rs := &ReportsFilesService{s: s} + return rs +} + +type ReportsFilesService struct { + s *Service +} + +func NewUserProfilesService(s *Service) *UserProfilesService { + rs := &UserProfilesService{s: s} + return rs +} + +type UserProfilesService struct { + s *Service +} + +type Activities struct { + // Filters: List of activity filters. The dimension values need to be + // all either of type "dfa:activity" or "dfa:activityGroup". + Filters []*DimensionValue `json:"filters,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#activities. + Kind string `json:"kind,omitempty"` + + // MetricNames: List of names of floodlight activity metrics. + MetricNames []string `json:"metricNames,omitempty"` +} + +type CustomRichMediaEvents struct { + // FilteredEventIds: List of custom rich media event IDs. Dimension + // values must be all of type dfa:richMediaEventTypeIdAndName. + FilteredEventIds []*DimensionValue `json:"filteredEventIds,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#customRichMediaEvents. + Kind string `json:"kind,omitempty"` +} + +type DateRange struct { + // EndDate: The end date of the date range, inclusive. A string of the + // format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dateRange. + Kind string `json:"kind,omitempty"` + + // RelativeDateRange: The date range relative to the date of when the + // report is run, one of: + // - "TODAY" + // - "YESTERDAY" + // - "WEEK_TO_DATE" + // + // - "MONTH_TO_DATE" + // - "QUARTER_TO_DATE" + // - "YEAR_TO_DATE" + // - + // "PREVIOUS_WEEK" + // - "PREVIOUS_MONTH" + // - "PREVIOUS_QUARTER" + // - + // "PREVIOUS_YEAR" + // - "LAST_7_DAYS" + // - "LAST_30_DAYS" + // - "LAST_90_DAYS" + // + // - "LAST_365_DAYS" + // - "LAST_24_MONTHS" + RelativeDateRange string `json:"relativeDateRange,omitempty"` + + // StartDate: The start date of the date range, inclusive. A string of + // the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type DimensionFilter struct { + // DimensionName: The name of the dimension to filter. + DimensionName string `json:"dimensionName,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionFilter. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension to filter. + Value string `json:"value,omitempty"` +} + +type DimensionValue struct { + // DimensionName: The name of the dimension. + DimensionName string `json:"dimensionName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID associated with the value if available. + Id string `json:"id,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionValue. + Kind string `json:"kind,omitempty"` + + // MatchType: Determines how the 'value' field is matched when + // filtering. One of: + // - EXACT (default if not specified) + // - CONTAINS + // + // - BEGINS_WITH + // - WILDCARD_EXPRESSION (allowing '*' as a placeholder + // for variable length character sequences, it can be escaped with a + // backslash.) Note, only paid search dimensions ('dfa:paidSearch*') + // allow a matchType other than EXACT. + MatchType string `json:"matchType,omitempty"` + + // Value: The value of the dimension. + Value string `json:"value,omitempty"` +} + +type DimensionValueList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The dimension values returned in this response. + Items []*DimensionValue `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#dimensionValueList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through dimension + // values. To retrieve the next page of results, set the next request's + // "pageToken" to the value of this field. The page token is only valid + // for a limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DimensionValueRequest struct { + // DimensionName: The name of the dimension for which values should be + // requested. + DimensionName string `json:"dimensionName,omitempty"` + + // EndDate: The end date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Filters: The list of filters by which to filter values. The filters + // are ANDed. + Filters []*DimensionFilter `json:"filters,omitempty"` + + // Kind: The kind of request this is, in this case + // dfareporting#dimensionValueRequest. + Kind string `json:"kind,omitempty"` + + // StartDate: The start date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type File struct { + // DateRange: The date range for which the file has report data. The + // date range will always be the absolute date range for which the + // report is run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name of the file. + FileName string `json:"fileName,omitempty"` + + // Format: The output format of the report. Only available once the file + // is available. + Format string `json:"format,omitempty"` + + // Id: The unique ID of this report file. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#file. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp in milliseconds since epoch when this + // file was last modified. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // ReportId: The ID of the report this file was generated from. + ReportId int64 `json:"reportId,omitempty,string"` + + // Status: The status of the report file, one of: + // - "PROCESSING" + // - + // "REPORT_AVAILABLE" + // - "FAILED" + // - "CANCELLED" + Status string `json:"status,omitempty"` + + // Urls: The urls where the completed report file can be downloaded. + Urls *FileUrls `json:"urls,omitempty"` +} + +type FileUrls struct { + // ApiUrl: The url for downloading the report data through the API. + ApiUrl string `json:"apiUrl,omitempty"` + + // BrowserUrl: The url for downloading the report data through a + // browser. + BrowserUrl string `json:"browserUrl,omitempty"` +} + +type FileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The files returned in this response. + Items []*File `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#fileList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through files. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Recipient struct { + // DeliveryType: The delivery type for the recipient, one of: + // - + // "ATTACHMENT" + // - "LINK" + DeliveryType string `json:"deliveryType,omitempty"` + + // Email: The email address of the recipient. + Email string `json:"email,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#recipient. + Kind string `json:"kind,omitempty"` +} + +type Report struct { + // AccountId: The account ID to which this report belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // ActiveGrpCriteria: The report criteria for a report of type + // "ACTIVE_GRP". + ActiveGrpCriteria *ReportActiveGrpCriteria `json:"activeGrpCriteria,omitempty"` + + // Criteria: The report criteria for a report of type "STANDARD". + Criteria *ReportCriteria `json:"criteria,omitempty"` + + // CrossDimensionReachCriteria: The report criteria for a report of type + // "CROSS_DIMENSION_REACH". + CrossDimensionReachCriteria *ReportCrossDimensionReachCriteria `json:"crossDimensionReachCriteria,omitempty"` + + // Delivery: The report's email delivery settings. + Delivery *ReportDelivery `json:"delivery,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name used when generating report files for this + // report. + FileName string `json:"fileName,omitempty"` + + // FloodlightCriteria: The report criteria for a report of type + // "FLOODLIGHT". + FloodlightCriteria *ReportFloodlightCriteria `json:"floodlightCriteria,omitempty"` + + // Format: The output format of the report, one of: + // - "CSV" + // - "EXCEL" + // If not specified, default format is "CSV". Note that the actual + // format in the completed report file might differ if for instance the + // report's size exceeds the format's capabilities. "CSV" will then be + // the fallback format. + Format string `json:"format,omitempty"` + + // Id: The unique ID identifying this report resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#report. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp (in milliseconds since epoch) of when + // this report was last modified. + LastModifiedTime uint64 `json:"lastModifiedTime,omitempty,string"` + + // Name: The name of the report. + Name string `json:"name,omitempty"` + + // OwnerProfileId: The user profile id of the owner of this report. + OwnerProfileId int64 `json:"ownerProfileId,omitempty,string"` + + // PathToConversionCriteria: The report criteria for a report of type + // "PATH_TO_CONVERSION". + PathToConversionCriteria *ReportPathToConversionCriteria `json:"pathToConversionCriteria,omitempty"` + + // ReachCriteria: The report criteria for a report of type "REACH". + ReachCriteria *ReportReachCriteria `json:"reachCriteria,omitempty"` + + // Schedule: The report's schedule. Can only be set if the report's + // 'dateRange' is a relative date range and the relative date range is + // not "TODAY". + Schedule *ReportSchedule `json:"schedule,omitempty"` + + // SubAccountId: The subbaccount ID to which this report belongs if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // Type: The type of the report, one of: + // - STANDARD + // - REACH + // - + // ACTIVE_GRP + // - PATH_TO_CONVERSION + // - FLOODLIGHT + // - + // CROSS_DIMENSION_REACH + Type string `json:"type,omitempty"` +} + +type ReportActiveGrpCriteria struct { + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + // A valid active GRP + // report needs to have exactly one DimensionValue for the United States + // in addition to any advertiser or campaign dimension values. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range for which this report should be run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of standard dimensions the report should + // include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCrossDimensionReachCriteria struct { + // Breakdown: The list of dimensions the report should include. + Breakdown []*SortedDimension `json:"breakdown,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Dimension: The dimension option, one of: + // - "ADVERTISER" + // - + // "CAMPAIGN" + // - "SITE_BY_ADVERTISER" + // - "SITE_BY_CAMPAIGN" + Dimension string `json:"dimension,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // OverlapMetricNames: The list of names of overlap metrics the report + // should include. + OverlapMetricNames []string `json:"overlapMetricNames,omitempty"` + + // Pivoted: Whether the report is pivoted or not. Defaults to true. + Pivoted bool `json:"pivoted,omitempty"` +} + +type ReportDelivery struct { + // EmailOwner: Whether the report should be emailed to the report owner. + EmailOwner bool `json:"emailOwner,omitempty"` + + // EmailOwnerDeliveryType: The type of delivery for the owner to + // receive, if enabled. One of: + // - "ATTACHMENT" + // - "LINK" + EmailOwnerDeliveryType string `json:"emailOwnerDeliveryType,omitempty"` + + // Message: The message to be sent with each email. + Message string `json:"message,omitempty"` + + // Recipients: The list of recipients to which to email the report. + Recipients []*Recipient `json:"recipients,omitempty"` +} + +type ReportFloodlightCriteria struct { + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportFloodlightCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportFloodlightCriteriaReportProperties struct { + // IncludeAttributedIPConversions: Include conversions that have no + // cookie, but do have an exposure path. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` +} + +type ReportPathToConversionCriteria struct { + // ActivityFilters: The list of 'dfa:activity' values to filter on. + ActivityFilters []*DimensionValue `json:"activityFilters,omitempty"` + + // ConversionDimensions: The list of conversion dimensions the report + // should include. + ConversionDimensions []*SortedDimension `json:"conversionDimensions,omitempty"` + + // CustomFloodlightVariables: The list of custom floodlight variables + // the report should include. + CustomFloodlightVariables []*SortedDimension `json:"customFloodlightVariables,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // PerInteractionDimensions: The list of per interaction dimensions the + // report should include. + PerInteractionDimensions []*SortedDimension `json:"perInteractionDimensions,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportPathToConversionCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportPathToConversionCriteriaReportProperties struct { + // ClicksLookbackWindow: DFA checks to see if a click interaction + // occurred within the specified period of time before a conversion. By + // default the value is pulled from Floodlight or you can manually enter + // a custom value. Valid values: 1-90. + ClicksLookbackWindow int64 `json:"clicksLookbackWindow,omitempty"` + + // ImpressionsLookbackWindow: DFA checks to see if an impression + // interaction occurred within the specified period of time before a + // conversion. By default the value is pulled from Floodlight or you can + // manually enter a custom value. Valid values: 1-90. + ImpressionsLookbackWindow int64 `json:"impressionsLookbackWindow,omitempty"` + + // IncludeAttributedIPConversions: Include conversions that have no + // cookie, but do have an exposure path. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` + + // MaximumClickInteractions: The maximum number of click interactions to + // include in the report. Advertisers currently paying for E2C reports + // get up to 200 (100 clicks, 100 impressions). If another advertiser in + // your network is paying for E2C, you can have up to 5 total exposures + // per report. + MaximumClickInteractions int64 `json:"maximumClickInteractions,omitempty"` + + // MaximumImpressionInteractions: The maximum number of click + // interactions to include in the report. Advertisers currently paying + // for E2C reports get up to 200 (100 clicks, 100 impressions). If + // another advertiser in your network is paying for E2C, you can have up + // to 5 total exposures per report. + MaximumImpressionInteractions int64 `json:"maximumImpressionInteractions,omitempty"` + + // MaximumInteractionGap: The maximum amount of time that can take place + // between interactions (clicks or impressions) by the same user. Valid + // values: 1-90. + MaximumInteractionGap int64 `json:"maximumInteractionGap,omitempty"` + + // PivotOnInteractionPath: Enable pivoting on interaction path. + PivotOnInteractionPath bool `json:"pivotOnInteractionPath,omitempty"` +} + +type ReportReachCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReachByFrequencyMetricNames: The list of names of Reach By Frequency + // metrics the report should include. + ReachByFrequencyMetricNames []string `json:"reachByFrequencyMetricNames,omitempty"` +} + +type ReportSchedule struct { + // Active: Whether the schedule is active or not. Must be set to either + // true or false. + Active bool `json:"active,omitempty"` + + // Every: Defines every how many days, weeks or months the report should + // be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or + // "MONTHLY". + Every int64 `json:"every,omitempty"` + + // ExpirationDate: The expiration date when the scheduled report stops + // running. + ExpirationDate string `json:"expirationDate,omitempty"` + + // Repeats: The interval for which the report is repeated, one of: + // - + // "DAILY", also requires field "every" to be set. + // - "WEEKLY", also + // requires fields "every" and "repeatsOnWeekDays" to be set. + // - + // "TWICE_A_MONTH" + // - "MONTHLY", also requires fields "every" and + // "runsOnDayOfMonth" to be set. + // - "QUARTERLY" + // - "YEARLY" + Repeats string `json:"repeats,omitempty"` + + // RepeatsOnWeekDays: List of week days "WEEKLY" on which scheduled + // reports should run. + RepeatsOnWeekDays []string `json:"repeatsOnWeekDays,omitempty"` + + // RunsOnDayOfMonth: Enum to define for "MONTHLY" scheduled reports + // whether reports should be repeated on the same day of the month as + // "startDate" or the same day of the week of the month. Possible values + // are: + // - DAY_OF_MONTH + // - WEEK_OF_MONTH + // Example: If 'startDate' is + // Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run + // subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" + // would run subsequent reports on the first Monday of the month. + RunsOnDayOfMonth string `json:"runsOnDayOfMonth,omitempty"` + + // StartDate: Start date of date range for which scheduled reports + // should be run. + StartDate string `json:"startDate,omitempty"` +} + +type ReportList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The reports returned in this response. + Items []*Report `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#reportList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through reports. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SortedDimension struct { + // Kind: The kind of resource this is, in this case + // dfareporting#sortedDimension. + Kind string `json:"kind,omitempty"` + + // Name: The name of the dimension. + Name string `json:"name,omitempty"` + + // SortOrder: An optional sort order for the dimension column, one of: + // + // - "ASCENDING" + // - "DESCENDING" + SortOrder string `json:"sortOrder,omitempty"` +} + +type UserProfile struct { + // AccountId: The account ID to which this profile belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // AccountName: The account name this profile belongs to. + AccountName string `json:"accountName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#userProfile. + Kind string `json:"kind,omitempty"` + + // ProfileId: The unique ID of the user profile. + ProfileId int64 `json:"profileId,omitempty,string"` + + // SubAccountId: The sub account ID this profile belongs to if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // SubAccountName: The sub account name this profile belongs to if + // applicable. + SubAccountName string `json:"subAccountName,omitempty"` + + // UserName: The user name. + UserName string `json:"userName,omitempty"` +} + +type UserProfileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The user profiles returned in this response. + Items []*UserProfile `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#userProfileList. + Kind string `json:"kind,omitempty"` +} + +// method id "dfareporting.dimensionValues.query": + +type DimensionValuesQueryCall struct { + s *Service + profileId int64 + dimensionvaluerequest *DimensionValueRequest + opt_ map[string]interface{} +} + +// Query: Retrieves list of report dimension values for a list of +// filters. +func (r *DimensionValuesService) Query(profileId int64, dimensionvaluerequest *DimensionValueRequest) *DimensionValuesQueryCall { + c := &DimensionValuesQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.dimensionvaluerequest = dimensionvaluerequest + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *DimensionValuesQueryCall) MaxResults(maxResults int64) *DimensionValuesQueryCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *DimensionValuesQueryCall) PageToken(pageToken string) *DimensionValuesQueryCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DimensionValuesQueryCall) Do() (*DimensionValueList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dimensionvaluerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/dimensionvalues/query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DimensionValueList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of report dimension values for a list of filters.", + // "httpMethod": "POST", + // "id": "dfareporting.dimensionValues.query", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/dimensionvalues/query", + // "request": { + // "$ref": "DimensionValueRequest" + // }, + // "response": { + // "$ref": "DimensionValueList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.files.get": + +type FilesGetCall struct { + s *Service + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file by its report ID and file ID. +func (r *FilesService) Get(reportId int64, fileId int64) *FilesGetCall { + c := &FilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *FilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file by its report ID and file ID.", + // "httpMethod": "GET", + // "id": "dfareporting.files.get", + // "parameterOrder": [ + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "dfareporting.files.list": + +type FilesListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a user profile. +func (r *FilesService) List(profileId int64) *FilesListCall { + c := &FilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *FilesListCall) MaxResults(maxResults int64) *FilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *FilesListCall) PageToken(pageToken string) *FilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Scope sets the optional parameter "scope": The scope that defines +// which results are returned, default is 'MINE'. +func (c *FilesListCall) Scope(scope string) *FilesListCall { + c.opt_["scope"] = scope + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *FilesListCall) SortField(sortField string) *FilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *FilesListCall) SortOrder(sortOrder string) *FilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *FilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scope"]; ok { + params.Set("scope", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a user profile.", + // "httpMethod": "GET", + // "id": "dfareporting.files.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "scope": { + // "default": "MINE", + // "description": "The scope that defines which results are returned, default is 'MINE'.", + // "enum": [ + // "ALL", + // "MINE", + // "SHARED_WITH_ME" + // ], + // "enumDescriptions": [ + // "All files in account.", + // "My files.", + // "Files shared with me." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.delete": + +type ReportsDeleteCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Delete: Deletes a report by its ID. +func (r *ReportsService) Delete(profileId int64, reportId int64) *ReportsDeleteCall { + c := &ReportsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a report by its ID.", + // "httpMethod": "DELETE", + // "id": "dfareporting.reports.delete", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.get": + +type ReportsGetCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report by its ID. +func (r *ReportsService) Get(profileId int64, reportId int64) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report by its ID.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.get", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.insert": + +type ReportsInsertCall struct { + s *Service + profileId int64 + report *Report + opt_ map[string]interface{} +} + +// Insert: Creates a report. +func (r *ReportsService) Insert(profileId int64, report *Report) *ReportsInsertCall { + c := &ReportsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.report = report + return c +} + +func (c *ReportsInsertCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.insert", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.list": + +type ReportsListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Retrieves list of reports. +func (r *ReportsService) List(profileId int64) *ReportsListCall { + c := &ReportsListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsListCall) MaxResults(maxResults int64) *ReportsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsListCall) PageToken(pageToken string) *ReportsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Scope sets the optional parameter "scope": The scope that defines +// which results are returned, default is 'MINE'. +func (c *ReportsListCall) Scope(scope string) *ReportsListCall { + c.opt_["scope"] = scope + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsListCall) SortField(sortField string) *ReportsListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsListCall) SortOrder(sortOrder string) *ReportsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsListCall) Do() (*ReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scope"]; ok { + params.Set("scope", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of reports.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "scope": { + // "default": "MINE", + // "description": "The scope that defines which results are returned, default is 'MINE'.", + // "enum": [ + // "ALL", + // "MINE" + // ], + // "enumDescriptions": [ + // "All reports in account.", + // "My reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME", + // "NAME" + // ], + // "enumDescriptions": [ + // "Sort by report ID.", + // "Sort by 'lastModifiedTime' field.", + // "Sort by name of reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "response": { + // "$ref": "ReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.patch": + +type ReportsPatchCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Patch: Updates a report. This method supports patch semantics. +func (r *ReportsService) Patch(profileId int64, reportId int64, report *Report) *ReportsPatchCall { + c := &ReportsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsPatchCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "dfareporting.reports.patch", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.run": + +type ReportsRunCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Run: Runs a report. +func (r *ReportsService) Run(profileId int64, reportId int64) *ReportsRunCall { + c := &ReportsRunCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// Synchronous sets the optional parameter "synchronous": If set and +// true, tries to run the report synchronously. +func (c *ReportsRunCall) Synchronous(synchronous bool) *ReportsRunCall { + c.opt_["synchronous"] = synchronous + return c +} + +func (c *ReportsRunCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["synchronous"]; ok { + params.Set("synchronous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/run") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.run", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "synchronous": { + // "description": "If set and true, tries to run the report synchronously.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/run", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.update": + +type ReportsUpdateCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Update: Updates a report. +func (r *ReportsService) Update(profileId int64, reportId int64, report *Report) *ReportsUpdateCall { + c := &ReportsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsUpdateCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report.", + // "httpMethod": "PUT", + // "id": "dfareporting.reports.update", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.get": + +type ReportsFilesGetCall struct { + s *Service + profileId int64 + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file. +func (r *ReportsFilesService) Get(profileId int64, reportId int64, fileId int64) *ReportsFilesGetCall { + c := &ReportsFilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *ReportsFilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.get", + // "parameterOrder": [ + // "profileId", + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "dfareporting.reports.files.list": + +type ReportsFilesListCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a report. +func (r *ReportsFilesService) List(profileId int64, reportId int64) *ReportsFilesListCall { + c := &ReportsFilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsFilesListCall) MaxResults(maxResults int64) *ReportsFilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsFilesListCall) PageToken(pageToken string) *ReportsFilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsFilesListCall) SortField(sortField string) *ReportsFilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsFilesListCall) SortOrder(sortOrder string) *ReportsFilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsFilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a report.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.list", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the parent report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.get": + +type UserProfilesGetCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// Get: Gets one user profile by ID. +func (r *UserProfilesService) Get(profileId int64) *UserProfilesGetCall { + c := &UserProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +func (c *UserProfilesGetCall) Do() (*UserProfile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user profile by ID.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.get", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}", + // "response": { + // "$ref": "UserProfile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.list": + +type UserProfilesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves list of user profiles for a user. +func (r *UserProfilesService) List() *UserProfilesListCall { + c := &UserProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserProfilesListCall) Do() (*UserProfileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of user profiles for a user.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.list", + // "path": "userprofiles", + // "response": { + // "$ref": "UserProfileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-api.json b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-api.json new file mode 100644 index 0000000000000..2a192bfce802f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-api.json @@ -0,0 +1,1912 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/bg8eKhQkwGnobYThDWedv2Ar2Io\"", + "discoveryVersion": "v1", + "id": "dfareporting:v1.3", + "name": "dfareporting", + "version": "v1.3", + "title": "DFA Reporting API", + "description": "Lets you create, run and download reports.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/doubleclick-advertisers/reporting/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/dfareporting/v1.3/", + "basePath": "/dfareporting/v1.3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "dfareporting/v1.3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/dfareporting": { + "description": "View and manage DoubleClick for Advertisers reports" + } + } + } + }, + "schemas": { + "Activities": { + "id": "Activities", + "type": "object", + "description": "Represents an activity group.", + "properties": { + "filters": { + "type": "array", + "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#activities.", + "default": "dfareporting#activities" + }, + "metricNames": { + "type": "array", + "description": "List of names of floodlight activity metrics.", + "items": { + "type": "string" + } + } + } + }, + "CompatibleFields": { + "id": "CompatibleFields", + "type": "object", + "description": "Represents a response to the queryCompatibleFields method.", + "properties": { + "crossDimensionReachReportCompatibleFields": { + "$ref": "CrossDimensionReachReportCompatibleFields", + "description": "Contains items that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\"." + }, + "floodlightReportCompatibleFields": { + "$ref": "FloodlightReportCompatibleFields", + "description": "Contains items that are compatible to be selected for a report of type \"FLOODLIGHT\"." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#compatibleFields.", + "default": "dfareporting#compatibleFields" + }, + "pathToConversionReportCompatibleFields": { + "$ref": "PathToConversionReportCompatibleFields", + "description": "Contains items that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\"." + }, + "reachReportCompatibleFields": { + "$ref": "ReachReportCompatibleFields", + "description": "Contains items that are compatible to be selected for a report of type \"REACH\"." + }, + "reportCompatibleFields": { + "$ref": "ReportCompatibleFields", + "description": "Contains items that are compatible to be selected for a report of type \"STANDARD\"." + } + } + }, + "CrossDimensionReachReportCompatibleFields": { + "id": "CrossDimensionReachReportCompatibleFields", + "type": "object", + "description": "Represents fields that are compatible to be selected for a report of type \"CROSS_DIMENSION_REACH\".", + "properties": { + "breakdown": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"breakdown\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "dimensionFilters": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#crossDimensionReachReportCompatibleFields.", + "default": "dfareporting#crossDimensionReachReportCompatibleFields" + }, + "metrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + }, + "overlapMetrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"overlapMetricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + } + } + }, + "CustomRichMediaEvents": { + "id": "CustomRichMediaEvents", + "type": "object", + "description": "Represents a Custom Rich Media Events group.", + "properties": { + "filteredEventIds": { + "type": "array", + "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#customRichMediaEvents.", + "default": "dfareporting#customRichMediaEvents" + } + } + }, + "DateRange": { + "id": "DateRange", + "type": "object", + "description": "Represents a date range.", + "properties": { + "endDate": { + "type": "string", + "description": "The end date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dateRange.", + "default": "dfareporting#dateRange" + }, + "relativeDateRange": { + "type": "string", + "description": "The date range relative to the date of when the report is run, one of: \n- \"TODAY\" \n- \"YESTERDAY\" \n- \"WEEK_TO_DATE\" \n- \"MONTH_TO_DATE\" \n- \"QUARTER_TO_DATE\" \n- \"YEAR_TO_DATE\" \n- \"PREVIOUS_WEEK\" \n- \"PREVIOUS_MONTH\" \n- \"PREVIOUS_QUARTER\" \n- \"PREVIOUS_YEAR\" \n- \"LAST_7_DAYS\" \n- \"LAST_30_DAYS\" \n- \"LAST_90_DAYS\" \n- \"LAST_365_DAYS\" \n- \"LAST_24_MONTHS\"" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "Dimension": { + "id": "Dimension", + "type": "object", + "description": "Represents a dimension.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimension.", + "default": "dfareporting#dimension" + }, + "name": { + "type": "string", + "description": "The dimension name, e.g. dfa:advertiser" + } + } + }, + "DimensionFilter": { + "id": "DimensionFilter", + "type": "object", + "description": "Represents a dimension filter.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension to filter." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionFilter.", + "default": "dfareporting#dimensionFilter" + }, + "value": { + "type": "string", + "description": "The value of the dimension to filter." + } + } + }, + "DimensionValue": { + "id": "DimensionValue", + "type": "object", + "description": "Represents a DimensionValue resource.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID associated with the value if available." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#dimensionValue.", + "default": "dfareporting#dimensionValue" + }, + "matchType": { + "type": "string", + "description": "Determines how the 'value' field is matched when filtering. One of: \n- EXACT (default if not specified) \n- CONTAINS \n- BEGINS_WITH \n- WILDCARD_EXPRESSION (allowing '*' as a placeholder for variable length character sequences, it can be escaped with a backslash.) Note, only paid search dimensions ('dfa:paidSearch*') allow a matchType other than EXACT." + }, + "value": { + "type": "string", + "description": "The value of the dimension." + } + } + }, + "DimensionValueList": { + "id": "DimensionValueList", + "type": "object", + "description": "Represents the list of DimensionValue resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The dimension values returned in this response.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#dimensionValueList.", + "default": "dfareporting#dimensionValueList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "DimensionValueRequest": { + "id": "DimensionValueRequest", + "type": "object", + "description": "Represents a DimensionValuesRequest.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension for which values should be requested.", + "annotations": { + "required": [ + "dfareporting.dimensionValues.query" + ] + } + }, + "endDate": { + "type": "string", + "description": "The end date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date", + "annotations": { + "required": [ + "dfareporting.dimensionValues.query" + ] + } + }, + "filters": { + "type": "array", + "description": "The list of filters by which to filter values. The filters are ANDed.", + "items": { + "$ref": "DimensionFilter" + } + }, + "kind": { + "type": "string", + "description": "The kind of request this is, in this case dfareporting#dimensionValueRequest.", + "default": "dfareporting#dimensionValueRequest" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date", + "annotations": { + "required": [ + "dfareporting.dimensionValues.query" + ] + } + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "Represents a File resource. A File contains the meta-data for a report run. It shows the status of the run and holds the urls to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which the file has report data. The date range will always be the absolute date range for which the report is run." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name of the file." + }, + "format": { + "type": "string", + "description": "The output format of the report. Only available once the file is available." + }, + "id": { + "type": "string", + "description": "The unique ID of this report file.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#file.", + "default": "dfareporting#file" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp in milliseconds since epoch when this file was last modified.", + "format": "int64" + }, + "reportId": { + "type": "string", + "description": "The ID of the report this file was generated from.", + "format": "int64" + }, + "status": { + "type": "string", + "description": "The status of the report file, one of: \n- \"PROCESSING\" \n- \"REPORT_AVAILABLE\" \n- \"FAILED\" \n- \"CANCELLED\"" + }, + "urls": { + "type": "object", + "description": "The urls where the completed report file can be downloaded.", + "properties": { + "apiUrl": { + "type": "string", + "description": "The url for downloading the report data through the API." + }, + "browserUrl": { + "type": "string", + "description": "The url for downloading the report data through a browser." + } + } + } + } + }, + "FileList": { + "id": "FileList", + "type": "object", + "description": "Represents the list of File resources.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The files returned in this response.", + "items": { + "$ref": "File" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#fileList.", + "default": "dfareporting#fileList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "FloodlightReportCompatibleFields": { + "id": "FloodlightReportCompatibleFields", + "type": "object", + "description": "Represents fields that are compatible to be selected for a report of type \"FlOODLIGHT\".", + "properties": { + "dimensionFilters": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "dimensions": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#floodlightReportCompatibleFields.", + "default": "dfareporting#floodlightReportCompatibleFields" + }, + "metrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + } + } + }, + "Metric": { + "id": "Metric", + "type": "object", + "description": "Represents a metric.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#metric.", + "default": "dfareporting#metric" + }, + "name": { + "type": "string", + "description": "The metric name, e.g. dfa:impressions" + } + } + }, + "PathToConversionReportCompatibleFields": { + "id": "PathToConversionReportCompatibleFields", + "type": "object", + "description": "Represents fields that are compatible to be selected for a report of type \"PATH_TO_CONVERSION\".", + "properties": { + "conversionDimensions": { + "type": "array", + "description": "Conversion dimensions which are compatible to be selected in the \"conversionDimensions\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "customFloodlightVariables": { + "type": "array", + "description": "Custom floodlight variables which are compatible to be selected in the \"customFloodlightVariables\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#pathToConversionReportCompatibleFields.", + "default": "dfareporting#pathToConversionReportCompatibleFields" + }, + "metrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + }, + "perInteractionDimensions": { + "type": "array", + "description": "Per-interaction dimensions which are compatible to be selected in the \"perInteractionDimensions\" section of the report.", + "items": { + "$ref": "Dimension" + } + } + } + }, + "ReachReportCompatibleFields": { + "id": "ReachReportCompatibleFields", + "type": "object", + "description": "Represents fields that are compatible to be selected for a report of type \"REACH\".", + "properties": { + "dimensionFilters": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "dimensions": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#reachReportCompatibleFields.", + "default": "dfareporting#reachReportCompatibleFields" + }, + "metrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + }, + "pivotedActivityMetrics": { + "type": "array", + "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.", + "items": { + "$ref": "Metric" + } + }, + "reachByFrequencyMetrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"reachByFrequencyMetricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + } + } + }, + "Recipient": { + "id": "Recipient", + "type": "object", + "description": "Represents a recipient.", + "properties": { + "deliveryType": { + "type": "string", + "description": "The delivery type for the recipient, one of: \n- \"ATTACHMENT\" \n- \"LINK\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "email": { + "type": "string", + "description": "The email address of the recipient.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#recipient.", + "default": "dfareporting#recipient" + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "Represents a Report resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this report belongs.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "activeGrpCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"ACTIVE_GRP\".", + "properties": { + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.\nA valid active GRP report needs to have exactly one DimensionValue for the United States in addition to any advertiser or campaign dimension values.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "criteria": { + "type": "object", + "description": "The report criteria for a report of type \"STANDARD\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range for which this report should be run." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of standard dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "crossDimensionReachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"CROSS_DIMENSION_REACH\".", + "properties": { + "breakdown": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimension": { + "type": "string", + "description": "The dimension option, one of: \n- \"ADVERTISER\" \n- \"CAMPAIGN\" \n- \"SITE_BY_ADVERTISER\" \n- \"SITE_BY_CAMPAIGN\"" + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.", + "items": { + "$ref": "DimensionValue" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "overlapMetricNames": { + "type": "array", + "description": "The list of names of overlap metrics the report should include.", + "items": { + "type": "string" + } + }, + "pivoted": { + "type": "boolean", + "description": "Whether the report is pivoted or not. Defaults to true." + } + } + }, + "delivery": { + "type": "object", + "description": "The report's email delivery settings.", + "properties": { + "emailOwner": { + "type": "boolean", + "description": "Whether the report should be emailed to the report owner." + }, + "emailOwnerDeliveryType": { + "type": "string", + "description": "The type of delivery for the owner to receive, if enabled. One of: \n- \"ATTACHMENT\" \n- \"LINK\"" + }, + "message": { + "type": "string", + "description": "The message to be sent with each email." + }, + "recipients": { + "type": "array", + "description": "The list of recipients to which to email the report.", + "items": { + "$ref": "Recipient" + } + } + } + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name used when generating report files for this report." + }, + "floodlightCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"FLOODLIGHT\".", + "properties": { + "customRichMediaEvents": { + "type": "array", + "description": "The list of custom rich media events to include.", + "items": { + "$ref": "DimensionValue" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no cookie, but do have an exposure path." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + } + } + } + } + }, + "format": { + "type": "string", + "description": "The output format of the report, one of: \n- \"CSV\" \n- \"EXCEL\" If not specified, default format is \"CSV\". Note that the actual format in the completed report file might differ if for instance the report's size exceeds the format's capabilities. \"CSV\" will then be the fallback format." + }, + "id": { + "type": "string", + "description": "The unique ID identifying this report resource.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#report.", + "default": "dfareporting#report" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.", + "format": "uint64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "name": { + "type": "string", + "description": "The name of the report.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "ownerProfileId": { + "type": "string", + "description": "The user profile id of the owner of this report.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "pathToConversionCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"PATH_TO_CONVERSION\".", + "properties": { + "activityFilters": { + "type": "array", + "description": "The list of 'dfa:activity' values to filter on.", + "items": { + "$ref": "DimensionValue" + } + }, + "conversionDimensions": { + "type": "array", + "description": "The list of conversion dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "customFloodlightVariables": { + "type": "array", + "description": "The list of custom floodlight variables the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "customRichMediaEvents": { + "type": "array", + "description": "The list of custom rich media events to include.", + "items": { + "$ref": "DimensionValue" + } + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "floodlightConfigId": { + "$ref": "DimensionValue", + "description": "The floodlight ID for which to show data in this report. All advertisers associated with that ID will automatically be added. The dimension of the value needs to be 'dfa:floodlightConfigId'." + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "perInteractionDimensions": { + "type": "array", + "description": "The list of per interaction dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "reportProperties": { + "type": "object", + "description": "The properties of the report.", + "properties": { + "clicksLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if a click interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "impressionsLookbackWindow": { + "type": "integer", + "description": "DFA checks to see if an impression interaction occurred within the specified period of time before a conversion. By default the value is pulled from Floodlight or you can manually enter a custom value. Valid values: 1-90.", + "format": "int32" + }, + "includeAttributedIPConversions": { + "type": "boolean", + "description": "Deprecated: has no effect." + }, + "includeUnattributedCookieConversions": { + "type": "boolean", + "description": "Include conversions of users with a DoubleClick cookie but without an exposure. That means the user did not click or see an ad from the advertiser within the Floodlight group, or that the interaction happened outside the lookback window." + }, + "includeUnattributedIPConversions": { + "type": "boolean", + "description": "Include conversions that have no associated cookies and no exposures. It’s therefore impossible to know how the user was exposed to your ads during the lookback window prior to a conversion." + }, + "maximumClickInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumImpressionInteractions": { + "type": "integer", + "description": "The maximum number of click interactions to include in the report. Advertisers currently paying for E2C reports get up to 200 (100 clicks, 100 impressions). If another advertiser in your network is paying for E2C, you can have up to 5 total exposures per report.", + "format": "int32" + }, + "maximumInteractionGap": { + "type": "integer", + "description": "The maximum amount of time that can take place between interactions (clicks or impressions) by the same user. Valid values: 1-90.", + "format": "int32" + }, + "pivotOnInteractionPath": { + "type": "boolean", + "description": "Enable pivoting on interaction path." + } + } + } + } + }, + "reachCriteria": { + "type": "object", + "description": "The report criteria for a report of type \"REACH\".", + "properties": { + "activities": { + "$ref": "Activities", + "description": "Activity group." + }, + "customRichMediaEvents": { + "$ref": "CustomRichMediaEvents", + "description": "Custom Rich Media Events group." + }, + "dateRange": { + "$ref": "DateRange", + "description": "The date range this report should be run for." + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters on which dimensions are filtered.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + }, + "reachByFrequencyMetricNames": { + "type": "array", + "description": "The list of names of Reach By Frequency metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "schedule": { + "type": "object", + "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".", + "properties": { + "active": { + "type": "boolean", + "description": "Whether the schedule is active or not. Must be set to either true or false.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "every": { + "type": "integer", + "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".", + "format": "int32" + }, + "expirationDate": { + "type": "string", + "description": "The expiration date when the scheduled report stops running.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeats": { + "type": "string", + "description": "The interval for which the report is repeated, one of: \n- \"DAILY\", also requires field \"every\" to be set. \n- \"WEEKLY\", also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. \n- \"TWICE_A_MONTH\" \n- \"MONTHLY\", also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. \n- \"QUARTERLY\" \n- \"YEARLY\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeatsOnWeekDays": { + "type": "array", + "description": "List of week days \"WEEKLY\" on which scheduled reports should run.", + "items": { + "type": "string" + } + }, + "runsOnDayOfMonth": { + "type": "string", + "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Possible values are: \n- DAY_OF_MONTH \n- WEEK_OF_MONTH \nExample: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month." + }, + "startDate": { + "type": "string", + "description": "Start date of date range for which scheduled reports should be run.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "subAccountId": { + "type": "string", + "description": "The subbaccount ID to which this report belongs if applicable.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The type of the report, one of: \n- STANDARD \n- REACH \n- ACTIVE_GRP \n- PATH_TO_CONVERSION \n- FLOODLIGHT \n- CROSS_DIMENSION_REACH", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "ReportCompatibleFields": { + "id": "ReportCompatibleFields", + "type": "object", + "description": "Represents fields that are compatible to be selected for a report of type \"STANDARD\".", + "properties": { + "dimensionFilters": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensionFilters\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "dimensions": { + "type": "array", + "description": "Dimensions which are compatible to be selected in the \"dimensions\" section of the report.", + "items": { + "$ref": "Dimension" + } + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#reportCompatibleFields.", + "default": "dfareporting#reportCompatibleFields" + }, + "metrics": { + "type": "array", + "description": "Metrics which are compatible to be selected in the \"metricNames\" section of the report.", + "items": { + "$ref": "Metric" + } + }, + "pivotedActivityMetrics": { + "type": "array", + "description": "Metrics which are compatible to be selected as activity metrics to pivot on in the \"activities\" section of the report.", + "items": { + "$ref": "Metric" + } + } + } + }, + "ReportList": { + "id": "ReportList", + "type": "object", + "description": "Represents the list of reports.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The reports returned in this response.", + "items": { + "$ref": "Report" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#reportList.", + "default": "dfareporting#reportList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "SortedDimension": { + "id": "SortedDimension", + "type": "object", + "description": "Represents a sorted dimension.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#sortedDimension.", + "default": "dfareporting#sortedDimension" + }, + "name": { + "type": "string", + "description": "The name of the dimension." + }, + "sortOrder": { + "type": "string", + "description": "An optional sort order for the dimension column, one of: \n- \"ASCENDING\" \n- \"DESCENDING\"" + } + } + }, + "UserProfile": { + "id": "UserProfile", + "type": "object", + "description": "Represents a UserProfile resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID to which this profile belongs.", + "format": "int64" + }, + "accountName": { + "type": "string", + "description": "The account name this profile belongs to." + }, + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "kind": { + "type": "string", + "description": "The kind of resource this is, in this case dfareporting#userProfile.", + "default": "dfareporting#userProfile" + }, + "profileId": { + "type": "string", + "description": "The unique ID of the user profile.", + "format": "int64" + }, + "subAccountId": { + "type": "string", + "description": "The sub account ID this profile belongs to if applicable.", + "format": "int64" + }, + "subAccountName": { + "type": "string", + "description": "The sub account name this profile belongs to if applicable." + }, + "userName": { + "type": "string", + "description": "The user name." + } + } + }, + "UserProfileList": { + "id": "UserProfileList", + "type": "object", + "description": "Represents the list of user profiles.", + "properties": { + "etag": { + "type": "string", + "description": "The eTag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The user profiles returned in this response.", + "items": { + "$ref": "UserProfile" + } + }, + "kind": { + "type": "string", + "description": "The kind of list this is, in this case dfareporting#userProfileList.", + "default": "dfareporting#userProfileList" + } + } + } + }, + "resources": { + "dimensionValues": { + "methods": { + "query": { + "id": "dfareporting.dimensionValues.query", + "path": "userprofiles/{profileId}/dimensionvalues/query", + "httpMethod": "POST", + "description": "Retrieves list of report dimension values for a list of filters.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "DimensionValueRequest" + }, + "response": { + "$ref": "DimensionValueList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "files": { + "methods": { + "get": { + "id": "dfareporting.files.get", + "path": "reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file by its report ID and file ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ], + "supportsMediaDownload": true + }, + "list": { + "id": "dfareporting.files.list", + "path": "userprofiles/{profileId}/files", + "httpMethod": "GET", + "description": "Lists files for a user profile.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "scope": { + "type": "string", + "description": "The scope that defines which results are returned, default is 'MINE'.", + "default": "MINE", + "enum": [ + "ALL", + "MINE", + "SHARED_WITH_ME" + ], + "enumDescriptions": [ + "All files in account.", + "My files.", + "Files shared with me." + ], + "location": "query" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "reports": { + "methods": { + "delete": { + "id": "dfareporting.reports.delete", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "DELETE", + "description": "Deletes a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "get": { + "id": "dfareporting.reports.get", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "GET", + "description": "Retrieves a report by its ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "insert": { + "id": "dfareporting.reports.insert", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "POST", + "description": "Creates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.list", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "GET", + "description": "Retrieves list of reports.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "scope": { + "type": "string", + "description": "The scope that defines which results are returned, default is 'MINE'.", + "default": "MINE", + "enum": [ + "ALL", + "MINE" + ], + "enumDescriptions": [ + "All reports in account.", + "My reports." + ], + "location": "query" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME", + "NAME" + ], + "enumDescriptions": [ + "Sort by report ID.", + "Sort by 'lastModifiedTime' field.", + "Sort by name of reports." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "ReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "patch": { + "id": "dfareporting.reports.patch", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PATCH", + "description": "Updates a report. This method supports patch semantics.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "run": { + "id": "dfareporting.reports.run", + "path": "userprofiles/{profileId}/reports/{reportId}/run", + "httpMethod": "POST", + "description": "Runs a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + }, + "synchronous": { + "type": "boolean", + "description": "If set and true, tries to run the report synchronously.", + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "update": { + "id": "dfareporting.reports.update", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PUT", + "description": "Updates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + }, + "resources": { + "compatibleFields": { + "methods": { + "query": { + "id": "dfareporting.reports.compatibleFields.query", + "path": "userprofiles/{profileId}/reports/compatiblefields/query", + "httpMethod": "POST", + "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "CompatibleFields" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "files": { + "methods": { + "get": { + "id": "dfareporting.reports.files.get", + "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ], + "supportsMediaDownload": true + }, + "list": { + "id": "dfareporting.reports.files.list", + "path": "userprofiles/{profileId}/reports/{reportId}/files", + "httpMethod": "GET", + "description": "Lists files for a report.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile ID.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The ID of the parent report.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field by which to sort the list.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file ID.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } + }, + "userProfiles": { + "methods": { + "get": { + "id": "dfareporting.userProfiles.get", + "path": "userprofiles/{profileId}", + "httpMethod": "GET", + "description": "Gets one user profile by ID.", + "parameters": { + "profileId": { + "type": "string", + "description": "The user profile ID.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "UserProfile" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.userProfiles.list", + "path": "userprofiles", + "httpMethod": "GET", + "description": "Retrieves list of user profiles for a user.", + "response": { + "$ref": "UserProfileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-gen.go b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-gen.go new file mode 100644 index 0000000000000..7d1a949b01528 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1.3/dfareporting-gen.go @@ -0,0 +1,2426 @@ +// Package dfareporting provides access to the DFA Reporting API. +// +// See https://developers.google.com/doubleclick-advertisers/reporting/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/dfareporting/v1.3" +// ... +// dfareportingService, err := dfareporting.New(oauthHttpClient) +package dfareporting + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "dfareporting:v1.3" +const apiName = "dfareporting" +const apiVersion = "v1.3" +const basePath = "https://www.googleapis.com/dfareporting/v1.3/" + +// OAuth2 scopes used by this API. +const ( + // View and manage DoubleClick for Advertisers reports + DfareportingScope = "https://www.googleapis.com/auth/dfareporting" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.DimensionValues = NewDimensionValuesService(s) + s.Files = NewFilesService(s) + s.Reports = NewReportsService(s) + s.UserProfiles = NewUserProfilesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + DimensionValues *DimensionValuesService + + Files *FilesService + + Reports *ReportsService + + UserProfiles *UserProfilesService +} + +func NewDimensionValuesService(s *Service) *DimensionValuesService { + rs := &DimensionValuesService{s: s} + return rs +} + +type DimensionValuesService struct { + s *Service +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.CompatibleFields = NewReportsCompatibleFieldsService(s) + rs.Files = NewReportsFilesService(s) + return rs +} + +type ReportsService struct { + s *Service + + CompatibleFields *ReportsCompatibleFieldsService + + Files *ReportsFilesService +} + +func NewReportsCompatibleFieldsService(s *Service) *ReportsCompatibleFieldsService { + rs := &ReportsCompatibleFieldsService{s: s} + return rs +} + +type ReportsCompatibleFieldsService struct { + s *Service +} + +func NewReportsFilesService(s *Service) *ReportsFilesService { + rs := &ReportsFilesService{s: s} + return rs +} + +type ReportsFilesService struct { + s *Service +} + +func NewUserProfilesService(s *Service) *UserProfilesService { + rs := &UserProfilesService{s: s} + return rs +} + +type UserProfilesService struct { + s *Service +} + +type Activities struct { + // Filters: List of activity filters. The dimension values need to be + // all either of type "dfa:activity" or "dfa:activityGroup". + Filters []*DimensionValue `json:"filters,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#activities. + Kind string `json:"kind,omitempty"` + + // MetricNames: List of names of floodlight activity metrics. + MetricNames []string `json:"metricNames,omitempty"` +} + +type CompatibleFields struct { + // CrossDimensionReachReportCompatibleFields: Contains items that are + // compatible to be selected for a report of type + // "CROSS_DIMENSION_REACH". + CrossDimensionReachReportCompatibleFields *CrossDimensionReachReportCompatibleFields `json:"crossDimensionReachReportCompatibleFields,omitempty"` + + // FloodlightReportCompatibleFields: Contains items that are compatible + // to be selected for a report of type "FLOODLIGHT". + FloodlightReportCompatibleFields *FloodlightReportCompatibleFields `json:"floodlightReportCompatibleFields,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#compatibleFields. + Kind string `json:"kind,omitempty"` + + // PathToConversionReportCompatibleFields: Contains items that are + // compatible to be selected for a report of type "PATH_TO_CONVERSION". + PathToConversionReportCompatibleFields *PathToConversionReportCompatibleFields `json:"pathToConversionReportCompatibleFields,omitempty"` + + // ReachReportCompatibleFields: Contains items that are compatible to be + // selected for a report of type "REACH". + ReachReportCompatibleFields *ReachReportCompatibleFields `json:"reachReportCompatibleFields,omitempty"` + + // ReportCompatibleFields: Contains items that are compatible to be + // selected for a report of type "STANDARD". + ReportCompatibleFields *ReportCompatibleFields `json:"reportCompatibleFields,omitempty"` +} + +type CrossDimensionReachReportCompatibleFields struct { + // Breakdown: Dimensions which are compatible to be selected in the + // "breakdown" section of the report. + Breakdown []*Dimension `json:"breakdown,omitempty"` + + // DimensionFilters: Dimensions which are compatible to be selected in + // the "dimensionFilters" section of the report. + DimensionFilters []*Dimension `json:"dimensionFilters,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#crossDimensionReachReportCompatibleFields. + Kind string `json:"kind,omitempty"` + + // Metrics: Metrics which are compatible to be selected in the + // "metricNames" section of the report. + Metrics []*Metric `json:"metrics,omitempty"` + + // OverlapMetrics: Metrics which are compatible to be selected in the + // "overlapMetricNames" section of the report. + OverlapMetrics []*Metric `json:"overlapMetrics,omitempty"` +} + +type CustomRichMediaEvents struct { + // FilteredEventIds: List of custom rich media event IDs. Dimension + // values must be all of type dfa:richMediaEventTypeIdAndName. + FilteredEventIds []*DimensionValue `json:"filteredEventIds,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#customRichMediaEvents. + Kind string `json:"kind,omitempty"` +} + +type DateRange struct { + // EndDate: The end date of the date range, inclusive. A string of the + // format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dateRange. + Kind string `json:"kind,omitempty"` + + // RelativeDateRange: The date range relative to the date of when the + // report is run, one of: + // - "TODAY" + // - "YESTERDAY" + // - "WEEK_TO_DATE" + // + // - "MONTH_TO_DATE" + // - "QUARTER_TO_DATE" + // - "YEAR_TO_DATE" + // - + // "PREVIOUS_WEEK" + // - "PREVIOUS_MONTH" + // - "PREVIOUS_QUARTER" + // - + // "PREVIOUS_YEAR" + // - "LAST_7_DAYS" + // - "LAST_30_DAYS" + // - "LAST_90_DAYS" + // + // - "LAST_365_DAYS" + // - "LAST_24_MONTHS" + RelativeDateRange string `json:"relativeDateRange,omitempty"` + + // StartDate: The start date of the date range, inclusive. A string of + // the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type Dimension struct { + // Kind: The kind of resource this is, in this case + // dfareporting#dimension. + Kind string `json:"kind,omitempty"` + + // Name: The dimension name, e.g. dfa:advertiser + Name string `json:"name,omitempty"` +} + +type DimensionFilter struct { + // DimensionName: The name of the dimension to filter. + DimensionName string `json:"dimensionName,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionFilter. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension to filter. + Value string `json:"value,omitempty"` +} + +type DimensionValue struct { + // DimensionName: The name of the dimension. + DimensionName string `json:"dimensionName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID associated with the value if available. + Id string `json:"id,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#dimensionValue. + Kind string `json:"kind,omitempty"` + + // MatchType: Determines how the 'value' field is matched when + // filtering. One of: + // - EXACT (default if not specified) + // - CONTAINS + // + // - BEGINS_WITH + // - WILDCARD_EXPRESSION (allowing '*' as a placeholder + // for variable length character sequences, it can be escaped with a + // backslash.) Note, only paid search dimensions ('dfa:paidSearch*') + // allow a matchType other than EXACT. + MatchType string `json:"matchType,omitempty"` + + // Value: The value of the dimension. + Value string `json:"value,omitempty"` +} + +type DimensionValueList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The dimension values returned in this response. + Items []*DimensionValue `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#dimensionValueList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through dimension + // values. To retrieve the next page of results, set the next request's + // "pageToken" to the value of this field. The page token is only valid + // for a limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DimensionValueRequest struct { + // DimensionName: The name of the dimension for which values should be + // requested. + DimensionName string `json:"dimensionName,omitempty"` + + // EndDate: The end date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Filters: The list of filters by which to filter values. The filters + // are ANDed. + Filters []*DimensionFilter `json:"filters,omitempty"` + + // Kind: The kind of request this is, in this case + // dfareporting#dimensionValueRequest. + Kind string `json:"kind,omitempty"` + + // StartDate: The start date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type File struct { + // DateRange: The date range for which the file has report data. The + // date range will always be the absolute date range for which the + // report is run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name of the file. + FileName string `json:"fileName,omitempty"` + + // Format: The output format of the report. Only available once the file + // is available. + Format string `json:"format,omitempty"` + + // Id: The unique ID of this report file. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#file. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp in milliseconds since epoch when this + // file was last modified. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // ReportId: The ID of the report this file was generated from. + ReportId int64 `json:"reportId,omitempty,string"` + + // Status: The status of the report file, one of: + // - "PROCESSING" + // - + // "REPORT_AVAILABLE" + // - "FAILED" + // - "CANCELLED" + Status string `json:"status,omitempty"` + + // Urls: The urls where the completed report file can be downloaded. + Urls *FileUrls `json:"urls,omitempty"` +} + +type FileUrls struct { + // ApiUrl: The url for downloading the report data through the API. + ApiUrl string `json:"apiUrl,omitempty"` + + // BrowserUrl: The url for downloading the report data through a + // browser. + BrowserUrl string `json:"browserUrl,omitempty"` +} + +type FileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The files returned in this response. + Items []*File `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#fileList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through files. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type FloodlightReportCompatibleFields struct { + // DimensionFilters: Dimensions which are compatible to be selected in + // the "dimensionFilters" section of the report. + DimensionFilters []*Dimension `json:"dimensionFilters,omitempty"` + + // Dimensions: Dimensions which are compatible to be selected in the + // "dimensions" section of the report. + Dimensions []*Dimension `json:"dimensions,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#floodlightReportCompatibleFields. + Kind string `json:"kind,omitempty"` + + // Metrics: Metrics which are compatible to be selected in the + // "metricNames" section of the report. + Metrics []*Metric `json:"metrics,omitempty"` +} + +type Metric struct { + // Kind: The kind of resource this is, in this case dfareporting#metric. + Kind string `json:"kind,omitempty"` + + // Name: The metric name, e.g. dfa:impressions + Name string `json:"name,omitempty"` +} + +type PathToConversionReportCompatibleFields struct { + // ConversionDimensions: Conversion dimensions which are compatible to + // be selected in the "conversionDimensions" section of the report. + ConversionDimensions []*Dimension `json:"conversionDimensions,omitempty"` + + // CustomFloodlightVariables: Custom floodlight variables which are + // compatible to be selected in the "customFloodlightVariables" section + // of the report. + CustomFloodlightVariables []*Dimension `json:"customFloodlightVariables,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#pathToConversionReportCompatibleFields. + Kind string `json:"kind,omitempty"` + + // Metrics: Metrics which are compatible to be selected in the + // "metricNames" section of the report. + Metrics []*Metric `json:"metrics,omitempty"` + + // PerInteractionDimensions: Per-interaction dimensions which are + // compatible to be selected in the "perInteractionDimensions" section + // of the report. + PerInteractionDimensions []*Dimension `json:"perInteractionDimensions,omitempty"` +} + +type ReachReportCompatibleFields struct { + // DimensionFilters: Dimensions which are compatible to be selected in + // the "dimensionFilters" section of the report. + DimensionFilters []*Dimension `json:"dimensionFilters,omitempty"` + + // Dimensions: Dimensions which are compatible to be selected in the + // "dimensions" section of the report. + Dimensions []*Dimension `json:"dimensions,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#reachReportCompatibleFields. + Kind string `json:"kind,omitempty"` + + // Metrics: Metrics which are compatible to be selected in the + // "metricNames" section of the report. + Metrics []*Metric `json:"metrics,omitempty"` + + // PivotedActivityMetrics: Metrics which are compatible to be selected + // as activity metrics to pivot on in the "activities" section of the + // report. + PivotedActivityMetrics []*Metric `json:"pivotedActivityMetrics,omitempty"` + + // ReachByFrequencyMetrics: Metrics which are compatible to be selected + // in the "reachByFrequencyMetricNames" section of the report. + ReachByFrequencyMetrics []*Metric `json:"reachByFrequencyMetrics,omitempty"` +} + +type Recipient struct { + // DeliveryType: The delivery type for the recipient, one of: + // - + // "ATTACHMENT" + // - "LINK" + DeliveryType string `json:"deliveryType,omitempty"` + + // Email: The email address of the recipient. + Email string `json:"email,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#recipient. + Kind string `json:"kind,omitempty"` +} + +type Report struct { + // AccountId: The account ID to which this report belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // ActiveGrpCriteria: The report criteria for a report of type + // "ACTIVE_GRP". + ActiveGrpCriteria *ReportActiveGrpCriteria `json:"activeGrpCriteria,omitempty"` + + // Criteria: The report criteria for a report of type "STANDARD". + Criteria *ReportCriteria `json:"criteria,omitempty"` + + // CrossDimensionReachCriteria: The report criteria for a report of type + // "CROSS_DIMENSION_REACH". + CrossDimensionReachCriteria *ReportCrossDimensionReachCriteria `json:"crossDimensionReachCriteria,omitempty"` + + // Delivery: The report's email delivery settings. + Delivery *ReportDelivery `json:"delivery,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name used when generating report files for this + // report. + FileName string `json:"fileName,omitempty"` + + // FloodlightCriteria: The report criteria for a report of type + // "FLOODLIGHT". + FloodlightCriteria *ReportFloodlightCriteria `json:"floodlightCriteria,omitempty"` + + // Format: The output format of the report, one of: + // - "CSV" + // - "EXCEL" + // If not specified, default format is "CSV". Note that the actual + // format in the completed report file might differ if for instance the + // report's size exceeds the format's capabilities. "CSV" will then be + // the fallback format. + Format string `json:"format,omitempty"` + + // Id: The unique ID identifying this report resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: The kind of resource this is, in this case dfareporting#report. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp (in milliseconds since epoch) of when + // this report was last modified. + LastModifiedTime uint64 `json:"lastModifiedTime,omitempty,string"` + + // Name: The name of the report. + Name string `json:"name,omitempty"` + + // OwnerProfileId: The user profile id of the owner of this report. + OwnerProfileId int64 `json:"ownerProfileId,omitempty,string"` + + // PathToConversionCriteria: The report criteria for a report of type + // "PATH_TO_CONVERSION". + PathToConversionCriteria *ReportPathToConversionCriteria `json:"pathToConversionCriteria,omitempty"` + + // ReachCriteria: The report criteria for a report of type "REACH". + ReachCriteria *ReportReachCriteria `json:"reachCriteria,omitempty"` + + // Schedule: The report's schedule. Can only be set if the report's + // 'dateRange' is a relative date range and the relative date range is + // not "TODAY". + Schedule *ReportSchedule `json:"schedule,omitempty"` + + // SubAccountId: The subbaccount ID to which this report belongs if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // Type: The type of the report, one of: + // - STANDARD + // - REACH + // - + // ACTIVE_GRP + // - PATH_TO_CONVERSION + // - FLOODLIGHT + // - + // CROSS_DIMENSION_REACH + Type string `json:"type,omitempty"` +} + +type ReportActiveGrpCriteria struct { + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + // A valid active GRP + // report needs to have exactly one DimensionValue for the United States + // in addition to any advertiser or campaign dimension values. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range for which this report should be run. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of standard dimensions the report should + // include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCrossDimensionReachCriteria struct { + // Breakdown: The list of dimensions the report should include. + Breakdown []*SortedDimension `json:"breakdown,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // Dimension: The dimension option, one of: + // - "ADVERTISER" + // - + // "CAMPAIGN" + // - "SITE_BY_ADVERTISER" + // - "SITE_BY_CAMPAIGN" + Dimension string `json:"dimension,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // OverlapMetricNames: The list of names of overlap metrics the report + // should include. + OverlapMetricNames []string `json:"overlapMetricNames,omitempty"` + + // Pivoted: Whether the report is pivoted or not. Defaults to true. + Pivoted bool `json:"pivoted,omitempty"` +} + +type ReportDelivery struct { + // EmailOwner: Whether the report should be emailed to the report owner. + EmailOwner bool `json:"emailOwner,omitempty"` + + // EmailOwnerDeliveryType: The type of delivery for the owner to + // receive, if enabled. One of: + // - "ATTACHMENT" + // - "LINK" + EmailOwnerDeliveryType string `json:"emailOwnerDeliveryType,omitempty"` + + // Message: The message to be sent with each email. + Message string `json:"message,omitempty"` + + // Recipients: The list of recipients to which to email the report. + Recipients []*Recipient `json:"recipients,omitempty"` +} + +type ReportFloodlightCriteria struct { + // CustomRichMediaEvents: The list of custom rich media events to + // include. + CustomRichMediaEvents []*DimensionValue `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportFloodlightCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportFloodlightCriteriaReportProperties struct { + // IncludeAttributedIPConversions: Include conversions that have no + // cookie, but do have an exposure path. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` +} + +type ReportPathToConversionCriteria struct { + // ActivityFilters: The list of 'dfa:activity' values to filter on. + ActivityFilters []*DimensionValue `json:"activityFilters,omitempty"` + + // ConversionDimensions: The list of conversion dimensions the report + // should include. + ConversionDimensions []*SortedDimension `json:"conversionDimensions,omitempty"` + + // CustomFloodlightVariables: The list of custom floodlight variables + // the report should include. + CustomFloodlightVariables []*SortedDimension `json:"customFloodlightVariables,omitempty"` + + // CustomRichMediaEvents: The list of custom rich media events to + // include. + CustomRichMediaEvents []*DimensionValue `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // FloodlightConfigId: The floodlight ID for which to show data in this + // report. All advertisers associated with that ID will automatically be + // added. The dimension of the value needs to be + // 'dfa:floodlightConfigId'. + FloodlightConfigId *DimensionValue `json:"floodlightConfigId,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // PerInteractionDimensions: The list of per interaction dimensions the + // report should include. + PerInteractionDimensions []*SortedDimension `json:"perInteractionDimensions,omitempty"` + + // ReportProperties: The properties of the report. + ReportProperties *ReportPathToConversionCriteriaReportProperties `json:"reportProperties,omitempty"` +} + +type ReportPathToConversionCriteriaReportProperties struct { + // ClicksLookbackWindow: DFA checks to see if a click interaction + // occurred within the specified period of time before a conversion. By + // default the value is pulled from Floodlight or you can manually enter + // a custom value. Valid values: 1-90. + ClicksLookbackWindow int64 `json:"clicksLookbackWindow,omitempty"` + + // ImpressionsLookbackWindow: DFA checks to see if an impression + // interaction occurred within the specified period of time before a + // conversion. By default the value is pulled from Floodlight or you can + // manually enter a custom value. Valid values: 1-90. + ImpressionsLookbackWindow int64 `json:"impressionsLookbackWindow,omitempty"` + + // IncludeAttributedIPConversions: Deprecated: has no effect. + IncludeAttributedIPConversions bool `json:"includeAttributedIPConversions,omitempty"` + + // IncludeUnattributedCookieConversions: Include conversions of users + // with a DoubleClick cookie but without an exposure. That means the + // user did not click or see an ad from the advertiser within the + // Floodlight group, or that the interaction happened outside the + // lookback window. + IncludeUnattributedCookieConversions bool `json:"includeUnattributedCookieConversions,omitempty"` + + // IncludeUnattributedIPConversions: Include conversions that have no + // associated cookies and no exposures. It’s therefore impossible to + // know how the user was exposed to your ads during the lookback window + // prior to a conversion. + IncludeUnattributedIPConversions bool `json:"includeUnattributedIPConversions,omitempty"` + + // MaximumClickInteractions: The maximum number of click interactions to + // include in the report. Advertisers currently paying for E2C reports + // get up to 200 (100 clicks, 100 impressions). If another advertiser in + // your network is paying for E2C, you can have up to 5 total exposures + // per report. + MaximumClickInteractions int64 `json:"maximumClickInteractions,omitempty"` + + // MaximumImpressionInteractions: The maximum number of click + // interactions to include in the report. Advertisers currently paying + // for E2C reports get up to 200 (100 clicks, 100 impressions). If + // another advertiser in your network is paying for E2C, you can have up + // to 5 total exposures per report. + MaximumImpressionInteractions int64 `json:"maximumImpressionInteractions,omitempty"` + + // MaximumInteractionGap: The maximum amount of time that can take place + // between interactions (clicks or impressions) by the same user. Valid + // values: 1-90. + MaximumInteractionGap int64 `json:"maximumInteractionGap,omitempty"` + + // PivotOnInteractionPath: Enable pivoting on interaction path. + PivotOnInteractionPath bool `json:"pivotOnInteractionPath,omitempty"` +} + +type ReportReachCriteria struct { + // Activities: Activity group. + Activities *Activities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *CustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *DateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters on which dimensions are + // filtered. + // Filters for different dimensions are ANDed, filters for the + // same dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` + + // ReachByFrequencyMetricNames: The list of names of Reach By Frequency + // metrics the report should include. + ReachByFrequencyMetricNames []string `json:"reachByFrequencyMetricNames,omitempty"` +} + +type ReportSchedule struct { + // Active: Whether the schedule is active or not. Must be set to either + // true or false. + Active bool `json:"active,omitempty"` + + // Every: Defines every how many days, weeks or months the report should + // be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or + // "MONTHLY". + Every int64 `json:"every,omitempty"` + + // ExpirationDate: The expiration date when the scheduled report stops + // running. + ExpirationDate string `json:"expirationDate,omitempty"` + + // Repeats: The interval for which the report is repeated, one of: + // - + // "DAILY", also requires field "every" to be set. + // - "WEEKLY", also + // requires fields "every" and "repeatsOnWeekDays" to be set. + // - + // "TWICE_A_MONTH" + // - "MONTHLY", also requires fields "every" and + // "runsOnDayOfMonth" to be set. + // - "QUARTERLY" + // - "YEARLY" + Repeats string `json:"repeats,omitempty"` + + // RepeatsOnWeekDays: List of week days "WEEKLY" on which scheduled + // reports should run. + RepeatsOnWeekDays []string `json:"repeatsOnWeekDays,omitempty"` + + // RunsOnDayOfMonth: Enum to define for "MONTHLY" scheduled reports + // whether reports should be repeated on the same day of the month as + // "startDate" or the same day of the week of the month. Possible values + // are: + // - DAY_OF_MONTH + // - WEEK_OF_MONTH + // Example: If 'startDate' is + // Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run + // subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" + // would run subsequent reports on the first Monday of the month. + RunsOnDayOfMonth string `json:"runsOnDayOfMonth,omitempty"` + + // StartDate: Start date of date range for which scheduled reports + // should be run. + StartDate string `json:"startDate,omitempty"` +} + +type ReportCompatibleFields struct { + // DimensionFilters: Dimensions which are compatible to be selected in + // the "dimensionFilters" section of the report. + DimensionFilters []*Dimension `json:"dimensionFilters,omitempty"` + + // Dimensions: Dimensions which are compatible to be selected in the + // "dimensions" section of the report. + Dimensions []*Dimension `json:"dimensions,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#reportCompatibleFields. + Kind string `json:"kind,omitempty"` + + // Metrics: Metrics which are compatible to be selected in the + // "metricNames" section of the report. + Metrics []*Metric `json:"metrics,omitempty"` + + // PivotedActivityMetrics: Metrics which are compatible to be selected + // as activity metrics to pivot on in the "activities" section of the + // report. + PivotedActivityMetrics []*Metric `json:"pivotedActivityMetrics,omitempty"` +} + +type ReportList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The reports returned in this response. + Items []*Report `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case dfareporting#reportList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through reports. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SortedDimension struct { + // Kind: The kind of resource this is, in this case + // dfareporting#sortedDimension. + Kind string `json:"kind,omitempty"` + + // Name: The name of the dimension. + Name string `json:"name,omitempty"` + + // SortOrder: An optional sort order for the dimension column, one of: + // + // - "ASCENDING" + // - "DESCENDING" + SortOrder string `json:"sortOrder,omitempty"` +} + +type UserProfile struct { + // AccountId: The account ID to which this profile belongs. + AccountId int64 `json:"accountId,omitempty,string"` + + // AccountName: The account name this profile belongs to. + AccountName string `json:"accountName,omitempty"` + + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of resource this is, in this case + // dfareporting#userProfile. + Kind string `json:"kind,omitempty"` + + // ProfileId: The unique ID of the user profile. + ProfileId int64 `json:"profileId,omitempty,string"` + + // SubAccountId: The sub account ID this profile belongs to if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // SubAccountName: The sub account name this profile belongs to if + // applicable. + SubAccountName string `json:"subAccountName,omitempty"` + + // UserName: The user name. + UserName string `json:"userName,omitempty"` +} + +type UserProfileList struct { + // Etag: The eTag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The user profiles returned in this response. + Items []*UserProfile `json:"items,omitempty"` + + // Kind: The kind of list this is, in this case + // dfareporting#userProfileList. + Kind string `json:"kind,omitempty"` +} + +// method id "dfareporting.dimensionValues.query": + +type DimensionValuesQueryCall struct { + s *Service + profileId int64 + dimensionvaluerequest *DimensionValueRequest + opt_ map[string]interface{} +} + +// Query: Retrieves list of report dimension values for a list of +// filters. +func (r *DimensionValuesService) Query(profileId int64, dimensionvaluerequest *DimensionValueRequest) *DimensionValuesQueryCall { + c := &DimensionValuesQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.dimensionvaluerequest = dimensionvaluerequest + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *DimensionValuesQueryCall) MaxResults(maxResults int64) *DimensionValuesQueryCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *DimensionValuesQueryCall) PageToken(pageToken string) *DimensionValuesQueryCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DimensionValuesQueryCall) Do() (*DimensionValueList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dimensionvaluerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/dimensionvalues/query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DimensionValueList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of report dimension values for a list of filters.", + // "httpMethod": "POST", + // "id": "dfareporting.dimensionValues.query", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/dimensionvalues/query", + // "request": { + // "$ref": "DimensionValueRequest" + // }, + // "response": { + // "$ref": "DimensionValueList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.files.get": + +type FilesGetCall struct { + s *Service + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file by its report ID and file ID. +func (r *FilesService) Get(reportId int64, fileId int64) *FilesGetCall { + c := &FilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *FilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file by its report ID and file ID.", + // "httpMethod": "GET", + // "id": "dfareporting.files.get", + // "parameterOrder": [ + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "dfareporting.files.list": + +type FilesListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a user profile. +func (r *FilesService) List(profileId int64) *FilesListCall { + c := &FilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *FilesListCall) MaxResults(maxResults int64) *FilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *FilesListCall) PageToken(pageToken string) *FilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Scope sets the optional parameter "scope": The scope that defines +// which results are returned, default is 'MINE'. +func (c *FilesListCall) Scope(scope string) *FilesListCall { + c.opt_["scope"] = scope + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *FilesListCall) SortField(sortField string) *FilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *FilesListCall) SortOrder(sortOrder string) *FilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *FilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scope"]; ok { + params.Set("scope", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a user profile.", + // "httpMethod": "GET", + // "id": "dfareporting.files.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "scope": { + // "default": "MINE", + // "description": "The scope that defines which results are returned, default is 'MINE'.", + // "enum": [ + // "ALL", + // "MINE", + // "SHARED_WITH_ME" + // ], + // "enumDescriptions": [ + // "All files in account.", + // "My files.", + // "Files shared with me." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.delete": + +type ReportsDeleteCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Delete: Deletes a report by its ID. +func (r *ReportsService) Delete(profileId int64, reportId int64) *ReportsDeleteCall { + c := &ReportsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a report by its ID.", + // "httpMethod": "DELETE", + // "id": "dfareporting.reports.delete", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.get": + +type ReportsGetCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report by its ID. +func (r *ReportsService) Get(profileId int64, reportId int64) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report by its ID.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.get", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.insert": + +type ReportsInsertCall struct { + s *Service + profileId int64 + report *Report + opt_ map[string]interface{} +} + +// Insert: Creates a report. +func (r *ReportsService) Insert(profileId int64, report *Report) *ReportsInsertCall { + c := &ReportsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.report = report + return c +} + +func (c *ReportsInsertCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.insert", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.list": + +type ReportsListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Retrieves list of reports. +func (r *ReportsService) List(profileId int64) *ReportsListCall { + c := &ReportsListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsListCall) MaxResults(maxResults int64) *ReportsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsListCall) PageToken(pageToken string) *ReportsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Scope sets the optional parameter "scope": The scope that defines +// which results are returned, default is 'MINE'. +func (c *ReportsListCall) Scope(scope string) *ReportsListCall { + c.opt_["scope"] = scope + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsListCall) SortField(sortField string) *ReportsListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsListCall) SortOrder(sortOrder string) *ReportsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsListCall) Do() (*ReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scope"]; ok { + params.Set("scope", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of reports.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "scope": { + // "default": "MINE", + // "description": "The scope that defines which results are returned, default is 'MINE'.", + // "enum": [ + // "ALL", + // "MINE" + // ], + // "enumDescriptions": [ + // "All reports in account.", + // "My reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME", + // "NAME" + // ], + // "enumDescriptions": [ + // "Sort by report ID.", + // "Sort by 'lastModifiedTime' field.", + // "Sort by name of reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "response": { + // "$ref": "ReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.patch": + +type ReportsPatchCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Patch: Updates a report. This method supports patch semantics. +func (r *ReportsService) Patch(profileId int64, reportId int64, report *Report) *ReportsPatchCall { + c := &ReportsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsPatchCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "dfareporting.reports.patch", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.run": + +type ReportsRunCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Run: Runs a report. +func (r *ReportsService) Run(profileId int64, reportId int64) *ReportsRunCall { + c := &ReportsRunCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// Synchronous sets the optional parameter "synchronous": If set and +// true, tries to run the report synchronously. +func (c *ReportsRunCall) Synchronous(synchronous bool) *ReportsRunCall { + c.opt_["synchronous"] = synchronous + return c +} + +func (c *ReportsRunCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["synchronous"]; ok { + params.Set("synchronous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/run") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.run", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "synchronous": { + // "description": "If set and true, tries to run the report synchronously.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/run", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.update": + +type ReportsUpdateCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Update: Updates a report. +func (r *ReportsService) Update(profileId int64, reportId int64, report *Report) *ReportsUpdateCall { + c := &ReportsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsUpdateCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report.", + // "httpMethod": "PUT", + // "id": "dfareporting.reports.update", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.compatibleFields.query": + +type ReportsCompatibleFieldsQueryCall struct { + s *Service + profileId int64 + report *Report + opt_ map[string]interface{} +} + +// Query: Returns the fields that are compatible to be selected in the +// respective sections of a report criteria, given the fields already +// selected in the input report and user permissions. +func (r *ReportsCompatibleFieldsService) Query(profileId int64, report *Report) *ReportsCompatibleFieldsQueryCall { + c := &ReportsCompatibleFieldsQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.report = report + return c +} + +func (c *ReportsCompatibleFieldsQueryCall) Do() (*CompatibleFields, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/compatiblefields/query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CompatibleFields) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the fields that are compatible to be selected in the respective sections of a report criteria, given the fields already selected in the input report and user permissions.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.compatibleFields.query", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/compatiblefields/query", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "CompatibleFields" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.get": + +type ReportsFilesGetCall struct { + s *Service + profileId int64 + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file. +func (r *ReportsFilesService) Get(profileId int64, reportId int64, fileId int64) *ReportsFilesGetCall { + c := &ReportsFilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *ReportsFilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.get", + // "parameterOrder": [ + // "profileId", + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "dfareporting.reports.files.list": + +type ReportsFilesListCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a report. +func (r *ReportsFilesService) List(profileId int64, reportId int64) *ReportsFilesListCall { + c := &ReportsFilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsFilesListCall) MaxResults(maxResults int64) *ReportsFilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsFilesListCall) PageToken(pageToken string) *ReportsFilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field by which +// to sort the list. +func (c *ReportsFilesListCall) SortField(sortField string) *ReportsFilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsFilesListCall) SortOrder(sortOrder string) *ReportsFilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsFilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a report.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.list", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The ID of the parent report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field by which to sort the list.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file ID.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.get": + +type UserProfilesGetCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// Get: Gets one user profile by ID. +func (r *UserProfilesService) Get(profileId int64) *UserProfilesGetCall { + c := &UserProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +func (c *UserProfilesGetCall) Do() (*UserProfile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user profile by ID.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.get", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The user profile ID.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}", + // "response": { + // "$ref": "UserProfile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.list": + +type UserProfilesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves list of user profiles for a user. +func (r *UserProfilesService) List() *UserProfilesListCall { + c := &UserProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserProfilesListCall) Do() (*UserProfileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of user profiles for a user.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.list", + // "path": "userprofiles", + // "response": { + // "$ref": "UserProfileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-api.json b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-api.json new file mode 100644 index 0000000000000..5ffae72758551 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-api.json @@ -0,0 +1,1171 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Km2zbuxZrnAbsnnH2v5x6aMXpTA\"", + "discoveryVersion": "v1", + "id": "dfareporting:v1", + "name": "dfareporting", + "version": "v1", + "title": "DFA Reporting API", + "description": "Lets you create, run and download reports.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/doubleclick-advertisers/reporting/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/dfareporting/v1/", + "basePath": "/dfareporting/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "dfareporting/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/dfareporting": { + "description": "View and manage DoubleClick for Advertisers reports" + } + } + } + }, + "schemas": { + "DimensionFilter": { + "id": "DimensionFilter", + "type": "object", + "description": "Represents a dimension filter.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension to filter." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#dimensionFilter.", + "default": "dfareporting#dimensionFilter" + }, + "value": { + "type": "string", + "description": "The value of the dimension to filter for." + } + } + }, + "DimensionValue": { + "id": "DimensionValue", + "type": "object", + "description": "Represents a DimensionValue resource.", + "properties": { + "dimensionName": { + "type": "string", + "description": "Name of the dimension." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID associated with the value if available." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#dimensionValue.", + "default": "dfareporting#dimensionValue" + }, + "value": { + "type": "string", + "description": "The value of the dimension." + } + } + }, + "DimensionValueList": { + "id": "DimensionValueList", + "type": "object", + "description": "Represents the list of DimensionValue resources.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The dimension values returned in this response.", + "items": { + "$ref": "DimensionValue" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case dfareporting#dimensionValueList.", + "default": "dfareporting#dimensionValueList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through dimension values. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "DimensionValueRequest": { + "id": "DimensionValueRequest", + "type": "object", + "description": "Represents a DimensionValuesRequest.", + "properties": { + "dimensionName": { + "type": "string", + "description": "The name of the dimension values should be requested for." + }, + "endDate": { + "type": "string", + "description": "The end date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "filters": { + "type": "array", + "description": "List of filters to filter values by. The filters are ANDed.", + "items": { + "$ref": "DimensionFilter" + } + }, + "kind": { + "type": "string", + "description": "Kind of request this is, in this case dfareporting#dimensionValueRequest.", + "default": "dfareporting#dimensionValueRequest" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range for which to retrieve dimension values. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "Represents a File resource. A File contains the meta-data for a report run. It shows the status of the run and holds the urls to the generated report data if the run is finished and the status is \"REPORT_AVAILABLE\".", + "properties": { + "dateRange": { + "type": "object", + "description": "The date range for which the file has report data.", + "properties": { + "endDate": { + "type": "string", + "description": "The end date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name of the file." + }, + "id": { + "type": "string", + "description": "The unique ID of this report file.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#file.", + "default": "dfareporting#file" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp in milliseconds since epoch when this file was last modified.", + "format": "int64" + }, + "reportId": { + "type": "string", + "description": "The ID of the report this file was generated from.", + "format": "int64" + }, + "status": { + "type": "string", + "description": "The status of the report file, one of: \n- \"PROCESSING\" \n- \"REPORT_AVAILABLE\" \n- \"FAILED\" \n- \"CANCELLED\"" + }, + "urls": { + "type": "object", + "description": "The urls where the completed report file can be downloaded.", + "properties": { + "csv": { + "type": "object", + "description": "Urls for generated CSV data.", + "properties": { + "apiUrl": { + "type": "string", + "description": "The url for downloading the report data through the API." + }, + "browserUrl": { + "type": "string", + "description": "The url for downloading the report data through a browser." + } + } + } + } + } + } + }, + "FileList": { + "id": "FileList", + "type": "object", + "description": "Represents the list of File resources.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The files returned in this response.", + "items": { + "$ref": "File" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case dfareporting#fileList.", + "default": "dfareporting#fileList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through files. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "Represents a Report resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account id this report belongs to.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "criteria": { + "type": "object", + "description": "The report criteria.", + "properties": { + "activities": { + "type": "object", + "description": "Activity group.", + "properties": { + "filters": { + "type": "array", + "description": "List of activity filters. The dimension values need to be all either of type \"dfa:activity\" or \"dfa:activityGroup\".", + "items": { + "$ref": "DimensionValue" + } + }, + "metricNames": { + "type": "array", + "description": "List of names of floodlight activity metrics.", + "items": { + "type": "string" + } + } + } + }, + "customRichMediaEvents": { + "type": "object", + "description": "Custom Rich Media Events group.", + "properties": { + "filteredEventIds": { + "type": "array", + "description": "List of custom rich media event IDs. Dimension values must be all of type dfa:richMediaEventTypeIdAndName.", + "items": { + "$ref": "DimensionValue" + } + } + } + }, + "dateRange": { + "type": "object", + "description": "The date range this report should be run for.", + "properties": { + "endDate": { + "type": "string", + "description": "The end date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + }, + "relativeDateRange": { + "type": "string", + "description": "The date range relative to the date of when the report is run, one of: \n- \"TODAY\" \n- \"YESTERDAY\" \n- \"WEEK_TO_DATE\" \n- \"MONTH_TO_DATE\" \n- \"QUARTER_TO_DATE\" \n- \"YEAR_TO_DATE\" \n- \"PREVIOUS_WEEK\" \n- \"PREVIOUS_MONTH\" \n- \"PREVIOUS_QUARTER\" \n- \"PREVIOUS_YEAR\" \n- \"LAST_7_DAYS\" \n- \"LAST_30_DAYS\" \n- \"LAST_90_DAYS\" \n- \"LAST_365_DAYS\" \n- \"LAST_24_MONTHS\"" + }, + "startDate": { + "type": "string", + "description": "The start date of the date range, inclusive. A string of the format: \"yyyy-MM-dd\".", + "format": "date" + } + } + }, + "dimensionFilters": { + "type": "array", + "description": "The list of filters dimensions are filtered on.\nFilters for different dimensions are ANDed, filters for the same dimension are grouped together and ORed.", + "items": { + "$ref": "DimensionValue" + } + }, + "dimensions": { + "type": "array", + "description": "The list of dimensions the report should include.", + "items": { + "$ref": "SortedDimension" + } + }, + "metricNames": { + "type": "array", + "description": "The list of names of metrics the report should include.", + "items": { + "type": "string" + } + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "fileName": { + "type": "string", + "description": "The file name used when generating report files for this report." + }, + "id": { + "type": "string", + "description": "The unique ID identifying this report resource.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#report.", + "default": "dfareporting#report" + }, + "lastModifiedTime": { + "type": "string", + "description": "The timestamp (in milliseconds since epoch) of when this report was last modified.", + "format": "uint64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "name": { + "type": "string", + "description": "The name of the report.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "ownerProfileId": { + "type": "string", + "description": "The user profile id of the owner of this report.", + "format": "int64", + "annotations": { + "required": [ + "dfareporting.reports.update" + ] + } + }, + "schedule": { + "type": "object", + "description": "The report's schedule. Can only be set if the report's 'dateRange' is a relative date range and the relative date range is not \"TODAY\".", + "properties": { + "active": { + "type": "boolean", + "description": "Whether the schedule is active or not. Must be set to either true or false.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "every": { + "type": "integer", + "description": "Defines every how many days, weeks or months the report should be run. Needs to be set when \"repeats\" is either \"DAILY\", \"WEEKLY\" or \"MONTHLY\".", + "format": "int32" + }, + "expirationDate": { + "type": "string", + "description": "The expiration date when the scheduled report stops running.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeats": { + "type": "string", + "description": "The interval the report is repeated for, one of: \n- \"DAILY\", also requires field \"every\" to be set. \n- \"WEEKLY\", also requires fields \"every\" and \"repeatsOnWeekDays\" to be set. \n- \"TWICE_A_MONTH\" \n- \"MONTHLY\", also requires fields \"every\" and \"runsOnDayOfMonth\" to be set. \n- \"QUARTERLY\" \n- \"YEARLY\"", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + }, + "repeatsOnWeekDays": { + "type": "array", + "description": "List of week days \"WEEKLY\" scheduled reports should run on.", + "items": { + "type": "string" + } + }, + "runsOnDayOfMonth": { + "type": "string", + "description": "Enum to define for \"MONTHLY\" scheduled reports whether reports should be repeated on the same day of the month as \"startDate\" or the same day of the week of the month. Possible values are: \n- DAY_OF_MONTH \n- WEEK_OF_MONTH \nExample: If 'startDate' is Monday, April 2nd 2012 (2012-04-02), \"DAY_OF_MONTH\" would run subsequent reports on the 2nd of every Month, and \"WEEK_OF_MONTH\" would run subsequent reports on the first Monday of the month." + }, + "startDate": { + "type": "string", + "description": "Start date of date range for which scheduled reports should be run.", + "format": "date", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "subAccountId": { + "type": "string", + "description": "The subbaccount id this report belongs to if applicable.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The type of the report, currently only \"STANDARD\" is supported.", + "annotations": { + "required": [ + "dfareporting.reports.insert", + "dfareporting.reports.update" + ] + } + } + } + }, + "ReportList": { + "id": "ReportList", + "type": "object", + "description": "Represents the list of reports.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The reports returned in this response.", + "items": { + "$ref": "Report" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case dfareporting#reportList.", + "default": "dfareporting#reportList" + }, + "nextPageToken": { + "type": "string", + "description": "Continuation token used to page through reports. To retrieve the next page of results, set the next request's \"pageToken\" to the value of this field. The page token is only valid for a limited amount of time and should not be persisted." + } + } + }, + "SortedDimension": { + "id": "SortedDimension", + "type": "object", + "description": "Represents a sorted dimension.", + "properties": { + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#sortedDimension.", + "default": "dfareporting#sortedDimension" + }, + "name": { + "type": "string", + "description": "The name of the dimension." + }, + "sortOrder": { + "type": "string", + "description": "An optional sort order for the dimension column, one of: \n- \"ASCENDING\" \n- \"DESCENDING\"" + } + } + }, + "UserProfile": { + "id": "UserProfile", + "type": "object", + "description": "Represents a UserProfile resource.", + "properties": { + "accountId": { + "type": "string", + "description": "The account ID this profile belongs to.", + "format": "int64" + }, + "accountName": { + "type": "string", + "description": "The account name this profile belongs to." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "kind": { + "type": "string", + "description": "Kind of resource this is, in this case dfareporting#userProfile.", + "default": "dfareporting#userProfile" + }, + "profileId": { + "type": "string", + "description": "The unique ID of the user profile.", + "format": "int64" + }, + "subAccountId": { + "type": "string", + "description": "The sub account ID this profile belongs to if applicable.", + "format": "int64" + }, + "subAccountName": { + "type": "string", + "description": "The sub account name this profile belongs to if applicable." + }, + "userName": { + "type": "string", + "description": "The user name." + } + } + }, + "UserProfileList": { + "id": "UserProfileList", + "type": "object", + "description": "Represents the list of user profiles.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The user profiles returned in this response.", + "items": { + "$ref": "UserProfile" + } + }, + "kind": { + "type": "string", + "description": "Kind of list this is, in this case dfareporting#userProfileList.", + "default": "dfareporting#userProfileList" + } + } + } + }, + "resources": { + "dimensionValues": { + "methods": { + "query": { + "id": "dfareporting.dimensionValues.query", + "path": "userprofiles/{profileId}/dimensionvalues/query", + "httpMethod": "POST", + "description": "Retrieves list of report dimension values for a list of filters.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "DimensionValueRequest" + }, + "response": { + "$ref": "DimensionValueList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "files": { + "methods": { + "list": { + "id": "dfareporting.files.list", + "path": "userprofiles/{profileId}/files", + "httpMethod": "GET", + "description": "Lists files for a user profile.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field to sort the list by.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file id.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + }, + "reports": { + "methods": { + "delete": { + "id": "dfareporting.reports.delete", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "DELETE", + "description": "Deletes a report by its id.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "get": { + "id": "dfareporting.reports.get", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "GET", + "description": "Retrieves a report by its id.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "insert": { + "id": "dfareporting.reports.insert", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "POST", + "description": "Creates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.list", + "path": "userprofiles/{profileId}/reports", + "httpMethod": "GET", + "description": "Retrieves list of reports.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field to sort the list by.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME", + "NAME" + ], + "enumDescriptions": [ + "Sort by report id.", + "Sort by 'lastModifiedTime' field.", + "Sort by display name of reports." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "ReportList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "patch": { + "id": "dfareporting.reports.patch", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PATCH", + "description": "Updates a report. This method supports patch semantics.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "run": { + "id": "dfareporting.reports.run", + "path": "userprofiles/{profileId}/reports/{reportId}/run", + "httpMethod": "POST", + "description": "Runs a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + }, + "synchronous": { + "type": "boolean", + "description": "If set and true, tries to run the report synchronously.", + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "update": { + "id": "dfareporting.reports.update", + "path": "userprofiles/{profileId}/reports/{reportId}", + "httpMethod": "PUT", + "description": "Updates a report.", + "parameters": { + "profileId": { + "type": "string", + "description": "The DFA user profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "request": { + "$ref": "Report" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + }, + "resources": { + "files": { + "methods": { + "get": { + "id": "dfareporting.reports.files.get", + "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + "httpMethod": "GET", + "description": "Retrieves a report file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The id of the report file.", + "required": true, + "format": "int64", + "location": "path" + }, + "profileId": { + "type": "string", + "description": "The DFA profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the report.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId", + "reportId", + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.reports.files.list", + "path": "userprofiles/{profileId}/reports/{reportId}/files", + "httpMethod": "GET", + "description": "Lists files for a report.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "int32", + "minimum": "0", + "maximum": "10", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of the nextToken from the previous result page.", + "location": "query" + }, + "profileId": { + "type": "string", + "description": "The DFA profile id.", + "required": true, + "format": "int64", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "The id of the parent report.", + "required": true, + "format": "int64", + "location": "path" + }, + "sortField": { + "type": "string", + "description": "The field to sort the list by.", + "default": "LAST_MODIFIED_TIME", + "enum": [ + "ID", + "LAST_MODIFIED_TIME" + ], + "enumDescriptions": [ + "Sort by file id.", + "Sort by 'lastmodifiedAt' field." + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Order of sorted results, default is 'DESCENDING'.", + "default": "DESCENDING", + "enum": [ + "ASCENDING", + "DESCENDING" + ], + "enumDescriptions": [ + "Ascending order.", + "Descending order." + ], + "location": "query" + } + }, + "parameterOrder": [ + "profileId", + "reportId" + ], + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } + }, + "userProfiles": { + "methods": { + "get": { + "id": "dfareporting.userProfiles.get", + "path": "userprofiles/{profileId}", + "httpMethod": "GET", + "description": "Gets one user profile by id.", + "parameters": { + "profileId": { + "type": "string", + "description": "The user profile id.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "profileId" + ], + "response": { + "$ref": "UserProfile" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + }, + "list": { + "id": "dfareporting.userProfiles.list", + "path": "userprofiles", + "httpMethod": "GET", + "description": "Retrieves list of user profiles for a user.", + "response": { + "$ref": "UserProfileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/dfareporting" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-gen.go b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-gen.go new file mode 100644 index 0000000000000..f6de129e7bd2a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dfareporting/v1/dfareporting-gen.go @@ -0,0 +1,1748 @@ +// Package dfareporting provides access to the DFA Reporting API. +// +// See https://developers.google.com/doubleclick-advertisers/reporting/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/dfareporting/v1" +// ... +// dfareportingService, err := dfareporting.New(oauthHttpClient) +package dfareporting + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "dfareporting:v1" +const apiName = "dfareporting" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/dfareporting/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage DoubleClick for Advertisers reports + DfareportingScope = "https://www.googleapis.com/auth/dfareporting" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.DimensionValues = NewDimensionValuesService(s) + s.Files = NewFilesService(s) + s.Reports = NewReportsService(s) + s.UserProfiles = NewUserProfilesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + DimensionValues *DimensionValuesService + + Files *FilesService + + Reports *ReportsService + + UserProfiles *UserProfilesService +} + +func NewDimensionValuesService(s *Service) *DimensionValuesService { + rs := &DimensionValuesService{s: s} + return rs +} + +type DimensionValuesService struct { + s *Service +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + rs.Files = NewReportsFilesService(s) + return rs +} + +type ReportsService struct { + s *Service + + Files *ReportsFilesService +} + +func NewReportsFilesService(s *Service) *ReportsFilesService { + rs := &ReportsFilesService{s: s} + return rs +} + +type ReportsFilesService struct { + s *Service +} + +func NewUserProfilesService(s *Service) *UserProfilesService { + rs := &UserProfilesService{s: s} + return rs +} + +type UserProfilesService struct { + s *Service +} + +type DimensionFilter struct { + // DimensionName: The name of the dimension to filter. + DimensionName string `json:"dimensionName,omitempty"` + + // Kind: Kind of resource this is, in this case + // dfareporting#dimensionFilter. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension to filter for. + Value string `json:"value,omitempty"` +} + +type DimensionValue struct { + // DimensionName: Name of the dimension. + DimensionName string `json:"dimensionName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID associated with the value if available. + Id string `json:"id,omitempty"` + + // Kind: Kind of resource this is, in this case + // dfareporting#dimensionValue. + Kind string `json:"kind,omitempty"` + + // Value: The value of the dimension. + Value string `json:"value,omitempty"` +} + +type DimensionValueList struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The dimension values returned in this response. + Items []*DimensionValue `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // dfareporting#dimensionValueList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through dimension + // values. To retrieve the next page of results, set the next request's + // "pageToken" to the value of this field. The page token is only valid + // for a limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DimensionValueRequest struct { + // DimensionName: The name of the dimension values should be requested + // for. + DimensionName string `json:"dimensionName,omitempty"` + + // EndDate: The end date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // Filters: List of filters to filter values by. The filters are ANDed. + Filters []*DimensionFilter `json:"filters,omitempty"` + + // Kind: Kind of request this is, in this case + // dfareporting#dimensionValueRequest. + Kind string `json:"kind,omitempty"` + + // StartDate: The start date of the date range for which to retrieve + // dimension values. A string of the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type File struct { + // DateRange: The date range for which the file has report data. + DateRange *FileDateRange `json:"dateRange,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name of the file. + FileName string `json:"fileName,omitempty"` + + // Id: The unique ID of this report file. + Id int64 `json:"id,omitempty,string"` + + // Kind: Kind of resource this is, in this case dfareporting#file. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp in milliseconds since epoch when this + // file was last modified. + LastModifiedTime int64 `json:"lastModifiedTime,omitempty,string"` + + // ReportId: The ID of the report this file was generated from. + ReportId int64 `json:"reportId,omitempty,string"` + + // Status: The status of the report file, one of: + // - "PROCESSING" + // - + // "REPORT_AVAILABLE" + // - "FAILED" + // - "CANCELLED" + Status string `json:"status,omitempty"` + + // Urls: The urls where the completed report file can be downloaded. + Urls *FileUrls `json:"urls,omitempty"` +} + +type FileDateRange struct { + // EndDate: The end date of the date range, inclusive. A string of the + // format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // StartDate: The start date of the date range, inclusive. A string of + // the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type FileUrls struct { + // Csv: Urls for generated CSV data. + Csv *FileUrlsCsv `json:"csv,omitempty"` +} + +type FileUrlsCsv struct { + // ApiUrl: The url for downloading the report data through the API. + ApiUrl string `json:"apiUrl,omitempty"` + + // BrowserUrl: The url for downloading the report data through a + // browser. + BrowserUrl string `json:"browserUrl,omitempty"` +} + +type FileList struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The files returned in this response. + Items []*File `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case dfareporting#fileList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through files. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Report struct { + // AccountId: The account id this report belongs to. + AccountId int64 `json:"accountId,omitempty,string"` + + // Criteria: The report criteria. + Criteria *ReportCriteria `json:"criteria,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // FileName: The file name used when generating report files for this + // report. + FileName string `json:"fileName,omitempty"` + + // Id: The unique ID identifying this report resource. + Id int64 `json:"id,omitempty,string"` + + // Kind: Kind of resource this is, in this case dfareporting#report. + Kind string `json:"kind,omitempty"` + + // LastModifiedTime: The timestamp (in milliseconds since epoch) of when + // this report was last modified. + LastModifiedTime uint64 `json:"lastModifiedTime,omitempty,string"` + + // Name: The name of the report. + Name string `json:"name,omitempty"` + + // OwnerProfileId: The user profile id of the owner of this report. + OwnerProfileId int64 `json:"ownerProfileId,omitempty,string"` + + // Schedule: The report's schedule. Can only be set if the report's + // 'dateRange' is a relative date range and the relative date range is + // not "TODAY". + Schedule *ReportSchedule `json:"schedule,omitempty"` + + // SubAccountId: The subbaccount id this report belongs to if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // Type: The type of the report, currently only "STANDARD" is supported. + Type string `json:"type,omitempty"` +} + +type ReportCriteria struct { + // Activities: Activity group. + Activities *ReportCriteriaActivities `json:"activities,omitempty"` + + // CustomRichMediaEvents: Custom Rich Media Events group. + CustomRichMediaEvents *ReportCriteriaCustomRichMediaEvents `json:"customRichMediaEvents,omitempty"` + + // DateRange: The date range this report should be run for. + DateRange *ReportCriteriaDateRange `json:"dateRange,omitempty"` + + // DimensionFilters: The list of filters dimensions are filtered + // on. + // Filters for different dimensions are ANDed, filters for the same + // dimension are grouped together and ORed. + DimensionFilters []*DimensionValue `json:"dimensionFilters,omitempty"` + + // Dimensions: The list of dimensions the report should include. + Dimensions []*SortedDimension `json:"dimensions,omitempty"` + + // MetricNames: The list of names of metrics the report should include. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCriteriaActivities struct { + // Filters: List of activity filters. The dimension values need to be + // all either of type "dfa:activity" or "dfa:activityGroup". + Filters []*DimensionValue `json:"filters,omitempty"` + + // MetricNames: List of names of floodlight activity metrics. + MetricNames []string `json:"metricNames,omitempty"` +} + +type ReportCriteriaCustomRichMediaEvents struct { + // FilteredEventIds: List of custom rich media event IDs. Dimension + // values must be all of type dfa:richMediaEventTypeIdAndName. + FilteredEventIds []*DimensionValue `json:"filteredEventIds,omitempty"` +} + +type ReportCriteriaDateRange struct { + // EndDate: The end date of the date range, inclusive. A string of the + // format: "yyyy-MM-dd". + EndDate string `json:"endDate,omitempty"` + + // RelativeDateRange: The date range relative to the date of when the + // report is run, one of: + // - "TODAY" + // - "YESTERDAY" + // - "WEEK_TO_DATE" + // + // - "MONTH_TO_DATE" + // - "QUARTER_TO_DATE" + // - "YEAR_TO_DATE" + // - + // "PREVIOUS_WEEK" + // - "PREVIOUS_MONTH" + // - "PREVIOUS_QUARTER" + // - + // "PREVIOUS_YEAR" + // - "LAST_7_DAYS" + // - "LAST_30_DAYS" + // - "LAST_90_DAYS" + // + // - "LAST_365_DAYS" + // - "LAST_24_MONTHS" + RelativeDateRange string `json:"relativeDateRange,omitempty"` + + // StartDate: The start date of the date range, inclusive. A string of + // the format: "yyyy-MM-dd". + StartDate string `json:"startDate,omitempty"` +} + +type ReportSchedule struct { + // Active: Whether the schedule is active or not. Must be set to either + // true or false. + Active bool `json:"active,omitempty"` + + // Every: Defines every how many days, weeks or months the report should + // be run. Needs to be set when "repeats" is either "DAILY", "WEEKLY" or + // "MONTHLY". + Every int64 `json:"every,omitempty"` + + // ExpirationDate: The expiration date when the scheduled report stops + // running. + ExpirationDate string `json:"expirationDate,omitempty"` + + // Repeats: The interval the report is repeated for, one of: + // - + // "DAILY", also requires field "every" to be set. + // - "WEEKLY", also + // requires fields "every" and "repeatsOnWeekDays" to be set. + // - + // "TWICE_A_MONTH" + // - "MONTHLY", also requires fields "every" and + // "runsOnDayOfMonth" to be set. + // - "QUARTERLY" + // - "YEARLY" + Repeats string `json:"repeats,omitempty"` + + // RepeatsOnWeekDays: List of week days "WEEKLY" scheduled reports + // should run on. + RepeatsOnWeekDays []string `json:"repeatsOnWeekDays,omitempty"` + + // RunsOnDayOfMonth: Enum to define for "MONTHLY" scheduled reports + // whether reports should be repeated on the same day of the month as + // "startDate" or the same day of the week of the month. Possible values + // are: + // - DAY_OF_MONTH + // - WEEK_OF_MONTH + // Example: If 'startDate' is + // Monday, April 2nd 2012 (2012-04-02), "DAY_OF_MONTH" would run + // subsequent reports on the 2nd of every Month, and "WEEK_OF_MONTH" + // would run subsequent reports on the first Monday of the month. + RunsOnDayOfMonth string `json:"runsOnDayOfMonth,omitempty"` + + // StartDate: Start date of date range for which scheduled reports + // should be run. + StartDate string `json:"startDate,omitempty"` +} + +type ReportList struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The reports returned in this response. + Items []*Report `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case dfareporting#reportList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Continuation token used to page through reports. To + // retrieve the next page of results, set the next request's "pageToken" + // to the value of this field. The page token is only valid for a + // limited amount of time and should not be persisted. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SortedDimension struct { + // Kind: Kind of resource this is, in this case + // dfareporting#sortedDimension. + Kind string `json:"kind,omitempty"` + + // Name: The name of the dimension. + Name string `json:"name,omitempty"` + + // SortOrder: An optional sort order for the dimension column, one of: + // + // - "ASCENDING" + // - "DESCENDING" + SortOrder string `json:"sortOrder,omitempty"` +} + +type UserProfile struct { + // AccountId: The account ID this profile belongs to. + AccountId int64 `json:"accountId,omitempty,string"` + + // AccountName: The account name this profile belongs to. + AccountName string `json:"accountName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Kind: Kind of resource this is, in this case + // dfareporting#userProfile. + Kind string `json:"kind,omitempty"` + + // ProfileId: The unique ID of the user profile. + ProfileId int64 `json:"profileId,omitempty,string"` + + // SubAccountId: The sub account ID this profile belongs to if + // applicable. + SubAccountId int64 `json:"subAccountId,omitempty,string"` + + // SubAccountName: The sub account name this profile belongs to if + // applicable. + SubAccountName string `json:"subAccountName,omitempty"` + + // UserName: The user name. + UserName string `json:"userName,omitempty"` +} + +type UserProfileList struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The user profiles returned in this response. + Items []*UserProfile `json:"items,omitempty"` + + // Kind: Kind of list this is, in this case + // dfareporting#userProfileList. + Kind string `json:"kind,omitempty"` +} + +// method id "dfareporting.dimensionValues.query": + +type DimensionValuesQueryCall struct { + s *Service + profileId int64 + dimensionvaluerequest *DimensionValueRequest + opt_ map[string]interface{} +} + +// Query: Retrieves list of report dimension values for a list of +// filters. +func (r *DimensionValuesService) Query(profileId int64, dimensionvaluerequest *DimensionValueRequest) *DimensionValuesQueryCall { + c := &DimensionValuesQueryCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.dimensionvaluerequest = dimensionvaluerequest + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *DimensionValuesQueryCall) MaxResults(maxResults int64) *DimensionValuesQueryCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *DimensionValuesQueryCall) PageToken(pageToken string) *DimensionValuesQueryCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *DimensionValuesQueryCall) Do() (*DimensionValueList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.dimensionvaluerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/dimensionvalues/query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DimensionValueList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of report dimension values for a list of filters.", + // "httpMethod": "POST", + // "id": "dfareporting.dimensionValues.query", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/dimensionvalues/query", + // "request": { + // "$ref": "DimensionValueRequest" + // }, + // "response": { + // "$ref": "DimensionValueList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.files.list": + +type FilesListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a user profile. +func (r *FilesService) List(profileId int64) *FilesListCall { + c := &FilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *FilesListCall) MaxResults(maxResults int64) *FilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *FilesListCall) PageToken(pageToken string) *FilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field to sort +// the list by. +func (c *FilesListCall) SortField(sortField string) *FilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *FilesListCall) SortOrder(sortOrder string) *FilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *FilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a user profile.", + // "httpMethod": "GET", + // "id": "dfareporting.files.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field to sort the list by.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file id.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.delete": + +type ReportsDeleteCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Delete: Deletes a report by its id. +func (r *ReportsService) Delete(profileId int64, reportId int64) *ReportsDeleteCall { + c := &ReportsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a report by its id.", + // "httpMethod": "DELETE", + // "id": "dfareporting.reports.delete", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.get": + +type ReportsGetCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report by its id. +func (r *ReportsService) Get(profileId int64, reportId int64) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report by its id.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.get", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.insert": + +type ReportsInsertCall struct { + s *Service + profileId int64 + report *Report + opt_ map[string]interface{} +} + +// Insert: Creates a report. +func (r *ReportsService) Insert(profileId int64, report *Report) *ReportsInsertCall { + c := &ReportsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.report = report + return c +} + +func (c *ReportsInsertCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.insert", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.list": + +type ReportsListCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// List: Retrieves list of reports. +func (r *ReportsService) List(profileId int64) *ReportsListCall { + c := &ReportsListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsListCall) MaxResults(maxResults int64) *ReportsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsListCall) PageToken(pageToken string) *ReportsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field to sort +// the list by. +func (c *ReportsListCall) SortField(sortField string) *ReportsListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsListCall) SortOrder(sortOrder string) *ReportsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsListCall) Do() (*ReportList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReportList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of reports.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.list", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field to sort the list by.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME", + // "NAME" + // ], + // "enumDescriptions": [ + // "Sort by report id.", + // "Sort by 'lastModifiedTime' field.", + // "Sort by display name of reports." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports", + // "response": { + // "$ref": "ReportList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.patch": + +type ReportsPatchCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Patch: Updates a report. This method supports patch semantics. +func (r *ReportsService) Patch(profileId int64, reportId int64, report *Report) *ReportsPatchCall { + c := &ReportsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsPatchCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "dfareporting.reports.patch", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.run": + +type ReportsRunCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// Run: Runs a report. +func (r *ReportsService) Run(profileId int64, reportId int64) *ReportsRunCall { + c := &ReportsRunCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// Synchronous sets the optional parameter "synchronous": If set and +// true, tries to run the report synchronously. +func (c *ReportsRunCall) Synchronous(synchronous bool) *ReportsRunCall { + c.opt_["synchronous"] = synchronous + return c +} + +func (c *ReportsRunCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["synchronous"]; ok { + params.Set("synchronous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/run") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs a report.", + // "httpMethod": "POST", + // "id": "dfareporting.reports.run", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "synchronous": { + // "description": "If set and true, tries to run the report synchronously.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/run", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.update": + +type ReportsUpdateCall struct { + s *Service + profileId int64 + reportId int64 + report *Report + opt_ map[string]interface{} +} + +// Update: Updates a report. +func (r *ReportsService) Update(profileId int64, reportId int64, report *Report) *ReportsUpdateCall { + c := &ReportsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.report = report + return c +} + +func (c *ReportsUpdateCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.report) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a report.", + // "httpMethod": "PUT", + // "id": "dfareporting.reports.update", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "profileId": { + // "description": "The DFA user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}", + // "request": { + // "$ref": "Report" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.get": + +type ReportsFilesGetCall struct { + s *Service + profileId int64 + reportId int64 + fileId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a report file. +func (r *ReportsFilesService) Get(profileId int64, reportId int64, fileId int64) *ReportsFilesGetCall { + c := &ReportsFilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + c.fileId = fileId + return c +} + +func (c *ReportsFilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", strconv.FormatInt(c.fileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report file.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.get", + // "parameterOrder": [ + // "profileId", + // "reportId", + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The id of the report file.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.reports.files.list": + +type ReportsFilesListCall struct { + s *Service + profileId int64 + reportId int64 + opt_ map[string]interface{} +} + +// List: Lists files for a report. +func (r *ReportsFilesService) List(profileId int64, reportId int64) *ReportsFilesListCall { + c := &ReportsFilesListCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + c.reportId = reportId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *ReportsFilesListCall) MaxResults(maxResults int64) *ReportsFilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of the +// nextToken from the previous result page. +func (c *ReportsFilesListCall) PageToken(pageToken string) *ReportsFilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortField sets the optional parameter "sortField": The field to sort +// the list by. +func (c *ReportsFilesListCall) SortField(sortField string) *ReportsFilesListCall { + c.opt_["sortField"] = sortField + return c +} + +// SortOrder sets the optional parameter "sortOrder": Order of sorted +// results, default is 'DESCENDING'. +func (c *ReportsFilesListCall) SortOrder(sortOrder string) *ReportsFilesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ReportsFilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortField"]; ok { + params.Set("sortField", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}/reports/{reportId}/files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", strconv.FormatInt(c.reportId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists files for a report.", + // "httpMethod": "GET", + // "id": "dfareporting.reports.files.list", + // "parameterOrder": [ + // "profileId", + // "reportId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "maximum": "10", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of the nextToken from the previous result page.", + // "location": "query", + // "type": "string" + // }, + // "profileId": { + // "description": "The DFA profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "reportId": { + // "description": "The id of the parent report.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortField": { + // "default": "LAST_MODIFIED_TIME", + // "description": "The field to sort the list by.", + // "enum": [ + // "ID", + // "LAST_MODIFIED_TIME" + // ], + // "enumDescriptions": [ + // "Sort by file id.", + // "Sort by 'lastmodifiedAt' field." + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "DESCENDING", + // "description": "Order of sorted results, default is 'DESCENDING'.", + // "enum": [ + // "ASCENDING", + // "DESCENDING" + // ], + // "enumDescriptions": [ + // "Ascending order.", + // "Descending order." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}/reports/{reportId}/files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.get": + +type UserProfilesGetCall struct { + s *Service + profileId int64 + opt_ map[string]interface{} +} + +// Get: Gets one user profile by id. +func (r *UserProfilesService) Get(profileId int64) *UserProfilesGetCall { + c := &UserProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.profileId = profileId + return c +} + +func (c *UserProfilesGetCall) Do() (*UserProfile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles/{profileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{profileId}", strconv.FormatInt(c.profileId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user profile by id.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.get", + // "parameterOrder": [ + // "profileId" + // ], + // "parameters": { + // "profileId": { + // "description": "The user profile id.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "userprofiles/{profileId}", + // "response": { + // "$ref": "UserProfile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} + +// method id "dfareporting.userProfiles.list": + +type UserProfilesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves list of user profiles for a user. +func (r *UserProfilesService) List() *UserProfilesListCall { + c := &UserProfilesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserProfilesListCall) Do() (*UserProfileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userprofiles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UserProfileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves list of user profiles for a user.", + // "httpMethod": "GET", + // "id": "dfareporting.userProfiles.list", + // "path": "userprofiles", + // "response": { + // "$ref": "UserProfileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/dfareporting" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-api.json b/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-api.json new file mode 100644 index 0000000000000..200602e90ba48 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-api.json @@ -0,0 +1,674 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/UNFMI_ENJ3hAFRWSi4GLSerTeFg\"", + "discoveryVersion": "v1", + "id": "discovery:v1", + "name": "discovery", + "version": "v1", + "title": "APIs Discovery Service", + "description": "Lets you discover information about other Google APIs, such as what APIs are available, the resource and method details for each API.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/filing_cabinet_search-g16.png", + "x32": "http://www.google.com/images/icons/feature/filing_cabinet_search-g32.png" + }, + "documentationLink": "https://developers.google.com/discovery/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/discovery/v1/", + "basePath": "/discovery/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "discovery/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "DirectoryList": { + "id": "DirectoryList", + "type": "object", + "properties": { + "discoveryVersion": { + "type": "string", + "description": "Indicate the version of the Discovery API used to generate this doc.", + "default": "v1" + }, + "items": { + "type": "array", + "description": "The individual directory entries. One entry per api/version pair.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The description of this API." + }, + "discoveryLink": { + "type": "string", + "description": "A link to the discovery document." + }, + "discoveryRestUrl": { + "type": "string", + "description": "The URL for the discovery REST document." + }, + "documentationLink": { + "type": "string", + "description": "A link to human readable documentation for the API." + }, + "icons": { + "type": "object", + "description": "Links to 16x16 and 32x32 icons representing the API.", + "properties": { + "x16": { + "type": "string", + "description": "The URL of the 16x16 icon." + }, + "x32": { + "type": "string", + "description": "The URL of the 32x32 icon." + } + } + }, + "id": { + "type": "string", + "description": "The id of this API." + }, + "kind": { + "type": "string", + "description": "The kind for this response.", + "default": "discovery#directoryItem" + }, + "labels": { + "type": "array", + "description": "Labels for the status of this API, such as labs or deprecated.", + "items": { + "type": "string" + } + }, + "name": { + "type": "string", + "description": "The name of the API." + }, + "preferred": { + "type": "boolean", + "description": "True if this version is the preferred version to use." + }, + "title": { + "type": "string", + "description": "The title of this API." + }, + "version": { + "type": "string", + "description": "The version of the API." + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind for this response.", + "default": "discovery#directoryList" + } + } + }, + "JsonSchema": { + "id": "JsonSchema", + "type": "object", + "properties": { + "$ref": { + "type": "string", + "description": "A reference to another schema. The value of this property is the \"id\" of another schema." + }, + "additionalProperties": { + "$ref": "JsonSchema", + "description": "If this is a schema for an object, this property is the schema for any additional properties with dynamic keys on this object." + }, + "annotations": { + "type": "object", + "description": "Additional information about this property.", + "properties": { + "required": { + "type": "array", + "description": "A list of methods for which this property is required on requests.", + "items": { + "type": "string" + } + } + } + }, + "default": { + "type": "string", + "description": "The default value of this property (if one exists)." + }, + "description": { + "type": "string", + "description": "A description of this object." + }, + "enum": { + "type": "array", + "description": "Values this parameter may take (if it is an enum).", + "items": { + "type": "string" + } + }, + "enumDescriptions": { + "type": "array", + "description": "The descriptions for the enums. Each position maps to the corresponding value in the \"enum\" array.", + "items": { + "type": "string" + } + }, + "format": { + "type": "string", + "description": "An additional regular expression or key that helps constrain the value. For more details see: http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23" + }, + "id": { + "type": "string", + "description": "Unique identifier for this schema." + }, + "items": { + "$ref": "JsonSchema", + "description": "If this is a schema for an array, this property is the schema for each element in the array." + }, + "location": { + "type": "string", + "description": "Whether this parameter goes in the query or the path for REST requests." + }, + "maximum": { + "type": "string", + "description": "The maximum value of this parameter." + }, + "minimum": { + "type": "string", + "description": "The minimum value of this parameter." + }, + "pattern": { + "type": "string", + "description": "The regular expression this parameter must conform to. Uses Java 6 regex format: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html" + }, + "properties": { + "type": "object", + "description": "If this is a schema for an object, list the schema for each property of this object.", + "additionalProperties": { + "$ref": "JsonSchema", + "description": "A single property of this object. The value is itself a JSON Schema object describing this property." + } + }, + "readOnly": { + "type": "boolean", + "description": "The value is read-only, generated by the service. The value cannot be modified by the client. If the value is included in a POST, PUT, or PATCH request, it is ignored by the service." + }, + "repeated": { + "type": "boolean", + "description": "Whether this parameter may appear multiple times." + }, + "required": { + "type": "boolean", + "description": "Whether the parameter is required." + }, + "type": { + "type": "string", + "description": "The value type for this schema. A list of values can be found here: http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1" + }, + "variant": { + "type": "object", + "description": "In a variant data type, the value of one property is used to determine how to interpret the entire entity. Its value must exist in a map of descriminant values to schema names.", + "properties": { + "discriminant": { + "type": "string", + "description": "The name of the type discriminant property." + }, + "map": { + "type": "array", + "description": "The map of discriminant value to schema to use for parsing..", + "items": { + "type": "object", + "properties": { + "$ref": { + "type": "string" + }, + "type_value": { + "type": "string" + } + } + } + } + } + } + } + }, + "RestDescription": { + "id": "RestDescription", + "type": "object", + "properties": { + "auth": { + "type": "object", + "description": "Authentication information.", + "properties": { + "oauth2": { + "type": "object", + "description": "OAuth 2.0 authentication information.", + "properties": { + "scopes": { + "type": "object", + "description": "Available OAuth 2.0 scopes.", + "additionalProperties": { + "type": "object", + "description": "The scope value.", + "properties": { + "description": { + "type": "string", + "description": "Description of scope." + } + } + } + } + } + } + } + }, + "basePath": { + "type": "string", + "description": "[DEPRECATED] The base path for REST requests." + }, + "baseUrl": { + "type": "string", + "description": "[DEPRECATED] The base URL for REST requests." + }, + "batchPath": { + "type": "string", + "description": "The path for REST batch requests.", + "default": "batch" + }, + "canonicalName": { + "type": "string", + "description": "Indicates how the API name should be capitalized and split into various parts. Useful for generating pretty class names." + }, + "description": { + "type": "string", + "description": "The description of this API." + }, + "discoveryVersion": { + "type": "string", + "description": "Indicate the version of the Discovery API used to generate this doc.", + "default": "v1" + }, + "documentationLink": { + "type": "string", + "description": "A link to human readable documentation for the API." + }, + "etag": { + "type": "string", + "description": "The ETag for this response.", + "readOnly": true + }, + "features": { + "type": "array", + "description": "A list of supported features for this API.", + "items": { + "type": "string" + } + }, + "icons": { + "type": "object", + "description": "Links to 16x16 and 32x32 icons representing the API.", + "properties": { + "x16": { + "type": "string", + "description": "The URL of the 16x16 icon." + }, + "x32": { + "type": "string", + "description": "The URL of the 32x32 icon." + } + } + }, + "id": { + "type": "string", + "description": "The ID of this API." + }, + "kind": { + "type": "string", + "description": "The kind for this response.", + "default": "discovery#restDescription" + }, + "labels": { + "type": "array", + "description": "Labels for the status of this API, such as labs or deprecated.", + "items": { + "type": "string" + } + }, + "methods": { + "type": "object", + "description": "API-level methods for this API.", + "additionalProperties": { + "$ref": "RestMethod", + "description": "An individual method description." + } + }, + "name": { + "type": "string", + "description": "The name of this API." + }, + "ownerDomain": { + "type": "string", + "description": "The domain of the owner of this API. Together with the ownerName and a packagePath values, this can be used to generate a library for this API which would have a unique fully qualified name." + }, + "ownerName": { + "type": "string", + "description": "The name of the owner of this API. See ownerDomain." + }, + "packagePath": { + "type": "string", + "description": "The package of the owner of this API. See ownerDomain." + }, + "parameters": { + "type": "object", + "description": "Common parameters that apply across all apis.", + "additionalProperties": { + "$ref": "JsonSchema", + "description": "Description of a single parameter." + } + }, + "protocol": { + "type": "string", + "description": "The protocol described by this document.", + "default": "rest" + }, + "resources": { + "type": "object", + "description": "The resources in this API.", + "additionalProperties": { + "$ref": "RestResource", + "description": "An individual resource description. Contains methods and sub-resources related to this resource." + } + }, + "revision": { + "type": "string", + "description": "The version of this API." + }, + "rootUrl": { + "type": "string", + "description": "The root URL under which all API services live." + }, + "schemas": { + "type": "object", + "description": "The schemas for this API.", + "additionalProperties": { + "$ref": "JsonSchema", + "description": "An individual schema description." + } + }, + "servicePath": { + "type": "string", + "description": "The base path for all REST requests." + }, + "title": { + "type": "string", + "description": "The title of this API." + }, + "version": { + "type": "string", + "description": "The version of this API." + } + } + }, + "RestMethod": { + "id": "RestMethod", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description of this method." + }, + "etagRequired": { + "type": "boolean", + "description": "Whether this method requires an ETag to be specified. The ETag is sent as an HTTP If-Match or If-None-Match header." + }, + "httpMethod": { + "type": "string", + "description": "HTTP method used by this method." + }, + "id": { + "type": "string", + "description": "A unique ID for this method. This property can be used to match methods between different versions of Discovery." + }, + "mediaUpload": { + "type": "object", + "description": "Media upload parameters.", + "properties": { + "accept": { + "type": "array", + "description": "MIME Media Ranges for acceptable media uploads to this method.", + "items": { + "type": "string" + } + }, + "maxSize": { + "type": "string", + "description": "Maximum size of a media upload, such as \"1MB\", \"2GB\" or \"3TB\"." + }, + "protocols": { + "type": "object", + "description": "Supported upload protocols.", + "properties": { + "resumable": { + "type": "object", + "description": "Supports the Resumable Media Upload protocol.", + "properties": { + "multipart": { + "type": "boolean", + "description": "True if this endpoint supports uploading multipart media.", + "default": "true" + }, + "path": { + "type": "string", + "description": "The URI path to be used for upload. Should be used in conjunction with the basePath property at the api-level." + } + } + }, + "simple": { + "type": "object", + "description": "Supports uploading as a single HTTP request.", + "properties": { + "multipart": { + "type": "boolean", + "description": "True if this endpoint supports upload multipart media.", + "default": "true" + }, + "path": { + "type": "string", + "description": "The URI path to be used for upload. Should be used in conjunction with the basePath property at the api-level." + } + } + } + } + } + } + }, + "parameterOrder": { + "type": "array", + "description": "Ordered list of required parameters, serves as a hint to clients on how to structure their method signatures. The array is ordered such that the \"most-significant\" parameter appears first.", + "items": { + "type": "string" + } + }, + "parameters": { + "type": "object", + "description": "Details for all parameters in this method.", + "additionalProperties": { + "$ref": "JsonSchema", + "description": "Details for a single parameter in this method." + } + }, + "path": { + "type": "string", + "description": "The URI path of this REST method. Should be used in conjunction with the basePath property at the api-level." + }, + "request": { + "type": "object", + "description": "The schema for the request.", + "properties": { + "$ref": { + "type": "string", + "description": "Schema ID for the request schema." + }, + "parameterName": { + "type": "string", + "description": "parameter name." + } + } + }, + "response": { + "type": "object", + "description": "The schema for the response.", + "properties": { + "$ref": { + "type": "string", + "description": "Schema ID for the response schema." + } + } + }, + "scopes": { + "type": "array", + "description": "OAuth 2.0 scopes applicable to this method.", + "items": { + "type": "string" + } + }, + "supportsMediaDownload": { + "type": "boolean", + "description": "Whether this method supports media downloads." + }, + "supportsMediaUpload": { + "type": "boolean", + "description": "Whether this method supports media uploads." + }, + "supportsSubscription": { + "type": "boolean", + "description": "Whether this method supports subscriptions." + } + } + }, + "RestResource": { + "id": "RestResource", + "type": "object", + "properties": { + "methods": { + "type": "object", + "description": "Methods on this resource.", + "additionalProperties": { + "$ref": "RestMethod", + "description": "Description for any methods on this resource." + } + }, + "resources": { + "type": "object", + "description": "Sub-resources on this resource.", + "additionalProperties": { + "$ref": "RestResource", + "description": "Description for any sub-resources on this resource." + } + } + } + } + }, + "resources": { + "apis": { + "methods": { + "getRest": { + "id": "discovery.apis.getRest", + "path": "apis/{api}/{version}/rest", + "httpMethod": "GET", + "description": "Retrieve the description of a particular version of an api.", + "parameters": { + "api": { + "type": "string", + "description": "The name of the API.", + "required": true, + "location": "path" + }, + "version": { + "type": "string", + "description": "The version of the API.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "api", + "version" + ], + "response": { + "$ref": "RestDescription" + } + }, + "list": { + "id": "discovery.apis.list", + "path": "apis", + "httpMethod": "GET", + "description": "Retrieve the list of APIs supported at this endpoint.", + "parameters": { + "name": { + "type": "string", + "description": "Only include APIs with the given name.", + "location": "query" + }, + "preferred": { + "type": "boolean", + "description": "Return only the preferred version of an API.", + "default": "false", + "location": "query" + } + }, + "response": { + "$ref": "DirectoryList" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-gen.go b/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-gen.go new file mode 100644 index 0000000000000..f2d7dd7725942 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/discovery/v1/discovery-gen.go @@ -0,0 +1,621 @@ +// Package discovery provides access to the APIs Discovery Service. +// +// See https://developers.google.com/discovery/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/discovery/v1" +// ... +// discoveryService, err := discovery.New(oauthHttpClient) +package discovery + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "discovery:v1" +const apiName = "discovery" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/discovery/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Apis = NewApisService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Apis *ApisService +} + +func NewApisService(s *Service) *ApisService { + rs := &ApisService{s: s} + return rs +} + +type ApisService struct { + s *Service +} + +type DirectoryList struct { + // DiscoveryVersion: Indicate the version of the Discovery API used to + // generate this doc. + DiscoveryVersion string `json:"discoveryVersion,omitempty"` + + // Items: The individual directory entries. One entry per api/version + // pair. + Items []*DirectoryListItems `json:"items,omitempty"` + + // Kind: The kind for this response. + Kind string `json:"kind,omitempty"` +} + +type DirectoryListItems struct { + // Description: The description of this API. + Description string `json:"description,omitempty"` + + // DiscoveryLink: A link to the discovery document. + DiscoveryLink string `json:"discoveryLink,omitempty"` + + // DiscoveryRestUrl: The URL for the discovery REST document. + DiscoveryRestUrl string `json:"discoveryRestUrl,omitempty"` + + // DocumentationLink: A link to human readable documentation for the + // API. + DocumentationLink string `json:"documentationLink,omitempty"` + + // Icons: Links to 16x16 and 32x32 icons representing the API. + Icons *DirectoryListItemsIcons `json:"icons,omitempty"` + + // Id: The id of this API. + Id string `json:"id,omitempty"` + + // Kind: The kind for this response. + Kind string `json:"kind,omitempty"` + + // Labels: Labels for the status of this API, such as labs or + // deprecated. + Labels []string `json:"labels,omitempty"` + + // Name: The name of the API. + Name string `json:"name,omitempty"` + + // Preferred: True if this version is the preferred version to use. + Preferred bool `json:"preferred,omitempty"` + + // Title: The title of this API. + Title string `json:"title,omitempty"` + + // Version: The version of the API. + Version string `json:"version,omitempty"` +} + +type DirectoryListItemsIcons struct { + // X16: The URL of the 16x16 icon. + X16 string `json:"x16,omitempty"` + + // X32: The URL of the 32x32 icon. + X32 string `json:"x32,omitempty"` +} + +type JsonSchema struct { + // Ref: A reference to another schema. The value of this property is the + // "id" of another schema. + Ref string `json:"$ref,omitempty"` + + // AdditionalProperties: If this is a schema for an object, this + // property is the schema for any additional properties with dynamic + // keys on this object. + AdditionalProperties *JsonSchema `json:"additionalProperties,omitempty"` + + // Annotations: Additional information about this property. + Annotations *JsonSchemaAnnotations `json:"annotations,omitempty"` + + // Default: The default value of this property (if one exists). + Default string `json:"default,omitempty"` + + // Description: A description of this object. + Description string `json:"description,omitempty"` + + // Enum: Values this parameter may take (if it is an enum). + Enum []string `json:"enum,omitempty"` + + // EnumDescriptions: The descriptions for the enums. Each position maps + // to the corresponding value in the "enum" array. + EnumDescriptions []string `json:"enumDescriptions,omitempty"` + + // Format: An additional regular expression or key that helps constrain + // the value. For more details see: + // http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.23 + Format string `json:"format,omitempty"` + + // Id: Unique identifier for this schema. + Id string `json:"id,omitempty"` + + // Items: If this is a schema for an array, this property is the schema + // for each element in the array. + Items *JsonSchema `json:"items,omitempty"` + + // Location: Whether this parameter goes in the query or the path for + // REST requests. + Location string `json:"location,omitempty"` + + // Maximum: The maximum value of this parameter. + Maximum string `json:"maximum,omitempty"` + + // Minimum: The minimum value of this parameter. + Minimum string `json:"minimum,omitempty"` + + // Pattern: The regular expression this parameter must conform to. Uses + // Java 6 regex format: + // http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html + Pattern string `json:"pattern,omitempty"` + + // Properties: If this is a schema for an object, list the schema for + // each property of this object. + Properties *JsonSchemaProperties `json:"properties,omitempty"` + + // ReadOnly: The value is read-only, generated by the service. The value + // cannot be modified by the client. If the value is included in a POST, + // PUT, or PATCH request, it is ignored by the service. + ReadOnly bool `json:"readOnly,omitempty"` + + // Repeated: Whether this parameter may appear multiple times. + Repeated bool `json:"repeated,omitempty"` + + // Required: Whether the parameter is required. + Required bool `json:"required,omitempty"` + + // Type: The value type for this schema. A list of values can be found + // here: http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1 + Type string `json:"type,omitempty"` + + // Variant: In a variant data type, the value of one property is used to + // determine how to interpret the entire entity. Its value must exist in + // a map of descriminant values to schema names. + Variant *JsonSchemaVariant `json:"variant,omitempty"` +} + +type JsonSchemaAnnotations struct { + // Required: A list of methods for which this property is required on + // requests. + Required []string `json:"required,omitempty"` +} + +type JsonSchemaProperties struct { +} + +type JsonSchemaVariant struct { + // Discriminant: The name of the type discriminant property. + Discriminant string `json:"discriminant,omitempty"` + + // Map: The map of discriminant value to schema to use for parsing.. + Map []*JsonSchemaVariantMap `json:"map,omitempty"` +} + +type JsonSchemaVariantMap struct { + Ref string `json:"$ref,omitempty"` + + Type_value string `json:"type_value,omitempty"` +} + +type RestDescription struct { + // Auth: Authentication information. + Auth *RestDescriptionAuth `json:"auth,omitempty"` + + // BasePath: [DEPRECATED] The base path for REST requests. + BasePath string `json:"basePath,omitempty"` + + // BaseUrl: [DEPRECATED] The base URL for REST requests. + BaseUrl string `json:"baseUrl,omitempty"` + + // BatchPath: The path for REST batch requests. + BatchPath string `json:"batchPath,omitempty"` + + // CanonicalName: Indicates how the API name should be capitalized and + // split into various parts. Useful for generating pretty class names. + CanonicalName string `json:"canonicalName,omitempty"` + + // Description: The description of this API. + Description string `json:"description,omitempty"` + + // DiscoveryVersion: Indicate the version of the Discovery API used to + // generate this doc. + DiscoveryVersion string `json:"discoveryVersion,omitempty"` + + // DocumentationLink: A link to human readable documentation for the + // API. + DocumentationLink string `json:"documentationLink,omitempty"` + + // Etag: The ETag for this response. + Etag string `json:"etag,omitempty"` + + // Features: A list of supported features for this API. + Features []string `json:"features,omitempty"` + + // Icons: Links to 16x16 and 32x32 icons representing the API. + Icons *RestDescriptionIcons `json:"icons,omitempty"` + + // Id: The ID of this API. + Id string `json:"id,omitempty"` + + // Kind: The kind for this response. + Kind string `json:"kind,omitempty"` + + // Labels: Labels for the status of this API, such as labs or + // deprecated. + Labels []string `json:"labels,omitempty"` + + // Methods: API-level methods for this API. + Methods *RestDescriptionMethods `json:"methods,omitempty"` + + // Name: The name of this API. + Name string `json:"name,omitempty"` + + // OwnerDomain: The domain of the owner of this API. Together with the + // ownerName and a packagePath values, this can be used to generate a + // library for this API which would have a unique fully qualified name. + OwnerDomain string `json:"ownerDomain,omitempty"` + + // OwnerName: The name of the owner of this API. See ownerDomain. + OwnerName string `json:"ownerName,omitempty"` + + // PackagePath: The package of the owner of this API. See ownerDomain. + PackagePath string `json:"packagePath,omitempty"` + + // Parameters: Common parameters that apply across all apis. + Parameters *RestDescriptionParameters `json:"parameters,omitempty"` + + // Protocol: The protocol described by this document. + Protocol string `json:"protocol,omitempty"` + + // Resources: The resources in this API. + Resources *RestDescriptionResources `json:"resources,omitempty"` + + // Revision: The version of this API. + Revision string `json:"revision,omitempty"` + + // RootUrl: The root URL under which all API services live. + RootUrl string `json:"rootUrl,omitempty"` + + // Schemas: The schemas for this API. + Schemas *RestDescriptionSchemas `json:"schemas,omitempty"` + + // ServicePath: The base path for all REST requests. + ServicePath string `json:"servicePath,omitempty"` + + // Title: The title of this API. + Title string `json:"title,omitempty"` + + // Version: The version of this API. + Version string `json:"version,omitempty"` +} + +type RestDescriptionAuth struct { + // Oauth2: OAuth 2.0 authentication information. + Oauth2 *RestDescriptionAuthOauth2 `json:"oauth2,omitempty"` +} + +type RestDescriptionAuthOauth2 struct { + // Scopes: Available OAuth 2.0 scopes. + Scopes *RestDescriptionAuthOauth2Scopes `json:"scopes,omitempty"` +} + +type RestDescriptionAuthOauth2Scopes struct { +} + +type RestDescriptionIcons struct { + // X16: The URL of the 16x16 icon. + X16 string `json:"x16,omitempty"` + + // X32: The URL of the 32x32 icon. + X32 string `json:"x32,omitempty"` +} + +type RestDescriptionMethods struct { +} + +type RestDescriptionParameters struct { +} + +type RestDescriptionResources struct { +} + +type RestDescriptionSchemas struct { +} + +type RestMethod struct { + // Description: Description of this method. + Description string `json:"description,omitempty"` + + // EtagRequired: Whether this method requires an ETag to be specified. + // The ETag is sent as an HTTP If-Match or If-None-Match header. + EtagRequired bool `json:"etagRequired,omitempty"` + + // HttpMethod: HTTP method used by this method. + HttpMethod string `json:"httpMethod,omitempty"` + + // Id: A unique ID for this method. This property can be used to match + // methods between different versions of Discovery. + Id string `json:"id,omitempty"` + + // MediaUpload: Media upload parameters. + MediaUpload *RestMethodMediaUpload `json:"mediaUpload,omitempty"` + + // ParameterOrder: Ordered list of required parameters, serves as a hint + // to clients on how to structure their method signatures. The array is + // ordered such that the "most-significant" parameter appears first. + ParameterOrder []string `json:"parameterOrder,omitempty"` + + // Parameters: Details for all parameters in this method. + Parameters *RestMethodParameters `json:"parameters,omitempty"` + + // Path: The URI path of this REST method. Should be used in conjunction + // with the basePath property at the api-level. + Path string `json:"path,omitempty"` + + // Request: The schema for the request. + Request *RestMethodRequest `json:"request,omitempty"` + + // Response: The schema for the response. + Response *RestMethodResponse `json:"response,omitempty"` + + // Scopes: OAuth 2.0 scopes applicable to this method. + Scopes []string `json:"scopes,omitempty"` + + // SupportsMediaDownload: Whether this method supports media downloads. + SupportsMediaDownload bool `json:"supportsMediaDownload,omitempty"` + + // SupportsMediaUpload: Whether this method supports media uploads. + SupportsMediaUpload bool `json:"supportsMediaUpload,omitempty"` + + // SupportsSubscription: Whether this method supports subscriptions. + SupportsSubscription bool `json:"supportsSubscription,omitempty"` +} + +type RestMethodMediaUpload struct { + // Accept: MIME Media Ranges for acceptable media uploads to this + // method. + Accept []string `json:"accept,omitempty"` + + // MaxSize: Maximum size of a media upload, such as "1MB", "2GB" or + // "3TB". + MaxSize string `json:"maxSize,omitempty"` + + // Protocols: Supported upload protocols. + Protocols *RestMethodMediaUploadProtocols `json:"protocols,omitempty"` +} + +type RestMethodMediaUploadProtocols struct { + // Resumable: Supports the Resumable Media Upload protocol. + Resumable *RestMethodMediaUploadProtocolsResumable `json:"resumable,omitempty"` + + // Simple: Supports uploading as a single HTTP request. + Simple *RestMethodMediaUploadProtocolsSimple `json:"simple,omitempty"` +} + +type RestMethodMediaUploadProtocolsResumable struct { + // Multipart: True if this endpoint supports uploading multipart media. + Multipart bool `json:"multipart,omitempty"` + + // Path: The URI path to be used for upload. Should be used in + // conjunction with the basePath property at the api-level. + Path string `json:"path,omitempty"` +} + +type RestMethodMediaUploadProtocolsSimple struct { + // Multipart: True if this endpoint supports upload multipart media. + Multipart bool `json:"multipart,omitempty"` + + // Path: The URI path to be used for upload. Should be used in + // conjunction with the basePath property at the api-level. + Path string `json:"path,omitempty"` +} + +type RestMethodParameters struct { +} + +type RestMethodRequest struct { + // Ref: Schema ID for the request schema. + Ref string `json:"$ref,omitempty"` + + // ParameterName: parameter name. + ParameterName string `json:"parameterName,omitempty"` +} + +type RestMethodResponse struct { + // Ref: Schema ID for the response schema. + Ref string `json:"$ref,omitempty"` +} + +type RestResource struct { + // Methods: Methods on this resource. + Methods *RestResourceMethods `json:"methods,omitempty"` + + // Resources: Sub-resources on this resource. + Resources *RestResourceResources `json:"resources,omitempty"` +} + +type RestResourceMethods struct { +} + +type RestResourceResources struct { +} + +// method id "discovery.apis.getRest": + +type ApisGetRestCall struct { + s *Service + api string + version string + opt_ map[string]interface{} +} + +// GetRest: Retrieve the description of a particular version of an api. +func (r *ApisService) GetRest(api string, version string) *ApisGetRestCall { + c := &ApisGetRestCall{s: r.s, opt_: make(map[string]interface{})} + c.api = api + c.version = version + return c +} + +func (c *ApisGetRestCall) Do() (*RestDescription, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "apis/{api}/{version}/rest") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{api}", url.QueryEscape(c.api), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{version}", url.QueryEscape(c.version), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RestDescription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve the description of a particular version of an api.", + // "httpMethod": "GET", + // "id": "discovery.apis.getRest", + // "parameterOrder": [ + // "api", + // "version" + // ], + // "parameters": { + // "api": { + // "description": "The name of the API.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "version": { + // "description": "The version of the API.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "apis/{api}/{version}/rest", + // "response": { + // "$ref": "RestDescription" + // } + // } + +} + +// method id "discovery.apis.list": + +type ApisListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieve the list of APIs supported at this endpoint. +func (r *ApisService) List() *ApisListCall { + c := &ApisListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Name sets the optional parameter "name": Only include APIs with the +// given name. +func (c *ApisListCall) Name(name string) *ApisListCall { + c.opt_["name"] = name + return c +} + +// Preferred sets the optional parameter "preferred": Return only the +// preferred version of an API. +func (c *ApisListCall) Preferred(preferred bool) *ApisListCall { + c.opt_["preferred"] = preferred + return c +} + +func (c *ApisListCall) Do() (*DirectoryList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["preferred"]; ok { + params.Set("preferred", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "apis") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DirectoryList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve the list of APIs supported at this endpoint.", + // "httpMethod": "GET", + // "id": "discovery.apis.list", + // "parameters": { + // "name": { + // "description": "Only include APIs with the given name.", + // "location": "query", + // "type": "string" + // }, + // "preferred": { + // "default": "false", + // "description": "Return only the preferred version of an API.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "apis", + // "response": { + // "$ref": "DirectoryList" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-api.json b/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-api.json new file mode 100644 index 0000000000000..83b306596cd70 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-api.json @@ -0,0 +1,681 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/vvbATqxd_pTRqr3zlWrA5ydszy4\"", + "discoveryVersion": "v1", + "id": "dns:v1beta1", + "name": "dns", + "version": "v1beta1", + "title": "Google Cloud DNS API", + "description": "The Google Cloud DNS API provides services for configuring and serving authoritative DNS records.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/cloud-dns", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/dns/v1beta1/projects/", + "basePath": "/dns/v1beta1/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "dns/v1beta1/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + }, + "https://www.googleapis.com/auth/ndev.clouddns.readonly": { + "description": "View your DNS records hosted by Google Cloud DNS" + }, + "https://www.googleapis.com/auth/ndev.clouddns.readwrite": { + "description": "View and manage your DNS records hosted by Google Cloud DNS" + } + } + } + }, + "schemas": { + "Change": { + "id": "Change", + "type": "object", + "description": "An atomic update to a collection of ResourceRecordSets.", + "properties": { + "additions": { + "type": "array", + "description": "Which ResourceRecordSets to add?", + "items": { + "$ref": "ResourceRecordSet" + } + }, + "deletions": { + "type": "array", + "description": "Which ResourceRecordSets to remove? Must match existing data exactly.", + "items": { + "$ref": "ResourceRecordSet" + } + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#change\".", + "default": "dns#change" + }, + "startTime": { + "type": "string", + "description": "The time that this operation was started by the server. This is in RFC3339 text format." + }, + "status": { + "type": "string", + "description": "Status of the operation. Can be one of the following: \"PENDING\" or \"DONE\" (output only)." + } + } + }, + "ChangesListResponse": { + "id": "ChangesListResponse", + "type": "object", + "description": "The response to a request to enumerate Changes to a ResourceRecordSets collection.", + "properties": { + "changes": { + "type": "array", + "description": "The requested changes.", + "items": { + "$ref": "Change" + } + }, + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "dns#changesListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your pagination token.\n\nIn this way you can retrieve the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a \"snapshot\" of collections larger than the maximum page size." + } + } + }, + "ManagedZone": { + "id": "ManagedZone", + "type": "object", + "description": "A zone is a subtree of the DNS namespace under one administrative responsibility. A ManagedZone is a resource that represents a DNS zone hosted by the Cloud DNS service.", + "properties": { + "creationTime": { + "type": "string", + "description": "The time that this resource was created on the server. This is in RFC3339 text format. Output only." + }, + "description": { + "type": "string", + "description": "A string to associate with this resource for the user's convenience. Has no effect on the managed zone's function." + }, + "dnsName": { + "type": "string", + "description": "The DNS name of this managed zone, for instance \"example.com.\"." + }, + "id": { + "type": "string", + "description": "Unique identifier for the resource; defined by the server (output only)", + "format": "uint64" + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#managedZone\".", + "default": "dns#managedZone" + }, + "name": { + "type": "string", + "description": "User assigned name for this resource. Must be unique within the project." + }, + "nameServers": { + "type": "array", + "description": "Delegate your managed_zone to these virtual name servers; defined by the server (output only)", + "items": { + "type": "string" + } + } + } + }, + "ManagedZonesListResponse": { + "id": "ManagedZonesListResponse", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "dns#managedZonesListResponse" + }, + "managedZones": { + "type": "array", + "description": "The managed zone resources.", + "items": { + "$ref": "ManagedZone" + } + }, + "nextPageToken": { + "type": "string", + "description": "The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your page token.\n\nIn this way you can retrieve the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a consistent snapshot of a collection larger than the maximum page size." + } + } + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project resource. The project is a top level container for resources including Cloud DNS ManagedZones. Projects can be created only in the APIs console.", + "properties": { + "id": { + "type": "string", + "description": "User assigned unique identifier for the resource (output only)." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#project\".", + "default": "dns#project" + }, + "number": { + "type": "string", + "description": "Unique numeric identifier for the resource; defined by the server (output only).", + "format": "uint64" + }, + "quota": { + "$ref": "Quota", + "description": "Quotas assigned to this project (output only)." + } + } + }, + "Quota": { + "id": "Quota", + "type": "object", + "description": "Limits associated with a Project.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#quota\".", + "default": "dns#quota" + }, + "managedZones": { + "type": "integer", + "description": "Maximum allowed number of managed zones in the project.", + "format": "int32" + }, + "resourceRecordsPerRrset": { + "type": "integer", + "description": "Maximum allowed number of ResourceRecords per ResourceRecordSet.", + "format": "int32" + }, + "rrsetAdditionsPerChange": { + "type": "integer", + "description": "Maximum allowed number of ResourceRecordSets to add per ChangesCreateRequest.", + "format": "int32" + }, + "rrsetDeletionsPerChange": { + "type": "integer", + "description": "Maximum allowed number of ResourceRecordSets to delete per ChangesCreateRequest.", + "format": "int32" + }, + "rrsetsPerManagedZone": { + "type": "integer", + "description": "Maximum allowed number of ResourceRecordSets per zone in the project.", + "format": "int32" + }, + "totalRrdataSizePerChange": { + "type": "integer", + "description": "Maximum allowed size for total rrdata in one ChangesCreateRequest in bytes.", + "format": "int32" + } + } + }, + "ResourceRecordSet": { + "id": "ResourceRecordSet", + "type": "object", + "description": "A unit of data that will be returned by the DNS servers.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"dns#resourceRecordSet\".", + "default": "dns#resourceRecordSet" + }, + "name": { + "type": "string", + "description": "For example, www.example.com." + }, + "rrdatas": { + "type": "array", + "description": "As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1)", + "items": { + "type": "string" + } + }, + "ttl": { + "type": "integer", + "description": "Number of seconds that this ResourceRecordSet can be cached by resolvers.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "One of A, AAAA, SOA, MX, NS, TXT" + } + } + }, + "ResourceRecordSetsListResponse": { + "id": "ResourceRecordSetsListResponse", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "Type of resource.", + "default": "dns#resourceRecordSetsListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The presence of this field indicates that there exist more results following your last page of results in pagination order. To fetch them, make another list request using this value as your pagination token.\n\nIn this way you can retrieve the complete contents of even very large collections one page at a time. However, if the contents of the collection change between the first and last paginated list request, the set of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a consistent snapshot of a collection larger than the maximum page size." + }, + "rrsets": { + "type": "array", + "description": "The resource record set resources.", + "items": { + "$ref": "ResourceRecordSet" + } + } + } + } + }, + "resources": { + "changes": { + "methods": { + "create": { + "id": "dns.changes.create", + "path": "{project}/managedZones/{managedZone}/changes", + "httpMethod": "POST", + "description": "Atomically update the ResourceRecordSet collection.", + "parameters": { + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "managedZone" + ], + "request": { + "$ref": "Change" + }, + "response": { + "$ref": "Change" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + }, + "get": { + "id": "dns.changes.get", + "path": "{project}/managedZones/{managedZone}/changes/{changeId}", + "httpMethod": "GET", + "description": "Fetch the representation of an existing Change.", + "parameters": { + "changeId": { + "type": "string", + "description": "The identifier of the requested change, from a previous ResourceRecordSetsChangeResponse.", + "required": true, + "location": "path" + }, + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "managedZone", + "changeId" + ], + "response": { + "$ref": "Change" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + }, + "list": { + "id": "dns.changes.list", + "path": "{project}/managedZones/{managedZone}/changes", + "httpMethod": "GET", + "description": "Enumerate Changes to a ResourceRecordSet collection.", + "parameters": { + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + "format": "int32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + }, + "sortBy": { + "type": "string", + "description": "Sorting criterion. The only supported value is change sequence.", + "default": "changeSequence", + "enum": [ + "changeSequence" + ], + "enumDescriptions": [ + "" + ], + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "Sorting order direction: 'ascending' or 'descending'.", + "location": "query" + } + }, + "parameterOrder": [ + "project", + "managedZone" + ], + "response": { + "$ref": "ChangesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + } + } + }, + "managedZones": { + "methods": { + "create": { + "id": "dns.managedZones.create", + "path": "{project}/managedZones", + "httpMethod": "POST", + "description": "Create a new ManagedZone.", + "parameters": { + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "ManagedZone" + }, + "response": { + "$ref": "ManagedZone" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + }, + "delete": { + "id": "dns.managedZones.delete", + "path": "{project}/managedZones/{managedZone}", + "httpMethod": "DELETE", + "description": "Delete a previously created ManagedZone.", + "parameters": { + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "managedZone" + ], + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + }, + "get": { + "id": "dns.managedZones.get", + "path": "{project}/managedZones/{managedZone}", + "httpMethod": "GET", + "description": "Fetch the representation of an existing ManagedZone.", + "parameters": { + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "managedZone" + ], + "response": { + "$ref": "ManagedZone" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + }, + "list": { + "id": "dns.managedZones.list", + "path": "{project}/managedZones", + "httpMethod": "GET", + "description": "Enumerate ManagedZones that have been created but not yet deleted.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + "format": "int32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "ManagedZonesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + } + } + }, + "projects": { + "methods": { + "get": { + "id": "dns.projects.get", + "path": "{project}", + "httpMethod": "GET", + "description": "Fetch the representation of an existing Project.", + "parameters": { + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Project" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + } + } + }, + "resourceRecordSets": { + "methods": { + "list": { + "id": "dns.resourceRecordSets.list", + "path": "{project}/managedZones/{managedZone}/rrsets", + "httpMethod": "GET", + "description": "Enumerate ResourceRecordSets that have been created but not yet deleted.", + "parameters": { + "managedZone": { + "type": "string", + "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + "format": "int32", + "location": "query" + }, + "name": { + "type": "string", + "description": "Restricts the list to return only records with this fully qualified domain name.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Identifies the project addressed by this request.", + "required": true, + "location": "path" + }, + "type": { + "type": "string", + "description": "Restricts the list to return only records of this type. If present, the \"name\" parameter must also be present.", + "location": "query" + } + }, + "parameterOrder": [ + "project", + "managedZone" + ], + "response": { + "$ref": "ResourceRecordSetsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform", + "https://www.googleapis.com/auth/ndev.clouddns.readonly", + "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-gen.go b/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-gen.go new file mode 100644 index 0000000000000..308dd04397c8a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/dns/v1beta1/dns-gen.go @@ -0,0 +1,1143 @@ +// Package dns provides access to the Google Cloud DNS API. +// +// See https://developers.google.com/cloud-dns +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/dns/v1beta1" +// ... +// dnsService, err := dns.New(oauthHttpClient) +package dns + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "dns:v1beta1" +const apiName = "dns" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/dns/v1beta1/projects/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" + + // View your DNS records hosted by Google Cloud DNS + NdevClouddnsReadonlyScope = "https://www.googleapis.com/auth/ndev.clouddns.readonly" + + // View and manage your DNS records hosted by Google Cloud DNS + NdevClouddnsReadwriteScope = "https://www.googleapis.com/auth/ndev.clouddns.readwrite" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Changes = NewChangesService(s) + s.ManagedZones = NewManagedZonesService(s) + s.Projects = NewProjectsService(s) + s.ResourceRecordSets = NewResourceRecordSetsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Changes *ChangesService + + ManagedZones *ManagedZonesService + + Projects *ProjectsService + + ResourceRecordSets *ResourceRecordSetsService +} + +func NewChangesService(s *Service) *ChangesService { + rs := &ChangesService{s: s} + return rs +} + +type ChangesService struct { + s *Service +} + +func NewManagedZonesService(s *Service) *ManagedZonesService { + rs := &ManagedZonesService{s: s} + return rs +} + +type ManagedZonesService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewResourceRecordSetsService(s *Service) *ResourceRecordSetsService { + rs := &ResourceRecordSetsService{s: s} + return rs +} + +type ResourceRecordSetsService struct { + s *Service +} + +type Change struct { + // Additions: Which ResourceRecordSets to add? + Additions []*ResourceRecordSet `json:"additions,omitempty"` + + // Deletions: Which ResourceRecordSets to remove? Must match existing + // data exactly. + Deletions []*ResourceRecordSet `json:"deletions,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only). + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "dns#change". + Kind string `json:"kind,omitempty"` + + // StartTime: The time that this operation was started by the server. + // This is in RFC3339 text format. + StartTime string `json:"startTime,omitempty"` + + // Status: Status of the operation. Can be one of the following: + // "PENDING" or "DONE" (output only). + Status string `json:"status,omitempty"` +} + +type ChangesListResponse struct { + // Changes: The requested changes. + Changes []*Change `json:"changes,omitempty"` + + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The presence of this field indicates that there exist + // more results following your last page of results in pagination order. + // To fetch them, make another list request using this value as your + // pagination token. + // + // In this way you can retrieve the complete contents + // of even very large collections one page at a time. However, if the + // contents of the collection change between the first and last + // paginated list request, the set of all elements returned will be an + // inconsistent view of the collection. There is no way to retrieve a + // "snapshot" of collections larger than the maximum page size. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type ManagedZone struct { + // CreationTime: The time that this resource was created on the server. + // This is in RFC3339 text format. Output only. + CreationTime string `json:"creationTime,omitempty"` + + // Description: A string to associate with this resource for the user's + // convenience. Has no effect on the managed zone's function. + Description string `json:"description,omitempty"` + + // DnsName: The DNS name of this managed zone, for instance + // "example.com.". + DnsName string `json:"dnsName,omitempty"` + + // Id: Unique identifier for the resource; defined by the server (output + // only) + Id uint64 `json:"id,omitempty,string"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "dns#managedZone". + Kind string `json:"kind,omitempty"` + + // Name: User assigned name for this resource. Must be unique within the + // project. + Name string `json:"name,omitempty"` + + // NameServers: Delegate your managed_zone to these virtual name + // servers; defined by the server (output only) + NameServers []string `json:"nameServers,omitempty"` +} + +type ManagedZonesListResponse struct { + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // ManagedZones: The managed zone resources. + ManagedZones []*ManagedZone `json:"managedZones,omitempty"` + + // NextPageToken: The presence of this field indicates that there exist + // more results following your last page of results in pagination order. + // To fetch them, make another list request using this value as your + // page token. + // + // In this way you can retrieve the complete contents of + // even very large collections one page at a time. However, if the + // contents of the collection change between the first and last + // paginated list request, the set of all elements returned will be an + // inconsistent view of the collection. There is no way to retrieve a + // consistent snapshot of a collection larger than the maximum page + // size. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Project struct { + // Id: User assigned unique identifier for the resource (output only). + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "dns#project". + Kind string `json:"kind,omitempty"` + + // Number: Unique numeric identifier for the resource; defined by the + // server (output only). + Number uint64 `json:"number,omitempty,string"` + + // Quota: Quotas assigned to this project (output only). + Quota *Quota `json:"quota,omitempty"` +} + +type Quota struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "dns#quota". + Kind string `json:"kind,omitempty"` + + // ManagedZones: Maximum allowed number of managed zones in the project. + ManagedZones int64 `json:"managedZones,omitempty"` + + // ResourceRecordsPerRrset: Maximum allowed number of ResourceRecords + // per ResourceRecordSet. + ResourceRecordsPerRrset int64 `json:"resourceRecordsPerRrset,omitempty"` + + // RrsetAdditionsPerChange: Maximum allowed number of ResourceRecordSets + // to add per ChangesCreateRequest. + RrsetAdditionsPerChange int64 `json:"rrsetAdditionsPerChange,omitempty"` + + // RrsetDeletionsPerChange: Maximum allowed number of ResourceRecordSets + // to delete per ChangesCreateRequest. + RrsetDeletionsPerChange int64 `json:"rrsetDeletionsPerChange,omitempty"` + + // RrsetsPerManagedZone: Maximum allowed number of ResourceRecordSets + // per zone in the project. + RrsetsPerManagedZone int64 `json:"rrsetsPerManagedZone,omitempty"` + + // TotalRrdataSizePerChange: Maximum allowed size for total rrdata in + // one ChangesCreateRequest in bytes. + TotalRrdataSizePerChange int64 `json:"totalRrdataSizePerChange,omitempty"` +} + +type ResourceRecordSet struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "dns#resourceRecordSet". + Kind string `json:"kind,omitempty"` + + // Name: For example, www.example.com. + Name string `json:"name,omitempty"` + + // Rrdatas: As defined in RFC 1035 (section 5) and RFC 1034 (section + // 3.6.1) + Rrdatas []string `json:"rrdatas,omitempty"` + + // Ttl: Number of seconds that this ResourceRecordSet can be cached by + // resolvers. + Ttl int64 `json:"ttl,omitempty"` + + // Type: One of A, AAAA, SOA, MX, NS, TXT + Type string `json:"type,omitempty"` +} + +type ResourceRecordSetsListResponse struct { + // Kind: Type of resource. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The presence of this field indicates that there exist + // more results following your last page of results in pagination order. + // To fetch them, make another list request using this value as your + // pagination token. + // + // In this way you can retrieve the complete contents + // of even very large collections one page at a time. However, if the + // contents of the collection change between the first and last + // paginated list request, the set of all elements returned will be an + // inconsistent view of the collection. There is no way to retrieve a + // consistent snapshot of a collection larger than the maximum page + // size. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Rrsets: The resource record set resources. + Rrsets []*ResourceRecordSet `json:"rrsets,omitempty"` +} + +// method id "dns.changes.create": + +type ChangesCreateCall struct { + s *Service + project string + managedZone string + change *Change + opt_ map[string]interface{} +} + +// Create: Atomically update the ResourceRecordSet collection. +func (r *ChangesService) Create(project string, managedZone string, change *Change) *ChangesCreateCall { + c := &ChangesCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + c.change = change + return c +} + +func (c *ChangesCreateCall) Do() (*Change, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.change) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}/changes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Change) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Atomically update the ResourceRecordSet collection.", + // "httpMethod": "POST", + // "id": "dns.changes.create", + // "parameterOrder": [ + // "project", + // "managedZone" + // ], + // "parameters": { + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}/changes", + // "request": { + // "$ref": "Change" + // }, + // "response": { + // "$ref": "Change" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.changes.get": + +type ChangesGetCall struct { + s *Service + project string + managedZone string + changeId string + opt_ map[string]interface{} +} + +// Get: Fetch the representation of an existing Change. +func (r *ChangesService) Get(project string, managedZone string, changeId string) *ChangesGetCall { + c := &ChangesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + c.changeId = changeId + return c +} + +func (c *ChangesGetCall) Do() (*Change, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}/changes/{changeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{changeId}", url.QueryEscape(c.changeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Change) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Fetch the representation of an existing Change.", + // "httpMethod": "GET", + // "id": "dns.changes.get", + // "parameterOrder": [ + // "project", + // "managedZone", + // "changeId" + // ], + // "parameters": { + // "changeId": { + // "description": "The identifier of the requested change, from a previous ResourceRecordSetsChangeResponse.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}/changes/{changeId}", + // "response": { + // "$ref": "Change" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.changes.list": + +type ChangesListCall struct { + s *Service + project string + managedZone string + opt_ map[string]interface{} +} + +// List: Enumerate Changes to a ResourceRecordSet collection. +func (r *ChangesService) List(project string, managedZone string) *ChangesListCall { + c := &ChangesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to be returned. If unspecified, the server will decide how +// many results to return. +func (c *ChangesListCall) MaxResults(maxResults int64) *ChangesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A tag returned by +// a previous list request that was truncated. Use this parameter to +// continue a previous list request. +func (c *ChangesListCall) PageToken(pageToken string) *ChangesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortBy sets the optional parameter "sortBy": Sorting criterion. The +// only supported value is change sequence. +func (c *ChangesListCall) SortBy(sortBy string) *ChangesListCall { + c.opt_["sortBy"] = sortBy + return c +} + +// SortOrder sets the optional parameter "sortOrder": Sorting order +// direction: 'ascending' or 'descending'. +func (c *ChangesListCall) SortOrder(sortOrder string) *ChangesListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *ChangesListCall) Do() (*ChangesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortBy"]; ok { + params.Set("sortBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}/changes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChangesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enumerate Changes to a ResourceRecordSet collection.", + // "httpMethod": "GET", + // "id": "dns.changes.list", + // "parameterOrder": [ + // "project", + // "managedZone" + // ], + // "parameters": { + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sortBy": { + // "default": "changeSequence", + // "description": "Sorting criterion. The only supported value is change sequence.", + // "enum": [ + // "changeSequence" + // ], + // "enumDescriptions": [ + // "" + // ], + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "description": "Sorting order direction: 'ascending' or 'descending'.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}/changes", + // "response": { + // "$ref": "ChangesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.managedZones.create": + +type ManagedZonesCreateCall struct { + s *Service + project string + managedzone *ManagedZone + opt_ map[string]interface{} +} + +// Create: Create a new ManagedZone. +func (r *ManagedZonesService) Create(project string, managedzone *ManagedZone) *ManagedZonesCreateCall { + c := &ManagedZonesCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedzone = managedzone + return c +} + +func (c *ManagedZonesCreateCall) Do() (*ManagedZone, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.managedzone) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ManagedZone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new ManagedZone.", + // "httpMethod": "POST", + // "id": "dns.managedZones.create", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones", + // "request": { + // "$ref": "ManagedZone" + // }, + // "response": { + // "$ref": "ManagedZone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.managedZones.delete": + +type ManagedZonesDeleteCall struct { + s *Service + project string + managedZone string + opt_ map[string]interface{} +} + +// Delete: Delete a previously created ManagedZone. +func (r *ManagedZonesService) Delete(project string, managedZone string) *ManagedZonesDeleteCall { + c := &ManagedZonesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + return c +} + +func (c *ManagedZonesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a previously created ManagedZone.", + // "httpMethod": "DELETE", + // "id": "dns.managedZones.delete", + // "parameterOrder": [ + // "project", + // "managedZone" + // ], + // "parameters": { + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}", + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.managedZones.get": + +type ManagedZonesGetCall struct { + s *Service + project string + managedZone string + opt_ map[string]interface{} +} + +// Get: Fetch the representation of an existing ManagedZone. +func (r *ManagedZonesService) Get(project string, managedZone string) *ManagedZonesGetCall { + c := &ManagedZonesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + return c +} + +func (c *ManagedZonesGetCall) Do() (*ManagedZone, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ManagedZone) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Fetch the representation of an existing ManagedZone.", + // "httpMethod": "GET", + // "id": "dns.managedZones.get", + // "parameterOrder": [ + // "project", + // "managedZone" + // ], + // "parameters": { + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}", + // "response": { + // "$ref": "ManagedZone" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.managedZones.list": + +type ManagedZonesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Enumerate ManagedZones that have been created but not yet +// deleted. +func (r *ManagedZonesService) List(project string) *ManagedZonesListCall { + c := &ManagedZonesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to be returned. If unspecified, the server will decide how +// many results to return. +func (c *ManagedZonesListCall) MaxResults(maxResults int64) *ManagedZonesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A tag returned by +// a previous list request that was truncated. Use this parameter to +// continue a previous list request. +func (c *ManagedZonesListCall) PageToken(pageToken string) *ManagedZonesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ManagedZonesListCall) Do() (*ManagedZonesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ManagedZonesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enumerate ManagedZones that have been created but not yet deleted.", + // "httpMethod": "GET", + // "id": "dns.managedZones.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "maxResults": { + // "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/managedZones", + // "response": { + // "$ref": "ManagedZonesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.projects.get": + +type ProjectsGetCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// Get: Fetch the representation of an existing Project. +func (r *ProjectsService) Get(project string) *ProjectsGetCall { + c := &ProjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *ProjectsGetCall) Do() (*Project, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Project) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Fetch the representation of an existing Project.", + // "httpMethod": "GET", + // "id": "dns.projects.get", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}", + // "response": { + // "$ref": "Project" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} + +// method id "dns.resourceRecordSets.list": + +type ResourceRecordSetsListCall struct { + s *Service + project string + managedZone string + opt_ map[string]interface{} +} + +// List: Enumerate ResourceRecordSets that have been created but not yet +// deleted. +func (r *ResourceRecordSetsService) List(project string, managedZone string) *ResourceRecordSetsListCall { + c := &ResourceRecordSetsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.managedZone = managedZone + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to be returned. If unspecified, the server will decide how +// many results to return. +func (c *ResourceRecordSetsListCall) MaxResults(maxResults int64) *ResourceRecordSetsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// Name sets the optional parameter "name": Restricts the list to return +// only records with this fully qualified domain name. +func (c *ResourceRecordSetsListCall) Name(name string) *ResourceRecordSetsListCall { + c.opt_["name"] = name + return c +} + +// PageToken sets the optional parameter "pageToken": A tag returned by +// a previous list request that was truncated. Use this parameter to +// continue a previous list request. +func (c *ResourceRecordSetsListCall) PageToken(pageToken string) *ResourceRecordSetsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Type sets the optional parameter "type": Restricts the list to return +// only records of this type. If present, the "name" parameter must also +// be present. +func (c *ResourceRecordSetsListCall) Type(type_ string) *ResourceRecordSetsListCall { + c.opt_["type"] = type_ + return c +} + +func (c *ResourceRecordSetsListCall) Do() (*ResourceRecordSetsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/managedZones/{managedZone}/rrsets") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{managedZone}", url.QueryEscape(c.managedZone), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ResourceRecordSetsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Enumerate ResourceRecordSets that have been created but not yet deleted.", + // "httpMethod": "GET", + // "id": "dns.resourceRecordSets.list", + // "parameterOrder": [ + // "project", + // "managedZone" + // ], + // "parameters": { + // "managedZone": { + // "description": "Identifies the managed zone addressed by this request. Can be the managed zone name or id.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Optional. Maximum number of results to be returned. If unspecified, the server will decide how many results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "name": { + // "description": "Restricts the list to return only records with this fully qualified domain name.", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Optional. A tag returned by a previous list request that was truncated. Use this parameter to continue a previous list request.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Identifies the project addressed by this request.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "type": { + // "description": "Restricts the list to return only records of this type. If present, the \"name\" parameter must also be present.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{project}/managedZones/{managedZone}/rrsets", + // "response": { + // "$ref": "ResourceRecordSetsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform", + // "https://www.googleapis.com/auth/ndev.clouddns.readonly", + // "https://www.googleapis.com/auth/ndev.clouddns.readwrite" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-api.json b/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-api.json new file mode 100644 index 0000000000000..dafb2fd2ead53 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-api.json @@ -0,0 +1,1497 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/cHDQkg0ZsK0EYoFanzGijdDo1Q4\"", + "discoveryVersion": "v1", + "id": "doubleclickbidmanager:v1", + "name": "doubleclickbidmanager", + "canonicalName": "DoubleClick Bid Manager", + "version": "v1", + "title": "DoubleClick Bid Manager API", + "description": "API for viewing and managing your reports in DoubleClick Bid Manager.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/bid-manager/", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/doubleclickbidmanager/v1/", + "basePath": "/doubleclickbidmanager/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "doubleclickbidmanager/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "DownloadLineItemsRequest": { + "id": "DownloadLineItemsRequest", + "type": "object", + "description": "Request to fetch stored line items.", + "properties": { + "filterIds": { + "type": "array", + "description": "Ids of the specified filter type used to filter line items to fetch. If omitted, all the line items will be returned.", + "items": { + "type": "string", + "format": "int64" + } + }, + "filterType": { + "type": "string", + "description": "Filter type used to filter line items to fetch.", + "enum": [ + "ADVERTISER_ID", + "INSERTION_ORDER_ID", + "LINE_ITEM_ID" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "format": { + "type": "string", + "description": "Format in which the line items will be returned. Default to CSV.", + "enum": [ + "CSV" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "DownloadLineItemsResponse": { + "id": "DownloadLineItemsResponse", + "type": "object", + "description": "Download line items response.", + "properties": { + "lineItems": { + "type": "string", + "description": "Retrieved line items in CSV format. Refer to Entity Write File Format for more information on file format." + } + } + }, + "FilterPair": { + "id": "FilterPair", + "type": "object", + "description": "Filter used to match traffic data in your report.", + "properties": { + "type": { + "type": "string", + "description": "Filter type.", + "enum": [ + "FILTER_ACTIVITY_ID", + "FILTER_ADVERTISER", + "FILTER_ADVERTISER_CURRENCY", + "FILTER_ADVERTISER_TIMEZONE", + "FILTER_AD_POSITION", + "FILTER_BRANDSAFE_CHANNEL_ID", + "FILTER_BROWSER", + "FILTER_CAMPAIGN_DAILY_FREQUENCY", + "FILTER_CARRIER", + "FILTER_CHANNEL_ID", + "FILTER_CITY", + "FILTER_CONVERSION_DELAY", + "FILTER_COUNTRY", + "FILTER_CREATIVE_ID", + "FILTER_CREATIVE_SIZE", + "FILTER_CREATIVE_TYPE", + "FILTER_DATA_PROVIDER", + "FILTER_DATE", + "FILTER_DAY_OF_WEEK", + "FILTER_DMA", + "FILTER_EXCHANGE_ID", + "FILTER_FLOODLIGHT_PIXEL_ID", + "FILTER_INSERTION_ORDER", + "FILTER_INVENTORY_FORMAT", + "FILTER_INVENTORY_SOURCE", + "FILTER_KEYWORD", + "FILTER_LINE_ITEM", + "FILTER_LINE_ITEM_DAILY_FREQUENCY", + "FILTER_LINE_ITEM_LIFETIME_FREQUENCY", + "FILTER_LINE_ITEM_TYPE", + "FILTER_MOBILE_DEVICE_MAKE", + "FILTER_MOBILE_DEVICE_MAKE_MODEL", + "FILTER_MOBILE_DEVICE_TYPE", + "FILTER_MONTH", + "FILTER_ORDER_ID", + "FILTER_OS", + "FILTER_PAGE_CATEGORY", + "FILTER_PAGE_LAYOUT", + "FILTER_PARTNER", + "FILTER_PARTNER_CURRENCY", + "FILTER_PUBLIC_INVENTORY", + "FILTER_REGION", + "FILTER_REGULAR_CHANNEL_ID", + "FILTER_SITE_ID", + "FILTER_SITE_LANGUAGE", + "FILTER_TARGETED_USER_LIST", + "FILTER_TIME_OF_DAY", + "FILTER_UNKNOWN", + "FILTER_USER_LIST", + "FILTER_USER_LIST_FIRST_PARTY", + "FILTER_USER_LIST_THIRD_PARTY", + "FILTER_VIDEO_AD_POSITION_IN_STREAM", + "FILTER_VIDEO_CREATIVE_DURATION", + "FILTER_VIDEO_DURATION_SECONDS", + "FILTER_VIDEO_FORMAT_SUPPORT", + "FILTER_VIDEO_INVENTORY_TYPE", + "FILTER_VIDEO_PLAYER_SIZE", + "FILTER_VIDEO_RATING_TIER", + "FILTER_VIDEO_SKIPPABLE_SUPPORT", + "FILTER_VIDEO_VPAID_SUPPORT", + "FILTER_WEEK", + "FILTER_YEAR", + "FILTER_YOUTUBE_VERTICAL", + "FILTER_ZIP_CODE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "value": { + "type": "string", + "description": "Filter value." + } + } + }, + "ListQueriesResponse": { + "id": "ListQueriesResponse", + "type": "object", + "description": "List queries response.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listQueriesResponse\".", + "default": "doubleclickbidmanager#listQueriesResponse" + }, + "queries": { + "type": "array", + "description": "Retrieved queries.", + "items": { + "$ref": "Query" + } + } + } + }, + "ListReportsResponse": { + "id": "ListReportsResponse", + "type": "object", + "description": "List reports response.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#listReportsResponse\".", + "default": "doubleclickbidmanager#listReportsResponse" + }, + "reports": { + "type": "array", + "description": "Retrieved reports.", + "items": { + "$ref": "Report" + } + } + } + }, + "Parameters": { + "id": "Parameters", + "type": "object", + "description": "Parameters of a query or report.", + "properties": { + "filters": { + "type": "array", + "description": "Filters used to match traffic data in your report.", + "items": { + "$ref": "FilterPair" + } + }, + "groupBys": { + "type": "array", + "description": "Data is grouped by the filters listed in this field.", + "items": { + "type": "string", + "enum": [ + "FILTER_ACTIVITY_ID", + "FILTER_ADVERTISER", + "FILTER_ADVERTISER_CURRENCY", + "FILTER_ADVERTISER_TIMEZONE", + "FILTER_AD_POSITION", + "FILTER_BRANDSAFE_CHANNEL_ID", + "FILTER_BROWSER", + "FILTER_CAMPAIGN_DAILY_FREQUENCY", + "FILTER_CARRIER", + "FILTER_CHANNEL_ID", + "FILTER_CITY", + "FILTER_CONVERSION_DELAY", + "FILTER_COUNTRY", + "FILTER_CREATIVE_ID", + "FILTER_CREATIVE_SIZE", + "FILTER_CREATIVE_TYPE", + "FILTER_DATA_PROVIDER", + "FILTER_DATE", + "FILTER_DAY_OF_WEEK", + "FILTER_DMA", + "FILTER_EXCHANGE_ID", + "FILTER_FLOODLIGHT_PIXEL_ID", + "FILTER_INSERTION_ORDER", + "FILTER_INVENTORY_FORMAT", + "FILTER_INVENTORY_SOURCE", + "FILTER_KEYWORD", + "FILTER_LINE_ITEM", + "FILTER_LINE_ITEM_DAILY_FREQUENCY", + "FILTER_LINE_ITEM_LIFETIME_FREQUENCY", + "FILTER_LINE_ITEM_TYPE", + "FILTER_MOBILE_DEVICE_MAKE", + "FILTER_MOBILE_DEVICE_MAKE_MODEL", + "FILTER_MOBILE_DEVICE_TYPE", + "FILTER_MONTH", + "FILTER_ORDER_ID", + "FILTER_OS", + "FILTER_PAGE_CATEGORY", + "FILTER_PAGE_LAYOUT", + "FILTER_PARTNER", + "FILTER_PARTNER_CURRENCY", + "FILTER_PUBLIC_INVENTORY", + "FILTER_REGION", + "FILTER_REGULAR_CHANNEL_ID", + "FILTER_SITE_ID", + "FILTER_SITE_LANGUAGE", + "FILTER_TARGETED_USER_LIST", + "FILTER_TIME_OF_DAY", + "FILTER_UNKNOWN", + "FILTER_USER_LIST", + "FILTER_USER_LIST_FIRST_PARTY", + "FILTER_USER_LIST_THIRD_PARTY", + "FILTER_VIDEO_AD_POSITION_IN_STREAM", + "FILTER_VIDEO_CREATIVE_DURATION", + "FILTER_VIDEO_DURATION_SECONDS", + "FILTER_VIDEO_FORMAT_SUPPORT", + "FILTER_VIDEO_INVENTORY_TYPE", + "FILTER_VIDEO_PLAYER_SIZE", + "FILTER_VIDEO_RATING_TIER", + "FILTER_VIDEO_SKIPPABLE_SUPPORT", + "FILTER_VIDEO_VPAID_SUPPORT", + "FILTER_WEEK", + "FILTER_YEAR", + "FILTER_YOUTUBE_VERTICAL", + "FILTER_ZIP_CODE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + }, + "includeInviteData": { + "type": "boolean", + "description": "Whether to include data from Invite Media." + }, + "metrics": { + "type": "array", + "description": "Metrics to include as columns in your report.", + "items": { + "type": "string", + "enum": [ + "METRIC_BID_REQUESTS", + "METRIC_BILLABLE_COST_ADVERTISER", + "METRIC_BILLABLE_COST_PARTNER", + "METRIC_BILLABLE_COST_USD", + "METRIC_CLICKS", + "METRIC_CLICK_TO_POST_CLICK_CONVERSION_RATE", + "METRIC_CONVERSIONS_PER_MILLE", + "METRIC_CPM_FEE1_ADVERTISER", + "METRIC_CPM_FEE1_PARTNER", + "METRIC_CPM_FEE1_USD", + "METRIC_CPM_FEE2_ADVERTISER", + "METRIC_CPM_FEE2_PARTNER", + "METRIC_CPM_FEE2_USD", + "METRIC_CTR", + "METRIC_DATA_COST_ADVERTISER", + "METRIC_DATA_COST_PARTNER", + "METRIC_DATA_COST_USD", + "METRIC_FEE10_ADVERTISER", + "METRIC_FEE10_PARTNER", + "METRIC_FEE10_USD", + "METRIC_FEE11_ADVERTISER", + "METRIC_FEE11_PARTNER", + "METRIC_FEE11_USD", + "METRIC_FEE12_ADVERTISER", + "METRIC_FEE12_PARTNER", + "METRIC_FEE12_USD", + "METRIC_FEE13_ADVERTISER", + "METRIC_FEE13_PARTNER", + "METRIC_FEE13_USD", + "METRIC_FEE14_ADVERTISER", + "METRIC_FEE14_PARTNER", + "METRIC_FEE14_USD", + "METRIC_FEE15_ADVERTISER", + "METRIC_FEE15_PARTNER", + "METRIC_FEE15_USD", + "METRIC_FEE2_ADVERTISER", + "METRIC_FEE2_PARTNER", + "METRIC_FEE2_USD", + "METRIC_FEE3_ADVERTISER", + "METRIC_FEE3_PARTNER", + "METRIC_FEE3_USD", + "METRIC_FEE4_ADVERTISER", + "METRIC_FEE4_PARTNER", + "METRIC_FEE4_USD", + "METRIC_FEE5_ADVERTISER", + "METRIC_FEE5_PARTNER", + "METRIC_FEE5_USD", + "METRIC_FEE6_ADVERTISER", + "METRIC_FEE6_PARTNER", + "METRIC_FEE6_USD", + "METRIC_FEE7_ADVERTISER", + "METRIC_FEE7_PARTNER", + "METRIC_FEE7_USD", + "METRIC_FEE8_ADVERTISER", + "METRIC_FEE8_PARTNER", + "METRIC_FEE8_USD", + "METRIC_FEE9_ADVERTISER", + "METRIC_FEE9_PARTNER", + "METRIC_FEE9_USD", + "METRIC_IMPRESSIONS", + "METRIC_IMPRESSIONS_TO_CONVERSION_RATE", + "METRIC_LAST_CLICKS", + "METRIC_LAST_IMPRESSIONS", + "METRIC_MEDIA_COST_ADVERTISER", + "METRIC_MEDIA_COST_ECPAPC_ADVERTISER", + "METRIC_MEDIA_COST_ECPAPC_PARTNER", + "METRIC_MEDIA_COST_ECPAPC_USD", + "METRIC_MEDIA_COST_ECPAPV_ADVERTISER", + "METRIC_MEDIA_COST_ECPAPV_PARTNER", + "METRIC_MEDIA_COST_ECPAPV_USD", + "METRIC_MEDIA_COST_ECPA_ADVERTISER", + "METRIC_MEDIA_COST_ECPA_PARTNER", + "METRIC_MEDIA_COST_ECPA_USD", + "METRIC_MEDIA_COST_ECPCV_ADVERTISER", + "METRIC_MEDIA_COST_ECPCV_PARTNER", + "METRIC_MEDIA_COST_ECPCV_USD", + "METRIC_MEDIA_COST_ECPC_ADVERTISER", + "METRIC_MEDIA_COST_ECPC_PARTNER", + "METRIC_MEDIA_COST_ECPC_USD", + "METRIC_MEDIA_COST_ECPM_ADVERTISER", + "METRIC_MEDIA_COST_ECPM_PARTNER", + "METRIC_MEDIA_COST_ECPM_USD", + "METRIC_MEDIA_COST_PARTNER", + "METRIC_MEDIA_COST_USD", + "METRIC_MEDIA_FEE1_ADVERTISER", + "METRIC_MEDIA_FEE1_PARTNER", + "METRIC_MEDIA_FEE1_USD", + "METRIC_MEDIA_FEE2_ADVERTISER", + "METRIC_MEDIA_FEE2_PARTNER", + "METRIC_MEDIA_FEE2_USD", + "METRIC_PIXEL_LOADS", + "METRIC_PLATFORM_FEE_ADVERTISER", + "METRIC_PLATFORM_FEE_PARTNER", + "METRIC_PLATFORM_FEE_USD", + "METRIC_POST_CLICK_DFA_REVENUE", + "METRIC_POST_VIEW_DFA_REVENUE", + "METRIC_PROFIT_ADVERTISER", + "METRIC_PROFIT_ECPAPC_ADVERTISER", + "METRIC_PROFIT_ECPAPC_PARTNER", + "METRIC_PROFIT_ECPAPC_USD", + "METRIC_PROFIT_ECPAPV_ADVERTISER", + "METRIC_PROFIT_ECPAPV_PARTNER", + "METRIC_PROFIT_ECPAPV_USD", + "METRIC_PROFIT_ECPA_ADVERTISER", + "METRIC_PROFIT_ECPA_PARTNER", + "METRIC_PROFIT_ECPA_USD", + "METRIC_PROFIT_ECPC_ADVERTISER", + "METRIC_PROFIT_ECPC_PARTNER", + "METRIC_PROFIT_ECPC_USD", + "METRIC_PROFIT_ECPM_ADVERTISER", + "METRIC_PROFIT_ECPM_PARTNER", + "METRIC_PROFIT_ECPM_USD", + "METRIC_PROFIT_MARGIN", + "METRIC_PROFIT_PARTNER", + "METRIC_PROFIT_USD", + "METRIC_REVENUE_ADVERTISER", + "METRIC_REVENUE_ECPAPC_ADVERTISER", + "METRIC_REVENUE_ECPAPC_PARTNER", + "METRIC_REVENUE_ECPAPC_USD", + "METRIC_REVENUE_ECPAPV_ADVERTISER", + "METRIC_REVENUE_ECPAPV_PARTNER", + "METRIC_REVENUE_ECPAPV_USD", + "METRIC_REVENUE_ECPA_ADVERTISER", + "METRIC_REVENUE_ECPA_PARTNER", + "METRIC_REVENUE_ECPA_USD", + "METRIC_REVENUE_ECPCV_ADVERTISER", + "METRIC_REVENUE_ECPCV_PARTNER", + "METRIC_REVENUE_ECPCV_USD", + "METRIC_REVENUE_ECPC_ADVERTISER", + "METRIC_REVENUE_ECPC_PARTNER", + "METRIC_REVENUE_ECPC_USD", + "METRIC_REVENUE_ECPM_ADVERTISER", + "METRIC_REVENUE_ECPM_PARTNER", + "METRIC_REVENUE_ECPM_USD", + "METRIC_REVENUE_PARTNER", + "METRIC_REVENUE_USD", + "METRIC_RICH_MEDIA_VIDEO_COMPLETIONS", + "METRIC_RICH_MEDIA_VIDEO_FIRST_QUARTILE_COMPLETES", + "METRIC_RICH_MEDIA_VIDEO_FULL_SCREENS", + "METRIC_RICH_MEDIA_VIDEO_MIDPOINTS", + "METRIC_RICH_MEDIA_VIDEO_MUTES", + "METRIC_RICH_MEDIA_VIDEO_PAUSES", + "METRIC_RICH_MEDIA_VIDEO_PLAYS", + "METRIC_RICH_MEDIA_VIDEO_SKIPS", + "METRIC_RICH_MEDIA_VIDEO_THIRD_QUARTILE_COMPLETES", + "METRIC_TOTAL_CONVERSIONS", + "METRIC_TOTAL_MEDIA_COST_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPAPC_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPAPC_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPAPC_USD", + "METRIC_TOTAL_MEDIA_COST_ECPAPV_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPAPV_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPAPV_USD", + "METRIC_TOTAL_MEDIA_COST_ECPA_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPA_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPA_USD", + "METRIC_TOTAL_MEDIA_COST_ECPCV_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPCV_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPCV_USD", + "METRIC_TOTAL_MEDIA_COST_ECPC_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPC_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPC_USD", + "METRIC_TOTAL_MEDIA_COST_ECPM_ADVERTISER", + "METRIC_TOTAL_MEDIA_COST_ECPM_PARTNER", + "METRIC_TOTAL_MEDIA_COST_ECPM_USD", + "METRIC_TOTAL_MEDIA_COST_PARTNER", + "METRIC_TOTAL_MEDIA_COST_USD", + "METRIC_UNIQUE_VISITORS_COOKIES", + "METRIC_UNKNOWN", + "METRIC_VIDEO_COMPLETION_RATE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + }, + "type": { + "type": "string", + "description": "Report type.", + "enum": [ + "TYPE_ACTIVE_GRP", + "TYPE_AUDIENCE_COMPOSITION", + "TYPE_AUDIENCE_PERFORMANCE", + "TYPE_CLIENT_SAFE", + "TYPE_CROSS_FEE", + "TYPE_CROSS_PARTNER", + "TYPE_CROSS_PARTNER_THIRD_PARTY_DATA_PROVIDER", + "TYPE_FEE", + "TYPE_GENERAL", + "TYPE_INVENTORY_AVAILABILITY", + "TYPE_KEYWORD", + "TYPE_ORDER_ID", + "TYPE_PAGE_CATEGORY", + "TYPE_PIXEL_LOAD", + "TYPE_THIRD_PARTY_DATA_PROVIDER", + "TYPE_YOUTUBE_VERTICAL" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + } + }, + "Query": { + "id": "Query", + "type": "object", + "description": "Represents a query.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"doubleclickbidmanager#query\".", + "default": "doubleclickbidmanager#query" + }, + "metadata": { + "$ref": "QueryMetadata", + "description": "Query metadata." + }, + "params": { + "$ref": "Parameters", + "description": "Query parameters." + }, + "queryId": { + "type": "string", + "description": "Query ID.", + "format": "int64" + }, + "reportDataEndTimeMs": { + "type": "string", + "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise.", + "format": "int64" + }, + "reportDataStartTimeMs": { + "type": "string", + "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if metadata.dataRange is CUSTOM_DATES and ignored otherwise.", + "format": "int64" + }, + "schedule": { + "$ref": "QuerySchedule", + "description": "Information on how often and when to run a query." + }, + "timezoneCode": { + "type": "string", + "description": "Canonical timezone code for report data time. Defaults to America/New_York." + } + } + }, + "QueryMetadata": { + "id": "QueryMetadata", + "type": "object", + "description": "Query metadata.", + "properties": { + "dataRange": { + "type": "string", + "description": "Range of report data.", + "enum": [ + "ALL_TIME", + "CURRENT_DAY", + "CUSTOM_DATES", + "LAST_14_DAYS", + "LAST_30_DAYS", + "LAST_365_DAYS", + "LAST_7_DAYS", + "LAST_90_DAYS", + "MONTH_TO_DATE", + "PREVIOUS_DAY", + "PREVIOUS_HALF_MONTH", + "PREVIOUS_MONTH", + "PREVIOUS_QUARTER", + "PREVIOUS_WEEK", + "PREVIOUS_YEAR", + "QUARTER_TO_DATE", + "WEEK_TO_DATE", + "YEAR_TO_DATE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "format": { + "type": "string", + "description": "Format of the generated report.", + "enum": [ + "CSV", + "EXCEL_CSV", + "XLSX" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "googleCloudStoragePathForLatestReport": { + "type": "string", + "description": "The path to the location in Google Cloud Storage where the latest report is stored." + }, + "googleDrivePathForLatestReport": { + "type": "string", + "description": "The path in Google Drive for the latest report." + }, + "latestReportRunTimeMs": { + "type": "string", + "description": "The time when the latest report started to run.", + "format": "int64" + }, + "reportCount": { + "type": "integer", + "description": "Number of reports that have been generated for the query.", + "format": "int32" + }, + "running": { + "type": "boolean", + "description": "Whether the latest report is currently running." + }, + "sendNotification": { + "type": "boolean", + "description": "Whether to send an email notification when a report is ready. Default to false." + }, + "shareEmailAddress": { + "type": "array", + "description": "List of email addresses which are sent email notifications when the report is finished. Separate from sendNotification.", + "items": { + "type": "string" + } + }, + "title": { + "type": "string", + "description": "Query title. It is used to name the reports generated from this query." + } + } + }, + "QuerySchedule": { + "id": "QuerySchedule", + "type": "object", + "description": "Information on how frequently and when to run a query.", + "properties": { + "endTimeMs": { + "type": "string", + "description": "Datetime to periodically run the query until.", + "format": "int64" + }, + "frequency": { + "type": "string", + "description": "How often the query is run.", + "enum": [ + "DAILY", + "MONTHLY", + "ONE_TIME", + "QUARTERLY", + "SEMI_MONTHLY", + "WEEKLY" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "nextRunMinuteOfDay": { + "type": "integer", + "description": "Time of day at which a new report will be generated, represented as minutes past midnight Range is 0 to 1439. Only applies to scheduled reports.", + "format": "int32" + }, + "nextRunTimezoneCode": { + "type": "string", + "description": "Canonical timezone code for report generation time. Defaults to America/New_York." + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "Represents a report.", + "properties": { + "key": { + "$ref": "ReportKey", + "description": "Key used to identify a report." + }, + "metadata": { + "$ref": "ReportMetadata", + "description": "Report metadata." + }, + "params": { + "$ref": "Parameters", + "description": "Report parameters." + } + } + }, + "ReportFailure": { + "id": "ReportFailure", + "type": "object", + "description": "An explanation of a report failure.", + "properties": { + "errorCode": { + "type": "string", + "description": "Error code that shows why the report was not created.", + "enum": [ + "AUTHENTICATION_ERROR", + "DEPRECATED_REPORTING_INVALID_QUERY", + "REPORTING_BUCKET_NOT_FOUND", + "REPORTING_CREATE_BUCKET_FAILED", + "REPORTING_DELETE_BUCKET_FAILED", + "REPORTING_FATAL_ERROR", + "REPORTING_ILLEGAL_FILENAME", + "REPORTING_IMCOMPATIBLE_METRICS", + "REPORTING_INVALID_QUERY_MISSING_PARTNER_AND_ADVERTISER_FILTERS", + "REPORTING_INVALID_QUERY_TITLE_MISSING", + "REPORTING_INVALID_QUERY_TOO_MANY_UNFILTERED_LARGE_GROUP_BYS", + "REPORTING_QUERY_NOT_FOUND", + "REPORTING_TRANSIENT_ERROR", + "REPORTING_UPDATE_BUCKET_PERMISSION_FAILED", + "REPORTING_WRITE_BUCKET_OBJECT_FAILED", + "SERVER_ERROR", + "UNAUTHORIZED_API_ACCESS", + "VALIDATION_ERROR" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + } + }, + "ReportKey": { + "id": "ReportKey", + "type": "object", + "description": "Key used to identify a report.", + "properties": { + "queryId": { + "type": "string", + "description": "Query ID.", + "format": "int64" + }, + "reportId": { + "type": "string", + "description": "Report ID.", + "format": "int64" + } + } + }, + "ReportMetadata": { + "id": "ReportMetadata", + "type": "object", + "description": "Report metadata.", + "properties": { + "googleCloudStoragePath": { + "type": "string", + "description": "The path to the location in Google Cloud Storage where the report is stored." + }, + "reportDataEndTimeMs": { + "type": "string", + "description": "The ending time for the data that is shown in the report.", + "format": "int64" + }, + "reportDataStartTimeMs": { + "type": "string", + "description": "The starting time for the data that is shown in the report.", + "format": "int64" + }, + "status": { + "$ref": "ReportStatus", + "description": "Report status." + } + } + }, + "ReportStatus": { + "id": "ReportStatus", + "type": "object", + "description": "Report status.", + "properties": { + "failure": { + "$ref": "ReportFailure", + "description": "If the report failed, this records the cause." + }, + "finishTimeMs": { + "type": "string", + "description": "The time when this report either completed successfully or failed.", + "format": "int64" + }, + "format": { + "type": "string", + "description": "The file type of the report.", + "enum": [ + "CSV", + "EXCEL_CSV", + "XLSX" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "state": { + "type": "string", + "description": "The state of the report.", + "enum": [ + "DONE", + "FAILED", + "RUNNING" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "RowStatus": { + "id": "RowStatus", + "type": "object", + "description": "Represents the upload status of a row in the request.", + "properties": { + "changed": { + "type": "boolean", + "description": "Whether the stored entity is changed as a result of upload." + }, + "entityId": { + "type": "string", + "description": "Entity Id.", + "format": "int64" + }, + "entityName": { + "type": "string", + "description": "Entity name." + }, + "errors": { + "type": "array", + "description": "Reasons why the entity can't be uploaded.", + "items": { + "type": "string" + } + }, + "persisted": { + "type": "boolean", + "description": "Whether the entity is persisted." + }, + "rowNumber": { + "type": "integer", + "description": "Row number.", + "format": "int32" + } + } + }, + "RunQueryRequest": { + "id": "RunQueryRequest", + "type": "object", + "description": "Request to run a stored query to generate a report.", + "properties": { + "dataRange": { + "type": "string", + "description": "Report data range used to generate the report.", + "enum": [ + "ALL_TIME", + "CURRENT_DAY", + "CUSTOM_DATES", + "LAST_14_DAYS", + "LAST_30_DAYS", + "LAST_365_DAYS", + "LAST_7_DAYS", + "LAST_90_DAYS", + "MONTH_TO_DATE", + "PREVIOUS_DAY", + "PREVIOUS_HALF_MONTH", + "PREVIOUS_MONTH", + "PREVIOUS_QUARTER", + "PREVIOUS_WEEK", + "PREVIOUS_YEAR", + "QUARTER_TO_DATE", + "WEEK_TO_DATE", + "YEAR_TO_DATE" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "reportDataEndTimeMs": { + "type": "string", + "description": "The ending time for the data that is shown in the report. Note, reportDataEndTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.", + "format": "int64" + }, + "reportDataStartTimeMs": { + "type": "string", + "description": "The starting time for the data that is shown in the report. Note, reportDataStartTimeMs is required if dataRange is CUSTOM_DATES and ignored otherwise.", + "format": "int64" + }, + "timezoneCode": { + "type": "string", + "description": "Canonical timezone code for report data time. Defaults to America/New_York." + } + } + }, + "UploadLineItemsRequest": { + "id": "UploadLineItemsRequest", + "type": "object", + "description": "Request to upload line items.", + "properties": { + "dryRun": { + "type": "boolean", + "description": "Set to true to get upload status without actually persisting the line items." + }, + "format": { + "type": "string", + "description": "Format the line items are in. Default to CSV.", + "enum": [ + "CSV" + ], + "enumDescriptions": [ + "" + ] + }, + "lineItems": { + "type": "string", + "description": "Line items in CSV to upload. Refer to Entity Write File Format for more information on file format." + } + } + }, + "UploadLineItemsResponse": { + "id": "UploadLineItemsResponse", + "type": "object", + "description": "Upload line items response.", + "properties": { + "uploadStatus": { + "$ref": "UploadStatus", + "description": "Status of upload." + } + } + }, + "UploadStatus": { + "id": "UploadStatus", + "type": "object", + "description": "Represents the status of upload.", + "properties": { + "errors": { + "type": "array", + "description": "Reasons why upload can't be completed.", + "items": { + "type": "string" + } + }, + "rowStatus": { + "type": "array", + "description": "Per-row upload status.", + "items": { + "$ref": "RowStatus" + } + } + } + } + }, + "resources": { + "lineitems": { + "methods": { + "downloadlineitems": { + "id": "doubleclickbidmanager.lineitems.downloadlineitems", + "path": "lineitems/downloadlineitems", + "httpMethod": "POST", + "description": "Retrieves line items in CSV format.", + "request": { + "$ref": "DownloadLineItemsRequest" + }, + "response": { + "$ref": "DownloadLineItemsResponse" + } + }, + "uploadlineitems": { + "id": "doubleclickbidmanager.lineitems.uploadlineitems", + "path": "lineitems/uploadlineitems", + "httpMethod": "POST", + "description": "Uploads line items in CSV format.", + "request": { + "$ref": "UploadLineItemsRequest" + }, + "response": { + "$ref": "UploadLineItemsResponse" + } + } + } + }, + "queries": { + "methods": { + "createquery": { + "id": "doubleclickbidmanager.queries.createquery", + "path": "query", + "httpMethod": "POST", + "description": "Creates a query.", + "request": { + "$ref": "Query" + }, + "response": { + "$ref": "Query" + } + }, + "deletequery": { + "id": "doubleclickbidmanager.queries.deletequery", + "path": "query/{queryId}", + "httpMethod": "DELETE", + "description": "Deletes a stored query as well as the associated stored reports.", + "parameters": { + "queryId": { + "type": "string", + "description": "Query ID to delete.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "queryId" + ] + }, + "getquery": { + "id": "doubleclickbidmanager.queries.getquery", + "path": "query/{queryId}", + "httpMethod": "GET", + "description": "Retrieves a stored query.", + "parameters": { + "queryId": { + "type": "string", + "description": "Query ID to retrieve.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "queryId" + ], + "response": { + "$ref": "Query" + } + }, + "listqueries": { + "id": "doubleclickbidmanager.queries.listqueries", + "path": "queries", + "httpMethod": "GET", + "description": "Retrieves stored queries.", + "response": { + "$ref": "ListQueriesResponse" + } + }, + "runquery": { + "id": "doubleclickbidmanager.queries.runquery", + "path": "query/{queryId}", + "httpMethod": "POST", + "description": "Runs a stored query to generate a report.", + "parameters": { + "queryId": { + "type": "string", + "description": "Query ID to run.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "queryId" + ], + "request": { + "$ref": "RunQueryRequest" + } + } + } + }, + "reports": { + "methods": { + "listreports": { + "id": "doubleclickbidmanager.reports.listreports", + "path": "queries/{queryId}/reports", + "httpMethod": "GET", + "description": "Retrieves stored reports.", + "parameters": { + "queryId": { + "type": "string", + "description": "Query ID with which the reports are associated.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "queryId" + ], + "response": { + "$ref": "ListReportsResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go b/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go new file mode 100644 index 0000000000000..c381bb000c69e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/doubleclickbidmanager/v1/doubleclickbidmanager-gen.go @@ -0,0 +1,828 @@ +// Package doubleclickbidmanager provides access to the DoubleClick Bid Manager API. +// +// See https://developers.google.com/bid-manager/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/doubleclickbidmanager/v1" +// ... +// doubleclickbidmanagerService, err := doubleclickbidmanager.New(oauthHttpClient) +package doubleclickbidmanager + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "doubleclickbidmanager:v1" +const apiName = "doubleclickbidmanager" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/doubleclickbidmanager/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Lineitems = NewLineitemsService(s) + s.Queries = NewQueriesService(s) + s.Reports = NewReportsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Lineitems *LineitemsService + + Queries *QueriesService + + Reports *ReportsService +} + +func NewLineitemsService(s *Service) *LineitemsService { + rs := &LineitemsService{s: s} + return rs +} + +type LineitemsService struct { + s *Service +} + +func NewQueriesService(s *Service) *QueriesService { + rs := &QueriesService{s: s} + return rs +} + +type QueriesService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +type DownloadLineItemsRequest struct { + // FilterIds: Ids of the specified filter type used to filter line items + // to fetch. If omitted, all the line items will be returned. + FilterIds googleapi.Int64s `json:"filterIds,omitempty"` + + // FilterType: Filter type used to filter line items to fetch. + FilterType string `json:"filterType,omitempty"` + + // Format: Format in which the line items will be returned. Default to + // CSV. + Format string `json:"format,omitempty"` +} + +type DownloadLineItemsResponse struct { + // LineItems: Retrieved line items in CSV format. Refer to Entity Write + // File Format for more information on file format. + LineItems string `json:"lineItems,omitempty"` +} + +type FilterPair struct { + // Type: Filter type. + Type string `json:"type,omitempty"` + + // Value: Filter value. + Value string `json:"value,omitempty"` +} + +type ListQueriesResponse struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "doubleclickbidmanager#listQueriesResponse". + Kind string `json:"kind,omitempty"` + + // Queries: Retrieved queries. + Queries []*Query `json:"queries,omitempty"` +} + +type ListReportsResponse struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "doubleclickbidmanager#listReportsResponse". + Kind string `json:"kind,omitempty"` + + // Reports: Retrieved reports. + Reports []*Report `json:"reports,omitempty"` +} + +type Parameters struct { + // Filters: Filters used to match traffic data in your report. + Filters []*FilterPair `json:"filters,omitempty"` + + // GroupBys: Data is grouped by the filters listed in this field. + GroupBys []string `json:"groupBys,omitempty"` + + // IncludeInviteData: Whether to include data from Invite Media. + IncludeInviteData bool `json:"includeInviteData,omitempty"` + + // Metrics: Metrics to include as columns in your report. + Metrics []string `json:"metrics,omitempty"` + + // Type: Report type. + Type string `json:"type,omitempty"` +} + +type Query struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "doubleclickbidmanager#query". + Kind string `json:"kind,omitempty"` + + // Metadata: Query metadata. + Metadata *QueryMetadata `json:"metadata,omitempty"` + + // Params: Query parameters. + Params *Parameters `json:"params,omitempty"` + + // QueryId: Query ID. + QueryId int64 `json:"queryId,omitempty,string"` + + // ReportDataEndTimeMs: The ending time for the data that is shown in + // the report. Note, reportDataEndTimeMs is required if + // metadata.dataRange is CUSTOM_DATES and ignored otherwise. + ReportDataEndTimeMs int64 `json:"reportDataEndTimeMs,omitempty,string"` + + // ReportDataStartTimeMs: The starting time for the data that is shown + // in the report. Note, reportDataStartTimeMs is required if + // metadata.dataRange is CUSTOM_DATES and ignored otherwise. + ReportDataStartTimeMs int64 `json:"reportDataStartTimeMs,omitempty,string"` + + // Schedule: Information on how often and when to run a query. + Schedule *QuerySchedule `json:"schedule,omitempty"` + + // TimezoneCode: Canonical timezone code for report data time. Defaults + // to America/New_York. + TimezoneCode string `json:"timezoneCode,omitempty"` +} + +type QueryMetadata struct { + // DataRange: Range of report data. + DataRange string `json:"dataRange,omitempty"` + + // Format: Format of the generated report. + Format string `json:"format,omitempty"` + + // GoogleCloudStoragePathForLatestReport: The path to the location in + // Google Cloud Storage where the latest report is stored. + GoogleCloudStoragePathForLatestReport string `json:"googleCloudStoragePathForLatestReport,omitempty"` + + // GoogleDrivePathForLatestReport: The path in Google Drive for the + // latest report. + GoogleDrivePathForLatestReport string `json:"googleDrivePathForLatestReport,omitempty"` + + // LatestReportRunTimeMs: The time when the latest report started to + // run. + LatestReportRunTimeMs int64 `json:"latestReportRunTimeMs,omitempty,string"` + + // ReportCount: Number of reports that have been generated for the + // query. + ReportCount int64 `json:"reportCount,omitempty"` + + // Running: Whether the latest report is currently running. + Running bool `json:"running,omitempty"` + + // SendNotification: Whether to send an email notification when a report + // is ready. Default to false. + SendNotification bool `json:"sendNotification,omitempty"` + + // ShareEmailAddress: List of email addresses which are sent email + // notifications when the report is finished. Separate from + // sendNotification. + ShareEmailAddress []string `json:"shareEmailAddress,omitempty"` + + // Title: Query title. It is used to name the reports generated from + // this query. + Title string `json:"title,omitempty"` +} + +type QuerySchedule struct { + // EndTimeMs: Datetime to periodically run the query until. + EndTimeMs int64 `json:"endTimeMs,omitempty,string"` + + // Frequency: How often the query is run. + Frequency string `json:"frequency,omitempty"` + + // NextRunMinuteOfDay: Time of day at which a new report will be + // generated, represented as minutes past midnight Range is 0 to 1439. + // Only applies to scheduled reports. + NextRunMinuteOfDay int64 `json:"nextRunMinuteOfDay,omitempty"` + + // NextRunTimezoneCode: Canonical timezone code for report generation + // time. Defaults to America/New_York. + NextRunTimezoneCode string `json:"nextRunTimezoneCode,omitempty"` +} + +type Report struct { + // Key: Key used to identify a report. + Key *ReportKey `json:"key,omitempty"` + + // Metadata: Report metadata. + Metadata *ReportMetadata `json:"metadata,omitempty"` + + // Params: Report parameters. + Params *Parameters `json:"params,omitempty"` +} + +type ReportFailure struct { + // ErrorCode: Error code that shows why the report was not created. + ErrorCode string `json:"errorCode,omitempty"` +} + +type ReportKey struct { + // QueryId: Query ID. + QueryId int64 `json:"queryId,omitempty,string"` + + // ReportId: Report ID. + ReportId int64 `json:"reportId,omitempty,string"` +} + +type ReportMetadata struct { + // GoogleCloudStoragePath: The path to the location in Google Cloud + // Storage where the report is stored. + GoogleCloudStoragePath string `json:"googleCloudStoragePath,omitempty"` + + // ReportDataEndTimeMs: The ending time for the data that is shown in + // the report. + ReportDataEndTimeMs int64 `json:"reportDataEndTimeMs,omitempty,string"` + + // ReportDataStartTimeMs: The starting time for the data that is shown + // in the report. + ReportDataStartTimeMs int64 `json:"reportDataStartTimeMs,omitempty,string"` + + // Status: Report status. + Status *ReportStatus `json:"status,omitempty"` +} + +type ReportStatus struct { + // Failure: If the report failed, this records the cause. + Failure *ReportFailure `json:"failure,omitempty"` + + // FinishTimeMs: The time when this report either completed successfully + // or failed. + FinishTimeMs int64 `json:"finishTimeMs,omitempty,string"` + + // Format: The file type of the report. + Format string `json:"format,omitempty"` + + // State: The state of the report. + State string `json:"state,omitempty"` +} + +type RowStatus struct { + // Changed: Whether the stored entity is changed as a result of upload. + Changed bool `json:"changed,omitempty"` + + // EntityId: Entity Id. + EntityId int64 `json:"entityId,omitempty,string"` + + // EntityName: Entity name. + EntityName string `json:"entityName,omitempty"` + + // Errors: Reasons why the entity can't be uploaded. + Errors []string `json:"errors,omitempty"` + + // Persisted: Whether the entity is persisted. + Persisted bool `json:"persisted,omitempty"` + + // RowNumber: Row number. + RowNumber int64 `json:"rowNumber,omitempty"` +} + +type RunQueryRequest struct { + // DataRange: Report data range used to generate the report. + DataRange string `json:"dataRange,omitempty"` + + // ReportDataEndTimeMs: The ending time for the data that is shown in + // the report. Note, reportDataEndTimeMs is required if dataRange is + // CUSTOM_DATES and ignored otherwise. + ReportDataEndTimeMs int64 `json:"reportDataEndTimeMs,omitempty,string"` + + // ReportDataStartTimeMs: The starting time for the data that is shown + // in the report. Note, reportDataStartTimeMs is required if dataRange + // is CUSTOM_DATES and ignored otherwise. + ReportDataStartTimeMs int64 `json:"reportDataStartTimeMs,omitempty,string"` + + // TimezoneCode: Canonical timezone code for report data time. Defaults + // to America/New_York. + TimezoneCode string `json:"timezoneCode,omitempty"` +} + +type UploadLineItemsRequest struct { + // DryRun: Set to true to get upload status without actually persisting + // the line items. + DryRun bool `json:"dryRun,omitempty"` + + // Format: Format the line items are in. Default to CSV. + Format string `json:"format,omitempty"` + + // LineItems: Line items in CSV to upload. Refer to Entity Write File + // Format for more information on file format. + LineItems string `json:"lineItems,omitempty"` +} + +type UploadLineItemsResponse struct { + // UploadStatus: Status of upload. + UploadStatus *UploadStatus `json:"uploadStatus,omitempty"` +} + +type UploadStatus struct { + // Errors: Reasons why upload can't be completed. + Errors []string `json:"errors,omitempty"` + + // RowStatus: Per-row upload status. + RowStatus []*RowStatus `json:"rowStatus,omitempty"` +} + +// method id "doubleclickbidmanager.lineitems.downloadlineitems": + +type LineitemsDownloadlineitemsCall struct { + s *Service + downloadlineitemsrequest *DownloadLineItemsRequest + opt_ map[string]interface{} +} + +// Downloadlineitems: Retrieves line items in CSV format. +func (r *LineitemsService) Downloadlineitems(downloadlineitemsrequest *DownloadLineItemsRequest) *LineitemsDownloadlineitemsCall { + c := &LineitemsDownloadlineitemsCall{s: r.s, opt_: make(map[string]interface{})} + c.downloadlineitemsrequest = downloadlineitemsrequest + return c +} + +func (c *LineitemsDownloadlineitemsCall) Do() (*DownloadLineItemsResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.downloadlineitemsrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lineitems/downloadlineitems") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DownloadLineItemsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves line items in CSV format.", + // "httpMethod": "POST", + // "id": "doubleclickbidmanager.lineitems.downloadlineitems", + // "path": "lineitems/downloadlineitems", + // "request": { + // "$ref": "DownloadLineItemsRequest" + // }, + // "response": { + // "$ref": "DownloadLineItemsResponse" + // } + // } + +} + +// method id "doubleclickbidmanager.lineitems.uploadlineitems": + +type LineitemsUploadlineitemsCall struct { + s *Service + uploadlineitemsrequest *UploadLineItemsRequest + opt_ map[string]interface{} +} + +// Uploadlineitems: Uploads line items in CSV format. +func (r *LineitemsService) Uploadlineitems(uploadlineitemsrequest *UploadLineItemsRequest) *LineitemsUploadlineitemsCall { + c := &LineitemsUploadlineitemsCall{s: r.s, opt_: make(map[string]interface{})} + c.uploadlineitemsrequest = uploadlineitemsrequest + return c +} + +func (c *LineitemsUploadlineitemsCall) Do() (*UploadLineItemsResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.uploadlineitemsrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lineitems/uploadlineitems") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UploadLineItemsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Uploads line items in CSV format.", + // "httpMethod": "POST", + // "id": "doubleclickbidmanager.lineitems.uploadlineitems", + // "path": "lineitems/uploadlineitems", + // "request": { + // "$ref": "UploadLineItemsRequest" + // }, + // "response": { + // "$ref": "UploadLineItemsResponse" + // } + // } + +} + +// method id "doubleclickbidmanager.queries.createquery": + +type QueriesCreatequeryCall struct { + s *Service + query *Query + opt_ map[string]interface{} +} + +// Createquery: Creates a query. +func (r *QueriesService) Createquery(query *Query) *QueriesCreatequeryCall { + c := &QueriesCreatequeryCall{s: r.s, opt_: make(map[string]interface{})} + c.query = query + return c +} + +func (c *QueriesCreatequeryCall) Do() (*Query, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.query) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "query") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Query) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a query.", + // "httpMethod": "POST", + // "id": "doubleclickbidmanager.queries.createquery", + // "path": "query", + // "request": { + // "$ref": "Query" + // }, + // "response": { + // "$ref": "Query" + // } + // } + +} + +// method id "doubleclickbidmanager.queries.deletequery": + +type QueriesDeletequeryCall struct { + s *Service + queryId int64 + opt_ map[string]interface{} +} + +// Deletequery: Deletes a stored query as well as the associated stored +// reports. +func (r *QueriesService) Deletequery(queryId int64) *QueriesDeletequeryCall { + c := &QueriesDeletequeryCall{s: r.s, opt_: make(map[string]interface{})} + c.queryId = queryId + return c +} + +func (c *QueriesDeletequeryCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "query/{queryId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{queryId}", strconv.FormatInt(c.queryId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a stored query as well as the associated stored reports.", + // "httpMethod": "DELETE", + // "id": "doubleclickbidmanager.queries.deletequery", + // "parameterOrder": [ + // "queryId" + // ], + // "parameters": { + // "queryId": { + // "description": "Query ID to delete.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "query/{queryId}" + // } + +} + +// method id "doubleclickbidmanager.queries.getquery": + +type QueriesGetqueryCall struct { + s *Service + queryId int64 + opt_ map[string]interface{} +} + +// Getquery: Retrieves a stored query. +func (r *QueriesService) Getquery(queryId int64) *QueriesGetqueryCall { + c := &QueriesGetqueryCall{s: r.s, opt_: make(map[string]interface{})} + c.queryId = queryId + return c +} + +func (c *QueriesGetqueryCall) Do() (*Query, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "query/{queryId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{queryId}", strconv.FormatInt(c.queryId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Query) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a stored query.", + // "httpMethod": "GET", + // "id": "doubleclickbidmanager.queries.getquery", + // "parameterOrder": [ + // "queryId" + // ], + // "parameters": { + // "queryId": { + // "description": "Query ID to retrieve.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "query/{queryId}", + // "response": { + // "$ref": "Query" + // } + // } + +} + +// method id "doubleclickbidmanager.queries.listqueries": + +type QueriesListqueriesCall struct { + s *Service + opt_ map[string]interface{} +} + +// Listqueries: Retrieves stored queries. +func (r *QueriesService) Listqueries() *QueriesListqueriesCall { + c := &QueriesListqueriesCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *QueriesListqueriesCall) Do() (*ListQueriesResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "queries") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ListQueriesResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves stored queries.", + // "httpMethod": "GET", + // "id": "doubleclickbidmanager.queries.listqueries", + // "path": "queries", + // "response": { + // "$ref": "ListQueriesResponse" + // } + // } + +} + +// method id "doubleclickbidmanager.queries.runquery": + +type QueriesRunqueryCall struct { + s *Service + queryId int64 + runqueryrequest *RunQueryRequest + opt_ map[string]interface{} +} + +// Runquery: Runs a stored query to generate a report. +func (r *QueriesService) Runquery(queryId int64, runqueryrequest *RunQueryRequest) *QueriesRunqueryCall { + c := &QueriesRunqueryCall{s: r.s, opt_: make(map[string]interface{})} + c.queryId = queryId + c.runqueryrequest = runqueryrequest + return c +} + +func (c *QueriesRunqueryCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.runqueryrequest) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "query/{queryId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{queryId}", strconv.FormatInt(c.queryId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Runs a stored query to generate a report.", + // "httpMethod": "POST", + // "id": "doubleclickbidmanager.queries.runquery", + // "parameterOrder": [ + // "queryId" + // ], + // "parameters": { + // "queryId": { + // "description": "Query ID to run.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "query/{queryId}", + // "request": { + // "$ref": "RunQueryRequest" + // } + // } + +} + +// method id "doubleclickbidmanager.reports.listreports": + +type ReportsListreportsCall struct { + s *Service + queryId int64 + opt_ map[string]interface{} +} + +// Listreports: Retrieves stored reports. +func (r *ReportsService) Listreports(queryId int64) *ReportsListreportsCall { + c := &ReportsListreportsCall{s: r.s, opt_: make(map[string]interface{})} + c.queryId = queryId + return c +} + +func (c *ReportsListreportsCall) Do() (*ListReportsResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "queries/{queryId}/reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{queryId}", strconv.FormatInt(c.queryId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ListReportsResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves stored reports.", + // "httpMethod": "GET", + // "id": "doubleclickbidmanager.reports.listreports", + // "parameterOrder": [ + // "queryId" + // ], + // "parameters": { + // "queryId": { + // "description": "Query ID with which the reports are associated.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "queries/{queryId}/reports", + // "response": { + // "$ref": "ListReportsResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-api.json b/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-api.json new file mode 100644 index 0000000000000..b1ea21ae44450 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-api.json @@ -0,0 +1,989 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/y4JNZN6WmoC1vLC4va-8Oh8limQ\"", + "discoveryVersion": "v1", + "id": "doubleclicksearch:v2", + "name": "doubleclicksearch", + "version": "v2", + "title": "DoubleClick Search API", + "description": "Report and modify your advertising data in DoubleClick Search (for example, campaigns, ad groups, keywords, and conversions).", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/doubleclick-search/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/doubleclicksearch/v2/", + "basePath": "/doubleclicksearch/v2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "doubleclicksearch/v2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/doubleclicksearch": { + "description": "View and manage your advertising data in DoubleClick Search" + } + } + } + }, + "schemas": { + "Availability": { + "id": "Availability", + "type": "object", + "description": "A message containing availability data relevant to DoubleClick Search.", + "properties": { + "advertiserId": { + "type": "string", + "description": "DS advertiser ID.", + "format": "int64", + "annotations": { + "required": [ + "doubleclicksearch.conversion.updateAvailability" + ] + } + }, + "agencyId": { + "type": "string", + "description": "DS agency ID.", + "format": "int64", + "annotations": { + "required": [ + "doubleclicksearch.conversion.updateAvailability" + ] + } + }, + "availabilityTimestamp": { + "type": "string", + "description": "The time by which all conversions have been uploaded, in epoch millis UTC.", + "format": "uint64", + "annotations": { + "required": [ + "doubleclicksearch.conversion.updateAvailability" + ] + } + }, + "segmentationId": { + "type": "string", + "description": "The numeric segmentation identifier (for example, DoubleClick Search Floodlight activity ID).", + "format": "int64" + }, + "segmentationName": { + "type": "string", + "description": "The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name)." + }, + "segmentationType": { + "type": "string", + "description": "The segmentation type that this availability is for (its default value is FLOODLIGHT).", + "annotations": { + "required": [ + "doubleclicksearch.conversion.updateAvailability" + ] + } + } + } + }, + "Conversion": { + "id": "Conversion", + "type": "object", + "description": "A conversion containing data relevant to DoubleClick Search.", + "properties": { + "adGroupId": { + "type": "string", + "description": "DS ad group ID.", + "format": "int64" + }, + "adId": { + "type": "string", + "description": "DS ad ID.", + "format": "int64" + }, + "advertiserId": { + "type": "string", + "description": "DS advertiser ID.", + "format": "int64" + }, + "agencyId": { + "type": "string", + "description": "DS agency ID.", + "format": "int64" + }, + "campaignId": { + "type": "string", + "description": "DS campaign ID.", + "format": "int64" + }, + "clickId": { + "type": "string", + "description": "DS click ID for the conversion." + }, + "conversionId": { + "type": "string", + "description": "Advertiser-provided ID for the conversion, also known as the order ID.", + "annotations": { + "required": [ + "doubleclicksearch.conversion.insert" + ] + } + }, + "conversionModifiedTimestamp": { + "type": "string", + "description": "The time at which the conversion was last modified, in epoch millis UTC.", + "format": "uint64" + }, + "conversionTimestamp": { + "type": "string", + "description": "The time at which the conversion took place, in epoch millis UTC.", + "format": "uint64", + "annotations": { + "required": [ + "doubleclicksearch.conversion.insert" + ] + } + }, + "criterionId": { + "type": "string", + "description": "DS criterion (keyword) ID.", + "format": "int64" + }, + "currencyCode": { + "type": "string", + "description": "The currency code for the conversion's revenue. Should be in ISO 4217 alphabetic (3-char) format." + }, + "customDimension": { + "type": "array", + "description": "Custom dimensions for the conversion, which can be used to filter data in a report.", + "items": { + "$ref": "CustomDimension" + } + }, + "customMetric": { + "type": "array", + "description": "Custom metrics for the conversion.", + "items": { + "$ref": "CustomMetric" + } + }, + "dsConversionId": { + "type": "string", + "description": "DS conversion ID.", + "format": "int64" + }, + "engineAccountId": { + "type": "string", + "description": "DS engine account ID.", + "format": "int64" + }, + "floodlightOrderId": { + "type": "string", + "description": "The advertiser-provided order id for the conversion." + }, + "quantityMillis": { + "type": "string", + "description": "The quantity of this conversion, in millis.", + "format": "int64" + }, + "revenueMicros": { + "type": "string", + "description": "The revenue amount of this TRANSACTION conversion, in micros.", + "format": "int64" + }, + "segmentationId": { + "type": "string", + "description": "The numeric segmentation identifier (for example, DoubleClick Search Floodlight activity ID).", + "format": "int64" + }, + "segmentationName": { + "type": "string", + "description": "The friendly segmentation identifier (for example, DoubleClick Search Floodlight activity name)." + }, + "segmentationType": { + "type": "string", + "description": "The segmentation type of this conversion (for example, FLOODLIGHT).", + "annotations": { + "required": [ + "doubleclicksearch.conversion.insert" + ] + } + }, + "state": { + "type": "string", + "description": "The state of the conversion, that is, either ACTIVE or DELETED." + }, + "type": { + "type": "string", + "description": "The type of the conversion, that is, either ACTION or TRANSACTION. An ACTION conversion is an action by the user that has no monetarily quantifiable value, while a TRANSACTION conversion is an action that does have a monetarily quantifiable value. Examples are email list signups (ACTION) versus ecommerce purchases (TRANSACTION)." + } + } + }, + "ConversionList": { + "id": "ConversionList", + "type": "object", + "description": "A list of conversions.", + "properties": { + "conversion": { + "type": "array", + "description": "The conversions being requested.", + "items": { + "$ref": "Conversion" + } + }, + "kind": { + "type": "string", + "description": "Identifies this as a ConversionList resource. Value: the fixed string doubleclicksearch#conversionList.", + "default": "doubleclicksearch#conversionList" + } + } + }, + "CustomDimension": { + "id": "CustomDimension", + "type": "object", + "description": "A message containing the custome dimension.", + "properties": { + "name": { + "type": "string", + "description": "Custom dimension name." + }, + "value": { + "type": "string", + "description": "Custom dimension value." + } + } + }, + "CustomMetric": { + "id": "CustomMetric", + "type": "object", + "description": "A message containing the custome metric.", + "properties": { + "name": { + "type": "string", + "description": "Custom metric name." + }, + "value": { + "type": "number", + "description": "Custom metric numeric value.", + "format": "double" + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "A DoubleClick Search report. This object contains the report request, some report metadata such as currency code, and the generated report rows or report files.", + "properties": { + "files": { + "type": "array", + "description": "Asynchronous report only. Contains a list of generated report files once the report has succesfully completed.", + "items": { + "type": "object", + "properties": { + "byteCount": { + "type": "string", + "description": "The size of this report file in bytes.", + "format": "int64" + }, + "url": { + "type": "string", + "description": "Use this url to download the report file." + } + } + } + }, + "id": { + "type": "string", + "description": "Asynchronous report only. Id of the report." + }, + "isReportReady": { + "type": "boolean", + "description": "Asynchronous report only. True if and only if the report has completed successfully and the report files are ready to be downloaded." + }, + "kind": { + "type": "string", + "description": "Identifies this as a Report resource. Value: the fixed string doubleclicksearch#report.", + "default": "doubleclicksearch#report" + }, + "request": { + "$ref": "ReportRequest", + "description": "The request that created the report. Optional fields not specified in the original request are filled with default values." + }, + "rowCount": { + "type": "integer", + "description": "The number of report rows generated by the report, not including headers.", + "format": "int32" + }, + "rows": { + "type": "array", + "description": "Synchronous report only. Generated report rows.", + "items": { + "$ref": "ReportRow" + } + }, + "statisticsCurrencyCode": { + "type": "string", + "description": "The currency code of all monetary values produced in the report, including values that are set by users (e.g., keyword bid settings) and metrics (e.g., cost and revenue). The currency code of a report is determined by the statisticsCurrency field of the report request." + }, + "statisticsTimeZone": { + "type": "string", + "description": "If all statistics of the report are sourced from the same time zone, this would be it. Otherwise the field is unset." + } + } + }, + "ReportRequest": { + "id": "ReportRequest", + "type": "object", + "description": "A request object used to create a DoubleClick Search report.", + "properties": { + "columns": { + "type": "array", + "description": "The columns to include in the report. This includes both DoubleClick Search columns and saved columns. For DoubleClick Search columns, only the columnName parameter is required. For saved columns only the savedColumnName parameter is required. Both columnName and savedColumnName cannot be set in the same stanza.", + "items": { + "type": "object", + "properties": { + "columnName": { + "type": "string", + "description": "Name of a DoubleClick Search column to include in the report." + }, + "endDate": { + "type": "string", + "description": "Inclusive day in YYYY-MM-DD format. When provided, this overrides the overall time range of the report for this column only. Must be provided together with startDate." + }, + "groupByColumn": { + "type": "boolean", + "description": "Synchronous report only. Set to true to group by this column. Defaults to false.", + "default": "false" + }, + "headerText": { + "type": "string", + "description": "Text used to identify this column in the report output; defaults to columnName or savedColumnName when not specified. This can be used to prevent collisions between DoubleClick Search columns and saved columns with the same name." + }, + "savedColumnName": { + "type": "string", + "description": "Name of a saved column to include in the report. The report must be scoped at advertiser or lower, and this saved column must already be created in the DoubleClick Search UI." + }, + "startDate": { + "type": "string", + "description": "Inclusive date in YYYY-MM-DD format. When provided, this overrides the overall time range of the report for this column only. Must be provided together with endDate." + } + } + } + }, + "downloadFormat": { + "type": "string", + "description": "Format that the report should be returned in. Currently csv or tsv is supported.", + "annotations": { + "required": [ + "doubleclicksearch.reports.request" + ] + } + }, + "filters": { + "type": "array", + "description": "A list of filters to be applied to the report.", + "items": { + "type": "object", + "properties": { + "column": { + "type": "object", + "description": "Column to perform the filter on. This can be a DoubleClick Search column or a saved column.", + "properties": { + "columnName": { + "type": "string", + "description": "Name of a DoubleClick Search column to filter on." + }, + "savedColumnName": { + "type": "string", + "description": "Name of a saved column to filter on." + } + } + }, + "operator": { + "type": "string", + "description": "Operator to use in the filter. See the filter reference for a list of available operators." + }, + "values": { + "type": "array", + "description": "A list of values to filter the column value against.", + "items": { + "type": "any" + } + } + } + } + }, + "includeDeletedEntities": { + "type": "boolean", + "description": "Determines if removed entities should be included in the report. Deprecated, please use includeRemovedEntities instead. Defaults to false.", + "default": "false" + }, + "includeRemovedEntities": { + "type": "boolean", + "description": "Determines if removed entities should be included in the report. Defaults to false.", + "default": "false" + }, + "maxRowsPerFile": { + "type": "integer", + "description": "Asynchronous report only. The maximum number of rows per report file. A large report is split into many files based on this field. Acceptable values are 1000000 to 100000000, inclusive.", + "format": "int32", + "minimum": "1000000", + "maximum": "100000000", + "annotations": { + "required": [ + "doubleclicksearch.reports.request" + ] + } + }, + "orderBy": { + "type": "array", + "description": "Synchronous report only. A list of columns and directions defining sorting to be performed on the report rows.", + "items": { + "type": "object", + "properties": { + "column": { + "type": "object", + "description": "Column to perform the sort on. This can be a DoubleClick Search-defined column or a saved column.", + "properties": { + "columnName": { + "type": "string", + "description": "Name of a DoubleClick Search column to sort by." + }, + "savedColumnName": { + "type": "string", + "description": "Name of a saved column to sort by." + } + } + }, + "sortOrder": { + "type": "string", + "description": "The sort direction, which is either ascending or descending." + } + } + } + }, + "reportScope": { + "type": "object", + "description": "The reportScope is a set of IDs that are used to determine which subset of entities will be returned in the report. The full lineage of IDs from the lowest scoped level desired up through agency is required.", + "properties": { + "adGroupId": { + "type": "string", + "description": "DS ad group ID.", + "format": "int64" + }, + "adId": { + "type": "string", + "description": "DS ad ID.", + "format": "int64" + }, + "advertiserId": { + "type": "string", + "description": "DS advertiser ID.", + "format": "int64" + }, + "agencyId": { + "type": "string", + "description": "DS agency ID.", + "format": "int64" + }, + "campaignId": { + "type": "string", + "description": "DS campaign ID.", + "format": "int64" + }, + "engineAccountId": { + "type": "string", + "description": "DS engine account ID.", + "format": "int64" + }, + "keywordId": { + "type": "string", + "description": "DS keyword ID.", + "format": "int64" + } + } + }, + "reportType": { + "type": "string", + "description": "Determines the type of rows that are returned in the report. For example, if you specify reportType: keyword, each row in the report will contain data about a keyword. See the Types of Reports reference for the columns that are available for each type.", + "annotations": { + "required": [ + "doubleclicksearch.reports.generate", + "doubleclicksearch.reports.request" + ] + } + }, + "rowCount": { + "type": "integer", + "description": "Synchronous report only. The maxinum number of rows to return; additional rows are dropped. Acceptable values are 0 to 10000, inclusive. Defaults to 10000.", + "default": "10000", + "format": "int32", + "minimum": "0", + "maximum": "10000", + "annotations": { + "required": [ + "doubleclicksearch.reports.generate" + ] + } + }, + "startRow": { + "type": "integer", + "description": "Synchronous report only. Zero-based index of the first row to return. Acceptable values are 0 to 50000, inclusive. Defaults to 0.", + "default": "0", + "format": "int32", + "minimum": "0", + "maximum": "50000", + "annotations": { + "required": [ + "doubleclicksearch.reports.generate" + ] + } + }, + "statisticsCurrency": { + "type": "string", + "description": "Specifies the currency in which monetary will be returned. Possible values are: usd, agency (valid if the report is scoped to agency or lower), advertiser (valid if the report is scoped to * advertiser or lower), or account (valid if the report is scoped to engine account or lower).", + "annotations": { + "required": [ + "doubleclicksearch.reports.generate", + "doubleclicksearch.reports.request" + ] + } + }, + "timeRange": { + "type": "object", + "description": "If metrics are requested in a report, this argument will be used to restrict the metrics to a specific time range.", + "properties": { + "changedAttributesSinceTimestamp": { + "type": "string", + "description": "Inclusive UTC timestamp in RFC format, e.g., 2013-07-16T10:16:23.555Z. See additional references on how changed attribute reports work.", + "format": "date-time" + }, + "changedMetricsSinceTimestamp": { + "type": "string", + "description": "Inclusive UTC timestamp in RFC format, e.g., 2013-07-16T10:16:23.555Z. See additional references on how changed metrics reports work.", + "format": "date-time" + }, + "endDate": { + "type": "string", + "description": "Inclusive date in YYYY-MM-DD format." + }, + "startDate": { + "type": "string", + "description": "Inclusive date in YYYY-MM-DD format." + } + } + }, + "verifySingleTimeZone": { + "type": "boolean", + "description": "If true, the report would only be created if all the requested stat data are sourced from a single timezone. Defaults to false.", + "default": "false" + } + } + }, + "ReportRow": { + "id": "ReportRow", + "type": "object", + "description": "A row in a DoubleClick Search report.", + "additionalProperties": { + "type": "any", + "description": "Indicates the columns that are represented in this row. That is, each key corresponds to a column with a non-empty cell in this row." + } + }, + "UpdateAvailabilityRequest": { + "id": "UpdateAvailabilityRequest", + "type": "object", + "description": "The request to update availability.", + "properties": { + "availabilities": { + "type": "array", + "description": "The availabilities being requested.", + "items": { + "$ref": "Availability" + } + } + } + }, + "UpdateAvailabilityResponse": { + "id": "UpdateAvailabilityResponse", + "type": "object", + "description": "The response to a update availability request.", + "properties": { + "availabilities": { + "type": "array", + "description": "The availabilities being returned.", + "items": { + "$ref": "Availability" + } + } + } + } + }, + "resources": { + "conversion": { + "methods": { + "get": { + "id": "doubleclicksearch.conversion.get", + "path": "agency/{agencyId}/advertiser/{advertiserId}/engine/{engineAccountId}/conversion", + "httpMethod": "GET", + "description": "Retrieves a list of conversions from a DoubleClick Search engine account.", + "parameters": { + "adGroupId": { + "type": "string", + "description": "Numeric ID of the ad group.", + "format": "int64", + "location": "query" + }, + "adId": { + "type": "string", + "description": "Numeric ID of the ad.", + "format": "int64", + "location": "query" + }, + "advertiserId": { + "type": "string", + "description": "Numeric ID of the advertiser.", + "required": true, + "format": "int64", + "location": "path" + }, + "agencyId": { + "type": "string", + "description": "Numeric ID of the agency.", + "required": true, + "format": "int64", + "location": "path" + }, + "campaignId": { + "type": "string", + "description": "Numeric ID of the campaign.", + "format": "int64", + "location": "query" + }, + "criterionId": { + "type": "string", + "description": "Numeric ID of the criterion.", + "format": "int64", + "location": "query" + }, + "endDate": { + "type": "integer", + "description": "Last date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + "required": true, + "format": "int32", + "minimum": "20091101", + "maximum": "99991231", + "location": "query" + }, + "engineAccountId": { + "type": "string", + "description": "Numeric ID of the engine account.", + "required": true, + "format": "int64", + "location": "path" + }, + "rowCount": { + "type": "integer", + "description": "The number of conversions to return per call.", + "required": true, + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "startDate": { + "type": "integer", + "description": "First date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + "required": true, + "format": "int32", + "minimum": "20091101", + "maximum": "99991231", + "location": "query" + }, + "startRow": { + "type": "integer", + "description": "The 0-based starting index for retrieving conversions results.", + "required": true, + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "agencyId", + "advertiserId", + "engineAccountId", + "endDate", + "rowCount", + "startDate", + "startRow" + ], + "response": { + "$ref": "ConversionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "insert": { + "id": "doubleclicksearch.conversion.insert", + "path": "conversion", + "httpMethod": "POST", + "description": "Inserts a batch of new conversions into DoubleClick Search.", + "request": { + "$ref": "ConversionList" + }, + "response": { + "$ref": "ConversionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "patch": { + "id": "doubleclicksearch.conversion.patch", + "path": "conversion", + "httpMethod": "PATCH", + "description": "Updates a batch of conversions in DoubleClick Search. This method supports patch semantics.", + "parameters": { + "advertiserId": { + "type": "string", + "description": "Numeric ID of the advertiser.", + "required": true, + "format": "int64", + "location": "query" + }, + "agencyId": { + "type": "string", + "description": "Numeric ID of the agency.", + "required": true, + "format": "int64", + "location": "query" + }, + "endDate": { + "type": "integer", + "description": "Last date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + "required": true, + "format": "int32", + "minimum": "20091101", + "maximum": "99991231", + "location": "query" + }, + "engineAccountId": { + "type": "string", + "description": "Numeric ID of the engine account.", + "required": true, + "format": "int64", + "location": "query" + }, + "rowCount": { + "type": "integer", + "description": "The number of conversions to return per call.", + "required": true, + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "startDate": { + "type": "integer", + "description": "First date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + "required": true, + "format": "int32", + "minimum": "20091101", + "maximum": "99991231", + "location": "query" + }, + "startRow": { + "type": "integer", + "description": "The 0-based starting index for retrieving conversions results.", + "required": true, + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "advertiserId", + "agencyId", + "endDate", + "engineAccountId", + "rowCount", + "startDate", + "startRow" + ], + "request": { + "$ref": "ConversionList" + }, + "response": { + "$ref": "ConversionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "update": { + "id": "doubleclicksearch.conversion.update", + "path": "conversion", + "httpMethod": "PUT", + "description": "Updates a batch of conversions in DoubleClick Search.", + "request": { + "$ref": "ConversionList" + }, + "response": { + "$ref": "ConversionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "updateAvailability": { + "id": "doubleclicksearch.conversion.updateAvailability", + "path": "conversion/updateAvailability", + "httpMethod": "POST", + "description": "Updates the availabilities of a batch of floodlight activities in DoubleClick Search.", + "request": { + "$ref": "UpdateAvailabilityRequest", + "parameterName": "empty" + }, + "response": { + "$ref": "UpdateAvailabilityResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + } + } + }, + "reports": { + "methods": { + "generate": { + "id": "doubleclicksearch.reports.generate", + "path": "reports/generate", + "httpMethod": "POST", + "description": "Generates and returns a report immediately.", + "request": { + "$ref": "ReportRequest", + "parameterName": "reportRequest" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "get": { + "id": "doubleclicksearch.reports.get", + "path": "reports/{reportId}", + "httpMethod": "GET", + "description": "Polls for the status of a report request.", + "parameters": { + "reportId": { + "type": "string", + "description": "ID of the report request being polled.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "reportId" + ], + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + }, + "getFile": { + "id": "doubleclicksearch.reports.getFile", + "path": "reports/{reportId}/files/{reportFragment}", + "httpMethod": "GET", + "description": "Downloads a report file.", + "parameters": { + "reportFragment": { + "type": "integer", + "description": "The index of the report fragment to download.", + "required": true, + "format": "int32", + "minimum": "0", + "location": "path" + }, + "reportId": { + "type": "string", + "description": "ID of the report.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "reportId", + "reportFragment" + ], + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ], + "supportsMediaDownload": true + }, + "request": { + "id": "doubleclicksearch.reports.request", + "path": "reports", + "httpMethod": "POST", + "description": "Inserts a report request into the reporting system.", + "request": { + "$ref": "ReportRequest", + "parameterName": "reportRequest" + }, + "response": { + "$ref": "Report" + }, + "scopes": [ + "https://www.googleapis.com/auth/doubleclicksearch" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-gen.go b/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-gen.go new file mode 100644 index 0000000000000..7588564e6ec2e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/doubleclicksearch/v2/doubleclicksearch-gen.go @@ -0,0 +1,1256 @@ +// Package doubleclicksearch provides access to the DoubleClick Search API. +// +// See https://developers.google.com/doubleclick-search/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/doubleclicksearch/v2" +// ... +// doubleclicksearchService, err := doubleclicksearch.New(oauthHttpClient) +package doubleclicksearch + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "doubleclicksearch:v2" +const apiName = "doubleclicksearch" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/doubleclicksearch/v2/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your advertising data in DoubleClick Search + DoubleclicksearchScope = "https://www.googleapis.com/auth/doubleclicksearch" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Conversion = NewConversionService(s) + s.Reports = NewReportsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Conversion *ConversionService + + Reports *ReportsService +} + +func NewConversionService(s *Service) *ConversionService { + rs := &ConversionService{s: s} + return rs +} + +type ConversionService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +type Availability struct { + // AdvertiserId: DS advertiser ID. + AdvertiserId int64 `json:"advertiserId,omitempty,string"` + + // AgencyId: DS agency ID. + AgencyId int64 `json:"agencyId,omitempty,string"` + + // AvailabilityTimestamp: The time by which all conversions have been + // uploaded, in epoch millis UTC. + AvailabilityTimestamp uint64 `json:"availabilityTimestamp,omitempty,string"` + + // SegmentationId: The numeric segmentation identifier (for example, + // DoubleClick Search Floodlight activity ID). + SegmentationId int64 `json:"segmentationId,omitempty,string"` + + // SegmentationName: The friendly segmentation identifier (for example, + // DoubleClick Search Floodlight activity name). + SegmentationName string `json:"segmentationName,omitempty"` + + // SegmentationType: The segmentation type that this availability is for + // (its default value is FLOODLIGHT). + SegmentationType string `json:"segmentationType,omitempty"` +} + +type Conversion struct { + // AdGroupId: DS ad group ID. + AdGroupId int64 `json:"adGroupId,omitempty,string"` + + // AdId: DS ad ID. + AdId int64 `json:"adId,omitempty,string"` + + // AdvertiserId: DS advertiser ID. + AdvertiserId int64 `json:"advertiserId,omitempty,string"` + + // AgencyId: DS agency ID. + AgencyId int64 `json:"agencyId,omitempty,string"` + + // CampaignId: DS campaign ID. + CampaignId int64 `json:"campaignId,omitempty,string"` + + // ClickId: DS click ID for the conversion. + ClickId string `json:"clickId,omitempty"` + + // ConversionId: Advertiser-provided ID for the conversion, also known + // as the order ID. + ConversionId string `json:"conversionId,omitempty"` + + // ConversionModifiedTimestamp: The time at which the conversion was + // last modified, in epoch millis UTC. + ConversionModifiedTimestamp uint64 `json:"conversionModifiedTimestamp,omitempty,string"` + + // ConversionTimestamp: The time at which the conversion took place, in + // epoch millis UTC. + ConversionTimestamp uint64 `json:"conversionTimestamp,omitempty,string"` + + // CriterionId: DS criterion (keyword) ID. + CriterionId int64 `json:"criterionId,omitempty,string"` + + // CurrencyCode: The currency code for the conversion's revenue. Should + // be in ISO 4217 alphabetic (3-char) format. + CurrencyCode string `json:"currencyCode,omitempty"` + + // CustomDimension: Custom dimensions for the conversion, which can be + // used to filter data in a report. + CustomDimension []*CustomDimension `json:"customDimension,omitempty"` + + // CustomMetric: Custom metrics for the conversion. + CustomMetric []*CustomMetric `json:"customMetric,omitempty"` + + // DsConversionId: DS conversion ID. + DsConversionId int64 `json:"dsConversionId,omitempty,string"` + + // EngineAccountId: DS engine account ID. + EngineAccountId int64 `json:"engineAccountId,omitempty,string"` + + // FloodlightOrderId: The advertiser-provided order id for the + // conversion. + FloodlightOrderId string `json:"floodlightOrderId,omitempty"` + + // QuantityMillis: The quantity of this conversion, in millis. + QuantityMillis int64 `json:"quantityMillis,omitempty,string"` + + // RevenueMicros: The revenue amount of this TRANSACTION conversion, in + // micros. + RevenueMicros int64 `json:"revenueMicros,omitempty,string"` + + // SegmentationId: The numeric segmentation identifier (for example, + // DoubleClick Search Floodlight activity ID). + SegmentationId int64 `json:"segmentationId,omitempty,string"` + + // SegmentationName: The friendly segmentation identifier (for example, + // DoubleClick Search Floodlight activity name). + SegmentationName string `json:"segmentationName,omitempty"` + + // SegmentationType: The segmentation type of this conversion (for + // example, FLOODLIGHT). + SegmentationType string `json:"segmentationType,omitempty"` + + // State: The state of the conversion, that is, either ACTIVE or + // DELETED. + State string `json:"state,omitempty"` + + // Type: The type of the conversion, that is, either ACTION or + // TRANSACTION. An ACTION conversion is an action by the user that has + // no monetarily quantifiable value, while a TRANSACTION conversion is + // an action that does have a monetarily quantifiable value. Examples + // are email list signups (ACTION) versus ecommerce purchases + // (TRANSACTION). + Type string `json:"type,omitempty"` +} + +type ConversionList struct { + // Conversion: The conversions being requested. + Conversion []*Conversion `json:"conversion,omitempty"` + + // Kind: Identifies this as a ConversionList resource. Value: the fixed + // string doubleclicksearch#conversionList. + Kind string `json:"kind,omitempty"` +} + +type CustomDimension struct { + // Name: Custom dimension name. + Name string `json:"name,omitempty"` + + // Value: Custom dimension value. + Value string `json:"value,omitempty"` +} + +type CustomMetric struct { + // Name: Custom metric name. + Name string `json:"name,omitempty"` + + // Value: Custom metric numeric value. + Value float64 `json:"value,omitempty"` +} + +type Report struct { + // Files: Asynchronous report only. Contains a list of generated report + // files once the report has succesfully completed. + Files []*ReportFiles `json:"files,omitempty"` + + // Id: Asynchronous report only. Id of the report. + Id string `json:"id,omitempty"` + + // IsReportReady: Asynchronous report only. True if and only if the + // report has completed successfully and the report files are ready to + // be downloaded. + IsReportReady bool `json:"isReportReady,omitempty"` + + // Kind: Identifies this as a Report resource. Value: the fixed string + // doubleclicksearch#report. + Kind string `json:"kind,omitempty"` + + // Request: The request that created the report. Optional fields not + // specified in the original request are filled with default values. + Request *ReportRequest `json:"request,omitempty"` + + // RowCount: The number of report rows generated by the report, not + // including headers. + RowCount int64 `json:"rowCount,omitempty"` + + // Rows: Synchronous report only. Generated report rows. + Rows []*ReportRow `json:"rows,omitempty"` + + // StatisticsCurrencyCode: The currency code of all monetary values + // produced in the report, including values that are set by users (e.g., + // keyword bid settings) and metrics (e.g., cost and revenue). The + // currency code of a report is determined by the statisticsCurrency + // field of the report request. + StatisticsCurrencyCode string `json:"statisticsCurrencyCode,omitempty"` + + // StatisticsTimeZone: If all statistics of the report are sourced from + // the same time zone, this would be it. Otherwise the field is unset. + StatisticsTimeZone string `json:"statisticsTimeZone,omitempty"` +} + +type ReportFiles struct { + // ByteCount: The size of this report file in bytes. + ByteCount int64 `json:"byteCount,omitempty,string"` + + // Url: Use this url to download the report file. + Url string `json:"url,omitempty"` +} + +type ReportRequest struct { + // Columns: The columns to include in the report. This includes both + // DoubleClick Search columns and saved columns. For DoubleClick Search + // columns, only the columnName parameter is required. For saved columns + // only the savedColumnName parameter is required. Both columnName and + // savedColumnName cannot be set in the same stanza. + Columns []*ReportRequestColumns `json:"columns,omitempty"` + + // DownloadFormat: Format that the report should be returned in. + // Currently csv or tsv is supported. + DownloadFormat string `json:"downloadFormat,omitempty"` + + // Filters: A list of filters to be applied to the report. + Filters []*ReportRequestFilters `json:"filters,omitempty"` + + // IncludeDeletedEntities: Determines if removed entities should be + // included in the report. Deprecated, please use includeRemovedEntities + // instead. Defaults to false. + IncludeDeletedEntities bool `json:"includeDeletedEntities,omitempty"` + + // IncludeRemovedEntities: Determines if removed entities should be + // included in the report. Defaults to false. + IncludeRemovedEntities bool `json:"includeRemovedEntities,omitempty"` + + // MaxRowsPerFile: Asynchronous report only. The maximum number of rows + // per report file. A large report is split into many files based on + // this field. Acceptable values are 1000000 to 100000000, inclusive. + MaxRowsPerFile int64 `json:"maxRowsPerFile,omitempty"` + + // OrderBy: Synchronous report only. A list of columns and directions + // defining sorting to be performed on the report rows. + OrderBy []*ReportRequestOrderBy `json:"orderBy,omitempty"` + + // ReportScope: The reportScope is a set of IDs that are used to + // determine which subset of entities will be returned in the report. + // The full lineage of IDs from the lowest scoped level desired up + // through agency is required. + ReportScope *ReportRequestReportScope `json:"reportScope,omitempty"` + + // ReportType: Determines the type of rows that are returned in the + // report. For example, if you specify reportType: keyword, each row in + // the report will contain data about a keyword. See the Types of + // Reports reference for the columns that are available for each type. + ReportType string `json:"reportType,omitempty"` + + // RowCount: Synchronous report only. The maxinum number of rows to + // return; additional rows are dropped. Acceptable values are 0 to + // 10000, inclusive. Defaults to 10000. + RowCount int64 `json:"rowCount,omitempty"` + + // StartRow: Synchronous report only. Zero-based index of the first row + // to return. Acceptable values are 0 to 50000, inclusive. Defaults to + // 0. + StartRow int64 `json:"startRow,omitempty"` + + // StatisticsCurrency: Specifies the currency in which monetary will be + // returned. Possible values are: usd, agency (valid if the report is + // scoped to agency or lower), advertiser (valid if the report is scoped + // to * advertiser or lower), or account (valid if the report is scoped + // to engine account or lower). + StatisticsCurrency string `json:"statisticsCurrency,omitempty"` + + // TimeRange: If metrics are requested in a report, this argument will + // be used to restrict the metrics to a specific time range. + TimeRange *ReportRequestTimeRange `json:"timeRange,omitempty"` + + // VerifySingleTimeZone: If true, the report would only be created if + // all the requested stat data are sourced from a single timezone. + // Defaults to false. + VerifySingleTimeZone bool `json:"verifySingleTimeZone,omitempty"` +} + +type ReportRequestColumns struct { + // ColumnName: Name of a DoubleClick Search column to include in the + // report. + ColumnName string `json:"columnName,omitempty"` + + // EndDate: Inclusive day in YYYY-MM-DD format. When provided, this + // overrides the overall time range of the report for this column only. + // Must be provided together with startDate. + EndDate string `json:"endDate,omitempty"` + + // GroupByColumn: Synchronous report only. Set to true to group by this + // column. Defaults to false. + GroupByColumn bool `json:"groupByColumn,omitempty"` + + // HeaderText: Text used to identify this column in the report output; + // defaults to columnName or savedColumnName when not specified. This + // can be used to prevent collisions between DoubleClick Search columns + // and saved columns with the same name. + HeaderText string `json:"headerText,omitempty"` + + // SavedColumnName: Name of a saved column to include in the report. The + // report must be scoped at advertiser or lower, and this saved column + // must already be created in the DoubleClick Search UI. + SavedColumnName string `json:"savedColumnName,omitempty"` + + // StartDate: Inclusive date in YYYY-MM-DD format. When provided, this + // overrides the overall time range of the report for this column only. + // Must be provided together with endDate. + StartDate string `json:"startDate,omitempty"` +} + +type ReportRequestFilters struct { + // Column: Column to perform the filter on. This can be a DoubleClick + // Search column or a saved column. + Column *ReportRequestFiltersColumn `json:"column,omitempty"` + + // Operator: Operator to use in the filter. See the filter reference for + // a list of available operators. + Operator string `json:"operator,omitempty"` + + // Values: A list of values to filter the column value against. + Values []interface{} `json:"values,omitempty"` +} + +type ReportRequestFiltersColumn struct { + // ColumnName: Name of a DoubleClick Search column to filter on. + ColumnName string `json:"columnName,omitempty"` + + // SavedColumnName: Name of a saved column to filter on. + SavedColumnName string `json:"savedColumnName,omitempty"` +} + +type ReportRequestOrderBy struct { + // Column: Column to perform the sort on. This can be a DoubleClick + // Search-defined column or a saved column. + Column *ReportRequestOrderByColumn `json:"column,omitempty"` + + // SortOrder: The sort direction, which is either ascending or + // descending. + SortOrder string `json:"sortOrder,omitempty"` +} + +type ReportRequestOrderByColumn struct { + // ColumnName: Name of a DoubleClick Search column to sort by. + ColumnName string `json:"columnName,omitempty"` + + // SavedColumnName: Name of a saved column to sort by. + SavedColumnName string `json:"savedColumnName,omitempty"` +} + +type ReportRequestReportScope struct { + // AdGroupId: DS ad group ID. + AdGroupId int64 `json:"adGroupId,omitempty,string"` + + // AdId: DS ad ID. + AdId int64 `json:"adId,omitempty,string"` + + // AdvertiserId: DS advertiser ID. + AdvertiserId int64 `json:"advertiserId,omitempty,string"` + + // AgencyId: DS agency ID. + AgencyId int64 `json:"agencyId,omitempty,string"` + + // CampaignId: DS campaign ID. + CampaignId int64 `json:"campaignId,omitempty,string"` + + // EngineAccountId: DS engine account ID. + EngineAccountId int64 `json:"engineAccountId,omitempty,string"` + + // KeywordId: DS keyword ID. + KeywordId int64 `json:"keywordId,omitempty,string"` +} + +type ReportRequestTimeRange struct { + // ChangedAttributesSinceTimestamp: Inclusive UTC timestamp in RFC + // format, e.g., 2013-07-16T10:16:23.555Z. See additional references on + // how changed attribute reports work. + ChangedAttributesSinceTimestamp string `json:"changedAttributesSinceTimestamp,omitempty"` + + // ChangedMetricsSinceTimestamp: Inclusive UTC timestamp in RFC format, + // e.g., 2013-07-16T10:16:23.555Z. See additional references on how + // changed metrics reports work. + ChangedMetricsSinceTimestamp string `json:"changedMetricsSinceTimestamp,omitempty"` + + // EndDate: Inclusive date in YYYY-MM-DD format. + EndDate string `json:"endDate,omitempty"` + + // StartDate: Inclusive date in YYYY-MM-DD format. + StartDate string `json:"startDate,omitempty"` +} + +type ReportRow struct { +} + +type UpdateAvailabilityRequest struct { + // Availabilities: The availabilities being requested. + Availabilities []*Availability `json:"availabilities,omitempty"` +} + +type UpdateAvailabilityResponse struct { + // Availabilities: The availabilities being returned. + Availabilities []*Availability `json:"availabilities,omitempty"` +} + +// method id "doubleclicksearch.conversion.get": + +type ConversionGetCall struct { + s *Service + agencyId int64 + advertiserId int64 + engineAccountId int64 + endDate int64 + rowCount int64 + startDate int64 + startRow int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a list of conversions from a DoubleClick Search engine +// account. +func (r *ConversionService) Get(agencyId int64, advertiserId int64, engineAccountId int64, endDate int64, rowCount int64, startDate int64, startRow int64) *ConversionGetCall { + c := &ConversionGetCall{s: r.s, opt_: make(map[string]interface{})} + c.agencyId = agencyId + c.advertiserId = advertiserId + c.engineAccountId = engineAccountId + c.endDate = endDate + c.rowCount = rowCount + c.startDate = startDate + c.startRow = startRow + return c +} + +// AdGroupId sets the optional parameter "adGroupId": Numeric ID of the +// ad group. +func (c *ConversionGetCall) AdGroupId(adGroupId int64) *ConversionGetCall { + c.opt_["adGroupId"] = adGroupId + return c +} + +// AdId sets the optional parameter "adId": Numeric ID of the ad. +func (c *ConversionGetCall) AdId(adId int64) *ConversionGetCall { + c.opt_["adId"] = adId + return c +} + +// CampaignId sets the optional parameter "campaignId": Numeric ID of +// the campaign. +func (c *ConversionGetCall) CampaignId(campaignId int64) *ConversionGetCall { + c.opt_["campaignId"] = campaignId + return c +} + +// CriterionId sets the optional parameter "criterionId": Numeric ID of +// the criterion. +func (c *ConversionGetCall) CriterionId(criterionId int64) *ConversionGetCall { + c.opt_["criterionId"] = criterionId + return c +} + +func (c *ConversionGetCall) Do() (*ConversionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("rowCount", fmt.Sprintf("%v", c.rowCount)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + params.Set("startRow", fmt.Sprintf("%v", c.startRow)) + if v, ok := c.opt_["adGroupId"]; ok { + params.Set("adGroupId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["adId"]; ok { + params.Set("adId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["campaignId"]; ok { + params.Set("campaignId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["criterionId"]; ok { + params.Set("criterionId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "agency/{agencyId}/advertiser/{advertiserId}/engine/{engineAccountId}/conversion") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{agencyId}", strconv.FormatInt(c.agencyId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{advertiserId}", strconv.FormatInt(c.advertiserId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{engineAccountId}", strconv.FormatInt(c.engineAccountId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ConversionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of conversions from a DoubleClick Search engine account.", + // "httpMethod": "GET", + // "id": "doubleclicksearch.conversion.get", + // "parameterOrder": [ + // "agencyId", + // "advertiserId", + // "engineAccountId", + // "endDate", + // "rowCount", + // "startDate", + // "startRow" + // ], + // "parameters": { + // "adGroupId": { + // "description": "Numeric ID of the ad group.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "adId": { + // "description": "Numeric ID of the ad.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "advertiserId": { + // "description": "Numeric ID of the advertiser.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "agencyId": { + // "description": "Numeric ID of the agency.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "campaignId": { + // "description": "Numeric ID of the campaign.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "criterionId": { + // "description": "Numeric ID of the criterion.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "endDate": { + // "description": "Last date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + // "format": "int32", + // "location": "query", + // "maximum": "99991231", + // "minimum": "20091101", + // "required": true, + // "type": "integer" + // }, + // "engineAccountId": { + // "description": "Numeric ID of the engine account.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "rowCount": { + // "description": "The number of conversions to return per call.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "required": true, + // "type": "integer" + // }, + // "startDate": { + // "description": "First date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + // "format": "int32", + // "location": "query", + // "maximum": "99991231", + // "minimum": "20091101", + // "required": true, + // "type": "integer" + // }, + // "startRow": { + // "description": "The 0-based starting index for retrieving conversions results.", + // "format": "uint32", + // "location": "query", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "agency/{agencyId}/advertiser/{advertiserId}/engine/{engineAccountId}/conversion", + // "response": { + // "$ref": "ConversionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.conversion.insert": + +type ConversionInsertCall struct { + s *Service + conversionlist *ConversionList + opt_ map[string]interface{} +} + +// Insert: Inserts a batch of new conversions into DoubleClick Search. +func (r *ConversionService) Insert(conversionlist *ConversionList) *ConversionInsertCall { + c := &ConversionInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.conversionlist = conversionlist + return c +} + +func (c *ConversionInsertCall) Do() (*ConversionList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "conversion") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ConversionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a batch of new conversions into DoubleClick Search.", + // "httpMethod": "POST", + // "id": "doubleclicksearch.conversion.insert", + // "path": "conversion", + // "request": { + // "$ref": "ConversionList" + // }, + // "response": { + // "$ref": "ConversionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.conversion.patch": + +type ConversionPatchCall struct { + s *Service + advertiserId int64 + agencyId int64 + endDate int64 + engineAccountId int64 + rowCount int64 + startDate int64 + startRow int64 + conversionlist *ConversionList + opt_ map[string]interface{} +} + +// Patch: Updates a batch of conversions in DoubleClick Search. This +// method supports patch semantics. +func (r *ConversionService) Patch(advertiserId int64, agencyId int64, endDate int64, engineAccountId int64, rowCount int64, startDate int64, startRow int64, conversionlist *ConversionList) *ConversionPatchCall { + c := &ConversionPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.advertiserId = advertiserId + c.agencyId = agencyId + c.endDate = endDate + c.engineAccountId = engineAccountId + c.rowCount = rowCount + c.startDate = startDate + c.startRow = startRow + c.conversionlist = conversionlist + return c +} + +func (c *ConversionPatchCall) Do() (*ConversionList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("advertiserId", fmt.Sprintf("%v", c.advertiserId)) + params.Set("agencyId", fmt.Sprintf("%v", c.agencyId)) + params.Set("endDate", fmt.Sprintf("%v", c.endDate)) + params.Set("engineAccountId", fmt.Sprintf("%v", c.engineAccountId)) + params.Set("rowCount", fmt.Sprintf("%v", c.rowCount)) + params.Set("startDate", fmt.Sprintf("%v", c.startDate)) + params.Set("startRow", fmt.Sprintf("%v", c.startRow)) + urls := googleapi.ResolveRelative(c.s.BasePath, "conversion") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ConversionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a batch of conversions in DoubleClick Search. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "doubleclicksearch.conversion.patch", + // "parameterOrder": [ + // "advertiserId", + // "agencyId", + // "endDate", + // "engineAccountId", + // "rowCount", + // "startDate", + // "startRow" + // ], + // "parameters": { + // "advertiserId": { + // "description": "Numeric ID of the advertiser.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "agencyId": { + // "description": "Numeric ID of the agency.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Last date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + // "format": "int32", + // "location": "query", + // "maximum": "99991231", + // "minimum": "20091101", + // "required": true, + // "type": "integer" + // }, + // "engineAccountId": { + // "description": "Numeric ID of the engine account.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "rowCount": { + // "description": "The number of conversions to return per call.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "required": true, + // "type": "integer" + // }, + // "startDate": { + // "description": "First date (inclusive) on which to retrieve conversions. Format is yyyymmdd.", + // "format": "int32", + // "location": "query", + // "maximum": "99991231", + // "minimum": "20091101", + // "required": true, + // "type": "integer" + // }, + // "startRow": { + // "description": "The 0-based starting index for retrieving conversions results.", + // "format": "uint32", + // "location": "query", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "conversion", + // "request": { + // "$ref": "ConversionList" + // }, + // "response": { + // "$ref": "ConversionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.conversion.update": + +type ConversionUpdateCall struct { + s *Service + conversionlist *ConversionList + opt_ map[string]interface{} +} + +// Update: Updates a batch of conversions in DoubleClick Search. +func (r *ConversionService) Update(conversionlist *ConversionList) *ConversionUpdateCall { + c := &ConversionUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.conversionlist = conversionlist + return c +} + +func (c *ConversionUpdateCall) Do() (*ConversionList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.conversionlist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "conversion") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ConversionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a batch of conversions in DoubleClick Search.", + // "httpMethod": "PUT", + // "id": "doubleclicksearch.conversion.update", + // "path": "conversion", + // "request": { + // "$ref": "ConversionList" + // }, + // "response": { + // "$ref": "ConversionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.conversion.updateAvailability": + +type ConversionUpdateAvailabilityCall struct { + s *Service + updateavailabilityrequest *UpdateAvailabilityRequest + opt_ map[string]interface{} +} + +// UpdateAvailability: Updates the availabilities of a batch of +// floodlight activities in DoubleClick Search. +func (r *ConversionService) UpdateAvailability(updateavailabilityrequest *UpdateAvailabilityRequest) *ConversionUpdateAvailabilityCall { + c := &ConversionUpdateAvailabilityCall{s: r.s, opt_: make(map[string]interface{})} + c.updateavailabilityrequest = updateavailabilityrequest + return c +} + +func (c *ConversionUpdateAvailabilityCall) Do() (*UpdateAvailabilityResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.updateavailabilityrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "conversion/updateAvailability") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UpdateAvailabilityResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the availabilities of a batch of floodlight activities in DoubleClick Search.", + // "httpMethod": "POST", + // "id": "doubleclicksearch.conversion.updateAvailability", + // "path": "conversion/updateAvailability", + // "request": { + // "$ref": "UpdateAvailabilityRequest", + // "parameterName": "empty" + // }, + // "response": { + // "$ref": "UpdateAvailabilityResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.reports.generate": + +type ReportsGenerateCall struct { + s *Service + reportrequest *ReportRequest + opt_ map[string]interface{} +} + +// Generate: Generates and returns a report immediately. +func (r *ReportsService) Generate(reportrequest *ReportRequest) *ReportsGenerateCall { + c := &ReportsGenerateCall{s: r.s, opt_: make(map[string]interface{})} + c.reportrequest = reportrequest + return c +} + +func (c *ReportsGenerateCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/generate") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Generates and returns a report immediately.", + // "httpMethod": "POST", + // "id": "doubleclicksearch.reports.generate", + // "path": "reports/generate", + // "request": { + // "$ref": "ReportRequest", + // "parameterName": "reportRequest" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.reports.get": + +type ReportsGetCall struct { + s *Service + reportId string + opt_ map[string]interface{} +} + +// Get: Polls for the status of a report request. +func (r *ReportsService) Get(reportId string) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.reportId = reportId + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{reportId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", url.QueryEscape(c.reportId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Polls for the status of a report request.", + // "httpMethod": "GET", + // "id": "doubleclicksearch.reports.get", + // "parameterOrder": [ + // "reportId" + // ], + // "parameters": { + // "reportId": { + // "description": "ID of the report request being polled.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "reports/{reportId}", + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} + +// method id "doubleclicksearch.reports.getFile": + +type ReportsGetFileCall struct { + s *Service + reportId string + reportFragment int64 + opt_ map[string]interface{} +} + +// GetFile: Downloads a report file. +func (r *ReportsService) GetFile(reportId string, reportFragment int64) *ReportsGetFileCall { + c := &ReportsGetFileCall{s: r.s, opt_: make(map[string]interface{})} + c.reportId = reportId + c.reportFragment = reportFragment + return c +} + +func (c *ReportsGetFileCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports/{reportId}/files/{reportFragment}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{reportId}", url.QueryEscape(c.reportId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportFragment}", strconv.FormatInt(c.reportFragment, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Downloads a report file.", + // "httpMethod": "GET", + // "id": "doubleclicksearch.reports.getFile", + // "parameterOrder": [ + // "reportId", + // "reportFragment" + // ], + // "parameters": { + // "reportFragment": { + // "description": "The index of the report fragment to download.", + // "format": "int32", + // "location": "path", + // "minimum": "0", + // "required": true, + // "type": "integer" + // }, + // "reportId": { + // "description": "ID of the report.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "reports/{reportId}/files/{reportFragment}", + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "doubleclicksearch.reports.request": + +type ReportsRequestCall struct { + s *Service + reportrequest *ReportRequest + opt_ map[string]interface{} +} + +// Request: Inserts a report request into the reporting system. +func (r *ReportsService) Request(reportrequest *ReportRequest) *ReportsRequestCall { + c := &ReportsRequestCall{s: r.s, opt_: make(map[string]interface{})} + c.reportrequest = reportrequest + return c +} + +func (c *ReportsRequestCall) Do() (*Report, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.reportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "reports") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a report request into the reporting system.", + // "httpMethod": "POST", + // "id": "doubleclicksearch.reports.request", + // "path": "reports", + // "request": { + // "$ref": "ReportRequest", + // "parameterName": "reportRequest" + // }, + // "response": { + // "$ref": "Report" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/doubleclicksearch" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-api.json b/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-api.json new file mode 100644 index 0000000000000..789bedd066836 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-api.json @@ -0,0 +1,417 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/_OTlrhreIDbn9vfKusTrBlY5vkI\"", + "discoveryVersion": "v1", + "id": "drive:v1", + "name": "drive", + "version": "v1", + "title": "Drive API", + "description": "The API to interact with Drive.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png", + "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png" + }, + "documentationLink": "https://developers.google.com/drive/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/drive/v1/", + "basePath": "/drive/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "drive/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/drive.file": { + "description": "View and manage Google Drive files that you have opened or created with this app" + } + } + } + }, + "schemas": { + "File": { + "id": "File", + "type": "object", + "description": "The metadata for a file.", + "properties": { + "createdDate": { + "type": "string", + "description": "Create time for this file (formatted ISO8601 timestamp).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "A short description of the file" + }, + "downloadUrl": { + "type": "string", + "description": "Short term download URL for the file. This will only be populated on files with content stored in Drive." + }, + "etag": { + "type": "string", + "description": "ETag of the file." + }, + "fileExtension": { + "type": "string", + "description": "The file extension used when downloading this file. This field is read only. To set the extension, include it on title when creating the file. This will only be populated on files with content stored in Drive." + }, + "fileSize": { + "type": "string", + "description": "The size of the file in bytes. This will only be populated on files with content stored in Drive.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The id of the file." + }, + "indexableText": { + "type": "object", + "description": "Indexable text attributes for the file (can only be written)", + "properties": { + "text": { + "type": "string", + "description": "The text to be indexed for this file" + } + } + }, + "kind": { + "type": "string", + "description": "The type of file. This is always drive#file", + "default": "drive#file" + }, + "labels": { + "type": "object", + "description": "Labels for the file.", + "properties": { + "hidden": { + "type": "boolean", + "description": "Whether this file is hidden from the user" + }, + "starred": { + "type": "boolean", + "description": "Whether this file is starred by the user." + }, + "trashed": { + "type": "boolean", + "description": "Whether this file has been trashed." + } + } + }, + "lastViewedDate": { + "type": "string", + "description": "Last time this file was viewed by the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this file. This will only be populated on files with content stored in Drive." + }, + "mimeType": { + "type": "string", + "description": "The mimetype of the file" + }, + "modifiedByMeDate": { + "type": "string", + "description": "Last time this file was modified by the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "modifiedDate": { + "type": "string", + "description": "Last time this file was modified by anyone (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "parentsCollection": { + "type": "array", + "description": "Collection of parent folders which contain this file.\nOn insert, setting this field will put the file in all of the provided folders. If no folders are provided, the file will be placed in the default root folder. On update, this field is ignored.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The id of this parent" + }, + "parentLink": { + "type": "string", + "description": "A link to get the metadata for this parent" + } + } + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this file." + }, + "title": { + "type": "string", + "description": "The title of this file." + }, + "userPermission": { + "$ref": "Permission", + "description": "The permissions for the authenticated user on this file." + } + } + }, + "Permission": { + "id": "Permission", + "type": "object", + "description": "A single permission for a file.", + "properties": { + "additionalRoles": { + "type": "array", + "description": "Any additional roles that this permission describes.", + "items": { + "type": "string" + } + }, + "etag": { + "type": "string", + "description": "An etag for this permission." + }, + "kind": { + "type": "string", + "description": "The kind of this permission. This is always drive#permission", + "default": "drive#permission" + }, + "role": { + "type": "string", + "description": "The role that this permission describes. (For example: reader, writer, owner)" + }, + "type": { + "type": "string", + "description": "The type of permission (For example: user, group etc)." + } + } + } + }, + "resources": { + "files": { + "methods": { + "get": { + "id": "drive.files.get", + "path": "files/{id}", + "httpMethod": "GET", + "description": "Gets a file's metadata by id.", + "parameters": { + "id": { + "type": "string", + "description": "The id for the file in question.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully retrieving the file.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive.file" + ] + }, + "insert": { + "id": "drive.files.insert", + "path": "files", + "httpMethod": "POST", + "description": "Inserts a file, and any settable metadata or blob content sent with the request.", + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive.file" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1024GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/drive/v1/files" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/drive/v1/files" + } + } + } + }, + "patch": { + "id": "drive.files.patch", + "path": "files/{id}", + "httpMethod": "PATCH", + "description": "Updates file metadata and/or content. This method supports patch semantics.", + "parameters": { + "id": { + "type": "string", + "description": "The id for the file in question.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + "default": "true", + "location": "query" + }, + "updateModifiedDate": { + "type": "boolean", + "description": "Controls updating the modified date of the file. If true, the modified date will be updated to the current time, regardless of whether other changes are being made. If false, the modified date will only be updated to the current time if other changes are also being made (changing the title, for example).", + "default": "false", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the file.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.files.update", + "path": "files/{id}", + "httpMethod": "PUT", + "description": "Updates file metadata and/or content", + "parameters": { + "id": { + "type": "string", + "description": "The id for the file in question.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + "default": "true", + "location": "query" + }, + "updateModifiedDate": { + "type": "boolean", + "description": "Controls updating the modified date of the file. If true, the modified date will be updated to the current time, regardless of whether other changes are being made. If false, the modified date will only be updated to the current time if other changes are also being made (changing the title, for example).", + "default": "false", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the file.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive.file" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1024GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/drive/v1/files/{id}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/drive/v1/files/{id}" + } + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-gen.go b/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-gen.go new file mode 100644 index 0000000000000..101c8f2e7682f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/drive/v1/drive-gen.go @@ -0,0 +1,675 @@ +// Package drive provides access to the Drive API. +// +// See https://developers.google.com/drive/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/drive/v1" +// ... +// driveService, err := drive.New(oauthHttpClient) +package drive + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "drive:v1" +const apiName = "drive" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/drive/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage Google Drive files that you have opened or created + // with this app + DriveFileScope = "https://www.googleapis.com/auth/drive.file" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Files = NewFilesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Files *FilesService +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +type File struct { + // CreatedDate: Create time for this file (formatted ISO8601 timestamp). + CreatedDate string `json:"createdDate,omitempty"` + + // Description: A short description of the file + Description string `json:"description,omitempty"` + + // DownloadUrl: Short term download URL for the file. This will only be + // populated on files with content stored in Drive. + DownloadUrl string `json:"downloadUrl,omitempty"` + + // Etag: ETag of the file. + Etag string `json:"etag,omitempty"` + + // FileExtension: The file extension used when downloading this file. + // This field is read only. To set the extension, include it on title + // when creating the file. This will only be populated on files with + // content stored in Drive. + FileExtension string `json:"fileExtension,omitempty"` + + // FileSize: The size of the file in bytes. This will only be populated + // on files with content stored in Drive. + FileSize int64 `json:"fileSize,omitempty,string"` + + // Id: The id of the file. + Id string `json:"id,omitempty"` + + // IndexableText: Indexable text attributes for the file (can only be + // written) + IndexableText *FileIndexableText `json:"indexableText,omitempty"` + + // Kind: The type of file. This is always drive#file + Kind string `json:"kind,omitempty"` + + // Labels: Labels for the file. + Labels *FileLabels `json:"labels,omitempty"` + + // LastViewedDate: Last time this file was viewed by the user (formatted + // RFC 3339 timestamp). + LastViewedDate string `json:"lastViewedDate,omitempty"` + + // Md5Checksum: An MD5 checksum for the content of this file. This will + // only be populated on files with content stored in Drive. + Md5Checksum string `json:"md5Checksum,omitempty"` + + // MimeType: The mimetype of the file + MimeType string `json:"mimeType,omitempty"` + + // ModifiedByMeDate: Last time this file was modified by the user + // (formatted RFC 3339 timestamp). + ModifiedByMeDate string `json:"modifiedByMeDate,omitempty"` + + // ModifiedDate: Last time this file was modified by anyone (formatted + // RFC 3339 timestamp). + ModifiedDate string `json:"modifiedDate,omitempty"` + + // ParentsCollection: Collection of parent folders which contain this + // file. + // On insert, setting this field will put the file in all of the + // provided folders. If no folders are provided, the file will be placed + // in the default root folder. On update, this field is ignored. + ParentsCollection []*FileParentsCollection `json:"parentsCollection,omitempty"` + + // SelfLink: A link back to this file. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this file. + Title string `json:"title,omitempty"` + + // UserPermission: The permissions for the authenticated user on this + // file. + UserPermission *Permission `json:"userPermission,omitempty"` +} + +type FileIndexableText struct { + // Text: The text to be indexed for this file + Text string `json:"text,omitempty"` +} + +type FileLabels struct { + // Hidden: Whether this file is hidden from the user + Hidden bool `json:"hidden,omitempty"` + + // Starred: Whether this file is starred by the user. + Starred bool `json:"starred,omitempty"` + + // Trashed: Whether this file has been trashed. + Trashed bool `json:"trashed,omitempty"` +} + +type FileParentsCollection struct { + // Id: The id of this parent + Id string `json:"id,omitempty"` + + // ParentLink: A link to get the metadata for this parent + ParentLink string `json:"parentLink,omitempty"` +} + +type Permission struct { + // AdditionalRoles: Any additional roles that this permission describes. + AdditionalRoles []string `json:"additionalRoles,omitempty"` + + // Etag: An etag for this permission. + Etag string `json:"etag,omitempty"` + + // Kind: The kind of this permission. This is always drive#permission + Kind string `json:"kind,omitempty"` + + // Role: The role that this permission describes. (For example: reader, + // writer, owner) + Role string `json:"role,omitempty"` + + // Type: The type of permission (For example: user, group etc). + Type string `json:"type,omitempty"` +} + +// method id "drive.files.get": + +type FilesGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Gets a file's metadata by id. +func (r *FilesService) Get(id string) *FilesGetCall { + c := &FilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Projection sets the optional parameter "projection": This parameter +// is deprecated and has no function. +func (c *FilesGetCall) Projection(projection string) *FilesGetCall { + c.opt_["projection"] = projection + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully retrieving the +// file. +func (c *FilesGetCall) UpdateViewedDate(updateViewedDate bool) *FilesGetCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +func (c *FilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a file's metadata by id.", + // "httpMethod": "GET", + // "id": "drive.files.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id for the file in question.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "This parameter is deprecated and has no function.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Deprecated", + // "Deprecated" + // ], + // "location": "query", + // "type": "string" + // }, + // "updateViewedDate": { + // "default": "true", + // "description": "Whether to update the view date after successfully retrieving the file.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{id}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.insert": + +type FilesInsertCall struct { + s *Service + file *File + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Inserts a file, and any settable metadata or blob content +// sent with the request. +func (r *FilesService) Insert(file *File) *FilesInsertCall { + c := &FilesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.file = file + return c +} +func (c *FilesInsertCall) Media(r io.Reader) *FilesInsertCall { + c.media_ = r + return c +} + +func (c *FilesInsertCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a file, and any settable metadata or blob content sent with the request.", + // "httpMethod": "POST", + // "id": "drive.files.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1024GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/drive/v1/files" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/drive/v1/files" + // } + // } + // }, + // "path": "files", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive.file" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "drive.files.patch": + +type FilesPatchCall struct { + s *Service + id string + file *File + opt_ map[string]interface{} +} + +// Patch: Updates file metadata and/or content. This method supports +// patch semantics. +func (r *FilesService) Patch(id string, file *File) *FilesPatchCall { + c := &FilesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.file = file + return c +} + +// NewRevision sets the optional parameter "newRevision": Whether a blob +// upload should create a new revision. If false, the blob data in the +// current head revision is replaced. If not set or true, a new blob is +// created as head revision, and previous revisions are preserved +// (causing increased use of the user's data storage quota). +func (c *FilesPatchCall) NewRevision(newRevision bool) *FilesPatchCall { + c.opt_["newRevision"] = newRevision + return c +} + +// UpdateModifiedDate sets the optional parameter "updateModifiedDate": +// Controls updating the modified date of the file. If true, the +// modified date will be updated to the current time, regardless of +// whether other changes are being made. If false, the modified date +// will only be updated to the current time if other changes are also +// being made (changing the title, for example). +func (c *FilesPatchCall) UpdateModifiedDate(updateModifiedDate bool) *FilesPatchCall { + c.opt_["updateModifiedDate"] = updateModifiedDate + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully updating the file. +func (c *FilesPatchCall) UpdateViewedDate(updateViewedDate bool) *FilesPatchCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +func (c *FilesPatchCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["newRevision"]; ok { + params.Set("newRevision", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateModifiedDate"]; ok { + params.Set("updateModifiedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates file metadata and/or content. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.files.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id for the file in question.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "newRevision": { + // "default": "true", + // "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + // "location": "query", + // "type": "boolean" + // }, + // "updateModifiedDate": { + // "default": "false", + // "description": "Controls updating the modified date of the file. If true, the modified date will be updated to the current time, regardless of whether other changes are being made. If false, the modified date will only be updated to the current time if other changes are also being made (changing the title, for example).", + // "location": "query", + // "type": "boolean" + // }, + // "updateViewedDate": { + // "default": "true", + // "description": "Whether to update the view date after successfully updating the file.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{id}", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.update": + +type FilesUpdateCall struct { + s *Service + id string + file *File + opt_ map[string]interface{} + media_ io.Reader +} + +// Update: Updates file metadata and/or content +func (r *FilesService) Update(id string, file *File) *FilesUpdateCall { + c := &FilesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.file = file + return c +} + +// NewRevision sets the optional parameter "newRevision": Whether a blob +// upload should create a new revision. If false, the blob data in the +// current head revision is replaced. If not set or true, a new blob is +// created as head revision, and previous revisions are preserved +// (causing increased use of the user's data storage quota). +func (c *FilesUpdateCall) NewRevision(newRevision bool) *FilesUpdateCall { + c.opt_["newRevision"] = newRevision + return c +} + +// UpdateModifiedDate sets the optional parameter "updateModifiedDate": +// Controls updating the modified date of the file. If true, the +// modified date will be updated to the current time, regardless of +// whether other changes are being made. If false, the modified date +// will only be updated to the current time if other changes are also +// being made (changing the title, for example). +func (c *FilesUpdateCall) UpdateModifiedDate(updateModifiedDate bool) *FilesUpdateCall { + c.opt_["updateModifiedDate"] = updateModifiedDate + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully updating the file. +func (c *FilesUpdateCall) UpdateViewedDate(updateViewedDate bool) *FilesUpdateCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} +func (c *FilesUpdateCall) Media(r io.Reader) *FilesUpdateCall { + c.media_ = r + return c +} + +func (c *FilesUpdateCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["newRevision"]; ok { + params.Set("newRevision", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateModifiedDate"]; ok { + params.Set("updateModifiedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{id}") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates file metadata and/or content", + // "httpMethod": "PUT", + // "id": "drive.files.update", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1024GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/drive/v1/files/{id}" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/drive/v1/files/{id}" + // } + // } + // }, + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id for the file in question.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "newRevision": { + // "default": "true", + // "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + // "location": "query", + // "type": "boolean" + // }, + // "updateModifiedDate": { + // "default": "false", + // "description": "Controls updating the modified date of the file. If true, the modified date will be updated to the current time, regardless of whether other changes are being made. If false, the modified date will only be updated to the current time if other changes are also being made (changing the title, for example).", + // "location": "query", + // "type": "boolean" + // }, + // "updateViewedDate": { + // "default": "true", + // "description": "Whether to update the view date after successfully updating the file.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{id}", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive.file" + // ], + // "supportsMediaUpload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-api.json b/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-api.json new file mode 100644 index 0000000000000..4d9aa78383119 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-api.json @@ -0,0 +1,3890 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/kuOAnH89ODs6iXVpq8K9hCO3DK0\"", + "discoveryVersion": "v1", + "id": "drive:v2", + "name": "drive", + "version": "v2", + "title": "Drive API", + "description": "The API to interact with Drive.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_16.png", + "x32": "https://ssl.gstatic.com/docs/doclist/images/drive_icon_32.png" + }, + "documentationLink": "https://developers.google.com/drive/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/drive/v2/", + "basePath": "/drive/v2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "drive/v2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/drive": { + "description": "View and manage the files and documents in your Google Drive" + }, + "https://www.googleapis.com/auth/drive.appdata": { + "description": "View and manage its own configuration data in your Google Drive" + }, + "https://www.googleapis.com/auth/drive.apps.readonly": { + "description": "View your Google Drive apps" + }, + "https://www.googleapis.com/auth/drive.file": { + "description": "View and manage Google Drive files that you have opened or created with this app" + }, + "https://www.googleapis.com/auth/drive.metadata.readonly": { + "description": "View metadata for files and documents in your Google Drive" + }, + "https://www.googleapis.com/auth/drive.readonly": { + "description": "View the files and documents in your Google Drive" + }, + "https://www.googleapis.com/auth/drive.scripts": { + "description": "Modify your Google Apps Script scripts' behavior" + } + } + } + }, + "schemas": { + "About": { + "id": "About", + "type": "object", + "description": "An item with user information and settings.", + "properties": { + "additionalRoleInfo": { + "type": "array", + "description": "Information about supported additional roles per file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "roleSets": { + "type": "array", + "description": "The supported additional roles per primary role.", + "items": { + "type": "object", + "properties": { + "additionalRoles": { + "type": "array", + "description": "The supported additional roles with the primary role.", + "items": { + "type": "string" + } + }, + "primaryRole": { + "type": "string", + "description": "A primary permission role." + } + } + } + }, + "type": { + "type": "string", + "description": "The content type that this additional role info applies to." + } + } + } + }, + "domainSharingPolicy": { + "type": "string", + "description": "The domain sharing policy for the current user." + }, + "etag": { + "type": "string", + "description": "The ETag of the item." + }, + "exportFormats": { + "type": "array", + "description": "The allowable export formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "features": { + "type": "array", + "description": "List of additional features enabled on this account.", + "items": { + "type": "object", + "properties": { + "featureName": { + "type": "string", + "description": "The name of the feature." + }, + "featureRate": { + "type": "number", + "description": "The request limit rate for this feature, in queries per second.", + "format": "double" + } + } + } + }, + "importFormats": { + "type": "array", + "description": "The allowable import formats.", + "items": { + "type": "object", + "properties": { + "source": { + "type": "string", + "description": "The imported file's content type to convert from." + }, + "targets": { + "type": "array", + "description": "The possible content types to convert to.", + "items": { + "type": "string" + } + } + } + } + }, + "isCurrentAppInstalled": { + "type": "boolean", + "description": "A boolean indicating whether the authenticated app is installed by the authenticated user." + }, + "kind": { + "type": "string", + "description": "This is always drive#about.", + "default": "drive#about" + }, + "largestChangeId": { + "type": "string", + "description": "The largest change id.", + "format": "int64" + }, + "maxUploadSizes": { + "type": "array", + "description": "List of max upload sizes for each file type. The most specific type takes precedence.", + "items": { + "type": "object", + "properties": { + "size": { + "type": "string", + "description": "The max upload size for this type.", + "format": "int64" + }, + "type": { + "type": "string", + "description": "The file type." + } + } + } + }, + "name": { + "type": "string", + "description": "The name of the current user." + }, + "permissionId": { + "type": "string", + "description": "The current user's ID as visible in the permissions collection." + }, + "quotaBytesTotal": { + "type": "string", + "description": "The total number of quota bytes.", + "format": "int64" + }, + "quotaBytesUsed": { + "type": "string", + "description": "The number of quota bytes used by Google Drive.", + "format": "int64" + }, + "quotaBytesUsedAggregate": { + "type": "string", + "description": "The number of quota bytes used by all Google apps (Drive, Picasa, etc.).", + "format": "int64" + }, + "quotaBytesUsedInTrash": { + "type": "string", + "description": "The number of quota bytes used by trashed items.", + "format": "int64" + }, + "remainingChangeIds": { + "type": "string", + "description": "The number of remaining change ids.", + "format": "int64" + }, + "rootFolderId": { + "type": "string", + "description": "The id of the root folder." + }, + "selfLink": { + "type": "string", + "description": "A link back to this item." + }, + "user": { + "$ref": "User", + "description": "The authenticated user." + } + } + }, + "App": { + "id": "App", + "type": "object", + "description": "The apps resource provides a list of the apps that a user has installed, with information about each app's supported MIME types, file extensions, and other details.", + "properties": { + "authorized": { + "type": "boolean", + "description": "Whether the app is authorized to access data on the user's Drive." + }, + "createInFolderTemplate": { + "type": "string", + "description": "The template url to create a new file with this app in a given folder. The template will contain {folderId} to be replaced by the folder to create the new file in." + }, + "createUrl": { + "type": "string", + "description": "The url to create a new file with this app." + }, + "icons": { + "type": "array", + "description": "The various icons for the app.", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "Category of the icon. Allowed values are: \n- application - icon for the application \n- document - icon for a file associated with the app \n- documentShared - icon for a shared file associated with the app" + }, + "iconUrl": { + "type": "string", + "description": "URL for the icon." + }, + "size": { + "type": "integer", + "description": "Size of the icon. Represented as the maximum of the width and height.", + "format": "int32" + } + } + } + }, + "id": { + "type": "string", + "description": "The ID of the app." + }, + "installed": { + "type": "boolean", + "description": "Whether the app is installed." + }, + "kind": { + "type": "string", + "description": "This is always drive#app.", + "default": "drive#app" + }, + "longDescription": { + "type": "string", + "description": "A long description of the app." + }, + "name": { + "type": "string", + "description": "The name of the app." + }, + "objectType": { + "type": "string", + "description": "The type of object this app creates (e.g. Chart). If empty, the app name should be used instead." + }, + "openUrlTemplate": { + "type": "string", + "description": "The template url for opening files with this app. The template will contain {ids} and/or {exportIds} to be replaced by the actual file ids." + }, + "primaryFileExtensions": { + "type": "array", + "description": "The list of primary file extensions.", + "items": { + "type": "string" + } + }, + "primaryMimeTypes": { + "type": "array", + "description": "The list of primary mime types.", + "items": { + "type": "string" + } + }, + "productId": { + "type": "string", + "description": "The ID of the product listing for this app." + }, + "productUrl": { + "type": "string", + "description": "A link to the product listing for this app." + }, + "secondaryFileExtensions": { + "type": "array", + "description": "The list of secondary file extensions.", + "items": { + "type": "string" + } + }, + "secondaryMimeTypes": { + "type": "array", + "description": "The list of secondary mime types.", + "items": { + "type": "string" + } + }, + "shortDescription": { + "type": "string", + "description": "A short description of the app." + }, + "supportsCreate": { + "type": "boolean", + "description": "Whether this app supports creating new objects." + }, + "supportsImport": { + "type": "boolean", + "description": "Whether this app supports importing Google Docs." + }, + "supportsMultiOpen": { + "type": "boolean", + "description": "Whether this app supports opening more than one file." + }, + "useByDefault": { + "type": "boolean", + "description": "Whether the app is selected as the default handler for the types it supports." + } + } + }, + "AppList": { + "id": "AppList", + "type": "object", + "description": "A list of third-party applications which the user has installed or given access to Google Drive.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of apps.", + "items": { + "$ref": "App" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#appList.", + "default": "drive#appList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Change": { + "id": "Change", + "type": "object", + "description": "Representation of a change to a file.", + "properties": { + "deleted": { + "type": "boolean", + "description": "Whether the file has been deleted." + }, + "file": { + "$ref": "File", + "description": "The updated state of the file. Present if the file has not been deleted." + }, + "fileId": { + "type": "string", + "description": "The ID of the file associated with this change." + }, + "id": { + "type": "string", + "description": "The ID of the change.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always drive#change.", + "default": "drive#change" + }, + "modificationDate": { + "type": "string", + "description": "The time of this modification.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "A link back to this change." + } + } + }, + "ChangeList": { + "id": "ChangeList", + "type": "object", + "description": "A list of changes for a user.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of changes.", + "items": { + "$ref": "Change" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#changeList.", + "default": "drive#changeList" + }, + "largestChangeId": { + "type": "string", + "description": "The current largest change ID.", + "format": "int64" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of changes." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of changes." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "An notification channel used to watch for resource changes.", + "properties": { + "address": { + "type": "string", + "description": "The address where notifications are delivered for this channel." + }, + "expiration": { + "type": "string", + "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "A UUID or similar unique string that identifies this channel." + }, + "kind": { + "type": "string", + "description": "Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed string \"api#channel\".", + "default": "api#channel" + }, + "params": { + "type": "object", + "description": "Additional parameters controlling delivery channel behavior. Optional.", + "additionalProperties": { + "type": "string", + "description": "Declares a new parameter by name." + } + }, + "payload": { + "type": "boolean", + "description": "A Boolean value to indicate whether payload is wanted. Optional." + }, + "resourceId": { + "type": "string", + "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions." + }, + "resourceUri": { + "type": "string", + "description": "A version-specific identifier for the watched resource." + }, + "token": { + "type": "string", + "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional." + }, + "type": { + "type": "string", + "description": "The type of delivery mechanism used for this channel." + } + } + }, + "ChildList": { + "id": "ChildList", + "type": "object", + "description": "A list of children of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of children.", + "items": { + "$ref": "ChildReference" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#childList.", + "default": "drive#childList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of children." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of children." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ChildReference": { + "id": "ChildReference", + "type": "object", + "description": "A reference to a folder's child.", + "properties": { + "childLink": { + "type": "string", + "description": "A link to the child." + }, + "id": { + "type": "string", + "description": "The ID of the child.", + "annotations": { + "required": [ + "drive.children.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "This is always drive#childReference.", + "default": "drive#childReference" + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "description": "A JSON representation of a comment on a file in Google Drive.", + "properties": { + "anchor": { + "type": "string", + "description": "A region of the document represented as a JSON string. See anchor documentation for details on how to define and interpret anchor properties." + }, + "author": { + "$ref": "User", + "description": "The user who wrote this comment." + }, + "commentId": { + "type": "string", + "description": "The ID of the comment." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this comment. This is not HTML safe and should only be used as a starting point to make edits to a comment's content.", + "annotations": { + "required": [ + "drive.comments.insert", + "drive.comments.update" + ] + } + }, + "context": { + "type": "object", + "description": "The context of the file which is being commented on.", + "properties": { + "type": { + "type": "string", + "description": "The MIME type of the context snippet." + }, + "value": { + "type": "string", + "description": "Data representation of the segment of the file being commented on. In the case of a text file for example, this would be the actual text that the comment is about." + } + } + }, + "createdDate": { + "type": "string", + "description": "The date when this comment was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this comment has been deleted. If a comment has been deleted the content will be cleared and this will only represent a comment that once existed." + }, + "fileId": { + "type": "string", + "description": "The file which this comment is addressing." + }, + "fileTitle": { + "type": "string", + "description": "The title of the file which this comment is addressing." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this comment." + }, + "kind": { + "type": "string", + "description": "This is always drive#comment.", + "default": "drive#comment" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this comment or any of its replies were last modified.", + "format": "date-time" + }, + "replies": { + "type": "array", + "description": "Replies to this post.", + "items": { + "$ref": "CommentReply" + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this comment." + }, + "status": { + "type": "string", + "description": "The status of this comment. Status can be changed by posting a reply to a comment with the desired status. \n- \"open\" - The comment is still open. \n- \"resolved\" - The comment has been resolved by one of its replies." + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "description": "A JSON representation of a list of comments on a file in Google Drive.", + "properties": { + "items": { + "type": "array", + "description": "List of comments.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#commentList.", + "default": "drive#commentList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of comments." + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "CommentReply": { + "id": "CommentReply", + "type": "object", + "description": "A JSON representation of a reply to a comment on a file in Google Drive.", + "properties": { + "author": { + "$ref": "User", + "description": "The user who wrote this reply." + }, + "content": { + "type": "string", + "description": "The plain text content used to create this reply. This is not HTML safe and should only be used as a starting point to make edits to a reply's content. This field is required on inserts if no verb is specified (resolve/reopen).", + "annotations": { + "required": [ + "drive.replies.update" + ] + } + }, + "createdDate": { + "type": "string", + "description": "The date when this reply was first created.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Whether this reply has been deleted. If a reply has been deleted the content will be cleared and this will only represent a reply that once existed." + }, + "htmlContent": { + "type": "string", + "description": "HTML formatted content for this reply." + }, + "kind": { + "type": "string", + "description": "This is always drive#commentReply.", + "default": "drive#commentReply" + }, + "modifiedDate": { + "type": "string", + "description": "The date when this reply was last modified.", + "format": "date-time" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply." + }, + "verb": { + "type": "string", + "description": "The action this reply performed to the parent comment. When creating a new reply this is the action to be perform to the parent comment. Possible values are: \n- \"resolve\" - To resolve a comment. \n- \"reopen\" - To reopen (un-resolve) a comment." + } + } + }, + "CommentReplyList": { + "id": "CommentReplyList", + "type": "object", + "description": "A JSON representation of a list of replies to a comment on a file in Google Drive.", + "properties": { + "items": { + "type": "array", + "description": "List of reply.", + "items": { + "$ref": "CommentReply" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#commentReplyList.", + "default": "drive#commentReplyList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of replies." + }, + "nextPageToken": { + "type": "string", + "description": "The token to use to request the next page of results." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "The metadata for a file.", + "properties": { + "alternateLink": { + "type": "string", + "description": "A link for opening the file in using a relevant Google editor or viewer." + }, + "appDataContents": { + "type": "boolean", + "description": "Whether this file is in the appdata folder." + }, + "copyable": { + "type": "boolean", + "description": "Whether the file can be copied by the current user." + }, + "createdDate": { + "type": "string", + "description": "Create time for this file (formatted ISO8601 timestamp).", + "format": "date-time" + }, + "defaultOpenWithLink": { + "type": "string", + "description": "A link to open this file with the user's default app for this file. Only populated when the drive.apps.readonly scope is used." + }, + "description": { + "type": "string", + "description": "A short description of the file." + }, + "downloadUrl": { + "type": "string", + "description": "Short lived download URL for the file. This is only populated for files with content stored in Drive." + }, + "editable": { + "type": "boolean", + "description": "Whether the file can be edited by the current user." + }, + "embedLink": { + "type": "string", + "description": "A link for embedding the file." + }, + "etag": { + "type": "string", + "description": "ETag of the file." + }, + "explicitlyTrashed": { + "type": "boolean", + "description": "Whether this file has been explicitly trashed, as opposed to recursively trashed. This will only be populated if the file is trashed." + }, + "exportLinks": { + "type": "object", + "description": "Links for exporting Google Docs to specific formats.", + "additionalProperties": { + "type": "string", + "description": "A mapping from export format to URL" + } + }, + "fileExtension": { + "type": "string", + "description": "The file extension used when downloading this file. This field is read only. To set the extension, include it in the title when creating the file. This is only populated for files with content stored in Drive." + }, + "fileSize": { + "type": "string", + "description": "The size of the file in bytes. This is only populated for files with content stored in Drive.", + "format": "int64" + }, + "headRevisionId": { + "type": "string", + "description": "The ID of the file's head revision. This will only be populated for files with content stored in Drive." + }, + "iconLink": { + "type": "string", + "description": "A link to the file's icon." + }, + "id": { + "type": "string", + "description": "The ID of the file." + }, + "imageMediaMetadata": { + "type": "object", + "description": "Metadata about image media. This will only be present for image types, and its contents will depend on what can be parsed from the image content.", + "properties": { + "aperture": { + "type": "number", + "description": "The aperture used to create the photo (f-number).", + "format": "float" + }, + "cameraMake": { + "type": "string", + "description": "The make of the camera used to create the photo." + }, + "cameraModel": { + "type": "string", + "description": "The model of the camera used to create the photo." + }, + "colorSpace": { + "type": "string", + "description": "The color space of the photo." + }, + "date": { + "type": "string", + "description": "The date and time the photo was taken (EXIF format timestamp)." + }, + "exposureBias": { + "type": "number", + "description": "The exposure bias of the photo (APEX value).", + "format": "float" + }, + "exposureMode": { + "type": "string", + "description": "The exposure mode used to create the photo." + }, + "exposureTime": { + "type": "number", + "description": "The length of the exposure, in seconds.", + "format": "float" + }, + "flashUsed": { + "type": "boolean", + "description": "Whether a flash was used to create the photo." + }, + "focalLength": { + "type": "number", + "description": "The focal length used to create the photo, in millimeters.", + "format": "float" + }, + "height": { + "type": "integer", + "description": "The height of the image in pixels.", + "format": "int32" + }, + "isoSpeed": { + "type": "integer", + "description": "The ISO speed used to create the photo.", + "format": "int32" + }, + "lens": { + "type": "string", + "description": "The lens used to create the photo." + }, + "location": { + "type": "object", + "description": "Geographic location information stored in the image.", + "properties": { + "altitude": { + "type": "number", + "description": "The altitude stored in the image.", + "format": "double" + }, + "latitude": { + "type": "number", + "description": "The latitude stored in the image.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude stored in the image.", + "format": "double" + } + } + }, + "maxApertureValue": { + "type": "number", + "description": "The smallest f-number of the lens at the focal length used to create the photo (APEX value).", + "format": "float" + }, + "meteringMode": { + "type": "string", + "description": "The metering mode used to create the photo." + }, + "rotation": { + "type": "integer", + "description": "The rotation in clockwise degrees from the image's original orientation.", + "format": "int32" + }, + "sensor": { + "type": "string", + "description": "The type of sensor used to create the photo." + }, + "subjectDistance": { + "type": "integer", + "description": "The distance to the subject of the photo, in meters.", + "format": "int32" + }, + "whiteBalance": { + "type": "string", + "description": "The white balance mode used to create the photo." + }, + "width": { + "type": "integer", + "description": "The width of the image in pixels.", + "format": "int32" + } + } + }, + "indexableText": { + "type": "object", + "description": "Indexable text attributes for the file (can only be written)", + "properties": { + "text": { + "type": "string", + "description": "The text to be indexed for this file." + } + } + }, + "kind": { + "type": "string", + "description": "The type of file. This is always drive#file.", + "default": "drive#file" + }, + "labels": { + "type": "object", + "description": "A group of labels for the file.", + "properties": { + "hidden": { + "type": "boolean", + "description": "Deprecated." + }, + "restricted": { + "type": "boolean", + "description": "Whether viewers are prevented from downloading this file." + }, + "starred": { + "type": "boolean", + "description": "Whether this file is starred by the user." + }, + "trashed": { + "type": "boolean", + "description": "Whether this file has been trashed." + }, + "viewed": { + "type": "boolean", + "description": "Whether this file has been viewed by this user." + } + } + }, + "lastModifyingUser": { + "$ref": "User", + "description": "The last user to modify this file." + }, + "lastModifyingUserName": { + "type": "string", + "description": "Name of the last user to modify this file." + }, + "lastViewedByMeDate": { + "type": "string", + "description": "Last time this file was viewed by the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this file. This is populated only for files with content stored in Drive." + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the file. This is only mutable on update when uploading new content. This field can be left blank, and the mimetype will be determined from the uploaded content's MIME type." + }, + "modifiedByMeDate": { + "type": "string", + "description": "Last time this file was modified by the user (formatted RFC 3339 timestamp). Note that setting modifiedDate will also update the modifiedByMe date for the user which set the date.", + "format": "date-time" + }, + "modifiedDate": { + "type": "string", + "description": "Last time this file was modified by anyone (formatted RFC 3339 timestamp). This is only mutable on update when the setModifiedDate parameter is set.", + "format": "date-time" + }, + "openWithLinks": { + "type": "object", + "description": "A map of the id of each of the user's apps to a link to open this file with that app. Only populated when the drive.apps.readonly scope is used.", + "additionalProperties": { + "type": "string" + } + }, + "originalFilename": { + "type": "string", + "description": "The original filename if the file was uploaded manually, or the original title if the file was inserted through the API. Note that renames of the title will not change the original filename. This will only be populated on files with content stored in Drive." + }, + "ownerNames": { + "type": "array", + "description": "Name(s) of the owner(s) of this file.", + "items": { + "type": "string" + } + }, + "owners": { + "type": "array", + "description": "The owner(s) of this file.", + "items": { + "$ref": "User" + } + }, + "parents": { + "type": "array", + "description": "Collection of parent folders which contain this file.\nSetting this field will put the file in all of the provided folders. On insert, if no folders are provided, the file will be placed in the default root folder.", + "items": { + "$ref": "ParentReference" + } + }, + "properties": { + "type": "array", + "description": "The list of properties.", + "items": { + "$ref": "Property" + } + }, + "quotaBytesUsed": { + "type": "string", + "description": "The number of quota bytes used by this file.", + "format": "int64" + }, + "selfLink": { + "type": "string", + "description": "A link back to this file." + }, + "shared": { + "type": "boolean", + "description": "Whether the file has been shared." + }, + "sharedWithMeDate": { + "type": "string", + "description": "Time at which this file was shared with the user (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "thumbnail": { + "type": "object", + "description": "Thumbnail for the file. Only accepted on upload and for files that are not already thumbnailed by Google.", + "properties": { + "image": { + "type": "string", + "description": "The URL-safe Base64 encoded bytes of the thumbnail image.", + "format": "byte" + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the thumbnail." + } + } + }, + "thumbnailLink": { + "type": "string", + "description": "A link to the file's thumbnail." + }, + "title": { + "type": "string", + "description": "The title of this file." + }, + "userPermission": { + "$ref": "Permission", + "description": "The permissions for the authenticated user on this file." + }, + "webContentLink": { + "type": "string", + "description": "A link for downloading the content of the file in a browser using cookie based authentication. In cases where the content is shared publicly, the content can be downloaded without any credentials." + }, + "webViewLink": { + "type": "string", + "description": "A link only available on public folders for viewing their static web assets (HTML, CSS, JS, etc) via Google Drive's Website Hosting." + }, + "writersCanShare": { + "type": "boolean", + "description": "Whether writers can share the document with other users." + } + } + }, + "FileList": { + "id": "FileList", + "type": "object", + "description": "A list of files.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of files.", + "items": { + "$ref": "File" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#fileList.", + "default": "drive#fileList" + }, + "nextLink": { + "type": "string", + "description": "A link to the next page of files." + }, + "nextPageToken": { + "type": "string", + "description": "The page token for the next page of files." + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentList": { + "id": "ParentList", + "type": "object", + "description": "A list of a file's parents.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of parents.", + "items": { + "$ref": "ParentReference" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#parentList.", + "default": "drive#parentList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "ParentReference": { + "id": "ParentReference", + "type": "object", + "description": "A reference to a file's parent.", + "properties": { + "id": { + "type": "string", + "description": "The ID of the parent.", + "annotations": { + "required": [ + "drive.parents.insert" + ] + } + }, + "isRoot": { + "type": "boolean", + "description": "Whether or not the parent is the root folder." + }, + "kind": { + "type": "string", + "description": "This is always drive#parentReference.", + "default": "drive#parentReference" + }, + "parentLink": { + "type": "string", + "description": "A link to the parent." + }, + "selfLink": { + "type": "string", + "description": "A link back to this reference." + } + } + }, + "Permission": { + "id": "Permission", + "type": "object", + "description": "A permission for a file.", + "properties": { + "additionalRoles": { + "type": "array", + "description": "Additional roles for this user. Only commenter is currently allowed.", + "items": { + "type": "string" + } + }, + "authKey": { + "type": "string", + "description": "The authkey parameter required for this permission." + }, + "domain": { + "type": "string", + "description": "The domain name of the entity this permission refers to. This is an output-only field which is populated when the permission type is \"user\", \"group\" or \"domain\"." + }, + "emailAddress": { + "type": "string", + "description": "The email address of the user this permission refers to. This is an output-only field which is populated when the permission type is \"user\" and the given user's Google+ profile privacy settings allow exposing their email address." + }, + "etag": { + "type": "string", + "description": "The ETag of the permission." + }, + "id": { + "type": "string", + "description": "The ID of the user this permission refers to, and identical to the permissionId in the About and Files resources. When making a drive.permissions.insert request, exactly one of 'id' or 'value' fields must be specified." + }, + "kind": { + "type": "string", + "description": "This is always drive#permission.", + "default": "drive#permission" + }, + "name": { + "type": "string", + "description": "The name for this permission." + }, + "photoLink": { + "type": "string", + "description": "A link to the profile photo, if available." + }, + "role": { + "type": "string", + "description": "The primary role for this user. Allowed values are: \n- owner \n- reader \n- writer", + "annotations": { + "required": [ + "drive.permissions.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "A link back to this permission." + }, + "type": { + "type": "string", + "description": "The account type. Allowed values are: \n- user \n- group \n- domain \n- anyone", + "annotations": { + "required": [ + "drive.permissions.insert" + ] + } + }, + "value": { + "type": "string", + "description": "The email address or domain name for the entity. This is used during inserts and is not populated in responses. When making a drive.permissions.insert request, exactly one of 'id' or 'value' fields must be specified." + }, + "withLink": { + "type": "boolean", + "description": "Whether the link is required for this permission." + } + } + }, + "PermissionId": { + "id": "PermissionId", + "type": "object", + "description": "An ID for a user or group as seen in Permission items.", + "properties": { + "id": { + "type": "string", + "description": "The permission ID." + }, + "kind": { + "type": "string", + "description": "This is always drive#permissionId.", + "default": "drive#permissionId" + } + } + }, + "PermissionList": { + "id": "PermissionList", + "type": "object", + "description": "A list of permissions associated with a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of permissions.", + "items": { + "$ref": "Permission" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#permissionList.", + "default": "drive#permissionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "Property": { + "id": "Property", + "type": "object", + "description": "A key-value pair that is either public or private to an application.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the property." + }, + "key": { + "type": "string", + "description": "The key of this property." + }, + "kind": { + "type": "string", + "description": "This is always drive#property.", + "default": "drive#property" + }, + "selfLink": { + "type": "string", + "description": "The link back to this property." + }, + "value": { + "type": "string", + "description": "The value of this property." + }, + "visibility": { + "type": "string", + "description": "The visibility of this property." + } + } + }, + "PropertyList": { + "id": "PropertyList", + "type": "object", + "description": "A collection of properties, key-value pairs that are either public or private to an application.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The list of properties.", + "items": { + "$ref": "Property" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#propertyList.", + "default": "drive#propertyList" + }, + "selfLink": { + "type": "string", + "description": "The link back to this list." + } + } + }, + "Revision": { + "id": "Revision", + "type": "object", + "description": "A revision of a file.", + "properties": { + "downloadUrl": { + "type": "string", + "description": "Short term download URL for the file. This will only be populated on files with content stored in Drive." + }, + "etag": { + "type": "string", + "description": "The ETag of the revision." + }, + "exportLinks": { + "type": "object", + "description": "Links for exporting Google Docs to specific formats.", + "additionalProperties": { + "type": "string", + "description": "A mapping from export format to URL" + } + }, + "fileSize": { + "type": "string", + "description": "The size of the revision in bytes. This will only be populated on files with content stored in Drive.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The ID of the revision." + }, + "kind": { + "type": "string", + "description": "This is always drive#revision.", + "default": "drive#revision" + }, + "lastModifyingUser": { + "$ref": "User", + "description": "The last user to modify this revision." + }, + "lastModifyingUserName": { + "type": "string", + "description": "Name of the last user to modify this revision." + }, + "md5Checksum": { + "type": "string", + "description": "An MD5 checksum for the content of this revision. This will only be populated on files with content stored in Drive." + }, + "mimeType": { + "type": "string", + "description": "The MIME type of the revision." + }, + "modifiedDate": { + "type": "string", + "description": "Last time this revision was modified (formatted RFC 3339 timestamp).", + "format": "date-time" + }, + "originalFilename": { + "type": "string", + "description": "The original filename when this revision was created. This will only be populated on files with content stored in Drive." + }, + "pinned": { + "type": "boolean", + "description": "Whether this revision is pinned to prevent automatic purging. This will only be populated and can only be modified on files with content stored in Drive which are not Google Docs. Revisions can also be pinned when they are created through the drive.files.insert/update/copy by using the pinned query parameter." + }, + "publishAuto": { + "type": "boolean", + "description": "Whether subsequent revisions will be automatically republished. This is only populated and can only be modified for Google Docs." + }, + "published": { + "type": "boolean", + "description": "Whether this revision is published. This is only populated and can only be modified for Google Docs." + }, + "publishedLink": { + "type": "string", + "description": "A link to the published revision." + }, + "publishedOutsideDomain": { + "type": "boolean", + "description": "Whether this revision is published outside the domain. This is only populated and can only be modified for Google Docs." + }, + "selfLink": { + "type": "string", + "description": "A link back to this revision." + } + } + }, + "RevisionList": { + "id": "RevisionList", + "type": "object", + "description": "A list of revisions of a file.", + "properties": { + "etag": { + "type": "string", + "description": "The ETag of the list." + }, + "items": { + "type": "array", + "description": "The actual list of revisions.", + "items": { + "$ref": "Revision" + } + }, + "kind": { + "type": "string", + "description": "This is always drive#revisionList.", + "default": "drive#revisionList" + }, + "selfLink": { + "type": "string", + "description": "A link back to this list." + } + } + }, + "User": { + "id": "User", + "type": "object", + "description": "The JSON template for a user.", + "properties": { + "displayName": { + "type": "string", + "description": "A plain text displayable name for this user." + }, + "isAuthenticatedUser": { + "type": "boolean", + "description": "Whether this user is the same as the authenticated user for whom the request was made." + }, + "kind": { + "type": "string", + "description": "This is always drive#user.", + "default": "drive#user" + }, + "permissionId": { + "type": "string", + "description": "The user's ID as visible in the permissions collection." + }, + "picture": { + "type": "object", + "description": "The user's profile picture.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a profile picture of this user." + } + } + } + } + } + }, + "resources": { + "about": { + "methods": { + "get": { + "id": "drive.about.get", + "path": "about", + "httpMethod": "GET", + "description": "Gets the information about the current user along with Drive API settings", + "parameters": { + "includeSubscribed": { + "type": "boolean", + "description": "When calculating the number of remaining change IDs, whether to include shared files and public files the user has opened. When set to false, this counts only change IDs for owned files and any shared or public files that the user has explictly added to a folder in Drive.", + "default": "true", + "location": "query" + }, + "maxChangeIdCount": { + "type": "string", + "description": "Maximum number of remaining change IDs to count", + "default": "1", + "format": "int64", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start counting from when calculating number of remaining change IDs", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "About" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + } + } + }, + "apps": { + "methods": { + "get": { + "id": "drive.apps.get", + "path": "apps/{appId}", + "httpMethod": "GET", + "description": "Gets a specific app.", + "parameters": { + "appId": { + "type": "string", + "description": "The ID of the app.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "appId" + ], + "response": { + "$ref": "App" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "list": { + "id": "drive.apps.list", + "path": "apps", + "httpMethod": "GET", + "description": "Lists a user's installed apps.", + "response": { + "$ref": "AppList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive.apps.readonly" + ] + } + } + }, + "changes": { + "methods": { + "get": { + "id": "drive.changes.get", + "path": "changes/{changeId}", + "httpMethod": "GET", + "description": "Gets a specific change.", + "parameters": { + "changeId": { + "type": "string", + "description": "The ID of the change.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "changeId" + ], + "response": { + "$ref": "Change" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "list": { + "id": "drive.changes.list", + "path": "changes", + "httpMethod": "GET", + "description": "Lists the changes for a user.", + "parameters": { + "includeDeleted": { + "type": "boolean", + "description": "Whether to include deleted items.", + "default": "true", + "location": "query" + }, + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.", + "default": "true", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of changes to return.", + "default": "100", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for changes.", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start listing changes from.", + "format": "int64", + "location": "query" + } + }, + "response": { + "$ref": "ChangeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ], + "supportsSubscription": true + }, + "watch": { + "id": "drive.changes.watch", + "path": "changes/watch", + "httpMethod": "POST", + "description": "Subscribe to changes for a user.", + "parameters": { + "includeDeleted": { + "type": "boolean", + "description": "Whether to include deleted items.", + "default": "true", + "location": "query" + }, + "includeSubscribed": { + "type": "boolean", + "description": "Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.", + "default": "true", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of changes to return.", + "default": "100", + "format": "int32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for changes.", + "location": "query" + }, + "startChangeId": { + "type": "string", + "description": "Change ID to start listing changes from.", + "format": "int64", + "location": "query" + } + }, + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ], + "supportsSubscription": true + } + } + }, + "channels": { + "methods": { + "stop": { + "id": "drive.channels.stop", + "path": "channels/stop", + "httpMethod": "POST", + "description": "Stop watching resources through this channel", + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + } + } + }, + "children": { + "methods": { + "delete": { + "id": "drive.children.delete", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "DELETE", + "description": "Removes a child from a folder.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.children.get", + "path": "files/{folderId}/children/{childId}", + "httpMethod": "GET", + "description": "Gets a specific child reference.", + "parameters": { + "childId": { + "type": "string", + "description": "The ID of the child.", + "required": true, + "location": "path" + }, + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId", + "childId" + ], + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.children.insert", + "path": "files/{folderId}/children", + "httpMethod": "POST", + "description": "Inserts a file into a folder.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "folderId" + ], + "request": { + "$ref": "ChildReference" + }, + "response": { + "$ref": "ChildReference" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "list": { + "id": "drive.children.list", + "path": "files/{folderId}/children", + "httpMethod": "GET", + "description": "Lists a folder's children.", + "parameters": { + "folderId": { + "type": "string", + "description": "The ID of the folder.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of children to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for children.", + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching children.", + "location": "query" + } + }, + "parameterOrder": [ + "folderId" + ], + "response": { + "$ref": "ChildList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + } + } + }, + "comments": { + "methods": { + "delete": { + "id": "drive.comments.delete", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Deletes a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "get": { + "id": "drive.comments.get", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets a comment by ID.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.comments.insert", + "path": "files/{fileId}/comments", + "httpMethod": "POST", + "description": "Creates a new comment on the given file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "list": { + "id": "drive.comments.list", + "path": "files/{fileId}/comments", + "httpMethod": "GET", + "description": "Lists a file's comments.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.", + "default": "false", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of discussions to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "updatedMin": { + "type": "string", + "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.comments.patch", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PATCH", + "description": "Updates an existing comment. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.comments.update", + "path": "files/{fileId}/comments/{commentId}", + "httpMethod": "PUT", + "description": "Updates an existing comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + } + } + }, + "files": { + "methods": { + "copy": { + "id": "drive.files.copy", + "path": "files/{fileId}/copy", + "httpMethod": "POST", + "description": "Creates a copy of the specified file.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this file to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "fileId": { + "type": "string", + "description": "The ID of the file to copy.", + "required": true, + "location": "path" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the new copy.", + "default": "false", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "visibility": { + "type": "string", + "description": "The visibility of the new file. This parameter is only relevant when the source is not a native Google Doc and convert=false.", + "default": "DEFAULT", + "enum": [ + "DEFAULT", + "PRIVATE" + ], + "enumDescriptions": [ + "The visibility of the new file is determined by the user's default visibility/sharing policies.", + "The new file will be visible to only the owner." + ], + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "delete": { + "id": "drive.files.delete", + "path": "files/{fileId}", + "httpMethod": "DELETE", + "description": "Permanently deletes a file by ID. Skips the trash.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.files.get", + "path": "files/{fileId}", + "httpMethod": "GET", + "description": "Gets a file's metadata by ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file in question.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully retrieving the file.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ], + "supportsSubscription": true + }, + "insert": { + "id": "drive.files.insert", + "path": "files", + "httpMethod": "POST", + "description": "Insert a new file.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this file to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the head revision of the uploaded file.", + "default": "false", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "useContentAsIndexableText": { + "type": "boolean", + "description": "Whether to use the content as indexable text.", + "default": "false", + "location": "query" + }, + "visibility": { + "type": "string", + "description": "The visibility of the new file. This parameter is only relevant when convert=false.", + "default": "DEFAULT", + "enum": [ + "DEFAULT", + "PRIVATE" + ], + "enumDescriptions": [ + "The visibility of the new file is determined by the user's default visibility/sharing policies.", + "The new file will be visible to only the owner." + ], + "location": "query" + } + }, + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1024GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/drive/v2/files" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/drive/v2/files" + } + } + }, + "supportsSubscription": true + }, + "list": { + "id": "drive.files.list", + "path": "files", + "httpMethod": "GET", + "description": "Lists the user's files.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of files to return.", + "default": "100", + "format": "int32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Page token for files.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query string for searching files.", + "location": "query" + } + }, + "response": { + "$ref": "FileList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.files.patch", + "path": "files/{fileId}", + "httpMethod": "PATCH", + "description": "Updates file metadata and/or content. This method supports patch semantics.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this file to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "fileId": { + "type": "string", + "description": "The ID of the file to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the file.", + "default": "true", + "location": "query" + }, + "useContentAsIndexableText": { + "type": "boolean", + "description": "Whether to use the content as indexable text.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.scripts" + ] + }, + "touch": { + "id": "drive.files.touch", + "path": "files/{fileId}/touch", + "httpMethod": "POST", + "description": "Set the file's updated time to the current server time.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "trash": { + "id": "drive.files.trash", + "path": "files/{fileId}/trash", + "httpMethod": "POST", + "description": "Moves a file to the trash.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file to trash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "untrash": { + "id": "drive.files.untrash", + "path": "files/{fileId}/untrash", + "httpMethod": "POST", + "description": "Restores a file from the trash.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file to untrash.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.files.update", + "path": "files/{fileId}", + "httpMethod": "PUT", + "description": "Updates file metadata and/or content.", + "parameters": { + "convert": { + "type": "boolean", + "description": "Whether to convert this file to the corresponding Google Docs format.", + "default": "false", + "location": "query" + }, + "fileId": { + "type": "string", + "description": "The ID of the file to update.", + "required": true, + "location": "path" + }, + "newRevision": { + "type": "boolean", + "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + "default": "true", + "location": "query" + }, + "ocr": { + "type": "boolean", + "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + "default": "false", + "location": "query" + }, + "ocrLanguage": { + "type": "string", + "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + "location": "query" + }, + "pinned": { + "type": "boolean", + "description": "Whether to pin the new revision.", + "default": "false", + "location": "query" + }, + "setModifiedDate": { + "type": "boolean", + "description": "Whether to set the modified date with the supplied modified date.", + "default": "false", + "location": "query" + }, + "timedTextLanguage": { + "type": "string", + "description": "The language of the timed text.", + "location": "query" + }, + "timedTextTrackName": { + "type": "string", + "description": "The timed text track name.", + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully updating the file.", + "default": "true", + "location": "query" + }, + "useContentAsIndexableText": { + "type": "boolean", + "description": "Whether to use the content as indexable text.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "File" + }, + "response": { + "$ref": "File" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.scripts" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1024GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/drive/v2/files/{fileId}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/drive/v2/files/{fileId}" + } + } + } + }, + "watch": { + "id": "drive.files.watch", + "path": "files/{fileId}/watch", + "httpMethod": "POST", + "description": "Subscribe to changes on a file", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file in question.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "This parameter is deprecated and has no function.", + "enum": [ + "BASIC", + "FULL" + ], + "enumDescriptions": [ + "Deprecated", + "Deprecated" + ], + "location": "query" + }, + "updateViewedDate": { + "type": "boolean", + "description": "Whether to update the view date after successfully retrieving the file.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ], + "supportsSubscription": true + } + } + }, + "parents": { + "methods": { + "delete": { + "id": "drive.parents.delete", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "DELETE", + "description": "Removes a parent from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.parents.get", + "path": "files/{fileId}/parents/{parentId}", + "httpMethod": "GET", + "description": "Gets a specific parent reference.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "parentId": { + "type": "string", + "description": "The ID of the parent.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "parentId" + ], + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.parents.insert", + "path": "files/{fileId}/parents", + "httpMethod": "POST", + "description": "Adds a parent folder for a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "ParentReference" + }, + "response": { + "$ref": "ParentReference" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "list": { + "id": "drive.parents.list", + "path": "files/{fileId}/parents", + "httpMethod": "GET", + "description": "Lists a file's parents.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "ParentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + } + } + }, + "permissions": { + "methods": { + "delete": { + "id": "drive.permissions.delete", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "DELETE", + "description": "Deletes a permission from a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.permissions.get", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "GET", + "description": "Gets a permission by ID.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "getIdForEmail": { + "id": "drive.permissions.getIdForEmail", + "path": "permissionIds/{email}", + "httpMethod": "GET", + "description": "Returns the permission ID for an email address.", + "parameters": { + "email": { + "type": "string", + "description": "The email address for which to return a permission ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "email" + ], + "response": { + "$ref": "PermissionId" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.apps.readonly", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.permissions.insert", + "path": "files/{fileId}/permissions", + "httpMethod": "POST", + "description": "Inserts a permission for a file.", + "parameters": { + "emailMessage": { + "type": "string", + "description": "A custom message to include in notification emails.", + "location": "query" + }, + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "sendNotificationEmails": { + "type": "boolean", + "description": "Whether to send notification emails when sharing to users or groups.", + "default": "true", + "location": "query" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "list": { + "id": "drive.permissions.list", + "path": "files/{fileId}/permissions", + "httpMethod": "GET", + "description": "Lists a file's permissions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "PermissionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.permissions.patch", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PATCH", + "description": "Updates a permission. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + }, + "transferOwnership": { + "type": "boolean", + "description": "Whether changing a role to 'owner' should also downgrade the current owners to writers.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.permissions.update", + "path": "files/{fileId}/permissions/{permissionId}", + "httpMethod": "PUT", + "description": "Updates a permission.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "permissionId": { + "type": "string", + "description": "The ID for the permission.", + "required": true, + "location": "path" + }, + "transferOwnership": { + "type": "boolean", + "description": "Whether changing a role to 'owner' should also downgrade the current owners to writers.", + "default": "false", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "permissionId" + ], + "request": { + "$ref": "Permission" + }, + "response": { + "$ref": "Permission" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + } + } + }, + "properties": { + "methods": { + "delete": { + "id": "drive.properties.delete", + "path": "files/{fileId}/properties/{propertyKey}", + "httpMethod": "DELETE", + "description": "Deletes a property.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "propertyKey": { + "type": "string", + "description": "The key of the property.", + "required": true, + "location": "path" + }, + "visibility": { + "type": "string", + "description": "The visibility of the property.", + "default": "private", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "propertyKey" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.properties.get", + "path": "files/{fileId}/properties/{propertyKey}", + "httpMethod": "GET", + "description": "Gets a property by its key.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "propertyKey": { + "type": "string", + "description": "The key of the property.", + "required": true, + "location": "path" + }, + "visibility": { + "type": "string", + "description": "The visibility of the property.", + "default": "private", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "propertyKey" + ], + "response": { + "$ref": "Property" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.properties.insert", + "path": "files/{fileId}/properties", + "httpMethod": "POST", + "description": "Adds a property to a file.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "request": { + "$ref": "Property" + }, + "response": { + "$ref": "Property" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "list": { + "id": "drive.properties.list", + "path": "files/{fileId}/properties", + "httpMethod": "GET", + "description": "Lists a file's properties.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "PropertyList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.properties.patch", + "path": "files/{fileId}/properties/{propertyKey}", + "httpMethod": "PATCH", + "description": "Updates a property. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "propertyKey": { + "type": "string", + "description": "The key of the property.", + "required": true, + "location": "path" + }, + "visibility": { + "type": "string", + "description": "The visibility of the property.", + "default": "private", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "propertyKey" + ], + "request": { + "$ref": "Property" + }, + "response": { + "$ref": "Property" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.properties.update", + "path": "files/{fileId}/properties/{propertyKey}", + "httpMethod": "PUT", + "description": "Updates a property.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "propertyKey": { + "type": "string", + "description": "The key of the property.", + "required": true, + "location": "path" + }, + "visibility": { + "type": "string", + "description": "The visibility of the property.", + "default": "private", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "propertyKey" + ], + "request": { + "$ref": "Property" + }, + "response": { + "$ref": "Property" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + } + } + }, + "realtime": { + "methods": { + "get": { + "id": "drive.realtime.get", + "path": "files/{fileId}/realtime", + "httpMethod": "GET", + "description": "Exports the contents of the Realtime API data model associated with this file as JSON.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file that the Realtime API data model is associated with.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ], + "supportsMediaDownload": true + }, + "update": { + "id": "drive.realtime.update", + "path": "files/{fileId}/realtime", + "httpMethod": "PUT", + "description": "Overwrites the Realtime API data model associated with this file with the provided JSON data model.", + "parameters": { + "baseRevision": { + "type": "string", + "description": "The revision of the model to diff the uploaded model against. If set, the uploaded model is diffed against the provided revision and those differences are merged with any changes made to the model after the provided revision. If not set, the uploaded model replaces the current model on the server.", + "location": "query" + }, + "fileId": { + "type": "string", + "description": "The ID of the file that the Realtime API data model is associated with.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "10MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/drive/v2/files/{fileId}/realtime" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/drive/v2/files/{fileId}/realtime" + } + } + } + } + } + }, + "replies": { + "methods": { + "delete": { + "id": "drive.replies.delete", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "DELETE", + "description": "Deletes a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.replies.get", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "GET", + "description": "Gets a reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, this will succeed when retrieving a deleted reply.", + "default": "false", + "location": "query" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "insert": { + "id": "drive.replies.insert", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "POST", + "description": "Creates a new reply to the given comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "list": { + "id": "drive.replies.list", + "path": "files/{fileId}/comments/{commentId}/replies", + "httpMethod": "GET", + "description": "Lists all of the replies to a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "includeDeleted": { + "type": "boolean", + "description": "If set, all replies, including deleted replies (with content stripped) will be returned.", + "default": "false", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of replies to include in the response, used for paging.", + "default": "20", + "format": "int32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "fileId", + "commentId" + ], + "response": { + "$ref": "CommentReplyList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.replies.patch", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PATCH", + "description": "Updates an existing reply. This method supports patch semantics.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.replies.update", + "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + "httpMethod": "PUT", + "description": "Updates an existing reply.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment.", + "required": true, + "location": "path" + }, + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "replyId": { + "type": "string", + "description": "The ID of the reply.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "commentId", + "replyId" + ], + "request": { + "$ref": "CommentReply" + }, + "response": { + "$ref": "CommentReply" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.file" + ] + } + } + }, + "revisions": { + "methods": { + "delete": { + "id": "drive.revisions.delete", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "DELETE", + "description": "Removes a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "get": { + "id": "drive.revisions.get", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "GET", + "description": "Gets a specific revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID of the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "list": { + "id": "drive.revisions.list", + "path": "files/{fileId}/revisions", + "httpMethod": "GET", + "description": "Lists a file's revisions.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID of the file.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId" + ], + "response": { + "$ref": "RevisionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file", + "https://www.googleapis.com/auth/drive.metadata.readonly", + "https://www.googleapis.com/auth/drive.readonly" + ] + }, + "patch": { + "id": "drive.revisions.patch", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PATCH", + "description": "Updates a revision. This method supports patch semantics.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + }, + "update": { + "id": "drive.revisions.update", + "path": "files/{fileId}/revisions/{revisionId}", + "httpMethod": "PUT", + "description": "Updates a revision.", + "parameters": { + "fileId": { + "type": "string", + "description": "The ID for the file.", + "required": true, + "location": "path" + }, + "revisionId": { + "type": "string", + "description": "The ID for the revision.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "fileId", + "revisionId" + ], + "request": { + "$ref": "Revision" + }, + "response": { + "$ref": "Revision" + }, + "scopes": [ + "https://www.googleapis.com/auth/drive", + "https://www.googleapis.com/auth/drive.appdata", + "https://www.googleapis.com/auth/drive.file" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-gen.go b/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-gen.go new file mode 100644 index 0000000000000..15aed01191730 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/drive/v2/drive-gen.go @@ -0,0 +1,6948 @@ +// Package drive provides access to the Drive API. +// +// See https://developers.google.com/drive/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/drive/v2" +// ... +// driveService, err := drive.New(oauthHttpClient) +package drive + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "drive:v2" +const apiName = "drive" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/drive/v2/" + +// OAuth2 scopes used by this API. +const ( + // View and manage the files and documents in your Google Drive + DriveScope = "https://www.googleapis.com/auth/drive" + + // View and manage its own configuration data in your Google Drive + DriveAppdataScope = "https://www.googleapis.com/auth/drive.appdata" + + // View your Google Drive apps + DriveAppsReadonlyScope = "https://www.googleapis.com/auth/drive.apps.readonly" + + // View and manage Google Drive files that you have opened or created + // with this app + DriveFileScope = "https://www.googleapis.com/auth/drive.file" + + // View metadata for files and documents in your Google Drive + DriveMetadataReadonlyScope = "https://www.googleapis.com/auth/drive.metadata.readonly" + + // View the files and documents in your Google Drive + DriveReadonlyScope = "https://www.googleapis.com/auth/drive.readonly" + + // Modify your Google Apps Script scripts' behavior + DriveScriptsScope = "https://www.googleapis.com/auth/drive.scripts" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.About = NewAboutService(s) + s.Apps = NewAppsService(s) + s.Changes = NewChangesService(s) + s.Channels = NewChannelsService(s) + s.Children = NewChildrenService(s) + s.Comments = NewCommentsService(s) + s.Files = NewFilesService(s) + s.Parents = NewParentsService(s) + s.Permissions = NewPermissionsService(s) + s.Properties = NewPropertiesService(s) + s.Realtime = NewRealtimeService(s) + s.Replies = NewRepliesService(s) + s.Revisions = NewRevisionsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + About *AboutService + + Apps *AppsService + + Changes *ChangesService + + Channels *ChannelsService + + Children *ChildrenService + + Comments *CommentsService + + Files *FilesService + + Parents *ParentsService + + Permissions *PermissionsService + + Properties *PropertiesService + + Realtime *RealtimeService + + Replies *RepliesService + + Revisions *RevisionsService +} + +func NewAboutService(s *Service) *AboutService { + rs := &AboutService{s: s} + return rs +} + +type AboutService struct { + s *Service +} + +func NewAppsService(s *Service) *AppsService { + rs := &AppsService{s: s} + return rs +} + +type AppsService struct { + s *Service +} + +func NewChangesService(s *Service) *ChangesService { + rs := &ChangesService{s: s} + return rs +} + +type ChangesService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewChildrenService(s *Service) *ChildrenService { + rs := &ChildrenService{s: s} + return rs +} + +type ChildrenService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewFilesService(s *Service) *FilesService { + rs := &FilesService{s: s} + return rs +} + +type FilesService struct { + s *Service +} + +func NewParentsService(s *Service) *ParentsService { + rs := &ParentsService{s: s} + return rs +} + +type ParentsService struct { + s *Service +} + +func NewPermissionsService(s *Service) *PermissionsService { + rs := &PermissionsService{s: s} + return rs +} + +type PermissionsService struct { + s *Service +} + +func NewPropertiesService(s *Service) *PropertiesService { + rs := &PropertiesService{s: s} + return rs +} + +type PropertiesService struct { + s *Service +} + +func NewRealtimeService(s *Service) *RealtimeService { + rs := &RealtimeService{s: s} + return rs +} + +type RealtimeService struct { + s *Service +} + +func NewRepliesService(s *Service) *RepliesService { + rs := &RepliesService{s: s} + return rs +} + +type RepliesService struct { + s *Service +} + +func NewRevisionsService(s *Service) *RevisionsService { + rs := &RevisionsService{s: s} + return rs +} + +type RevisionsService struct { + s *Service +} + +type About struct { + // AdditionalRoleInfo: Information about supported additional roles per + // file type. The most specific type takes precedence. + AdditionalRoleInfo []*AboutAdditionalRoleInfo `json:"additionalRoleInfo,omitempty"` + + // DomainSharingPolicy: The domain sharing policy for the current user. + DomainSharingPolicy string `json:"domainSharingPolicy,omitempty"` + + // Etag: The ETag of the item. + Etag string `json:"etag,omitempty"` + + // ExportFormats: The allowable export formats. + ExportFormats []*AboutExportFormats `json:"exportFormats,omitempty"` + + // Features: List of additional features enabled on this account. + Features []*AboutFeatures `json:"features,omitempty"` + + // ImportFormats: The allowable import formats. + ImportFormats []*AboutImportFormats `json:"importFormats,omitempty"` + + // IsCurrentAppInstalled: A boolean indicating whether the authenticated + // app is installed by the authenticated user. + IsCurrentAppInstalled bool `json:"isCurrentAppInstalled,omitempty"` + + // Kind: This is always drive#about. + Kind string `json:"kind,omitempty"` + + // LargestChangeId: The largest change id. + LargestChangeId int64 `json:"largestChangeId,omitempty,string"` + + // MaxUploadSizes: List of max upload sizes for each file type. The most + // specific type takes precedence. + MaxUploadSizes []*AboutMaxUploadSizes `json:"maxUploadSizes,omitempty"` + + // Name: The name of the current user. + Name string `json:"name,omitempty"` + + // PermissionId: The current user's ID as visible in the permissions + // collection. + PermissionId string `json:"permissionId,omitempty"` + + // QuotaBytesTotal: The total number of quota bytes. + QuotaBytesTotal int64 `json:"quotaBytesTotal,omitempty,string"` + + // QuotaBytesUsed: The number of quota bytes used by Google Drive. + QuotaBytesUsed int64 `json:"quotaBytesUsed,omitempty,string"` + + // QuotaBytesUsedAggregate: The number of quota bytes used by all Google + // apps (Drive, Picasa, etc.). + QuotaBytesUsedAggregate int64 `json:"quotaBytesUsedAggregate,omitempty,string"` + + // QuotaBytesUsedInTrash: The number of quota bytes used by trashed + // items. + QuotaBytesUsedInTrash int64 `json:"quotaBytesUsedInTrash,omitempty,string"` + + // RemainingChangeIds: The number of remaining change ids. + RemainingChangeIds int64 `json:"remainingChangeIds,omitempty,string"` + + // RootFolderId: The id of the root folder. + RootFolderId string `json:"rootFolderId,omitempty"` + + // SelfLink: A link back to this item. + SelfLink string `json:"selfLink,omitempty"` + + // User: The authenticated user. + User *User `json:"user,omitempty"` +} + +type AboutAdditionalRoleInfo struct { + // RoleSets: The supported additional roles per primary role. + RoleSets []*AboutAdditionalRoleInfoRoleSets `json:"roleSets,omitempty"` + + // Type: The content type that this additional role info applies to. + Type string `json:"type,omitempty"` +} + +type AboutAdditionalRoleInfoRoleSets struct { + // AdditionalRoles: The supported additional roles with the primary + // role. + AdditionalRoles []string `json:"additionalRoles,omitempty"` + + // PrimaryRole: A primary permission role. + PrimaryRole string `json:"primaryRole,omitempty"` +} + +type AboutExportFormats struct { + // Source: The content type to convert from. + Source string `json:"source,omitempty"` + + // Targets: The possible content types to convert to. + Targets []string `json:"targets,omitempty"` +} + +type AboutFeatures struct { + // FeatureName: The name of the feature. + FeatureName string `json:"featureName,omitempty"` + + // FeatureRate: The request limit rate for this feature, in queries per + // second. + FeatureRate float64 `json:"featureRate,omitempty"` +} + +type AboutImportFormats struct { + // Source: The imported file's content type to convert from. + Source string `json:"source,omitempty"` + + // Targets: The possible content types to convert to. + Targets []string `json:"targets,omitempty"` +} + +type AboutMaxUploadSizes struct { + // Size: The max upload size for this type. + Size int64 `json:"size,omitempty,string"` + + // Type: The file type. + Type string `json:"type,omitempty"` +} + +type App struct { + // Authorized: Whether the app is authorized to access data on the + // user's Drive. + Authorized bool `json:"authorized,omitempty"` + + // CreateInFolderTemplate: The template url to create a new file with + // this app in a given folder. The template will contain {folderId} to + // be replaced by the folder to create the new file in. + CreateInFolderTemplate string `json:"createInFolderTemplate,omitempty"` + + // CreateUrl: The url to create a new file with this app. + CreateUrl string `json:"createUrl,omitempty"` + + // Icons: The various icons for the app. + Icons []*AppIcons `json:"icons,omitempty"` + + // Id: The ID of the app. + Id string `json:"id,omitempty"` + + // Installed: Whether the app is installed. + Installed bool `json:"installed,omitempty"` + + // Kind: This is always drive#app. + Kind string `json:"kind,omitempty"` + + // LongDescription: A long description of the app. + LongDescription string `json:"longDescription,omitempty"` + + // Name: The name of the app. + Name string `json:"name,omitempty"` + + // ObjectType: The type of object this app creates (e.g. Chart). If + // empty, the app name should be used instead. + ObjectType string `json:"objectType,omitempty"` + + // OpenUrlTemplate: The template url for opening files with this app. + // The template will contain {ids} and/or {exportIds} to be replaced by + // the actual file ids. + OpenUrlTemplate string `json:"openUrlTemplate,omitempty"` + + // PrimaryFileExtensions: The list of primary file extensions. + PrimaryFileExtensions []string `json:"primaryFileExtensions,omitempty"` + + // PrimaryMimeTypes: The list of primary mime types. + PrimaryMimeTypes []string `json:"primaryMimeTypes,omitempty"` + + // ProductId: The ID of the product listing for this app. + ProductId string `json:"productId,omitempty"` + + // ProductUrl: A link to the product listing for this app. + ProductUrl string `json:"productUrl,omitempty"` + + // SecondaryFileExtensions: The list of secondary file extensions. + SecondaryFileExtensions []string `json:"secondaryFileExtensions,omitempty"` + + // SecondaryMimeTypes: The list of secondary mime types. + SecondaryMimeTypes []string `json:"secondaryMimeTypes,omitempty"` + + // ShortDescription: A short description of the app. + ShortDescription string `json:"shortDescription,omitempty"` + + // SupportsCreate: Whether this app supports creating new objects. + SupportsCreate bool `json:"supportsCreate,omitempty"` + + // SupportsImport: Whether this app supports importing Google Docs. + SupportsImport bool `json:"supportsImport,omitempty"` + + // SupportsMultiOpen: Whether this app supports opening more than one + // file. + SupportsMultiOpen bool `json:"supportsMultiOpen,omitempty"` + + // UseByDefault: Whether the app is selected as the default handler for + // the types it supports. + UseByDefault bool `json:"useByDefault,omitempty"` +} + +type AppIcons struct { + // Category: Category of the icon. Allowed values are: + // - application - + // icon for the application + // - document - icon for a file associated + // with the app + // - documentShared - icon for a shared file associated + // with the app + Category string `json:"category,omitempty"` + + // IconUrl: URL for the icon. + IconUrl string `json:"iconUrl,omitempty"` + + // Size: Size of the icon. Represented as the maximum of the width and + // height. + Size int64 `json:"size,omitempty"` +} + +type AppList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of apps. + Items []*App `json:"items,omitempty"` + + // Kind: This is always drive#appList. + Kind string `json:"kind,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type Change struct { + // Deleted: Whether the file has been deleted. + Deleted bool `json:"deleted,omitempty"` + + // File: The updated state of the file. Present if the file has not been + // deleted. + File *File `json:"file,omitempty"` + + // FileId: The ID of the file associated with this change. + FileId string `json:"fileId,omitempty"` + + // Id: The ID of the change. + Id int64 `json:"id,omitempty,string"` + + // Kind: This is always drive#change. + Kind string `json:"kind,omitempty"` + + // ModificationDate: The time of this modification. + ModificationDate string `json:"modificationDate,omitempty"` + + // SelfLink: A link back to this change. + SelfLink string `json:"selfLink,omitempty"` +} + +type ChangeList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of changes. + Items []*Change `json:"items,omitempty"` + + // Kind: This is always drive#changeList. + Kind string `json:"kind,omitempty"` + + // LargestChangeId: The current largest change ID. + LargestChangeId int64 `json:"largestChangeId,omitempty,string"` + + // NextLink: A link to the next page of changes. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The page token for the next page of changes. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type Channel struct { + // Address: The address where notifications are delivered for this + // channel. + Address string `json:"address,omitempty"` + + // Expiration: Date and time of notification channel expiration, + // expressed as a Unix timestamp, in milliseconds. Optional. + Expiration int64 `json:"expiration,omitempty,string"` + + // Id: A UUID or similar unique string that identifies this channel. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a notification channel used to watch for + // changes to a resource. Value: the fixed string "api#channel". + Kind string `json:"kind,omitempty"` + + // Params: Additional parameters controlling delivery channel behavior. + // Optional. + Params map[string]string `json:"params,omitempty"` + + // Payload: A Boolean value to indicate whether payload is wanted. + // Optional. + Payload bool `json:"payload,omitempty"` + + // ResourceId: An opaque ID that identifies the resource being watched + // on this channel. Stable across different API versions. + ResourceId string `json:"resourceId,omitempty"` + + // ResourceUri: A version-specific identifier for the watched resource. + ResourceUri string `json:"resourceUri,omitempty"` + + // Token: An arbitrary string delivered to the target address with each + // notification delivered over this channel. Optional. + Token string `json:"token,omitempty"` + + // Type: The type of delivery mechanism used for this channel. + Type string `json:"type,omitempty"` +} + +type ChildList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of children. + Items []*ChildReference `json:"items,omitempty"` + + // Kind: This is always drive#childList. + Kind string `json:"kind,omitempty"` + + // NextLink: A link to the next page of children. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The page token for the next page of children. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type ChildReference struct { + // ChildLink: A link to the child. + ChildLink string `json:"childLink,omitempty"` + + // Id: The ID of the child. + Id string `json:"id,omitempty"` + + // Kind: This is always drive#childReference. + Kind string `json:"kind,omitempty"` + + // SelfLink: A link back to this reference. + SelfLink string `json:"selfLink,omitempty"` +} + +type Comment struct { + // Anchor: A region of the document represented as a JSON string. See + // anchor documentation for details on how to define and interpret + // anchor properties. + Anchor string `json:"anchor,omitempty"` + + // Author: The user who wrote this comment. + Author *User `json:"author,omitempty"` + + // CommentId: The ID of the comment. + CommentId string `json:"commentId,omitempty"` + + // Content: The plain text content used to create this comment. This is + // not HTML safe and should only be used as a starting point to make + // edits to a comment's content. + Content string `json:"content,omitempty"` + + // Context: The context of the file which is being commented on. + Context *CommentContext `json:"context,omitempty"` + + // CreatedDate: The date when this comment was first created. + CreatedDate string `json:"createdDate,omitempty"` + + // Deleted: Whether this comment has been deleted. If a comment has been + // deleted the content will be cleared and this will only represent a + // comment that once existed. + Deleted bool `json:"deleted,omitempty"` + + // FileId: The file which this comment is addressing. + FileId string `json:"fileId,omitempty"` + + // FileTitle: The title of the file which this comment is addressing. + FileTitle string `json:"fileTitle,omitempty"` + + // HtmlContent: HTML formatted content for this comment. + HtmlContent string `json:"htmlContent,omitempty"` + + // Kind: This is always drive#comment. + Kind string `json:"kind,omitempty"` + + // ModifiedDate: The date when this comment or any of its replies were + // last modified. + ModifiedDate string `json:"modifiedDate,omitempty"` + + // Replies: Replies to this post. + Replies []*CommentReply `json:"replies,omitempty"` + + // SelfLink: A link back to this comment. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of this comment. Status can be changed by posting + // a reply to a comment with the desired status. + // - "open" - The + // comment is still open. + // - "resolved" - The comment has been resolved + // by one of its replies. + Status string `json:"status,omitempty"` +} + +type CommentContext struct { + // Type: The MIME type of the context snippet. + Type string `json:"type,omitempty"` + + // Value: Data representation of the segment of the file being commented + // on. In the case of a text file for example, this would be the actual + // text that the comment is about. + Value string `json:"value,omitempty"` +} + +type CommentList struct { + // Items: List of comments. + Items []*Comment `json:"items,omitempty"` + + // Kind: This is always drive#commentList. + Kind string `json:"kind,omitempty"` + + // NextLink: A link to the next page of comments. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The token to use to request the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type CommentReply struct { + // Author: The user who wrote this reply. + Author *User `json:"author,omitempty"` + + // Content: The plain text content used to create this reply. This is + // not HTML safe and should only be used as a starting point to make + // edits to a reply's content. This field is required on inserts if no + // verb is specified (resolve/reopen). + Content string `json:"content,omitempty"` + + // CreatedDate: The date when this reply was first created. + CreatedDate string `json:"createdDate,omitempty"` + + // Deleted: Whether this reply has been deleted. If a reply has been + // deleted the content will be cleared and this will only represent a + // reply that once existed. + Deleted bool `json:"deleted,omitempty"` + + // HtmlContent: HTML formatted content for this reply. + HtmlContent string `json:"htmlContent,omitempty"` + + // Kind: This is always drive#commentReply. + Kind string `json:"kind,omitempty"` + + // ModifiedDate: The date when this reply was last modified. + ModifiedDate string `json:"modifiedDate,omitempty"` + + // ReplyId: The ID of the reply. + ReplyId string `json:"replyId,omitempty"` + + // Verb: The action this reply performed to the parent comment. When + // creating a new reply this is the action to be perform to the parent + // comment. Possible values are: + // - "resolve" - To resolve a comment. + // + // - "reopen" - To reopen (un-resolve) a comment. + Verb string `json:"verb,omitempty"` +} + +type CommentReplyList struct { + // Items: List of reply. + Items []*CommentReply `json:"items,omitempty"` + + // Kind: This is always drive#commentReplyList. + Kind string `json:"kind,omitempty"` + + // NextLink: A link to the next page of replies. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The token to use to request the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type File struct { + // AlternateLink: A link for opening the file in using a relevant Google + // editor or viewer. + AlternateLink string `json:"alternateLink,omitempty"` + + // AppDataContents: Whether this file is in the appdata folder. + AppDataContents bool `json:"appDataContents,omitempty"` + + // Copyable: Whether the file can be copied by the current user. + Copyable bool `json:"copyable,omitempty"` + + // CreatedDate: Create time for this file (formatted ISO8601 timestamp). + CreatedDate string `json:"createdDate,omitempty"` + + // DefaultOpenWithLink: A link to open this file with the user's default + // app for this file. Only populated when the drive.apps.readonly scope + // is used. + DefaultOpenWithLink string `json:"defaultOpenWithLink,omitempty"` + + // Description: A short description of the file. + Description string `json:"description,omitempty"` + + // DownloadUrl: Short lived download URL for the file. This is only + // populated for files with content stored in Drive. + DownloadUrl string `json:"downloadUrl,omitempty"` + + // Editable: Whether the file can be edited by the current user. + Editable bool `json:"editable,omitempty"` + + // EmbedLink: A link for embedding the file. + EmbedLink string `json:"embedLink,omitempty"` + + // Etag: ETag of the file. + Etag string `json:"etag,omitempty"` + + // ExplicitlyTrashed: Whether this file has been explicitly trashed, as + // opposed to recursively trashed. This will only be populated if the + // file is trashed. + ExplicitlyTrashed bool `json:"explicitlyTrashed,omitempty"` + + // ExportLinks: Links for exporting Google Docs to specific formats. + ExportLinks map[string]string `json:"exportLinks,omitempty"` + + // FileExtension: The file extension used when downloading this file. + // This field is read only. To set the extension, include it in the + // title when creating the file. This is only populated for files with + // content stored in Drive. + FileExtension string `json:"fileExtension,omitempty"` + + // FileSize: The size of the file in bytes. This is only populated for + // files with content stored in Drive. + FileSize int64 `json:"fileSize,omitempty,string"` + + // HeadRevisionId: The ID of the file's head revision. This will only be + // populated for files with content stored in Drive. + HeadRevisionId string `json:"headRevisionId,omitempty"` + + // IconLink: A link to the file's icon. + IconLink string `json:"iconLink,omitempty"` + + // Id: The ID of the file. + Id string `json:"id,omitempty"` + + // ImageMediaMetadata: Metadata about image media. This will only be + // present for image types, and its contents will depend on what can be + // parsed from the image content. + ImageMediaMetadata *FileImageMediaMetadata `json:"imageMediaMetadata,omitempty"` + + // IndexableText: Indexable text attributes for the file (can only be + // written) + IndexableText *FileIndexableText `json:"indexableText,omitempty"` + + // Kind: The type of file. This is always drive#file. + Kind string `json:"kind,omitempty"` + + // Labels: A group of labels for the file. + Labels *FileLabels `json:"labels,omitempty"` + + // LastModifyingUser: The last user to modify this file. + LastModifyingUser *User `json:"lastModifyingUser,omitempty"` + + // LastModifyingUserName: Name of the last user to modify this file. + LastModifyingUserName string `json:"lastModifyingUserName,omitempty"` + + // LastViewedByMeDate: Last time this file was viewed by the user + // (formatted RFC 3339 timestamp). + LastViewedByMeDate string `json:"lastViewedByMeDate,omitempty"` + + // Md5Checksum: An MD5 checksum for the content of this file. This is + // populated only for files with content stored in Drive. + Md5Checksum string `json:"md5Checksum,omitempty"` + + // MimeType: The MIME type of the file. This is only mutable on update + // when uploading new content. This field can be left blank, and the + // mimetype will be determined from the uploaded content's MIME type. + MimeType string `json:"mimeType,omitempty"` + + // ModifiedByMeDate: Last time this file was modified by the user + // (formatted RFC 3339 timestamp). Note that setting modifiedDate will + // also update the modifiedByMe date for the user which set the date. + ModifiedByMeDate string `json:"modifiedByMeDate,omitempty"` + + // ModifiedDate: Last time this file was modified by anyone (formatted + // RFC 3339 timestamp). This is only mutable on update when the + // setModifiedDate parameter is set. + ModifiedDate string `json:"modifiedDate,omitempty"` + + // OpenWithLinks: A map of the id of each of the user's apps to a link + // to open this file with that app. Only populated when the + // drive.apps.readonly scope is used. + OpenWithLinks map[string]string `json:"openWithLinks,omitempty"` + + // OriginalFilename: The original filename if the file was uploaded + // manually, or the original title if the file was inserted through the + // API. Note that renames of the title will not change the original + // filename. This will only be populated on files with content stored in + // Drive. + OriginalFilename string `json:"originalFilename,omitempty"` + + // OwnerNames: Name(s) of the owner(s) of this file. + OwnerNames []string `json:"ownerNames,omitempty"` + + // Owners: The owner(s) of this file. + Owners []*User `json:"owners,omitempty"` + + // Parents: Collection of parent folders which contain this + // file. + // Setting this field will put the file in all of the provided + // folders. On insert, if no folders are provided, the file will be + // placed in the default root folder. + Parents []*ParentReference `json:"parents,omitempty"` + + // Properties: The list of properties. + Properties []*Property `json:"properties,omitempty"` + + // QuotaBytesUsed: The number of quota bytes used by this file. + QuotaBytesUsed int64 `json:"quotaBytesUsed,omitempty,string"` + + // SelfLink: A link back to this file. + SelfLink string `json:"selfLink,omitempty"` + + // Shared: Whether the file has been shared. + Shared bool `json:"shared,omitempty"` + + // SharedWithMeDate: Time at which this file was shared with the user + // (formatted RFC 3339 timestamp). + SharedWithMeDate string `json:"sharedWithMeDate,omitempty"` + + // Thumbnail: Thumbnail for the file. Only accepted on upload and for + // files that are not already thumbnailed by Google. + Thumbnail *FileThumbnail `json:"thumbnail,omitempty"` + + // ThumbnailLink: A link to the file's thumbnail. + ThumbnailLink string `json:"thumbnailLink,omitempty"` + + // Title: The title of this file. + Title string `json:"title,omitempty"` + + // UserPermission: The permissions for the authenticated user on this + // file. + UserPermission *Permission `json:"userPermission,omitempty"` + + // WebContentLink: A link for downloading the content of the file in a + // browser using cookie based authentication. In cases where the content + // is shared publicly, the content can be downloaded without any + // credentials. + WebContentLink string `json:"webContentLink,omitempty"` + + // WebViewLink: A link only available on public folders for viewing + // their static web assets (HTML, CSS, JS, etc) via Google Drive's + // Website Hosting. + WebViewLink string `json:"webViewLink,omitempty"` + + // WritersCanShare: Whether writers can share the document with other + // users. + WritersCanShare bool `json:"writersCanShare,omitempty"` +} + +type FileImageMediaMetadata struct { + // Aperture: The aperture used to create the photo (f-number). + Aperture float64 `json:"aperture,omitempty"` + + // CameraMake: The make of the camera used to create the photo. + CameraMake string `json:"cameraMake,omitempty"` + + // CameraModel: The model of the camera used to create the photo. + CameraModel string `json:"cameraModel,omitempty"` + + // ColorSpace: The color space of the photo. + ColorSpace string `json:"colorSpace,omitempty"` + + // Date: The date and time the photo was taken (EXIF format timestamp). + Date string `json:"date,omitempty"` + + // ExposureBias: The exposure bias of the photo (APEX value). + ExposureBias float64 `json:"exposureBias,omitempty"` + + // ExposureMode: The exposure mode used to create the photo. + ExposureMode string `json:"exposureMode,omitempty"` + + // ExposureTime: The length of the exposure, in seconds. + ExposureTime float64 `json:"exposureTime,omitempty"` + + // FlashUsed: Whether a flash was used to create the photo. + FlashUsed bool `json:"flashUsed,omitempty"` + + // FocalLength: The focal length used to create the photo, in + // millimeters. + FocalLength float64 `json:"focalLength,omitempty"` + + // Height: The height of the image in pixels. + Height int64 `json:"height,omitempty"` + + // IsoSpeed: The ISO speed used to create the photo. + IsoSpeed int64 `json:"isoSpeed,omitempty"` + + // Lens: The lens used to create the photo. + Lens string `json:"lens,omitempty"` + + // Location: Geographic location information stored in the image. + Location *FileImageMediaMetadataLocation `json:"location,omitempty"` + + // MaxApertureValue: The smallest f-number of the lens at the focal + // length used to create the photo (APEX value). + MaxApertureValue float64 `json:"maxApertureValue,omitempty"` + + // MeteringMode: The metering mode used to create the photo. + MeteringMode string `json:"meteringMode,omitempty"` + + // Rotation: The rotation in clockwise degrees from the image's original + // orientation. + Rotation int64 `json:"rotation,omitempty"` + + // Sensor: The type of sensor used to create the photo. + Sensor string `json:"sensor,omitempty"` + + // SubjectDistance: The distance to the subject of the photo, in meters. + SubjectDistance int64 `json:"subjectDistance,omitempty"` + + // WhiteBalance: The white balance mode used to create the photo. + WhiteBalance string `json:"whiteBalance,omitempty"` + + // Width: The width of the image in pixels. + Width int64 `json:"width,omitempty"` +} + +type FileImageMediaMetadataLocation struct { + // Altitude: The altitude stored in the image. + Altitude float64 `json:"altitude,omitempty"` + + // Latitude: The latitude stored in the image. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude stored in the image. + Longitude float64 `json:"longitude,omitempty"` +} + +type FileIndexableText struct { + // Text: The text to be indexed for this file. + Text string `json:"text,omitempty"` +} + +type FileLabels struct { + // Hidden: Deprecated. + Hidden bool `json:"hidden,omitempty"` + + // Restricted: Whether viewers are prevented from downloading this file. + Restricted bool `json:"restricted,omitempty"` + + // Starred: Whether this file is starred by the user. + Starred bool `json:"starred,omitempty"` + + // Trashed: Whether this file has been trashed. + Trashed bool `json:"trashed,omitempty"` + + // Viewed: Whether this file has been viewed by this user. + Viewed bool `json:"viewed,omitempty"` +} + +type FileThumbnail struct { + // Image: The URL-safe Base64 encoded bytes of the thumbnail image. + Image string `json:"image,omitempty"` + + // MimeType: The MIME type of the thumbnail. + MimeType string `json:"mimeType,omitempty"` +} + +type FileList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of files. + Items []*File `json:"items,omitempty"` + + // Kind: This is always drive#fileList. + Kind string `json:"kind,omitempty"` + + // NextLink: A link to the next page of files. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The page token for the next page of files. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type ParentList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of parents. + Items []*ParentReference `json:"items,omitempty"` + + // Kind: This is always drive#parentList. + Kind string `json:"kind,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type ParentReference struct { + // Id: The ID of the parent. + Id string `json:"id,omitempty"` + + // IsRoot: Whether or not the parent is the root folder. + IsRoot bool `json:"isRoot,omitempty"` + + // Kind: This is always drive#parentReference. + Kind string `json:"kind,omitempty"` + + // ParentLink: A link to the parent. + ParentLink string `json:"parentLink,omitempty"` + + // SelfLink: A link back to this reference. + SelfLink string `json:"selfLink,omitempty"` +} + +type Permission struct { + // AdditionalRoles: Additional roles for this user. Only commenter is + // currently allowed. + AdditionalRoles []string `json:"additionalRoles,omitempty"` + + // AuthKey: The authkey parameter required for this permission. + AuthKey string `json:"authKey,omitempty"` + + // Domain: The domain name of the entity this permission refers to. This + // is an output-only field which is populated when the permission type + // is "user", "group" or "domain". + Domain string `json:"domain,omitempty"` + + // EmailAddress: The email address of the user this permission refers + // to. This is an output-only field which is populated when the + // permission type is "user" and the given user's Google+ profile + // privacy settings allow exposing their email address. + EmailAddress string `json:"emailAddress,omitempty"` + + // Etag: The ETag of the permission. + Etag string `json:"etag,omitempty"` + + // Id: The ID of the user this permission refers to, and identical to + // the permissionId in the About and Files resources. When making a + // drive.permissions.insert request, exactly one of 'id' or 'value' + // fields must be specified. + Id string `json:"id,omitempty"` + + // Kind: This is always drive#permission. + Kind string `json:"kind,omitempty"` + + // Name: The name for this permission. + Name string `json:"name,omitempty"` + + // PhotoLink: A link to the profile photo, if available. + PhotoLink string `json:"photoLink,omitempty"` + + // Role: The primary role for this user. Allowed values are: + // - owner + // + // - reader + // - writer + Role string `json:"role,omitempty"` + + // SelfLink: A link back to this permission. + SelfLink string `json:"selfLink,omitempty"` + + // Type: The account type. Allowed values are: + // - user + // - group + // - + // domain + // - anyone + Type string `json:"type,omitempty"` + + // Value: The email address or domain name for the entity. This is used + // during inserts and is not populated in responses. When making a + // drive.permissions.insert request, exactly one of 'id' or 'value' + // fields must be specified. + Value string `json:"value,omitempty"` + + // WithLink: Whether the link is required for this permission. + WithLink bool `json:"withLink,omitempty"` +} + +type PermissionId struct { + // Id: The permission ID. + Id string `json:"id,omitempty"` + + // Kind: This is always drive#permissionId. + Kind string `json:"kind,omitempty"` +} + +type PermissionList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of permissions. + Items []*Permission `json:"items,omitempty"` + + // Kind: This is always drive#permissionList. + Kind string `json:"kind,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type Property struct { + // Etag: ETag of the property. + Etag string `json:"etag,omitempty"` + + // Key: The key of this property. + Key string `json:"key,omitempty"` + + // Kind: This is always drive#property. + Kind string `json:"kind,omitempty"` + + // SelfLink: The link back to this property. + SelfLink string `json:"selfLink,omitempty"` + + // Value: The value of this property. + Value string `json:"value,omitempty"` + + // Visibility: The visibility of this property. + Visibility string `json:"visibility,omitempty"` +} + +type PropertyList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The list of properties. + Items []*Property `json:"items,omitempty"` + + // Kind: This is always drive#propertyList. + Kind string `json:"kind,omitempty"` + + // SelfLink: The link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type Revision struct { + // DownloadUrl: Short term download URL for the file. This will only be + // populated on files with content stored in Drive. + DownloadUrl string `json:"downloadUrl,omitempty"` + + // Etag: The ETag of the revision. + Etag string `json:"etag,omitempty"` + + // ExportLinks: Links for exporting Google Docs to specific formats. + ExportLinks map[string]string `json:"exportLinks,omitempty"` + + // FileSize: The size of the revision in bytes. This will only be + // populated on files with content stored in Drive. + FileSize int64 `json:"fileSize,omitempty,string"` + + // Id: The ID of the revision. + Id string `json:"id,omitempty"` + + // Kind: This is always drive#revision. + Kind string `json:"kind,omitempty"` + + // LastModifyingUser: The last user to modify this revision. + LastModifyingUser *User `json:"lastModifyingUser,omitempty"` + + // LastModifyingUserName: Name of the last user to modify this revision. + LastModifyingUserName string `json:"lastModifyingUserName,omitempty"` + + // Md5Checksum: An MD5 checksum for the content of this revision. This + // will only be populated on files with content stored in Drive. + Md5Checksum string `json:"md5Checksum,omitempty"` + + // MimeType: The MIME type of the revision. + MimeType string `json:"mimeType,omitempty"` + + // ModifiedDate: Last time this revision was modified (formatted RFC + // 3339 timestamp). + ModifiedDate string `json:"modifiedDate,omitempty"` + + // OriginalFilename: The original filename when this revision was + // created. This will only be populated on files with content stored in + // Drive. + OriginalFilename string `json:"originalFilename,omitempty"` + + // Pinned: Whether this revision is pinned to prevent automatic purging. + // This will only be populated and can only be modified on files with + // content stored in Drive which are not Google Docs. Revisions can also + // be pinned when they are created through the + // drive.files.insert/update/copy by using the pinned query parameter. + Pinned bool `json:"pinned,omitempty"` + + // PublishAuto: Whether subsequent revisions will be automatically + // republished. This is only populated and can only be modified for + // Google Docs. + PublishAuto bool `json:"publishAuto,omitempty"` + + // Published: Whether this revision is published. This is only populated + // and can only be modified for Google Docs. + Published bool `json:"published,omitempty"` + + // PublishedLink: A link to the published revision. + PublishedLink string `json:"publishedLink,omitempty"` + + // PublishedOutsideDomain: Whether this revision is published outside + // the domain. This is only populated and can only be modified for + // Google Docs. + PublishedOutsideDomain bool `json:"publishedOutsideDomain,omitempty"` + + // SelfLink: A link back to this revision. + SelfLink string `json:"selfLink,omitempty"` +} + +type RevisionList struct { + // Etag: The ETag of the list. + Etag string `json:"etag,omitempty"` + + // Items: The actual list of revisions. + Items []*Revision `json:"items,omitempty"` + + // Kind: This is always drive#revisionList. + Kind string `json:"kind,omitempty"` + + // SelfLink: A link back to this list. + SelfLink string `json:"selfLink,omitempty"` +} + +type User struct { + // DisplayName: A plain text displayable name for this user. + DisplayName string `json:"displayName,omitempty"` + + // IsAuthenticatedUser: Whether this user is the same as the + // authenticated user for whom the request was made. + IsAuthenticatedUser bool `json:"isAuthenticatedUser,omitempty"` + + // Kind: This is always drive#user. + Kind string `json:"kind,omitempty"` + + // PermissionId: The user's ID as visible in the permissions collection. + PermissionId string `json:"permissionId,omitempty"` + + // Picture: The user's profile picture. + Picture *UserPicture `json:"picture,omitempty"` +} + +type UserPicture struct { + // Url: A URL that points to a profile picture of this user. + Url string `json:"url,omitempty"` +} + +// method id "drive.about.get": + +type AboutGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Gets the information about the current user along with Drive API +// settings +func (r *AboutService) Get() *AboutGetCall { + c := &AboutGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// IncludeSubscribed sets the optional parameter "includeSubscribed": +// When calculating the number of remaining change IDs, whether to +// include shared files and public files the user has opened. When set +// to false, this counts only change IDs for owned files and any shared +// or public files that the user has explictly added to a folder in +// Drive. +func (c *AboutGetCall) IncludeSubscribed(includeSubscribed bool) *AboutGetCall { + c.opt_["includeSubscribed"] = includeSubscribed + return c +} + +// MaxChangeIdCount sets the optional parameter "maxChangeIdCount": +// Maximum number of remaining change IDs to count +func (c *AboutGetCall) MaxChangeIdCount(maxChangeIdCount int64) *AboutGetCall { + c.opt_["maxChangeIdCount"] = maxChangeIdCount + return c +} + +// StartChangeId sets the optional parameter "startChangeId": Change ID +// to start counting from when calculating number of remaining change +// IDs +func (c *AboutGetCall) StartChangeId(startChangeId int64) *AboutGetCall { + c.opt_["startChangeId"] = startChangeId + return c +} + +func (c *AboutGetCall) Do() (*About, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeSubscribed"]; ok { + params.Set("includeSubscribed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxChangeIdCount"]; ok { + params.Set("maxChangeIdCount", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startChangeId"]; ok { + params.Set("startChangeId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "about") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(About) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the information about the current user along with Drive API settings", + // "httpMethod": "GET", + // "id": "drive.about.get", + // "parameters": { + // "includeSubscribed": { + // "default": "true", + // "description": "When calculating the number of remaining change IDs, whether to include shared files and public files the user has opened. When set to false, this counts only change IDs for owned files and any shared or public files that the user has explictly added to a folder in Drive.", + // "location": "query", + // "type": "boolean" + // }, + // "maxChangeIdCount": { + // "default": "1", + // "description": "Maximum number of remaining change IDs to count", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "startChangeId": { + // "description": "Change ID to start counting from when calculating number of remaining change IDs", + // "format": "int64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "about", + // "response": { + // "$ref": "About" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.apps.get": + +type AppsGetCall struct { + s *Service + appId string + opt_ map[string]interface{} +} + +// Get: Gets a specific app. +func (r *AppsService) Get(appId string) *AppsGetCall { + c := &AppsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.appId = appId + return c +} + +func (c *AppsGetCall) Do() (*App, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "apps/{appId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{appId}", url.QueryEscape(c.appId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(App) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a specific app.", + // "httpMethod": "GET", + // "id": "drive.apps.get", + // "parameterOrder": [ + // "appId" + // ], + // "parameters": { + // "appId": { + // "description": "The ID of the app.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "apps/{appId}", + // "response": { + // "$ref": "App" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.apps.list": + +type AppsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists a user's installed apps. +func (r *AppsService) List() *AppsListCall { + c := &AppsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AppsListCall) Do() (*AppList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "apps") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AppList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a user's installed apps.", + // "httpMethod": "GET", + // "id": "drive.apps.list", + // "path": "apps", + // "response": { + // "$ref": "AppList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive.apps.readonly" + // ] + // } + +} + +// method id "drive.changes.get": + +type ChangesGetCall struct { + s *Service + changeId string + opt_ map[string]interface{} +} + +// Get: Gets a specific change. +func (r *ChangesService) Get(changeId string) *ChangesGetCall { + c := &ChangesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.changeId = changeId + return c +} + +func (c *ChangesGetCall) Do() (*Change, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "changes/{changeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{changeId}", url.QueryEscape(c.changeId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Change) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a specific change.", + // "httpMethod": "GET", + // "id": "drive.changes.get", + // "parameterOrder": [ + // "changeId" + // ], + // "parameters": { + // "changeId": { + // "description": "The ID of the change.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "changes/{changeId}", + // "response": { + // "$ref": "Change" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.changes.list": + +type ChangesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists the changes for a user. +func (r *ChangesService) List() *ChangesListCall { + c := &ChangesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": Whether +// to include deleted items. +func (c *ChangesListCall) IncludeDeleted(includeDeleted bool) *ChangesListCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +// IncludeSubscribed sets the optional parameter "includeSubscribed": +// Whether to include shared files and public files the user has opened. +// When set to false, the list will include owned files plus any shared +// or public files the user has explictly added to a folder in Drive. +func (c *ChangesListCall) IncludeSubscribed(includeSubscribed bool) *ChangesListCall { + c.opt_["includeSubscribed"] = includeSubscribed + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of changes to return. +func (c *ChangesListCall) MaxResults(maxResults int64) *ChangesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token for +// changes. +func (c *ChangesListCall) PageToken(pageToken string) *ChangesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartChangeId sets the optional parameter "startChangeId": Change ID +// to start listing changes from. +func (c *ChangesListCall) StartChangeId(startChangeId int64) *ChangesListCall { + c.opt_["startChangeId"] = startChangeId + return c +} + +func (c *ChangesListCall) Do() (*ChangeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["includeSubscribed"]; ok { + params.Set("includeSubscribed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startChangeId"]; ok { + params.Set("startChangeId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "changes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChangeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the changes for a user.", + // "httpMethod": "GET", + // "id": "drive.changes.list", + // "parameters": { + // "includeDeleted": { + // "default": "true", + // "description": "Whether to include deleted items.", + // "location": "query", + // "type": "boolean" + // }, + // "includeSubscribed": { + // "default": "true", + // "description": "Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "default": "100", + // "description": "Maximum number of changes to return.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token for changes.", + // "location": "query", + // "type": "string" + // }, + // "startChangeId": { + // "description": "Change ID to start listing changes from.", + // "format": "int64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "changes", + // "response": { + // "$ref": "ChangeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "drive.changes.watch": + +type ChangesWatchCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Subscribe to changes for a user. +func (r *ChangesService) Watch(channel *Channel) *ChangesWatchCall { + c := &ChangesWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": Whether +// to include deleted items. +func (c *ChangesWatchCall) IncludeDeleted(includeDeleted bool) *ChangesWatchCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +// IncludeSubscribed sets the optional parameter "includeSubscribed": +// Whether to include shared files and public files the user has opened. +// When set to false, the list will include owned files plus any shared +// or public files the user has explictly added to a folder in Drive. +func (c *ChangesWatchCall) IncludeSubscribed(includeSubscribed bool) *ChangesWatchCall { + c.opt_["includeSubscribed"] = includeSubscribed + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of changes to return. +func (c *ChangesWatchCall) MaxResults(maxResults int64) *ChangesWatchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token for +// changes. +func (c *ChangesWatchCall) PageToken(pageToken string) *ChangesWatchCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartChangeId sets the optional parameter "startChangeId": Change ID +// to start listing changes from. +func (c *ChangesWatchCall) StartChangeId(startChangeId int64) *ChangesWatchCall { + c.opt_["startChangeId"] = startChangeId + return c +} + +func (c *ChangesWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["includeSubscribed"]; ok { + params.Set("includeSubscribed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startChangeId"]; ok { + params.Set("startChangeId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "changes/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Subscribe to changes for a user.", + // "httpMethod": "POST", + // "id": "drive.changes.watch", + // "parameters": { + // "includeDeleted": { + // "default": "true", + // "description": "Whether to include deleted items.", + // "location": "query", + // "type": "boolean" + // }, + // "includeSubscribed": { + // "default": "true", + // "description": "Whether to include shared files and public files the user has opened. When set to false, the list will include owned files plus any shared or public files the user has explictly added to a folder in Drive.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "default": "100", + // "description": "Maximum number of changes to return.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token for changes.", + // "location": "query", + // "type": "string" + // }, + // "startChangeId": { + // "description": "Change ID to start listing changes from.", + // "format": "int64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "changes/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "drive.channels.stop": + +type ChannelsStopCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Stop: Stop watching resources through this channel +func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { + c := &ChannelsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +func (c *ChannelsStopCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "channels/stop") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Stop watching resources through this channel", + // "httpMethod": "POST", + // "id": "drive.channels.stop", + // "path": "channels/stop", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.children.delete": + +type ChildrenDeleteCall struct { + s *Service + folderId string + childId string + opt_ map[string]interface{} +} + +// Delete: Removes a child from a folder. +func (r *ChildrenService) Delete(folderId string, childId string) *ChildrenDeleteCall { + c := &ChildrenDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.folderId = folderId + c.childId = childId + return c +} + +func (c *ChildrenDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{folderId}/children/{childId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{folderId}", url.QueryEscape(c.folderId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{childId}", url.QueryEscape(c.childId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a child from a folder.", + // "httpMethod": "DELETE", + // "id": "drive.children.delete", + // "parameterOrder": [ + // "folderId", + // "childId" + // ], + // "parameters": { + // "childId": { + // "description": "The ID of the child.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "folderId": { + // "description": "The ID of the folder.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{folderId}/children/{childId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.children.get": + +type ChildrenGetCall struct { + s *Service + folderId string + childId string + opt_ map[string]interface{} +} + +// Get: Gets a specific child reference. +func (r *ChildrenService) Get(folderId string, childId string) *ChildrenGetCall { + c := &ChildrenGetCall{s: r.s, opt_: make(map[string]interface{})} + c.folderId = folderId + c.childId = childId + return c +} + +func (c *ChildrenGetCall) Do() (*ChildReference, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{folderId}/children/{childId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{folderId}", url.QueryEscape(c.folderId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{childId}", url.QueryEscape(c.childId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChildReference) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a specific child reference.", + // "httpMethod": "GET", + // "id": "drive.children.get", + // "parameterOrder": [ + // "folderId", + // "childId" + // ], + // "parameters": { + // "childId": { + // "description": "The ID of the child.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "folderId": { + // "description": "The ID of the folder.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{folderId}/children/{childId}", + // "response": { + // "$ref": "ChildReference" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.children.insert": + +type ChildrenInsertCall struct { + s *Service + folderId string + childreference *ChildReference + opt_ map[string]interface{} +} + +// Insert: Inserts a file into a folder. +func (r *ChildrenService) Insert(folderId string, childreference *ChildReference) *ChildrenInsertCall { + c := &ChildrenInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.folderId = folderId + c.childreference = childreference + return c +} + +func (c *ChildrenInsertCall) Do() (*ChildReference, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.childreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{folderId}/children") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{folderId}", url.QueryEscape(c.folderId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChildReference) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a file into a folder.", + // "httpMethod": "POST", + // "id": "drive.children.insert", + // "parameterOrder": [ + // "folderId" + // ], + // "parameters": { + // "folderId": { + // "description": "The ID of the folder.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{folderId}/children", + // "request": { + // "$ref": "ChildReference" + // }, + // "response": { + // "$ref": "ChildReference" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.children.list": + +type ChildrenListCall struct { + s *Service + folderId string + opt_ map[string]interface{} +} + +// List: Lists a folder's children. +func (r *ChildrenService) List(folderId string) *ChildrenListCall { + c := &ChildrenListCall{s: r.s, opt_: make(map[string]interface{})} + c.folderId = folderId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of children to return. +func (c *ChildrenListCall) MaxResults(maxResults int64) *ChildrenListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token for +// children. +func (c *ChildrenListCall) PageToken(pageToken string) *ChildrenListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Q sets the optional parameter "q": Query string for searching +// children. +func (c *ChildrenListCall) Q(q string) *ChildrenListCall { + c.opt_["q"] = q + return c +} + +func (c *ChildrenListCall) Do() (*ChildList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{folderId}/children") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{folderId}", url.QueryEscape(c.folderId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ChildList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a folder's children.", + // "httpMethod": "GET", + // "id": "drive.children.list", + // "parameterOrder": [ + // "folderId" + // ], + // "parameters": { + // "folderId": { + // "description": "The ID of the folder.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Maximum number of children to return.", + // "format": "int32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token for children.", + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query string for searching children.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{folderId}/children", + // "response": { + // "$ref": "ChildList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.comments.delete": + +type CommentsDeleteCall struct { + s *Service + fileId string + commentId string + opt_ map[string]interface{} +} + +// Delete: Deletes a comment. +func (r *CommentsService) Delete(fileId string, commentId string) *CommentsDeleteCall { + c := &CommentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + return c +} + +func (c *CommentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a comment.", + // "httpMethod": "DELETE", + // "id": "drive.comments.delete", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.comments.get": + +type CommentsGetCall struct { + s *Service + fileId string + commentId string + opt_ map[string]interface{} +} + +// Get: Gets a comment by ID. +func (r *CommentsService) Get(fileId string, commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": If set, +// this will succeed when retrieving a deleted comment, and will include +// any deleted replies. +func (c *CommentsGetCall) IncludeDeleted(includeDeleted bool) *CommentsGetCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a comment by ID.", + // "httpMethod": "GET", + // "id": "drive.comments.get", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeDeleted": { + // "default": "false", + // "description": "If set, this will succeed when retrieving a deleted comment, and will include any deleted replies.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.comments.insert": + +type CommentsInsertCall struct { + s *Service + fileId string + comment *Comment + opt_ map[string]interface{} +} + +// Insert: Creates a new comment on the given file. +func (r *CommentsService) Insert(fileId string, comment *Comment) *CommentsInsertCall { + c := &CommentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.comment = comment + return c +} + +func (c *CommentsInsertCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new comment on the given file.", + // "httpMethod": "POST", + // "id": "drive.comments.insert", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.comments.list": + +type CommentsListCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// List: Lists a file's comments. +func (r *CommentsService) List(fileId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": If set, +// all comments and replies, including deleted comments and replies +// (with content stripped) will be returned. +func (c *CommentsListCall) IncludeDeleted(includeDeleted bool) *CommentsListCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of discussions to include in the response, used for paging. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of "nextPageToken" from +// the previous response. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": Only discussions +// that were updated after this timestamp will be returned. Formatted as +// an RFC 3339 timestamp. +func (c *CommentsListCall) UpdatedMin(updatedMin string) *CommentsListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a file's comments.", + // "httpMethod": "GET", + // "id": "drive.comments.list", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeDeleted": { + // "default": "false", + // "description": "If set, all comments and replies, including deleted comments and replies (with content stripped) will be returned.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of discussions to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "updatedMin": { + // "description": "Only discussions that were updated after this timestamp will be returned. Formatted as an RFC 3339 timestamp.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.comments.patch": + +type CommentsPatchCall struct { + s *Service + fileId string + commentId string + comment *Comment + opt_ map[string]interface{} +} + +// Patch: Updates an existing comment. This method supports patch +// semantics. +func (r *CommentsService) Patch(fileId string, commentId string, comment *Comment) *CommentsPatchCall { + c := &CommentsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.comment = comment + return c +} + +func (c *CommentsPatchCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing comment. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.comments.patch", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.comments.update": + +type CommentsUpdateCall struct { + s *Service + fileId string + commentId string + comment *Comment + opt_ map[string]interface{} +} + +// Update: Updates an existing comment. +func (r *CommentsService) Update(fileId string, commentId string, comment *Comment) *CommentsUpdateCall { + c := &CommentsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.comment = comment + return c +} + +func (c *CommentsUpdateCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing comment.", + // "httpMethod": "PUT", + // "id": "drive.comments.update", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.copy": + +type FilesCopyCall struct { + s *Service + fileId string + file *File + opt_ map[string]interface{} +} + +// Copy: Creates a copy of the specified file. +func (r *FilesService) Copy(fileId string, file *File) *FilesCopyCall { + c := &FilesCopyCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.file = file + return c +} + +// Convert sets the optional parameter "convert": Whether to convert +// this file to the corresponding Google Docs format. +func (c *FilesCopyCall) Convert(convert bool) *FilesCopyCall { + c.opt_["convert"] = convert + return c +} + +// Ocr sets the optional parameter "ocr": Whether to attempt OCR on +// .jpg, .png, .gif, or .pdf uploads. +func (c *FilesCopyCall) Ocr(ocr bool) *FilesCopyCall { + c.opt_["ocr"] = ocr + return c +} + +// OcrLanguage sets the optional parameter "ocrLanguage": If ocr is +// true, hints at the language to use. Valid values are ISO 639-1 codes. +func (c *FilesCopyCall) OcrLanguage(ocrLanguage string) *FilesCopyCall { + c.opt_["ocrLanguage"] = ocrLanguage + return c +} + +// Pinned sets the optional parameter "pinned": Whether to pin the head +// revision of the new copy. +func (c *FilesCopyCall) Pinned(pinned bool) *FilesCopyCall { + c.opt_["pinned"] = pinned + return c +} + +// TimedTextLanguage sets the optional parameter "timedTextLanguage": +// The language of the timed text. +func (c *FilesCopyCall) TimedTextLanguage(timedTextLanguage string) *FilesCopyCall { + c.opt_["timedTextLanguage"] = timedTextLanguage + return c +} + +// TimedTextTrackName sets the optional parameter "timedTextTrackName": +// The timed text track name. +func (c *FilesCopyCall) TimedTextTrackName(timedTextTrackName string) *FilesCopyCall { + c.opt_["timedTextTrackName"] = timedTextTrackName + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the new file. This parameter is only relevant when the source is +// not a native Google Doc and convert=false. +func (c *FilesCopyCall) Visibility(visibility string) *FilesCopyCall { + c.opt_["visibility"] = visibility + return c +} + +func (c *FilesCopyCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["convert"]; ok { + params.Set("convert", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocr"]; ok { + params.Set("ocr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocrLanguage"]; ok { + params.Set("ocrLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pinned"]; ok { + params.Set("pinned", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextLanguage"]; ok { + params.Set("timedTextLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextTrackName"]; ok { + params.Set("timedTextTrackName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/copy") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a copy of the specified file.", + // "httpMethod": "POST", + // "id": "drive.files.copy", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "convert": { + // "default": "false", + // "description": "Whether to convert this file to the corresponding Google Docs format.", + // "location": "query", + // "type": "boolean" + // }, + // "fileId": { + // "description": "The ID of the file to copy.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ocr": { + // "default": "false", + // "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + // "location": "query", + // "type": "boolean" + // }, + // "ocrLanguage": { + // "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + // "location": "query", + // "type": "string" + // }, + // "pinned": { + // "default": "false", + // "description": "Whether to pin the head revision of the new copy.", + // "location": "query", + // "type": "boolean" + // }, + // "timedTextLanguage": { + // "description": "The language of the timed text.", + // "location": "query", + // "type": "string" + // }, + // "timedTextTrackName": { + // "description": "The timed text track name.", + // "location": "query", + // "type": "string" + // }, + // "visibility": { + // "default": "DEFAULT", + // "description": "The visibility of the new file. This parameter is only relevant when the source is not a native Google Doc and convert=false.", + // "enum": [ + // "DEFAULT", + // "PRIVATE" + // ], + // "enumDescriptions": [ + // "The visibility of the new file is determined by the user's default visibility/sharing policies.", + // "The new file will be visible to only the owner." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/copy", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.delete": + +type FilesDeleteCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Delete: Permanently deletes a file by ID. Skips the trash. +func (r *FilesService) Delete(fileId string) *FilesDeleteCall { + c := &FilesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *FilesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Permanently deletes a file by ID. Skips the trash.", + // "httpMethod": "DELETE", + // "id": "drive.files.delete", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.get": + +type FilesGetCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Get: Gets a file's metadata by ID. +func (r *FilesService) Get(fileId string) *FilesGetCall { + c := &FilesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +// Projection sets the optional parameter "projection": This parameter +// is deprecated and has no function. +func (c *FilesGetCall) Projection(projection string) *FilesGetCall { + c.opt_["projection"] = projection + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully retrieving the +// file. +func (c *FilesGetCall) UpdateViewedDate(updateViewedDate bool) *FilesGetCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +func (c *FilesGetCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a file's metadata by ID.", + // "httpMethod": "GET", + // "id": "drive.files.get", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file in question.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "This parameter is deprecated and has no function.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Deprecated", + // "Deprecated" + // ], + // "location": "query", + // "type": "string" + // }, + // "updateViewedDate": { + // "default": "false", + // "description": "Whether to update the view date after successfully retrieving the file.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "drive.files.insert": + +type FilesInsertCall struct { + s *Service + file *File + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Insert a new file. +func (r *FilesService) Insert(file *File) *FilesInsertCall { + c := &FilesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.file = file + return c +} + +// Convert sets the optional parameter "convert": Whether to convert +// this file to the corresponding Google Docs format. +func (c *FilesInsertCall) Convert(convert bool) *FilesInsertCall { + c.opt_["convert"] = convert + return c +} + +// Ocr sets the optional parameter "ocr": Whether to attempt OCR on +// .jpg, .png, .gif, or .pdf uploads. +func (c *FilesInsertCall) Ocr(ocr bool) *FilesInsertCall { + c.opt_["ocr"] = ocr + return c +} + +// OcrLanguage sets the optional parameter "ocrLanguage": If ocr is +// true, hints at the language to use. Valid values are ISO 639-1 codes. +func (c *FilesInsertCall) OcrLanguage(ocrLanguage string) *FilesInsertCall { + c.opt_["ocrLanguage"] = ocrLanguage + return c +} + +// Pinned sets the optional parameter "pinned": Whether to pin the head +// revision of the uploaded file. +func (c *FilesInsertCall) Pinned(pinned bool) *FilesInsertCall { + c.opt_["pinned"] = pinned + return c +} + +// TimedTextLanguage sets the optional parameter "timedTextLanguage": +// The language of the timed text. +func (c *FilesInsertCall) TimedTextLanguage(timedTextLanguage string) *FilesInsertCall { + c.opt_["timedTextLanguage"] = timedTextLanguage + return c +} + +// TimedTextTrackName sets the optional parameter "timedTextTrackName": +// The timed text track name. +func (c *FilesInsertCall) TimedTextTrackName(timedTextTrackName string) *FilesInsertCall { + c.opt_["timedTextTrackName"] = timedTextTrackName + return c +} + +// UseContentAsIndexableText sets the optional parameter +// "useContentAsIndexableText": Whether to use the content as indexable +// text. +func (c *FilesInsertCall) UseContentAsIndexableText(useContentAsIndexableText bool) *FilesInsertCall { + c.opt_["useContentAsIndexableText"] = useContentAsIndexableText + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the new file. This parameter is only relevant when convert=false. +func (c *FilesInsertCall) Visibility(visibility string) *FilesInsertCall { + c.opt_["visibility"] = visibility + return c +} +func (c *FilesInsertCall) Media(r io.Reader) *FilesInsertCall { + c.media_ = r + return c +} + +func (c *FilesInsertCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["convert"]; ok { + params.Set("convert", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocr"]; ok { + params.Set("ocr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocrLanguage"]; ok { + params.Set("ocrLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pinned"]; ok { + params.Set("pinned", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextLanguage"]; ok { + params.Set("timedTextLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextTrackName"]; ok { + params.Set("timedTextTrackName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useContentAsIndexableText"]; ok { + params.Set("useContentAsIndexableText", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Insert a new file.", + // "httpMethod": "POST", + // "id": "drive.files.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1024GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/drive/v2/files" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/drive/v2/files" + // } + // } + // }, + // "parameters": { + // "convert": { + // "default": "false", + // "description": "Whether to convert this file to the corresponding Google Docs format.", + // "location": "query", + // "type": "boolean" + // }, + // "ocr": { + // "default": "false", + // "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + // "location": "query", + // "type": "boolean" + // }, + // "ocrLanguage": { + // "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + // "location": "query", + // "type": "string" + // }, + // "pinned": { + // "default": "false", + // "description": "Whether to pin the head revision of the uploaded file.", + // "location": "query", + // "type": "boolean" + // }, + // "timedTextLanguage": { + // "description": "The language of the timed text.", + // "location": "query", + // "type": "string" + // }, + // "timedTextTrackName": { + // "description": "The timed text track name.", + // "location": "query", + // "type": "string" + // }, + // "useContentAsIndexableText": { + // "default": "false", + // "description": "Whether to use the content as indexable text.", + // "location": "query", + // "type": "boolean" + // }, + // "visibility": { + // "default": "DEFAULT", + // "description": "The visibility of the new file. This parameter is only relevant when convert=false.", + // "enum": [ + // "DEFAULT", + // "PRIVATE" + // ], + // "enumDescriptions": [ + // "The visibility of the new file is determined by the user's default visibility/sharing policies.", + // "The new file will be visible to only the owner." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file" + // ], + // "supportsMediaUpload": true, + // "supportsSubscription": true + // } + +} + +// method id "drive.files.list": + +type FilesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists the user's files. +func (r *FilesService) List() *FilesListCall { + c := &FilesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of files to return. +func (c *FilesListCall) MaxResults(maxResults int64) *FilesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Page token for +// files. +func (c *FilesListCall) PageToken(pageToken string) *FilesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": This parameter +// is deprecated and has no function. +func (c *FilesListCall) Projection(projection string) *FilesListCall { + c.opt_["projection"] = projection + return c +} + +// Q sets the optional parameter "q": Query string for searching files. +func (c *FilesListCall) Q(q string) *FilesListCall { + c.opt_["q"] = q + return c +} + +func (c *FilesListCall) Do() (*FileList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FileList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the user's files.", + // "httpMethod": "GET", + // "id": "drive.files.list", + // "parameters": { + // "maxResults": { + // "default": "100", + // "description": "Maximum number of files to return.", + // "format": "int32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Page token for files.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "This parameter is deprecated and has no function.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Deprecated", + // "Deprecated" + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query string for searching files.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files", + // "response": { + // "$ref": "FileList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.files.patch": + +type FilesPatchCall struct { + s *Service + fileId string + file *File + opt_ map[string]interface{} +} + +// Patch: Updates file metadata and/or content. This method supports +// patch semantics. +func (r *FilesService) Patch(fileId string, file *File) *FilesPatchCall { + c := &FilesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.file = file + return c +} + +// Convert sets the optional parameter "convert": Whether to convert +// this file to the corresponding Google Docs format. +func (c *FilesPatchCall) Convert(convert bool) *FilesPatchCall { + c.opt_["convert"] = convert + return c +} + +// NewRevision sets the optional parameter "newRevision": Whether a blob +// upload should create a new revision. If false, the blob data in the +// current head revision is replaced. If not set or true, a new blob is +// created as head revision, and previous revisions are preserved +// (causing increased use of the user's data storage quota). +func (c *FilesPatchCall) NewRevision(newRevision bool) *FilesPatchCall { + c.opt_["newRevision"] = newRevision + return c +} + +// Ocr sets the optional parameter "ocr": Whether to attempt OCR on +// .jpg, .png, .gif, or .pdf uploads. +func (c *FilesPatchCall) Ocr(ocr bool) *FilesPatchCall { + c.opt_["ocr"] = ocr + return c +} + +// OcrLanguage sets the optional parameter "ocrLanguage": If ocr is +// true, hints at the language to use. Valid values are ISO 639-1 codes. +func (c *FilesPatchCall) OcrLanguage(ocrLanguage string) *FilesPatchCall { + c.opt_["ocrLanguage"] = ocrLanguage + return c +} + +// Pinned sets the optional parameter "pinned": Whether to pin the new +// revision. +func (c *FilesPatchCall) Pinned(pinned bool) *FilesPatchCall { + c.opt_["pinned"] = pinned + return c +} + +// SetModifiedDate sets the optional parameter "setModifiedDate": +// Whether to set the modified date with the supplied modified date. +func (c *FilesPatchCall) SetModifiedDate(setModifiedDate bool) *FilesPatchCall { + c.opt_["setModifiedDate"] = setModifiedDate + return c +} + +// TimedTextLanguage sets the optional parameter "timedTextLanguage": +// The language of the timed text. +func (c *FilesPatchCall) TimedTextLanguage(timedTextLanguage string) *FilesPatchCall { + c.opt_["timedTextLanguage"] = timedTextLanguage + return c +} + +// TimedTextTrackName sets the optional parameter "timedTextTrackName": +// The timed text track name. +func (c *FilesPatchCall) TimedTextTrackName(timedTextTrackName string) *FilesPatchCall { + c.opt_["timedTextTrackName"] = timedTextTrackName + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully updating the file. +func (c *FilesPatchCall) UpdateViewedDate(updateViewedDate bool) *FilesPatchCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +// UseContentAsIndexableText sets the optional parameter +// "useContentAsIndexableText": Whether to use the content as indexable +// text. +func (c *FilesPatchCall) UseContentAsIndexableText(useContentAsIndexableText bool) *FilesPatchCall { + c.opt_["useContentAsIndexableText"] = useContentAsIndexableText + return c +} + +func (c *FilesPatchCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["convert"]; ok { + params.Set("convert", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["newRevision"]; ok { + params.Set("newRevision", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocr"]; ok { + params.Set("ocr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocrLanguage"]; ok { + params.Set("ocrLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pinned"]; ok { + params.Set("pinned", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["setModifiedDate"]; ok { + params.Set("setModifiedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextLanguage"]; ok { + params.Set("timedTextLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextTrackName"]; ok { + params.Set("timedTextTrackName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useContentAsIndexableText"]; ok { + params.Set("useContentAsIndexableText", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates file metadata and/or content. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.files.patch", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "convert": { + // "default": "false", + // "description": "Whether to convert this file to the corresponding Google Docs format.", + // "location": "query", + // "type": "boolean" + // }, + // "fileId": { + // "description": "The ID of the file to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "newRevision": { + // "default": "true", + // "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + // "location": "query", + // "type": "boolean" + // }, + // "ocr": { + // "default": "false", + // "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + // "location": "query", + // "type": "boolean" + // }, + // "ocrLanguage": { + // "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + // "location": "query", + // "type": "string" + // }, + // "pinned": { + // "default": "false", + // "description": "Whether to pin the new revision.", + // "location": "query", + // "type": "boolean" + // }, + // "setModifiedDate": { + // "default": "false", + // "description": "Whether to set the modified date with the supplied modified date.", + // "location": "query", + // "type": "boolean" + // }, + // "timedTextLanguage": { + // "description": "The language of the timed text.", + // "location": "query", + // "type": "string" + // }, + // "timedTextTrackName": { + // "description": "The timed text track name.", + // "location": "query", + // "type": "string" + // }, + // "updateViewedDate": { + // "default": "true", + // "description": "Whether to update the view date after successfully updating the file.", + // "location": "query", + // "type": "boolean" + // }, + // "useContentAsIndexableText": { + // "default": "false", + // "description": "Whether to use the content as indexable text.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.scripts" + // ] + // } + +} + +// method id "drive.files.touch": + +type FilesTouchCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Touch: Set the file's updated time to the current server time. +func (r *FilesService) Touch(fileId string) *FilesTouchCall { + c := &FilesTouchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *FilesTouchCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/touch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Set the file's updated time to the current server time.", + // "httpMethod": "POST", + // "id": "drive.files.touch", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/touch", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.trash": + +type FilesTrashCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Trash: Moves a file to the trash. +func (r *FilesService) Trash(fileId string) *FilesTrashCall { + c := &FilesTrashCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *FilesTrashCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/trash") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Moves a file to the trash.", + // "httpMethod": "POST", + // "id": "drive.files.trash", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file to trash.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/trash", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.untrash": + +type FilesUntrashCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Untrash: Restores a file from the trash. +func (r *FilesService) Untrash(fileId string) *FilesUntrashCall { + c := &FilesUntrashCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *FilesUntrashCall) Do() (*File, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/untrash") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Restores a file from the trash.", + // "httpMethod": "POST", + // "id": "drive.files.untrash", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file to untrash.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/untrash", + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.files.update": + +type FilesUpdateCall struct { + s *Service + fileId string + file *File + opt_ map[string]interface{} + media_ io.Reader +} + +// Update: Updates file metadata and/or content. +func (r *FilesService) Update(fileId string, file *File) *FilesUpdateCall { + c := &FilesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.file = file + return c +} + +// Convert sets the optional parameter "convert": Whether to convert +// this file to the corresponding Google Docs format. +func (c *FilesUpdateCall) Convert(convert bool) *FilesUpdateCall { + c.opt_["convert"] = convert + return c +} + +// NewRevision sets the optional parameter "newRevision": Whether a blob +// upload should create a new revision. If false, the blob data in the +// current head revision is replaced. If not set or true, a new blob is +// created as head revision, and previous revisions are preserved +// (causing increased use of the user's data storage quota). +func (c *FilesUpdateCall) NewRevision(newRevision bool) *FilesUpdateCall { + c.opt_["newRevision"] = newRevision + return c +} + +// Ocr sets the optional parameter "ocr": Whether to attempt OCR on +// .jpg, .png, .gif, or .pdf uploads. +func (c *FilesUpdateCall) Ocr(ocr bool) *FilesUpdateCall { + c.opt_["ocr"] = ocr + return c +} + +// OcrLanguage sets the optional parameter "ocrLanguage": If ocr is +// true, hints at the language to use. Valid values are ISO 639-1 codes. +func (c *FilesUpdateCall) OcrLanguage(ocrLanguage string) *FilesUpdateCall { + c.opt_["ocrLanguage"] = ocrLanguage + return c +} + +// Pinned sets the optional parameter "pinned": Whether to pin the new +// revision. +func (c *FilesUpdateCall) Pinned(pinned bool) *FilesUpdateCall { + c.opt_["pinned"] = pinned + return c +} + +// SetModifiedDate sets the optional parameter "setModifiedDate": +// Whether to set the modified date with the supplied modified date. +func (c *FilesUpdateCall) SetModifiedDate(setModifiedDate bool) *FilesUpdateCall { + c.opt_["setModifiedDate"] = setModifiedDate + return c +} + +// TimedTextLanguage sets the optional parameter "timedTextLanguage": +// The language of the timed text. +func (c *FilesUpdateCall) TimedTextLanguage(timedTextLanguage string) *FilesUpdateCall { + c.opt_["timedTextLanguage"] = timedTextLanguage + return c +} + +// TimedTextTrackName sets the optional parameter "timedTextTrackName": +// The timed text track name. +func (c *FilesUpdateCall) TimedTextTrackName(timedTextTrackName string) *FilesUpdateCall { + c.opt_["timedTextTrackName"] = timedTextTrackName + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully updating the file. +func (c *FilesUpdateCall) UpdateViewedDate(updateViewedDate bool) *FilesUpdateCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +// UseContentAsIndexableText sets the optional parameter +// "useContentAsIndexableText": Whether to use the content as indexable +// text. +func (c *FilesUpdateCall) UseContentAsIndexableText(useContentAsIndexableText bool) *FilesUpdateCall { + c.opt_["useContentAsIndexableText"] = useContentAsIndexableText + return c +} +func (c *FilesUpdateCall) Media(r io.Reader) *FilesUpdateCall { + c.media_ = r + return c +} + +func (c *FilesUpdateCall) Do() (*File, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.file) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["convert"]; ok { + params.Set("convert", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["newRevision"]; ok { + params.Set("newRevision", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocr"]; ok { + params.Set("ocr", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ocrLanguage"]; ok { + params.Set("ocrLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pinned"]; ok { + params.Set("pinned", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["setModifiedDate"]; ok { + params.Set("setModifiedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextLanguage"]; ok { + params.Set("timedTextLanguage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["timedTextTrackName"]; ok { + params.Set("timedTextTrackName", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useContentAsIndexableText"]; ok { + params.Set("useContentAsIndexableText", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(File) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates file metadata and/or content.", + // "httpMethod": "PUT", + // "id": "drive.files.update", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1024GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/drive/v2/files/{fileId}" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/drive/v2/files/{fileId}" + // } + // } + // }, + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "convert": { + // "default": "false", + // "description": "Whether to convert this file to the corresponding Google Docs format.", + // "location": "query", + // "type": "boolean" + // }, + // "fileId": { + // "description": "The ID of the file to update.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "newRevision": { + // "default": "true", + // "description": "Whether a blob upload should create a new revision. If false, the blob data in the current head revision is replaced. If not set or true, a new blob is created as head revision, and previous revisions are preserved (causing increased use of the user's data storage quota).", + // "location": "query", + // "type": "boolean" + // }, + // "ocr": { + // "default": "false", + // "description": "Whether to attempt OCR on .jpg, .png, .gif, or .pdf uploads.", + // "location": "query", + // "type": "boolean" + // }, + // "ocrLanguage": { + // "description": "If ocr is true, hints at the language to use. Valid values are ISO 639-1 codes.", + // "location": "query", + // "type": "string" + // }, + // "pinned": { + // "default": "false", + // "description": "Whether to pin the new revision.", + // "location": "query", + // "type": "boolean" + // }, + // "setModifiedDate": { + // "default": "false", + // "description": "Whether to set the modified date with the supplied modified date.", + // "location": "query", + // "type": "boolean" + // }, + // "timedTextLanguage": { + // "description": "The language of the timed text.", + // "location": "query", + // "type": "string" + // }, + // "timedTextTrackName": { + // "description": "The timed text track name.", + // "location": "query", + // "type": "string" + // }, + // "updateViewedDate": { + // "default": "true", + // "description": "Whether to update the view date after successfully updating the file.", + // "location": "query", + // "type": "boolean" + // }, + // "useContentAsIndexableText": { + // "default": "false", + // "description": "Whether to use the content as indexable text.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}", + // "request": { + // "$ref": "File" + // }, + // "response": { + // "$ref": "File" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.scripts" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "drive.files.watch": + +type FilesWatchCall struct { + s *Service + fileId string + channel *Channel + opt_ map[string]interface{} +} + +// Watch: Subscribe to changes on a file +func (r *FilesService) Watch(fileId string, channel *Channel) *FilesWatchCall { + c := &FilesWatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.channel = channel + return c +} + +// Projection sets the optional parameter "projection": This parameter +// is deprecated and has no function. +func (c *FilesWatchCall) Projection(projection string) *FilesWatchCall { + c.opt_["projection"] = projection + return c +} + +// UpdateViewedDate sets the optional parameter "updateViewedDate": +// Whether to update the view date after successfully retrieving the +// file. +func (c *FilesWatchCall) UpdateViewedDate(updateViewedDate bool) *FilesWatchCall { + c.opt_["updateViewedDate"] = updateViewedDate + return c +} + +func (c *FilesWatchCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updateViewedDate"]; ok { + params.Set("updateViewedDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Subscribe to changes on a file", + // "httpMethod": "POST", + // "id": "drive.files.watch", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file in question.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "This parameter is deprecated and has no function.", + // "enum": [ + // "BASIC", + // "FULL" + // ], + // "enumDescriptions": [ + // "Deprecated", + // "Deprecated" + // ], + // "location": "query", + // "type": "string" + // }, + // "updateViewedDate": { + // "default": "false", + // "description": "Whether to update the view date after successfully retrieving the file.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ], + // "supportsSubscription": true + // } + +} + +// method id "drive.parents.delete": + +type ParentsDeleteCall struct { + s *Service + fileId string + parentId string + opt_ map[string]interface{} +} + +// Delete: Removes a parent from a file. +func (r *ParentsService) Delete(fileId string, parentId string) *ParentsDeleteCall { + c := &ParentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.parentId = parentId + return c +} + +func (c *ParentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/parents/{parentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{parentId}", url.QueryEscape(c.parentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a parent from a file.", + // "httpMethod": "DELETE", + // "id": "drive.parents.delete", + // "parameterOrder": [ + // "fileId", + // "parentId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "parentId": { + // "description": "The ID of the parent.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/parents/{parentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.parents.get": + +type ParentsGetCall struct { + s *Service + fileId string + parentId string + opt_ map[string]interface{} +} + +// Get: Gets a specific parent reference. +func (r *ParentsService) Get(fileId string, parentId string) *ParentsGetCall { + c := &ParentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.parentId = parentId + return c +} + +func (c *ParentsGetCall) Do() (*ParentReference, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/parents/{parentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{parentId}", url.QueryEscape(c.parentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentReference) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a specific parent reference.", + // "httpMethod": "GET", + // "id": "drive.parents.get", + // "parameterOrder": [ + // "fileId", + // "parentId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "parentId": { + // "description": "The ID of the parent.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/parents/{parentId}", + // "response": { + // "$ref": "ParentReference" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.parents.insert": + +type ParentsInsertCall struct { + s *Service + fileId string + parentreference *ParentReference + opt_ map[string]interface{} +} + +// Insert: Adds a parent folder for a file. +func (r *ParentsService) Insert(fileId string, parentreference *ParentReference) *ParentsInsertCall { + c := &ParentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.parentreference = parentreference + return c +} + +func (c *ParentsInsertCall) Do() (*ParentReference, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.parentreference) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentReference) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a parent folder for a file.", + // "httpMethod": "POST", + // "id": "drive.parents.insert", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/parents", + // "request": { + // "$ref": "ParentReference" + // }, + // "response": { + // "$ref": "ParentReference" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.parents.list": + +type ParentsListCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// List: Lists a file's parents. +func (r *ParentsService) List(fileId string) *ParentsListCall { + c := &ParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *ParentsListCall) Do() (*ParentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a file's parents.", + // "httpMethod": "GET", + // "id": "drive.parents.list", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/parents", + // "response": { + // "$ref": "ParentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.permissions.delete": + +type PermissionsDeleteCall struct { + s *Service + fileId string + permissionId string + opt_ map[string]interface{} +} + +// Delete: Deletes a permission from a file. +func (r *PermissionsService) Delete(fileId string, permissionId string) *PermissionsDeleteCall { + c := &PermissionsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.permissionId = permissionId + return c +} + +func (c *PermissionsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{permissionId}", url.QueryEscape(c.permissionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a permission from a file.", + // "httpMethod": "DELETE", + // "id": "drive.permissions.delete", + // "parameterOrder": [ + // "fileId", + // "permissionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "permissionId": { + // "description": "The ID for the permission.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/permissions/{permissionId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.permissions.get": + +type PermissionsGetCall struct { + s *Service + fileId string + permissionId string + opt_ map[string]interface{} +} + +// Get: Gets a permission by ID. +func (r *PermissionsService) Get(fileId string, permissionId string) *PermissionsGetCall { + c := &PermissionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.permissionId = permissionId + return c +} + +func (c *PermissionsGetCall) Do() (*Permission, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{permissionId}", url.QueryEscape(c.permissionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Permission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a permission by ID.", + // "httpMethod": "GET", + // "id": "drive.permissions.get", + // "parameterOrder": [ + // "fileId", + // "permissionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "permissionId": { + // "description": "The ID for the permission.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/permissions/{permissionId}", + // "response": { + // "$ref": "Permission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.permissions.getIdForEmail": + +type PermissionsGetIdForEmailCall struct { + s *Service + email string + opt_ map[string]interface{} +} + +// GetIdForEmail: Returns the permission ID for an email address. +func (r *PermissionsService) GetIdForEmail(email string) *PermissionsGetIdForEmailCall { + c := &PermissionsGetIdForEmailCall{s: r.s, opt_: make(map[string]interface{})} + c.email = email + return c +} + +func (c *PermissionsGetIdForEmailCall) Do() (*PermissionId, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "permissionIds/{email}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{email}", url.QueryEscape(c.email), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PermissionId) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the permission ID for an email address.", + // "httpMethod": "GET", + // "id": "drive.permissions.getIdForEmail", + // "parameterOrder": [ + // "email" + // ], + // "parameters": { + // "email": { + // "description": "The email address for which to return a permission ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "permissionIds/{email}", + // "response": { + // "$ref": "PermissionId" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.apps.readonly", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.permissions.insert": + +type PermissionsInsertCall struct { + s *Service + fileId string + permission *Permission + opt_ map[string]interface{} +} + +// Insert: Inserts a permission for a file. +func (r *PermissionsService) Insert(fileId string, permission *Permission) *PermissionsInsertCall { + c := &PermissionsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.permission = permission + return c +} + +// EmailMessage sets the optional parameter "emailMessage": A custom +// message to include in notification emails. +func (c *PermissionsInsertCall) EmailMessage(emailMessage string) *PermissionsInsertCall { + c.opt_["emailMessage"] = emailMessage + return c +} + +// SendNotificationEmails sets the optional parameter +// "sendNotificationEmails": Whether to send notification emails when +// sharing to users or groups. +func (c *PermissionsInsertCall) SendNotificationEmails(sendNotificationEmails bool) *PermissionsInsertCall { + c.opt_["sendNotificationEmails"] = sendNotificationEmails + return c +} + +func (c *PermissionsInsertCall) Do() (*Permission, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["emailMessage"]; ok { + params.Set("emailMessage", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sendNotificationEmails"]; ok { + params.Set("sendNotificationEmails", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Permission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a permission for a file.", + // "httpMethod": "POST", + // "id": "drive.permissions.insert", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "emailMessage": { + // "description": "A custom message to include in notification emails.", + // "location": "query", + // "type": "string" + // }, + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sendNotificationEmails": { + // "default": "true", + // "description": "Whether to send notification emails when sharing to users or groups.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}/permissions", + // "request": { + // "$ref": "Permission" + // }, + // "response": { + // "$ref": "Permission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.permissions.list": + +type PermissionsListCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// List: Lists a file's permissions. +func (r *PermissionsService) List(fileId string) *PermissionsListCall { + c := &PermissionsListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *PermissionsListCall) Do() (*PermissionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PermissionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a file's permissions.", + // "httpMethod": "GET", + // "id": "drive.permissions.list", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/permissions", + // "response": { + // "$ref": "PermissionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.permissions.patch": + +type PermissionsPatchCall struct { + s *Service + fileId string + permissionId string + permission *Permission + opt_ map[string]interface{} +} + +// Patch: Updates a permission. This method supports patch semantics. +func (r *PermissionsService) Patch(fileId string, permissionId string, permission *Permission) *PermissionsPatchCall { + c := &PermissionsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.permissionId = permissionId + c.permission = permission + return c +} + +// TransferOwnership sets the optional parameter "transferOwnership": +// Whether changing a role to 'owner' should also downgrade the current +// owners to writers. +func (c *PermissionsPatchCall) TransferOwnership(transferOwnership bool) *PermissionsPatchCall { + c.opt_["transferOwnership"] = transferOwnership + return c +} + +func (c *PermissionsPatchCall) Do() (*Permission, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["transferOwnership"]; ok { + params.Set("transferOwnership", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{permissionId}", url.QueryEscape(c.permissionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Permission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a permission. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.permissions.patch", + // "parameterOrder": [ + // "fileId", + // "permissionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "permissionId": { + // "description": "The ID for the permission.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "transferOwnership": { + // "default": "false", + // "description": "Whether changing a role to 'owner' should also downgrade the current owners to writers.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}/permissions/{permissionId}", + // "request": { + // "$ref": "Permission" + // }, + // "response": { + // "$ref": "Permission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.permissions.update": + +type PermissionsUpdateCall struct { + s *Service + fileId string + permissionId string + permission *Permission + opt_ map[string]interface{} +} + +// Update: Updates a permission. +func (r *PermissionsService) Update(fileId string, permissionId string, permission *Permission) *PermissionsUpdateCall { + c := &PermissionsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.permissionId = permissionId + c.permission = permission + return c +} + +// TransferOwnership sets the optional parameter "transferOwnership": +// Whether changing a role to 'owner' should also downgrade the current +// owners to writers. +func (c *PermissionsUpdateCall) TransferOwnership(transferOwnership bool) *PermissionsUpdateCall { + c.opt_["transferOwnership"] = transferOwnership + return c +} + +func (c *PermissionsUpdateCall) Do() (*Permission, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.permission) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["transferOwnership"]; ok { + params.Set("transferOwnership", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/permissions/{permissionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{permissionId}", url.QueryEscape(c.permissionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Permission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a permission.", + // "httpMethod": "PUT", + // "id": "drive.permissions.update", + // "parameterOrder": [ + // "fileId", + // "permissionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "permissionId": { + // "description": "The ID for the permission.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "transferOwnership": { + // "default": "false", + // "description": "Whether changing a role to 'owner' should also downgrade the current owners to writers.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "files/{fileId}/permissions/{permissionId}", + // "request": { + // "$ref": "Permission" + // }, + // "response": { + // "$ref": "Permission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.properties.delete": + +type PropertiesDeleteCall struct { + s *Service + fileId string + propertyKey string + opt_ map[string]interface{} +} + +// Delete: Deletes a property. +func (r *PropertiesService) Delete(fileId string, propertyKey string) *PropertiesDeleteCall { + c := &PropertiesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.propertyKey = propertyKey + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the property. +func (c *PropertiesDeleteCall) Visibility(visibility string) *PropertiesDeleteCall { + c.opt_["visibility"] = visibility + return c +} + +func (c *PropertiesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties/{propertyKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{propertyKey}", url.QueryEscape(c.propertyKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a property.", + // "httpMethod": "DELETE", + // "id": "drive.properties.delete", + // "parameterOrder": [ + // "fileId", + // "propertyKey" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "propertyKey": { + // "description": "The key of the property.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "visibility": { + // "default": "private", + // "description": "The visibility of the property.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties/{propertyKey}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.properties.get": + +type PropertiesGetCall struct { + s *Service + fileId string + propertyKey string + opt_ map[string]interface{} +} + +// Get: Gets a property by its key. +func (r *PropertiesService) Get(fileId string, propertyKey string) *PropertiesGetCall { + c := &PropertiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.propertyKey = propertyKey + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the property. +func (c *PropertiesGetCall) Visibility(visibility string) *PropertiesGetCall { + c.opt_["visibility"] = visibility + return c +} + +func (c *PropertiesGetCall) Do() (*Property, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties/{propertyKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{propertyKey}", url.QueryEscape(c.propertyKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Property) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a property by its key.", + // "httpMethod": "GET", + // "id": "drive.properties.get", + // "parameterOrder": [ + // "fileId", + // "propertyKey" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "propertyKey": { + // "description": "The key of the property.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "visibility": { + // "default": "private", + // "description": "The visibility of the property.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties/{propertyKey}", + // "response": { + // "$ref": "Property" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.properties.insert": + +type PropertiesInsertCall struct { + s *Service + fileId string + property *Property + opt_ map[string]interface{} +} + +// Insert: Adds a property to a file. +func (r *PropertiesService) Insert(fileId string, property *Property) *PropertiesInsertCall { + c := &PropertiesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.property = property + return c +} + +func (c *PropertiesInsertCall) Do() (*Property, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.property) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Property) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a property to a file.", + // "httpMethod": "POST", + // "id": "drive.properties.insert", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties", + // "request": { + // "$ref": "Property" + // }, + // "response": { + // "$ref": "Property" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.properties.list": + +type PropertiesListCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// List: Lists a file's properties. +func (r *PropertiesService) List(fileId string) *PropertiesListCall { + c := &PropertiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *PropertiesListCall) Do() (*PropertyList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PropertyList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a file's properties.", + // "httpMethod": "GET", + // "id": "drive.properties.list", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties", + // "response": { + // "$ref": "PropertyList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.properties.patch": + +type PropertiesPatchCall struct { + s *Service + fileId string + propertyKey string + property *Property + opt_ map[string]interface{} +} + +// Patch: Updates a property. This method supports patch semantics. +func (r *PropertiesService) Patch(fileId string, propertyKey string, property *Property) *PropertiesPatchCall { + c := &PropertiesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.propertyKey = propertyKey + c.property = property + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the property. +func (c *PropertiesPatchCall) Visibility(visibility string) *PropertiesPatchCall { + c.opt_["visibility"] = visibility + return c +} + +func (c *PropertiesPatchCall) Do() (*Property, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.property) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties/{propertyKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{propertyKey}", url.QueryEscape(c.propertyKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Property) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a property. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.properties.patch", + // "parameterOrder": [ + // "fileId", + // "propertyKey" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "propertyKey": { + // "description": "The key of the property.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "visibility": { + // "default": "private", + // "description": "The visibility of the property.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties/{propertyKey}", + // "request": { + // "$ref": "Property" + // }, + // "response": { + // "$ref": "Property" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.properties.update": + +type PropertiesUpdateCall struct { + s *Service + fileId string + propertyKey string + property *Property + opt_ map[string]interface{} +} + +// Update: Updates a property. +func (r *PropertiesService) Update(fileId string, propertyKey string, property *Property) *PropertiesUpdateCall { + c := &PropertiesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.propertyKey = propertyKey + c.property = property + return c +} + +// Visibility sets the optional parameter "visibility": The visibility +// of the property. +func (c *PropertiesUpdateCall) Visibility(visibility string) *PropertiesUpdateCall { + c.opt_["visibility"] = visibility + return c +} + +func (c *PropertiesUpdateCall) Do() (*Property, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.property) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["visibility"]; ok { + params.Set("visibility", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/properties/{propertyKey}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{propertyKey}", url.QueryEscape(c.propertyKey), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Property) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a property.", + // "httpMethod": "PUT", + // "id": "drive.properties.update", + // "parameterOrder": [ + // "fileId", + // "propertyKey" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "propertyKey": { + // "description": "The key of the property.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "visibility": { + // "default": "private", + // "description": "The visibility of the property.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/properties/{propertyKey}", + // "request": { + // "$ref": "Property" + // }, + // "response": { + // "$ref": "Property" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.realtime.get": + +type RealtimeGetCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// Get: Exports the contents of the Realtime API data model associated +// with this file as JSON. +func (r *RealtimeService) Get(fileId string) *RealtimeGetCall { + c := &RealtimeGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *RealtimeGetCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/realtime") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Exports the contents of the Realtime API data model associated with this file as JSON.", + // "httpMethod": "GET", + // "id": "drive.realtime.get", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file that the Realtime API data model is associated with.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/realtime", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "drive.realtime.update": + +type RealtimeUpdateCall struct { + s *Service + fileId string + opt_ map[string]interface{} + media_ io.Reader +} + +// Update: Overwrites the Realtime API data model associated with this +// file with the provided JSON data model. +func (r *RealtimeService) Update(fileId string) *RealtimeUpdateCall { + c := &RealtimeUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +// BaseRevision sets the optional parameter "baseRevision": The revision +// of the model to diff the uploaded model against. If set, the uploaded +// model is diffed against the provided revision and those differences +// are merged with any changes made to the model after the provided +// revision. If not set, the uploaded model replaces the current model +// on the server. +func (c *RealtimeUpdateCall) BaseRevision(baseRevision string) *RealtimeUpdateCall { + c.opt_["baseRevision"] = baseRevision + return c +} +func (c *RealtimeUpdateCall) Media(r io.Reader) *RealtimeUpdateCall { + c.media_ = r + return c +} + +func (c *RealtimeUpdateCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["baseRevision"]; ok { + params.Set("baseRevision", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/realtime") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Overwrites the Realtime API data model associated with this file with the provided JSON data model.", + // "httpMethod": "PUT", + // "id": "drive.realtime.update", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "10MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/drive/v2/files/{fileId}/realtime" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/drive/v2/files/{fileId}/realtime" + // } + // } + // }, + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "baseRevision": { + // "description": "The revision of the model to diff the uploaded model against. If set, the uploaded model is diffed against the provided revision and those differences are merged with any changes made to the model after the provided revision. If not set, the uploaded model replaces the current model on the server.", + // "location": "query", + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file that the Realtime API data model is associated with.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/realtime", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "drive.replies.delete": + +type RepliesDeleteCall struct { + s *Service + fileId string + commentId string + replyId string + opt_ map[string]interface{} +} + +// Delete: Deletes a reply. +func (r *RepliesService) Delete(fileId string, commentId string, replyId string) *RepliesDeleteCall { + c := &RepliesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.replyId = replyId + return c +} + +func (c *RepliesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{replyId}", url.QueryEscape(c.replyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a reply.", + // "httpMethod": "DELETE", + // "id": "drive.replies.delete", + // "parameterOrder": [ + // "fileId", + // "commentId", + // "replyId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "replyId": { + // "description": "The ID of the reply.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.replies.get": + +type RepliesGetCall struct { + s *Service + fileId string + commentId string + replyId string + opt_ map[string]interface{} +} + +// Get: Gets a reply. +func (r *RepliesService) Get(fileId string, commentId string, replyId string) *RepliesGetCall { + c := &RepliesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.replyId = replyId + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": If set, +// this will succeed when retrieving a deleted reply. +func (c *RepliesGetCall) IncludeDeleted(includeDeleted bool) *RepliesGetCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +func (c *RepliesGetCall) Do() (*CommentReply, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{replyId}", url.QueryEscape(c.replyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentReply) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a reply.", + // "httpMethod": "GET", + // "id": "drive.replies.get", + // "parameterOrder": [ + // "fileId", + // "commentId", + // "replyId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeDeleted": { + // "default": "false", + // "description": "If set, this will succeed when retrieving a deleted reply.", + // "location": "query", + // "type": "boolean" + // }, + // "replyId": { + // "description": "The ID of the reply.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + // "response": { + // "$ref": "CommentReply" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.replies.insert": + +type RepliesInsertCall struct { + s *Service + fileId string + commentId string + commentreply *CommentReply + opt_ map[string]interface{} +} + +// Insert: Creates a new reply to the given comment. +func (r *RepliesService) Insert(fileId string, commentId string, commentreply *CommentReply) *RepliesInsertCall { + c := &RepliesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.commentreply = commentreply + return c +} + +func (c *RepliesInsertCall) Do() (*CommentReply, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentReply) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new reply to the given comment.", + // "httpMethod": "POST", + // "id": "drive.replies.insert", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies", + // "request": { + // "$ref": "CommentReply" + // }, + // "response": { + // "$ref": "CommentReply" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.replies.list": + +type RepliesListCall struct { + s *Service + fileId string + commentId string + opt_ map[string]interface{} +} + +// List: Lists all of the replies to a comment. +func (r *RepliesService) List(fileId string, commentId string) *RepliesListCall { + c := &RepliesListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": If set, +// all replies, including deleted replies (with content stripped) will +// be returned. +func (c *RepliesListCall) IncludeDeleted(includeDeleted bool) *RepliesListCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of replies to include in the response, used for paging. +func (c *RepliesListCall) MaxResults(maxResults int64) *RepliesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of "nextPageToken" from +// the previous response. +func (c *RepliesListCall) PageToken(pageToken string) *RepliesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RepliesListCall) Do() (*CommentReplyList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentReplyList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all of the replies to a comment.", + // "httpMethod": "GET", + // "id": "drive.replies.list", + // "parameterOrder": [ + // "fileId", + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "includeDeleted": { + // "default": "false", + // "description": "If set, all replies, including deleted replies (with content stripped) will be returned.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of replies to include in the response, used for paging.", + // "format": "int32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies", + // "response": { + // "$ref": "CommentReplyList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.replies.patch": + +type RepliesPatchCall struct { + s *Service + fileId string + commentId string + replyId string + commentreply *CommentReply + opt_ map[string]interface{} +} + +// Patch: Updates an existing reply. This method supports patch +// semantics. +func (r *RepliesService) Patch(fileId string, commentId string, replyId string, commentreply *CommentReply) *RepliesPatchCall { + c := &RepliesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.replyId = replyId + c.commentreply = commentreply + return c +} + +func (c *RepliesPatchCall) Do() (*CommentReply, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{replyId}", url.QueryEscape(c.replyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentReply) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing reply. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.replies.patch", + // "parameterOrder": [ + // "fileId", + // "commentId", + // "replyId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "replyId": { + // "description": "The ID of the reply.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + // "request": { + // "$ref": "CommentReply" + // }, + // "response": { + // "$ref": "CommentReply" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.replies.update": + +type RepliesUpdateCall struct { + s *Service + fileId string + commentId string + replyId string + commentreply *CommentReply + opt_ map[string]interface{} +} + +// Update: Updates an existing reply. +func (r *RepliesService) Update(fileId string, commentId string, replyId string, commentreply *CommentReply) *RepliesUpdateCall { + c := &RepliesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.commentId = commentId + c.replyId = replyId + c.commentreply = commentreply + return c +} + +func (c *RepliesUpdateCall) Do() (*CommentReply, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.commentreply) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/comments/{commentId}/replies/{replyId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{replyId}", url.QueryEscape(c.replyId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentReply) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing reply.", + // "httpMethod": "PUT", + // "id": "drive.replies.update", + // "parameterOrder": [ + // "fileId", + // "commentId", + // "replyId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "replyId": { + // "description": "The ID of the reply.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/comments/{commentId}/replies/{replyId}", + // "request": { + // "$ref": "CommentReply" + // }, + // "response": { + // "$ref": "CommentReply" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.revisions.delete": + +type RevisionsDeleteCall struct { + s *Service + fileId string + revisionId string + opt_ map[string]interface{} +} + +// Delete: Removes a revision. +func (r *RevisionsService) Delete(fileId string, revisionId string) *RevisionsDeleteCall { + c := &RevisionsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.revisionId = revisionId + return c +} + +func (c *RevisionsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{revisionId}", url.QueryEscape(c.revisionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a revision.", + // "httpMethod": "DELETE", + // "id": "drive.revisions.delete", + // "parameterOrder": [ + // "fileId", + // "revisionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "revisionId": { + // "description": "The ID of the revision.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/revisions/{revisionId}", + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.revisions.get": + +type RevisionsGetCall struct { + s *Service + fileId string + revisionId string + opt_ map[string]interface{} +} + +// Get: Gets a specific revision. +func (r *RevisionsService) Get(fileId string, revisionId string) *RevisionsGetCall { + c := &RevisionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.revisionId = revisionId + return c +} + +func (c *RevisionsGetCall) Do() (*Revision, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{revisionId}", url.QueryEscape(c.revisionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Revision) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a specific revision.", + // "httpMethod": "GET", + // "id": "drive.revisions.get", + // "parameterOrder": [ + // "fileId", + // "revisionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "revisionId": { + // "description": "The ID of the revision.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/revisions/{revisionId}", + // "response": { + // "$ref": "Revision" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.revisions.list": + +type RevisionsListCall struct { + s *Service + fileId string + opt_ map[string]interface{} +} + +// List: Lists a file's revisions. +func (r *RevisionsService) List(fileId string) *RevisionsListCall { + c := &RevisionsListCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + return c +} + +func (c *RevisionsListCall) Do() (*RevisionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RevisionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists a file's revisions.", + // "httpMethod": "GET", + // "id": "drive.revisions.list", + // "parameterOrder": [ + // "fileId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID of the file.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/revisions", + // "response": { + // "$ref": "RevisionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file", + // "https://www.googleapis.com/auth/drive.metadata.readonly", + // "https://www.googleapis.com/auth/drive.readonly" + // ] + // } + +} + +// method id "drive.revisions.patch": + +type RevisionsPatchCall struct { + s *Service + fileId string + revisionId string + revision *Revision + opt_ map[string]interface{} +} + +// Patch: Updates a revision. This method supports patch semantics. +func (r *RevisionsService) Patch(fileId string, revisionId string, revision *Revision) *RevisionsPatchCall { + c := &RevisionsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.revisionId = revisionId + c.revision = revision + return c +} + +func (c *RevisionsPatchCall) Do() (*Revision, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.revision) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{revisionId}", url.QueryEscape(c.revisionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Revision) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a revision. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "drive.revisions.patch", + // "parameterOrder": [ + // "fileId", + // "revisionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "revisionId": { + // "description": "The ID for the revision.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/revisions/{revisionId}", + // "request": { + // "$ref": "Revision" + // }, + // "response": { + // "$ref": "Revision" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} + +// method id "drive.revisions.update": + +type RevisionsUpdateCall struct { + s *Service + fileId string + revisionId string + revision *Revision + opt_ map[string]interface{} +} + +// Update: Updates a revision. +func (r *RevisionsService) Update(fileId string, revisionId string, revision *Revision) *RevisionsUpdateCall { + c := &RevisionsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.fileId = fileId + c.revisionId = revisionId + c.revision = revision + return c +} + +func (c *RevisionsUpdateCall) Do() (*Revision, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.revision) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "files/{fileId}/revisions/{revisionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{fileId}", url.QueryEscape(c.fileId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{revisionId}", url.QueryEscape(c.revisionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Revision) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a revision.", + // "httpMethod": "PUT", + // "id": "drive.revisions.update", + // "parameterOrder": [ + // "fileId", + // "revisionId" + // ], + // "parameters": { + // "fileId": { + // "description": "The ID for the file.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "revisionId": { + // "description": "The ID for the revision.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "files/{fileId}/revisions/{revisionId}", + // "request": { + // "$ref": "Revision" + // }, + // "response": { + // "$ref": "Revision" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/drive", + // "https://www.googleapis.com/auth/drive.appdata", + // "https://www.googleapis.com/auth/drive.file" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/bigquery.go b/third_party/src/code.google.com/p/google-api-go-client/examples/bigquery.go new file mode 100644 index 0000000000000..a3775b7ae1903 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/bigquery.go @@ -0,0 +1,368 @@ +// Copyright 2013 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "container/list" + "encoding/json" + "fmt" + "io/ioutil" + "math" + "math/rand" + "net/http" + "os" + "strconv" + "strings" + "time" + + "code.google.com/p/google-api-go-client/bigquery/v2" + "code.google.com/p/google-api-go-client/storage/v1beta2" +) + +const ( + GB = 1 << 30 + MaxBackoff = 30000 + BaseBackoff = 250 + BackoffGrowthFactor = 1.8 + BackoffGrowthDamper = 0.25 + JobStatusDone = "DONE" + DatasetAlreadyExists = "Already Exists: Dataset" + TableWriteEmptyDisposition = "WRITE_EMPTY" +) + +func init() { + scope := fmt.Sprintf("%s %s %s", bigquery.BigqueryScope, + storage.DevstorageRead_onlyScope, + "https://www.googleapis.com/auth/userinfo.profile") + registerDemo("bigquery", scope, bqMain) +} + +// This example demonstrates loading objects from Google Cloud Storage into +// BigQuery. Objects are specified by their bucket and a name prefix. Each +// object will be loaded into a new table identified by the object name minus +// any file extension. All tables are added to the specified dataset (one will +// be created if necessary). Currently, tables will not be overwritten and an +// attempt to load an object into a dataset that already contains its table +// will emit an error message indicating the table already exists. +// A schema file must be provided and it will be applied to every object/table. +// Example usage: +// go-api-demo -clientid="my-clientid" -secret="my-secret" bq myProject +// myDataBucket datafile2013070 DataFiles2013 +// ./datafile_schema.json 100 +// +// This will load all objects (e.g. all data files from July 2013) from +// gs://myDataBucket into a (possibly new) BigQuery dataset named DataFiles2013 +// using the schema file provided and allowing up to 100 bad records. Assuming +// each object is named like datafileYYYYMMDD.csv.gz and all of July's files are +// stored in the bucket, 9 tables will be created named like datafile201307DD +// where DD ranges from 01 to 09, inclusive. +// When the program completes, it will emit a results line similar to: +// +// 9 files loaded in 3m58s (18m2.708s). Size: 7.18GB Rows: 7130725 +// +// The total elapsed time from the start of first job to the end of the last job +// (effectively wall clock time) is shown. In parenthesis is the aggregate time +// taken to load all tables. +func bqMain(client *http.Client, argv []string) { + if len(argv) != 6 { + fmt.Fprintln(os.Stderr, + "Usage: bq project_id bucket prefix dataset schema max_bad_records") + return + } + + var ( + project = argv[0] + bucket = argv[1] + objPrefix = argv[2] + datasetId = argv[3] + schemaFile = argv[4] + ) + badRecords, err := strconv.ParseInt(argv[5], 10, 64) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + rand.Seed(time.Now().UnixNano()) + + service, err := storage.New(client) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + // Get the list of objects in the bucket matching the specified prefix. + list := service.Objects.List(bucket) + list.Prefix(objPrefix) + objects, err := list.Do() + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + // Create the wrapper and insert the (new) dataset. + dataset, err := newBQDataset(client, project, datasetId) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + if err = dataset.insert(true); err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + objectSource := &tableSource{ + maxBadRecords: badRecords, + disposition: TableWriteEmptyDisposition, + } + + // Load the schema from disk. + f, err := ioutil.ReadFile(schemaFile) + if err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + if err = json.Unmarshal(f, &objectSource.schema); err != nil { + fmt.Fprintln(os.Stderr, err) + return + } + + // Assumes all objects have .csv, .csv.gz (or no) extension. + tableIdFromObject := func(name string) string { + return strings.TrimSuffix(strings.TrimSuffix(name, ".gz"), ".csv") + } + + // A jobset is way to group a collection of jobs together for monitoring. + // For this example, we just use the name of the bucket and object prefix. + jobset := fmt.Sprintf("%s:%s", bucket, objPrefix) + fmt.Fprintf(os.Stderr, "\nLoading %d objects.\n", len(objects.Items)) + + // Load each object into a dataset of the same name (minus any extension). + // A successful insert call will inject the job into our queue for monitoring. + for _, o := range objects.Items { + objectSource.id = tableIdFromObject(o.Name) + objectSource.uri = fmt.Sprintf("gs://%s/%s", o.Bucket, o.Name) + if err = dataset.load(jobset, objectSource); err != nil { + fmt.Fprintln(os.Stderr, err) + } + } + + dataset.monitor(jobset) +} + +// Wraps the BigQuery service and dataset and provides some helper functions. +type bqDataset struct { + project string + id string + bq *bigquery.Service + dataset *bigquery.Dataset + jobsets map[string]*list.List +} + +func newBQDataset(client *http.Client, dsProj string, dsId string) (*bqDataset, + error) { + + service, err := bigquery.New(client) + if err != nil { + return nil, err + } + + return &bqDataset{ + project: dsProj, + id: dsId, + bq: service, + dataset: &bigquery.Dataset{ + DatasetReference: &bigquery.DatasetReference{ + DatasetId: dsId, + ProjectId: dsProj, + }, + }, + jobsets: make(map[string]*list.List), + }, nil +} + +func (ds *bqDataset) insert(existsOK bool) error { + call := ds.bq.Datasets.Insert(ds.project, ds.dataset) + _, err := call.Do() + if err != nil && (!existsOK || !strings.Contains(err.Error(), + DatasetAlreadyExists)) { + return err + } + + return nil +} + +type tableSource struct { + id string + uri string + schema bigquery.TableSchema + maxBadRecords int64 + disposition string +} + +func (ds *bqDataset) load(jobset string, source *tableSource) error { + job := &bigquery.Job{ + Configuration: &bigquery.JobConfiguration{ + Load: &bigquery.JobConfigurationLoad{ + DestinationTable: &bigquery.TableReference{ + DatasetId: ds.dataset.DatasetReference.DatasetId, + ProjectId: ds.project, + TableId: source.id, + }, + MaxBadRecords: source.maxBadRecords, + Schema: &source.schema, + SourceUris: []string{source.uri}, + WriteDisposition: source.disposition, + }, + }, + } + + call := ds.bq.Jobs.Insert(ds.project, job) + job, err := call.Do() + if err != nil { + return err + } + + _, ok := ds.jobsets[jobset] + if !ok { + ds.jobsets[jobset] = list.New() + } + ds.jobsets[jobset].PushBack(job) + + return nil +} + +func (ds *bqDataset) getJob(id string) (*bigquery.Job, error) { + return ds.bq.Jobs.Get(ds.project, id).Do() +} + +func (ds *bqDataset) monitor(jobset string) { + jobq, ok := ds.jobsets[jobset] + if !ok { + return + } + + var backoff float64 = BaseBackoff + pause := func(grow bool) { + if grow { + backoff *= BackoffGrowthFactor + backoff -= (backoff * rand.Float64() * BackoffGrowthDamper) + backoff = math.Min(backoff, MaxBackoff) + fmt.Fprintf(os.Stderr, "[%s] Checking remaining %d jobs...\n", jobset, + 1+jobq.Len()) + } + time.Sleep(time.Duration(backoff) * time.Millisecond) + } + var stats jobStats + + // Track a 'head' pending job in queue for detecting cycling. + head := "" + // Loop until all jobs are done - with either success or error. + for jobq.Len() > 0 { + jel := jobq.Front() + job := jel.Value.(*bigquery.Job) + jobq.Remove(jel) + jid := job.JobReference.JobId + loop := false + + // Check and possibly pick a new head job id. + if len(head) == 0 { + head = jid + } else { + if jid == head { + loop = true + } + } + + // Retrieve the job's current status. + pause(loop) + j, err := ds.getJob(jid) + if err != nil { + fmt.Fprintln(os.Stderr, err) + // In this case of a transient API error, we want keep the job. + if j == nil { + jobq.PushBack(job) + } else { + // Must reset head tracker if job is discarded. + if loop { + head = "" + backoff = BaseBackoff + } + } + continue + } + + // Reassign with the updated job data (from Get). + // We don't use j here as Get might return nil for this value. + job = j + + if job.Status.State != JobStatusDone { + jobq.PushBack(job) + continue + } + + if res := job.Status.ErrorResult; res != nil { + fmt.Fprintln(os.Stderr, res.Message) + } else { + stat := job.Statistics + lstat := stat.Load + stats.files += 1 + stats.bytesIn += lstat.InputFileBytes + stats.bytesOut += lstat.OutputBytes + stats.rows += lstat.OutputRows + stats.elapsed += + time.Duration(stat.EndTime-stat.StartTime) * time.Millisecond + + if stats.start.IsZero() { + stats.start = time.Unix(stat.StartTime/1000, 0) + } else { + t := time.Unix(stat.StartTime/1000, 0) + if stats.start.Sub(t) > 0 { + stats.start = t + } + } + + if stats.finish.IsZero() { + stats.finish = time.Unix(stat.EndTime/1000, 0) + } else { + t := time.Unix(stat.EndTime/1000, 0) + if t.Sub(stats.finish) > 0 { + stats.finish = t + } + } + } + // When the head job is processed reset the backoff since the loads + // run in BQ in parallel. + if loop { + head = "" + backoff = BaseBackoff + } + } + + fmt.Fprintf(os.Stderr, "%#v\n", stats) +} + +type jobStats struct { + // Number of files (sources) loaded. + files int64 + // Bytes read from source (possibly compressed). + bytesIn int64 + // Bytes loaded into BigQuery (uncompressed). + bytesOut int64 + // Rows loaded into BigQuery. + rows int64 + // Time taken to load source into table. + elapsed time.Duration + // Start time of the job. + start time.Time + // End time of the job. + finish time.Time +} + +func (s jobStats) GoString() string { + return fmt.Sprintf("\n%d files loaded in %v (%v). Size: %.2fGB Rows: %d\n", + s.files, s.finish.Sub(s.start), s.elapsed, float64(s.bytesOut)/GB, + s.rows) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/compute.go b/third_party/src/code.google.com/p/google-api-go-client/examples/compute.go new file mode 100644 index 0000000000000..5ab157a08074d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/compute.go @@ -0,0 +1,43 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + + compute "code.google.com/p/google-api-go-client/compute/v1beta12" +) + +func init() { + registerDemo("compute", compute.ComputeScope, computeMain) +} + +func computeMain(client *http.Client, argv []string) { + if len(argv) != 2 { + fmt.Fprintln(os.Stderr, "Usage: compute project_id instance_name (to start an instance)") + return + } + + service, _ := compute.New(client) + projectId := argv[0] + instanceName := argv[1] + + prefix := "https://www.googleapis.com/compute/v1beta12/projects/" + projectId + instance := &compute.Instance{ + Name: instanceName, + Description: "compute sample instance", + Zone: prefix + "/zones/us-east-a", + MachineType: prefix + "/machine-types/standard-2-cpu-ephemeral-disk", + NetworkInterfaces: []*compute.NetworkInterface{ + &compute.NetworkInterface{ + AccessConfigs: []*compute.AccessConfig{ + &compute.AccessConfig{Type: "ONE_TO_ONE_NAT"}, + }, + Network: prefix + "/networks/default", + }, + }, + } + op, err := service.Instances.Insert(projectId, instance).Do() + log.Printf("Got compute.Operation, err: %#v, %v", op, err) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/debug.go b/third_party/src/code.google.com/p/google-api-go-client/examples/debug.go new file mode 100644 index 0000000000000..85b3ddf87cf7c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/debug.go @@ -0,0 +1,72 @@ +package main + +import ( + "bytes" + "fmt" + "io" + "io/ioutil" + "net/http" + "os" +) + +type logTransport struct { + rt http.RoundTripper +} + +func (t *logTransport) RoundTrip(req *http.Request) (*http.Response, error) { + var buf bytes.Buffer + + os.Stdout.Write([]byte("\n[request]\n")) + if req.Body != nil { + req.Body = ioutil.NopCloser(&readButCopy{req.Body, &buf}) + } + req.Write(os.Stdout) + if req.Body != nil { + req.Body = ioutil.NopCloser(&buf) + } + os.Stdout.Write([]byte("\n[/request]\n")) + + res, err := t.rt.RoundTrip(req) + + fmt.Printf("[response]\n") + if err != nil { + fmt.Printf("ERROR: %v", err) + } else { + body := res.Body + res.Body = nil + res.Write(os.Stdout) + if body != nil { + res.Body = ioutil.NopCloser(&echoAsRead{body}) + } + } + + return res, err +} + +type echoAsRead struct { + src io.Reader +} + +func (r *echoAsRead) Read(p []byte) (int, error) { + n, err := r.src.Read(p) + if n > 0 { + os.Stdout.Write(p[:n]) + } + if err == io.EOF { + fmt.Printf("\n[/response]\n") + } + return n, err +} + +type readButCopy struct { + src io.Reader + dst io.Writer +} + +func (r *readButCopy) Read(p []byte) (int, error) { + n, err := r.src.Read(p) + if n > 0 { + r.dst.Write(p[:n]) + } + return n, err +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/drive.go b/third_party/src/code.google.com/p/google-api-go-client/examples/drive.go new file mode 100644 index 0000000000000..8465d9ff2f7aa --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/drive.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + + drive "code.google.com/p/google-api-go-client/drive/v2" +) + +func init() { + registerDemo("drive", drive.DriveScope, driveMain) +} + +func driveMain(client *http.Client, argv []string) { + if len(argv) != 1 { + fmt.Fprintln(os.Stderr, "Usage: drive filename (to upload a file)") + return + } + + service, _ := drive.New(client) + filename := argv[0] + + goFile, err := os.Open(filename) + if err != nil { + log.Fatalf("error opening %q: %v", filename, err) + } + driveFile, err := service.Files.Insert(&drive.File{Title: filename}).Media(goFile).Do() + log.Printf("Got drive.File, err: %#v, %v", driveFile, err) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/gopher.png b/third_party/src/code.google.com/p/google-api-go-client/examples/gopher.png new file mode 100644 index 0000000000000000000000000000000000000000..4cf1da8969e41baef324ced3c6c840551b2a7381 GIT binary patch literal 23019 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

NO`iIXhdsczbwwVB_Fy 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 literal 0 HcmV?d00001 diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/main.go b/third_party/src/code.google.com/p/google-api-go-client/examples/main.go new file mode 100644 index 0000000000000..37b7eeb470d05 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/main.go @@ -0,0 +1,219 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "encoding/gob" + "errors" + "flag" + "fmt" + "hash/fnv" + "io/ioutil" + "log" + "net/http" + "net/http/httptest" + "net/url" + "os" + "os/exec" + "path/filepath" + "runtime" + "strings" + "time" + + "code.google.com/p/goauth2/oauth" +) + +var config = &oauth.Config{ + ClientId: "", // Set by --clientid or --clientid_file + ClientSecret: "", // Set by --secret or --secret_file + Scope: "", // filled in per-API + AuthURL: "https://accounts.google.com/o/oauth2/auth", + TokenURL: "https://accounts.google.com/o/oauth2/token", +} + +// Flags +var ( + clientId = flag.String("clientid", "", "OAuth Client ID. If non-empty, overrides --clientid_file") + clientIdFile = flag.String("clientid_file", "clientid.dat", + "Name of a file containing just the project's OAuth Client ID from https://code.google.com/apis/console/") + secret = flag.String("secret", "", "OAuth Client Secret. If non-empty, overrides --secret_file") + secretFile = flag.String("secret_file", "clientsecret.dat", + "Name of a file containing just the project's OAuth Client Secret from https://code.google.com/apis/console/") + cacheToken = flag.Bool("cachetoken", true, "cache the OAuth token") + debug = flag.Bool("debug", false, "show HTTP traffic") +) + +func usage() { + fmt.Fprintf(os.Stderr, "Usage: go-api-demo [api name args]\n\nPossible APIs:\n\n") + for n, _ := range demoFunc { + fmt.Fprintf(os.Stderr, " * %s\n", n) + } + os.Exit(2) +} + +func main() { + flag.Parse() + if flag.NArg() == 0 { + usage() + } + + name := flag.Arg(0) + demo, ok := demoFunc[name] + if !ok { + usage() + } + + config.Scope = demoScope[name] + config.ClientId = valueOrFileContents(*clientId, *clientIdFile) + config.ClientSecret = valueOrFileContents(*secret, *secretFile) + + c := getOAuthClient(config) + demo(c, flag.Args()[1:]) +} + +var ( + demoFunc = make(map[string]func(*http.Client, []string)) + demoScope = make(map[string]string) +) + +func registerDemo(name, scope string, main func(c *http.Client, argv []string)) { + if demoFunc[name] != nil { + panic(name + " already registered") + } + demoFunc[name] = main + demoScope[name] = scope +} + +func osUserCacheDir() string { + switch runtime.GOOS { + case "darwin": + return filepath.Join(os.Getenv("HOME"), "Library", "Caches") + case "linux", "freebsd": + return filepath.Join(os.Getenv("HOME"), ".cache") + } + log.Printf("TODO: osUserCacheDir on GOOS %q", runtime.GOOS) + return "." +} + +func tokenCacheFile(config *oauth.Config) string { + hash := fnv.New32a() + hash.Write([]byte(config.ClientId)) + hash.Write([]byte(config.ClientSecret)) + hash.Write([]byte(config.Scope)) + fn := fmt.Sprintf("go-api-demo-tok%v", hash.Sum32()) + return filepath.Join(osUserCacheDir(), url.QueryEscape(fn)) +} + +func tokenFromFile(file string) (*oauth.Token, error) { + if !*cacheToken { + return nil, errors.New("--cachetoken is false") + } + f, err := os.Open(file) + if err != nil { + return nil, err + } + t := new(oauth.Token) + err = gob.NewDecoder(f).Decode(t) + return t, err +} + +func saveToken(file string, token *oauth.Token) { + f, err := os.Create(file) + if err != nil { + log.Printf("Warning: failed to cache oauth token: %v", err) + return + } + defer f.Close() + gob.NewEncoder(f).Encode(token) +} + +func condDebugTransport(rt http.RoundTripper) http.RoundTripper { + if *debug { + return &logTransport{rt} + } + return rt +} + +func getOAuthClient(config *oauth.Config) *http.Client { + cacheFile := tokenCacheFile(config) + token, err := tokenFromFile(cacheFile) + if err != nil { + token = tokenFromWeb(config) + saveToken(cacheFile, token) + } else { + log.Printf("Using cached token %#v from %q", token, cacheFile) + } + + t := &oauth.Transport{ + Token: token, + Config: config, + Transport: condDebugTransport(http.DefaultTransport), + } + return t.Client() +} + +func tokenFromWeb(config *oauth.Config) *oauth.Token { + ch := make(chan string) + randState := fmt.Sprintf("st%d", time.Now().UnixNano()) + ts := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) { + if req.URL.Path == "/favicon.ico" { + http.Error(rw, "", 404) + return + } + if req.FormValue("state") != randState { + log.Printf("State doesn't match: req = %#v", req) + http.Error(rw, "", 500) + return + } + if code := req.FormValue("code"); code != "" { + fmt.Fprintf(rw, "

Success

Authorized.") + rw.(http.Flusher).Flush() + ch <- code + return + } + log.Printf("no code") + http.Error(rw, "", 500) + })) + defer ts.Close() + + config.RedirectURL = ts.URL + authUrl := config.AuthCodeURL(randState) + go openUrl(authUrl) + log.Printf("Authorize this app at: %s", authUrl) + code := <-ch + log.Printf("Got code: %s", code) + + t := &oauth.Transport{ + Config: config, + Transport: condDebugTransport(http.DefaultTransport), + } + _, err := t.Exchange(code) + if err != nil { + log.Fatalf("Token exchange error: %v", err) + } + return t.Token +} + +func openUrl(url string) { + try := []string{"xdg-open", "google-chrome", "open"} + for _, bin := range try { + err := exec.Command(bin, url).Run() + if err == nil { + return + } + } + log.Printf("Error opening URL in browser.") +} + +func valueOrFileContents(value string, filename string) string { + if value != "" { + return value + } + slurp, err := ioutil.ReadFile(filename) + if err != nil { + log.Fatalf("Error reading %q: %v", filename, err) + } + return strings.TrimSpace(string(slurp)) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/orkut.go b/third_party/src/code.google.com/p/google-api-go-client/examples/orkut.go new file mode 100644 index 0000000000000..6fcecfb265f55 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/orkut.go @@ -0,0 +1,36 @@ +package main + +import ( + "log" + "net/http" + + orkut "code.google.com/p/google-api-go-client/orkut/v2" +) + +func init() { + registerDemo("orkut", orkut.OrkutScope, orkutMain) +} + +func orkutMain(client *http.Client, argv []string) { + orkutapi, _ := orkut.New(client) + myBadges, err := orkutapi.Badges.List("me").Do() + if err != nil { + log.Println(err) + return + } + + log.Println("Listing my badges") + for _, badge := range myBadges.Items { + log.Printf("Got badge %v", badge.Caption) + } + + myStream, err := orkutapi.Activities.List("me", "stream").Do() + if err != nil { + log.Println(err) + return + } + log.Println("Showing my activity stream") + for _, activity := range myStream.Items { + log.Printf("Actor: %v; Content: %v", activity.Actor.DisplayName, activity.Object.Content) + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/prediction.go b/third_party/src/code.google.com/p/google-api-go-client/examples/prediction.go new file mode 100644 index 0000000000000..99eb5c5da0ea3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/prediction.go @@ -0,0 +1,137 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "log" + "net/http" + "os" + "path/filepath" + "strings" + + "code.google.com/p/google-api-go-client/googleapi" + prediction "code.google.com/p/google-api-go-client/prediction/v1.6" +) + +func init() { + scopes := []string{ + prediction.DevstorageFull_controlScope, + prediction.DevstorageRead_onlyScope, + prediction.DevstorageRead_writeScope, + prediction.PredictionScope, + } + registerDemo("prediction", strings.Join(scopes, " "), predictionMain) +} + +type predictionType struct { + api *prediction.Service + projectNumber string + bucketName string + trainingFileName string + modelName string +} + +// This example demonstrates calling the Prediction API. +// Training data is uploaded to a pre-created Google Cloud Storage Bucket and +// then the Prediction API is called to train a model based on that data. +// After a few minutes, the model should be completely trained and ready +// for prediction. At that point, text is sent to the model and the Prediction +// API attempts to classify the data, and the results are printed out. +// +// To get started, follow the instructions found in the "Hello Prediction!" +// Getting Started Guide located here: +// https://developers.google.com/prediction/docs/hello_world +// +// Example usage: +// go-api-demo -clientid="my-clientid" -secret="my-secret" prediction +// my-project-number my-bucket-name my-training-filename my-model-name +// +// Example output: +// Predict result: language=Spanish +// English Score: 0.000000 +// French Score: 0.000000 +// Spanish Score: 1.000000 +// analyze: output feature text=&{157 English} +// analyze: output feature text=&{149 French} +// analyze: output feature text=&{100 Spanish} +// feature text count=406 +func predictionMain(client *http.Client, argv []string) { + if len(argv) != 4 { + fmt.Fprintln(os.Stderr, + "Usage: prediction project_number bucket training_data model_name") + return + } + + api, err := prediction.New(client) + if err != nil { + log.Fatalf("unable to create prediction API client: %v", err) + } + + t := &predictionType{ + api: api, + projectNumber: argv[0], + bucketName: argv[1], + trainingFileName: argv[2], + modelName: argv[3], + } + + t.trainModel() + t.predictModel() +} + +func (t *predictionType) trainModel() { + // First, check to see if our trained model already exists. + res, err := t.api.Trainedmodels.Get(t.projectNumber, t.modelName).Do() + if err != nil { + if ae, ok := err.(*googleapi.Error); ok && ae.Code != http.StatusNotFound { + log.Fatalf("error getting trained model: %v", err) + } + log.Printf("Training model not found, creating new model.") + res, err = t.api.Trainedmodels.Insert(t.projectNumber, &prediction.Insert{ + Id: t.modelName, + StorageDataLocation: filepath.Join(t.bucketName, t.trainingFileName), + }).Do() + if err != nil { + log.Fatalf("unable to create trained model: %v", err) + } + } + if res.TrainingStatus != "DONE" { + // Wait for the trained model to finish training. + fmt.Printf("Training model. Please wait and re-run program after a few minutes.") + os.Exit(0) + } +} + +func (t *predictionType) predictModel() { + // Model has now been trained. Predict with it. + input := &prediction.Input{ + &prediction.InputInput{ + []interface{}{ + "Hola, con quien hablo", + }, + }, + } + res, err := t.api.Trainedmodels.Predict(t.projectNumber, t.modelName, input).Do() + if err != nil { + log.Fatalf("unable to get trained prediction: %v", err) + } + fmt.Printf("Predict result: language=%v\n", res.OutputLabel) + for _, m := range res.OutputMulti { + fmt.Printf("%v Score: %v\n", m.Label, m.Score) + } + + // Now analyze the model. + an, err := t.api.Trainedmodels.Analyze(t.projectNumber, t.modelName).Do() + if err != nil { + log.Fatalf("unable to analyze trained model: %v", err) + } + for _, f := range an.DataDescription.OutputFeature.Text { + fmt.Printf("analyze: output feature text=%v\n", f) + } + for _, f := range an.DataDescription.Features { + fmt.Printf("feature text count=%v\n", f.Text.Count) + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/storage.go b/third_party/src/code.google.com/p/google-api-go-client/examples/storage.go new file mode 100644 index 0000000000000..0f898e7fe1025 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/storage.go @@ -0,0 +1,32 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + + storage "code.google.com/p/google-api-go-client/storage/v1beta1" +) + +func init() { + registerDemo("storage", storage.DevstorageRead_writeScope, storageMain) +} + +func storageMain(client *http.Client, argv []string) { + if len(argv) != 2 { + fmt.Fprintln(os.Stderr, "Usage: storage filename bucket (to upload an object)") + return + } + + service, _ := storage.New(client) + filename := argv[0] + bucket := argv[1] + + goFile, err := os.Open(filename) + if err != nil { + log.Fatalf("error opening %q: %v", filename, err) + } + storageObject, err := service.Objects.Insert(bucket, &storage.Object{Name: filename}).Media(goFile).Do() + log.Printf("Got storage.Object, err: %#v, %v", storageObject, err) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/tasks.go b/third_party/src/code.google.com/p/google-api-go-client/examples/tasks.go new file mode 100644 index 0000000000000..c648531cf8582 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/tasks.go @@ -0,0 +1,22 @@ +package main + +import ( + "log" + "net/http" + + tasks "code.google.com/p/google-api-go-client/tasks/v1" +) + +func init() { + registerDemo("tasks", tasks.TasksScope, tasksMain) +} + +func tasksMain(client *http.Client, argv []string) { + taskapi, _ := tasks.New(client) + task, err := taskapi.Tasks.Insert("@default", &tasks.Task{ + Title: "finish this API code generator thing", + Notes: "ummmm", + Due: "2011-10-15T12:00:00.000Z", + }).Do() + log.Printf("Got task, err: %#v, %v", task, err) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/examples/urlshortener.go b/third_party/src/code.google.com/p/google-api-go-client/examples/urlshortener.go new file mode 100644 index 0000000000000..47b338d993a52 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/examples/urlshortener.go @@ -0,0 +1,46 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + "strings" + + urlshortener "code.google.com/p/google-api-go-client/urlshortener/v1" +) + +func init() { + registerDemo("urlshortener", urlshortener.UrlshortenerScope, urlShortenerMain) +} + +func urlShortenerMain(client *http.Client, argv []string) { + if len(argv) != 1 { + fmt.Fprintf(os.Stderr, "Usage: urlshortener http://goo.gl/xxxxx (to look up details)\n") + fmt.Fprintf(os.Stderr, " urlshortener http://example.com/long (to shorten)\n") + return + } + + svc, _ := urlshortener.New(client) + urlstr := argv[0] + + // short -> long + if strings.HasPrefix(urlstr, "http://goo.gl/") || strings.HasPrefix(urlstr, "https://goo.gl/") { + url, err := svc.Url.Get(urlstr).Do() + if err != nil { + log.Fatalf("URL Get: %v", err) + } + fmt.Printf("Lookup of %s: %s\n", urlstr, url.LongUrl) + return + } + + // long -> short + url, err := svc.Url.Insert(&urlshortener.Url{ + Kind: "urlshortener#url", // Not really needed + LongUrl: urlstr, + }).Do() + if err != nil { + log.Fatalf("URL Insert: %v", err) + } + fmt.Printf("Shortened %s => %s\n", urlstr, url.Id) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-api.json b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-api.json new file mode 100644 index 0000000000000..73d9304235eeb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-api.json @@ -0,0 +1,411 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/U99ZyknsLQRi0oWob1lL-8fNevE\"", + "discoveryVersion": "v1", + "id": "freebase:v1-sandbox", + "name": "freebase", + "version": "v1-sandbox", + "title": "Freebase Search", + "description": "Find Freebase entities using textual queries and other constraints.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/freebase-16.png", + "x32": "http://www.google.com/images/icons/product/freebase-32.png" + }, + "documentationLink": "https://developers.google.com/freebase/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/freebase/v1-sandbox/", + "basePath": "/freebase/v1-sandbox/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "freebase/v1-sandbox/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "ReconcileCandidate": { + "id": "ReconcileCandidate", + "type": "object", + "properties": { + "confidence": { + "type": "number", + "description": "Percentage likelihood that this candidate is the unique matching entity. Value will be between 0.0 and 1.0", + "format": "float" + }, + "lang": { + "type": "string", + "description": "Language code that candidate and notable names are displayed in." + }, + "mid": { + "type": "string", + "description": "Freebase MID of candidate entity." + }, + "name": { + "type": "string", + "description": "Freebase name of matching entity in specified language." + }, + "notable": { + "type": "object", + "description": "Type or profession the candidate is notable for.", + "properties": { + "id": { + "type": "string", + "description": "MID of notable category." + }, + "name": { + "type": "string", + "description": "Name of notable category in specified language." + } + } + } + } + }, + "ReconcileGet": { + "id": "ReconcileGet", + "type": "object", + "properties": { + "candidate": { + "type": "array", + "description": "If filled, then the listed candidates are potential matches, and such should be evaluated by a more discerning algorithm or human. The matches are ordered by confidence.", + "items": { + "$ref": "ReconcileCandidate" + } + }, + "costs": { + "type": "object", + "description": "Server costs for reconciling.", + "properties": { + "hits": { + "type": "integer", + "description": "Total number of hits found.", + "format": "int32" + }, + "ms": { + "type": "integer", + "description": "Total milliseconds spent.", + "format": "int32" + } + } + }, + "match": { + "$ref": "ReconcileCandidate", + "description": "If filled, this entity is guaranteed to match at requested confidence probability (default 99%)." + }, + "warning": { + "type": "array", + "description": "If filled, then there were recoverable problems that affected the request. For example, some of the properties were ignored because they either are not valid Freebase predicates or are not indexed for reconciliation. The candidates returned should be considered valid results, with the caveat that sections of the request were ignored as specified by the warning text.", + "items": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "Location of warning in the request e.g. invalid predicate." + }, + "message": { + "type": "string", + "description": "Warning message to display to the user." + }, + "reason": { + "type": "string", + "description": "Code for identifying classes of warnings." + } + } + } + } + } + } + }, + "methods": { + "reconcile": { + "id": "freebase.reconcile", + "path": "reconcile", + "httpMethod": "GET", + "description": "Reconcile entities to Freebase open data.", + "parameters": { + "confidence": { + "type": "number", + "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + "default": "0.99", + "format": "float", + "minimum": "0.0", + "maximum": "1.0", + "location": "query" + }, + "kind": { + "type": "string", + "description": "Classifications of entity e.g. type, category, title.", + "repeated": true, + "location": "query" + }, + "lang": { + "type": "string", + "description": "Languages for names and values. First language is used for display. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of candidates to return.", + "default": "3", + "format": "int32", + "minimum": "0", + "maximum": "25", + "location": "query" + }, + "name": { + "type": "string", + "description": "Name of entity.", + "location": "query" + }, + "prop": { + "type": "string", + "description": "Property values for entity formatted as\n:", + "repeated": true, + "location": "query" + } + }, + "response": { + "$ref": "ReconcileGet" + } + }, + "search": { + "id": "freebase.search", + "path": "search", + "httpMethod": "GET", + "description": "Search Freebase open data.", + "parameters": { + "as_of_time": { + "type": "string", + "description": "A mql as_of_time value to use with mql_output queries.", + "location": "query" + }, + "callback": { + "type": "string", + "description": "JS method name for JSONP callbacks.", + "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + "location": "query" + }, + "cursor": { + "type": "integer", + "description": "The cursor value to use for the next page of results.", + "format": "int32", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Restrict to topics with this Freebase domain id.", + "repeated": true, + "location": "query" + }, + "encode": { + "type": "string", + "description": "The encoding of the response. You can use this parameter to enable html encoding.", + "default": "off", + "enum": [ + "html", + "off" + ], + "enumDescriptions": [ + "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + ], + "location": "query" + }, + "exact": { + "type": "boolean", + "description": "Query on exact name and keys only.", + "location": "query" + }, + "filter": { + "type": "string", + "description": "A filter to apply to the query.", + "pattern": "^\\(.*\\)$", + "repeated": true, + "location": "query" + }, + "format": { + "type": "string", + "description": "Structural format of the json response.", + "default": "entity", + "enum": [ + "ac", + "classic", + "entity", + "guids", + "ids", + "mids" + ], + "enumDescriptions": [ + "Compact format useful for autocomplete/suggest UIs.", + "[DEPRECATED] Same format as was returned by api.freebase.com.", + "Basic information about the entities.", + "[DEPRECATED] Ordered list of a freebase guids.", + "Ordered list of freebase ids.", + "Ordered list of freebase mids." + ], + "location": "query" + }, + "help": { + "type": "string", + "description": "The keyword to request help on.", + "enum": [ + "langs", + "mappings", + "predicates" + ], + "enumDescriptions": [ + "The language codes served by the service.", + "The property/path mappings supported by the filter and output request parameters.", + "The predicates and path-terminating properties supported by the filter and output request parameters." + ], + "location": "query" + }, + "indent": { + "type": "boolean", + "description": "Whether to indent the json results or not.", + "location": "query" + }, + "lang": { + "type": "string", + "description": "The code of the language to run the query with. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of results to return.", + "default": "20", + "format": "int32", + "location": "query" + }, + "mid": { + "type": "string", + "description": "A mid to use instead of a query.", + "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + "repeated": true, + "location": "query" + }, + "mql_output": { + "type": "string", + "description": "The MQL query to run againist the results to extract more data.", + "location": "query" + }, + "output": { + "type": "string", + "description": "An output expression to request data from matches.", + "pattern": "^\\(.*\\)$", + "location": "query" + }, + "prefixed": { + "type": "boolean", + "description": "Prefix match against names and aliases.", + "location": "query" + }, + "query": { + "type": "string", + "description": "Query term to search for.", + "location": "query" + }, + "scoring": { + "type": "string", + "description": "Relevance scoring algorithm to use.", + "default": "entity", + "enum": [ + "entity", + "freebase", + "schema" + ], + "enumDescriptions": [ + "Use freebase and popularity entity ranking.", + "Use freebase entity ranking.", + "Use schema ranking for properties and types." + ], + "location": "query" + }, + "spell": { + "type": "string", + "description": "Request 'did you mean' suggestions", + "default": "no_spelling", + "enum": [ + "always", + "no_results", + "no_spelling" + ], + "enumDescriptions": [ + "Request spelling suggestions for any query at least three characters long.", + "Request spelling suggestions if no results were found.", + "Don't request spelling suggestions." + ], + "location": "query" + }, + "stemmed": { + "type": "boolean", + "description": "Query on stemmed names and aliases. May not be used with prefixed.", + "location": "query" + }, + "type": { + "type": "string", + "description": "Restrict to topics with this Freebase type id.", + "repeated": true, + "location": "query" + }, + "with": { + "type": "string", + "description": "A rule to match against.", + "repeated": true, + "location": "query" + }, + "without": { + "type": "string", + "description": "A rule to not match against.", + "repeated": true, + "location": "query" + } + }, + "supportsMediaDownload": true + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-gen.go b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-gen.go new file mode 100644 index 0000000000000..9d439ca057d67 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1-sandbox/freebase-gen.go @@ -0,0 +1,729 @@ +// Package freebase provides access to the Freebase Search. +// +// See https://developers.google.com/freebase/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/freebase/v1-sandbox" +// ... +// freebaseService, err := freebase.New(oauthHttpClient) +package freebase + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "freebase:v1-sandbox" +const apiName = "freebase" +const apiVersion = "v1-sandbox" +const basePath = "https://www.googleapis.com/freebase/v1-sandbox/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type ReconcileCandidate struct { + // Confidence: Percentage likelihood that this candidate is the unique + // matching entity. Value will be between 0.0 and 1.0 + Confidence float64 `json:"confidence,omitempty"` + + // Lang: Language code that candidate and notable names are displayed + // in. + Lang string `json:"lang,omitempty"` + + // Mid: Freebase MID of candidate entity. + Mid string `json:"mid,omitempty"` + + // Name: Freebase name of matching entity in specified language. + Name string `json:"name,omitempty"` + + // Notable: Type or profession the candidate is notable for. + Notable *ReconcileCandidateNotable `json:"notable,omitempty"` +} + +type ReconcileCandidateNotable struct { + // Id: MID of notable category. + Id string `json:"id,omitempty"` + + // Name: Name of notable category in specified language. + Name string `json:"name,omitempty"` +} + +type ReconcileGet struct { + // Candidate: If filled, then the listed candidates are potential + // matches, and such should be evaluated by a more discerning algorithm + // or human. The matches are ordered by confidence. + Candidate []*ReconcileCandidate `json:"candidate,omitempty"` + + // Costs: Server costs for reconciling. + Costs *ReconcileGetCosts `json:"costs,omitempty"` + + // Match: If filled, this entity is guaranteed to match at requested + // confidence probability (default 99%). + Match *ReconcileCandidate `json:"match,omitempty"` + + // Warning: If filled, then there were recoverable problems that + // affected the request. For example, some of the properties were + // ignored because they either are not valid Freebase predicates or are + // not indexed for reconciliation. The candidates returned should be + // considered valid results, with the caveat that sections of the + // request were ignored as specified by the warning text. + Warning []*ReconcileGetWarning `json:"warning,omitempty"` +} + +type ReconcileGetCosts struct { + // Hits: Total number of hits found. + Hits int64 `json:"hits,omitempty"` + + // Ms: Total milliseconds spent. + Ms int64 `json:"ms,omitempty"` +} + +type ReconcileGetWarning struct { + // Location: Location of warning in the request e.g. invalid predicate. + Location string `json:"location,omitempty"` + + // Message: Warning message to display to the user. + Message string `json:"message,omitempty"` + + // Reason: Code for identifying classes of warnings. + Reason string `json:"reason,omitempty"` +} + +// method id "freebase.reconcile": + +type ReconcileCall struct { + s *Service + opt_ map[string]interface{} +} + +// Reconcile: Reconcile entities to Freebase open data. +func (s *Service) Reconcile() *ReconcileCall { + c := &ReconcileCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// Confidence sets the optional parameter "confidence": Required +// confidence for a candidate to match. Must be between .5 and 1.0 +func (c *ReconcileCall) Confidence(confidence float64) *ReconcileCall { + c.opt_["confidence"] = confidence + return c +} + +// Kind sets the optional parameter "kind": Classifications of entity +// e.g. type, category, title. +func (c *ReconcileCall) Kind(kind string) *ReconcileCall { + c.opt_["kind"] = kind + return c +} + +// Lang sets the optional parameter "lang": Languages for names and +// values. First language is used for display. Default is 'en'. +func (c *ReconcileCall) Lang(lang string) *ReconcileCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of +// candidates to return. +func (c *ReconcileCall) Limit(limit int64) *ReconcileCall { + c.opt_["limit"] = limit + return c +} + +// Name sets the optional parameter "name": Name of entity. +func (c *ReconcileCall) Name(name string) *ReconcileCall { + c.opt_["name"] = name + return c +} + +// Prop sets the optional parameter "prop": Property values for entity +// formatted as +// : +func (c *ReconcileCall) Prop(prop string) *ReconcileCall { + c.opt_["prop"] = prop + return c +} + +func (c *ReconcileCall) Do() (*ReconcileGet, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["confidence"]; ok { + params.Set("confidence", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["kind"]; ok { + params.Set("kind", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prop"]; ok { + params.Set("prop", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reconcile") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReconcileGet) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Reconcile entities to Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.reconcile", + // "parameters": { + // "confidence": { + // "default": "0.99", + // "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + // "format": "float", + // "location": "query", + // "maximum": "1.0", + // "minimum": "0.0", + // "type": "number" + // }, + // "kind": { + // "description": "Classifications of entity e.g. type, category, title.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "lang": { + // "description": "Languages for names and values. First language is used for display. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "3", + // "description": "Maximum number of candidates to return.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "0", + // "type": "integer" + // }, + // "name": { + // "description": "Name of entity.", + // "location": "query", + // "type": "string" + // }, + // "prop": { + // "description": "Property values for entity formatted as\n:", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "reconcile", + // "response": { + // "$ref": "ReconcileGet" + // } + // } + +} + +// method id "freebase.search": + +type SearchCall struct { + s *Service + opt_ map[string]interface{} +} + +// Search: Search Freebase open data. +func (s *Service) Search() *SearchCall { + c := &SearchCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// As_of_time sets the optional parameter "as_of_time": A mql as_of_time +// value to use with mql_output queries. +func (c *SearchCall) As_of_time(as_of_time string) *SearchCall { + c.opt_["as_of_time"] = as_of_time + return c +} + +// Callback sets the optional parameter "callback": JS method name for +// JSONP callbacks. +func (c *SearchCall) Callback(callback string) *SearchCall { + c.opt_["callback"] = callback + return c +} + +// Cursor sets the optional parameter "cursor": The cursor value to use +// for the next page of results. +func (c *SearchCall) Cursor(cursor int64) *SearchCall { + c.opt_["cursor"] = cursor + return c +} + +// Domain sets the optional parameter "domain": Restrict to topics with +// this Freebase domain id. +func (c *SearchCall) Domain(domain string) *SearchCall { + c.opt_["domain"] = domain + return c +} + +// Encode sets the optional parameter "encode": The encoding of the +// response. You can use this parameter to enable html encoding. +func (c *SearchCall) Encode(encode string) *SearchCall { + c.opt_["encode"] = encode + return c +} + +// Exact sets the optional parameter "exact": Query on exact name and +// keys only. +func (c *SearchCall) Exact(exact bool) *SearchCall { + c.opt_["exact"] = exact + return c +} + +// Filter sets the optional parameter "filter": A filter to apply to the +// query. +func (c *SearchCall) Filter(filter string) *SearchCall { + c.opt_["filter"] = filter + return c +} + +// Format sets the optional parameter "format": Structural format of the +// json response. +func (c *SearchCall) Format(format string) *SearchCall { + c.opt_["format"] = format + return c +} + +// Help sets the optional parameter "help": The keyword to request help +// on. +func (c *SearchCall) Help(help string) *SearchCall { + c.opt_["help"] = help + return c +} + +// Indent sets the optional parameter "indent": Whether to indent the +// json results or not. +func (c *SearchCall) Indent(indent bool) *SearchCall { + c.opt_["indent"] = indent + return c +} + +// Lang sets the optional parameter "lang": The code of the language to +// run the query with. Default is 'en'. +func (c *SearchCall) Lang(lang string) *SearchCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of results +// to return. +func (c *SearchCall) Limit(limit int64) *SearchCall { + c.opt_["limit"] = limit + return c +} + +// Mid sets the optional parameter "mid": A mid to use instead of a +// query. +func (c *SearchCall) Mid(mid string) *SearchCall { + c.opt_["mid"] = mid + return c +} + +// Mql_output sets the optional parameter "mql_output": The MQL query to +// run againist the results to extract more data. +func (c *SearchCall) Mql_output(mql_output string) *SearchCall { + c.opt_["mql_output"] = mql_output + return c +} + +// Output sets the optional parameter "output": An output expression to +// request data from matches. +func (c *SearchCall) Output(output string) *SearchCall { + c.opt_["output"] = output + return c +} + +// Prefixed sets the optional parameter "prefixed": Prefix match against +// names and aliases. +func (c *SearchCall) Prefixed(prefixed bool) *SearchCall { + c.opt_["prefixed"] = prefixed + return c +} + +// Query sets the optional parameter "query": Query term to search for. +func (c *SearchCall) Query(query string) *SearchCall { + c.opt_["query"] = query + return c +} + +// Scoring sets the optional parameter "scoring": Relevance scoring +// algorithm to use. +func (c *SearchCall) Scoring(scoring string) *SearchCall { + c.opt_["scoring"] = scoring + return c +} + +// Spell sets the optional parameter "spell": Request 'did you mean' +// suggestions +func (c *SearchCall) Spell(spell string) *SearchCall { + c.opt_["spell"] = spell + return c +} + +// Stemmed sets the optional parameter "stemmed": Query on stemmed names +// and aliases. May not be used with prefixed. +func (c *SearchCall) Stemmed(stemmed bool) *SearchCall { + c.opt_["stemmed"] = stemmed + return c +} + +// Type sets the optional parameter "type": Restrict to topics with this +// Freebase type id. +func (c *SearchCall) Type(type_ string) *SearchCall { + c.opt_["type"] = type_ + return c +} + +// With sets the optional parameter "with": A rule to match against. +func (c *SearchCall) With(with string) *SearchCall { + c.opt_["with"] = with + return c +} + +// Without sets the optional parameter "without": A rule to not match +// against. +func (c *SearchCall) Without(without string) *SearchCall { + c.opt_["without"] = without + return c +} + +func (c *SearchCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["as_of_time"]; ok { + params.Set("as_of_time", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["callback"]; ok { + params.Set("callback", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cursor"]; ok { + params.Set("cursor", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["encode"]; ok { + params.Set("encode", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["exact"]; ok { + params.Set("exact", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["format"]; ok { + params.Set("format", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["help"]; ok { + params.Set("help", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["indent"]; ok { + params.Set("indent", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mid"]; ok { + params.Set("mid", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mql_output"]; ok { + params.Set("mql_output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["output"]; ok { + params.Set("output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefixed"]; ok { + params.Set("prefixed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scoring"]; ok { + params.Set("scoring", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["spell"]; ok { + params.Set("spell", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["stemmed"]; ok { + params.Set("stemmed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["with"]; ok { + params.Set("with", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["without"]; ok { + params.Set("without", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Search Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.search", + // "parameters": { + // "as_of_time": { + // "description": "A mql as_of_time value to use with mql_output queries.", + // "location": "query", + // "type": "string" + // }, + // "callback": { + // "description": "JS method name for JSONP callbacks.", + // "location": "query", + // "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + // "type": "string" + // }, + // "cursor": { + // "description": "The cursor value to use for the next page of results.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "domain": { + // "description": "Restrict to topics with this Freebase domain id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "encode": { + // "default": "off", + // "description": "The encoding of the response. You can use this parameter to enable html encoding.", + // "enum": [ + // "html", + // "off" + // ], + // "enumDescriptions": [ + // "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + // "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + // ], + // "location": "query", + // "type": "string" + // }, + // "exact": { + // "description": "Query on exact name and keys only.", + // "location": "query", + // "type": "boolean" + // }, + // "filter": { + // "description": "A filter to apply to the query.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "repeated": true, + // "type": "string" + // }, + // "format": { + // "default": "entity", + // "description": "Structural format of the json response.", + // "enum": [ + // "ac", + // "classic", + // "entity", + // "guids", + // "ids", + // "mids" + // ], + // "enumDescriptions": [ + // "Compact format useful for autocomplete/suggest UIs.", + // "[DEPRECATED] Same format as was returned by api.freebase.com.", + // "Basic information about the entities.", + // "[DEPRECATED] Ordered list of a freebase guids.", + // "Ordered list of freebase ids.", + // "Ordered list of freebase mids." + // ], + // "location": "query", + // "type": "string" + // }, + // "help": { + // "description": "The keyword to request help on.", + // "enum": [ + // "langs", + // "mappings", + // "predicates" + // ], + // "enumDescriptions": [ + // "The language codes served by the service.", + // "The property/path mappings supported by the filter and output request parameters.", + // "The predicates and path-terminating properties supported by the filter and output request parameters." + // ], + // "location": "query", + // "type": "string" + // }, + // "indent": { + // "description": "Whether to indent the json results or not.", + // "location": "query", + // "type": "boolean" + // }, + // "lang": { + // "description": "The code of the language to run the query with. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "20", + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "mid": { + // "description": "A mid to use instead of a query.", + // "location": "query", + // "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + // "repeated": true, + // "type": "string" + // }, + // "mql_output": { + // "description": "The MQL query to run againist the results to extract more data.", + // "location": "query", + // "type": "string" + // }, + // "output": { + // "description": "An output expression to request data from matches.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "type": "string" + // }, + // "prefixed": { + // "description": "Prefix match against names and aliases.", + // "location": "query", + // "type": "boolean" + // }, + // "query": { + // "description": "Query term to search for.", + // "location": "query", + // "type": "string" + // }, + // "scoring": { + // "default": "entity", + // "description": "Relevance scoring algorithm to use.", + // "enum": [ + // "entity", + // "freebase", + // "schema" + // ], + // "enumDescriptions": [ + // "Use freebase and popularity entity ranking.", + // "Use freebase entity ranking.", + // "Use schema ranking for properties and types." + // ], + // "location": "query", + // "type": "string" + // }, + // "spell": { + // "default": "no_spelling", + // "description": "Request 'did you mean' suggestions", + // "enum": [ + // "always", + // "no_results", + // "no_spelling" + // ], + // "enumDescriptions": [ + // "Request spelling suggestions for any query at least three characters long.", + // "Request spelling suggestions if no results were found.", + // "Don't request spelling suggestions." + // ], + // "location": "query", + // "type": "string" + // }, + // "stemmed": { + // "description": "Query on stemmed names and aliases. May not be used with prefixed.", + // "location": "query", + // "type": "boolean" + // }, + // "type": { + // "description": "Restrict to topics with this Freebase type id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "with": { + // "description": "A rule to match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "without": { + // "description": "A rule to not match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "search", + // "supportsMediaDownload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-api.json b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-api.json new file mode 100644 index 0000000000000..f2e45acb9f2ff --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-api.json @@ -0,0 +1,411 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/jrWF9ZghWXSXmX56XJpkx2_G8NU\"", + "discoveryVersion": "v1", + "id": "freebase:v1", + "name": "freebase", + "version": "v1", + "title": "Freebase Search", + "description": "Find Freebase entities using textual queries and other constraints.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/freebase-16.png", + "x32": "http://www.google.com/images/icons/product/freebase-32.png" + }, + "documentationLink": "https://developers.google.com/freebase/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/freebase/v1/", + "basePath": "/freebase/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "freebase/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "ReconcileCandidate": { + "id": "ReconcileCandidate", + "type": "object", + "properties": { + "confidence": { + "type": "number", + "description": "Percentage likelihood that this candidate is the unique matching entity. Value will be between 0.0 and 1.0", + "format": "float" + }, + "lang": { + "type": "string", + "description": "Language code that candidate and notable names are displayed in." + }, + "mid": { + "type": "string", + "description": "Freebase MID of candidate entity." + }, + "name": { + "type": "string", + "description": "Freebase name of matching entity in specified language." + }, + "notable": { + "type": "object", + "description": "Type or profession the candidate is notable for.", + "properties": { + "id": { + "type": "string", + "description": "MID of notable category." + }, + "name": { + "type": "string", + "description": "Name of notable category in specified language." + } + } + } + } + }, + "ReconcileGet": { + "id": "ReconcileGet", + "type": "object", + "properties": { + "candidate": { + "type": "array", + "description": "If filled, then the listed candidates are potential matches, and such should be evaluated by a more discerning algorithm or human. The matches are ordered by confidence.", + "items": { + "$ref": "ReconcileCandidate" + } + }, + "costs": { + "type": "object", + "description": "Server costs for reconciling.", + "properties": { + "hits": { + "type": "integer", + "description": "Total number of hits found.", + "format": "int32" + }, + "ms": { + "type": "integer", + "description": "Total milliseconds spent.", + "format": "int32" + } + } + }, + "match": { + "$ref": "ReconcileCandidate", + "description": "If filled, this entity is guaranteed to match at requested confidence probability (default 99%)." + }, + "warning": { + "type": "array", + "description": "If filled, then there were recoverable problems that affected the request. For example, some of the properties were ignored because they either are not valid Freebase predicates or are not indexed for reconciliation. The candidates returned should be considered valid results, with the caveat that sections of the request were ignored as specified by the warning text.", + "items": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "Location of warning in the request e.g. invalid predicate." + }, + "message": { + "type": "string", + "description": "Warning message to display to the user." + }, + "reason": { + "type": "string", + "description": "Code for identifying classes of warnings." + } + } + } + } + } + } + }, + "methods": { + "reconcile": { + "id": "freebase.reconcile", + "path": "reconcile", + "httpMethod": "GET", + "description": "Reconcile entities to Freebase open data.", + "parameters": { + "confidence": { + "type": "number", + "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + "default": "0.99", + "format": "float", + "minimum": "0.0", + "maximum": "1.0", + "location": "query" + }, + "kind": { + "type": "string", + "description": "Classifications of entity e.g. type, category, title.", + "repeated": true, + "location": "query" + }, + "lang": { + "type": "string", + "description": "Languages for names and values. First language is used for display. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of candidates to return.", + "default": "3", + "format": "int32", + "minimum": "0", + "maximum": "25", + "location": "query" + }, + "name": { + "type": "string", + "description": "Name of entity.", + "location": "query" + }, + "prop": { + "type": "string", + "description": "Property values for entity formatted as\n:", + "repeated": true, + "location": "query" + } + }, + "response": { + "$ref": "ReconcileGet" + } + }, + "search": { + "id": "freebase.search", + "path": "search", + "httpMethod": "GET", + "description": "Search Freebase open data.", + "parameters": { + "as_of_time": { + "type": "string", + "description": "A mql as_of_time value to use with mql_output queries.", + "location": "query" + }, + "callback": { + "type": "string", + "description": "JS method name for JSONP callbacks.", + "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + "location": "query" + }, + "cursor": { + "type": "integer", + "description": "The cursor value to use for the next page of results.", + "format": "int32", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Restrict to topics with this Freebase domain id.", + "repeated": true, + "location": "query" + }, + "encode": { + "type": "string", + "description": "The encoding of the response. You can use this parameter to enable html encoding.", + "default": "off", + "enum": [ + "html", + "off" + ], + "enumDescriptions": [ + "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + ], + "location": "query" + }, + "exact": { + "type": "boolean", + "description": "Query on exact name and keys only.", + "location": "query" + }, + "filter": { + "type": "string", + "description": "A filter to apply to the query.", + "pattern": "^\\(.*\\)$", + "repeated": true, + "location": "query" + }, + "format": { + "type": "string", + "description": "Structural format of the json response.", + "default": "entity", + "enum": [ + "ac", + "classic", + "entity", + "guids", + "ids", + "mids" + ], + "enumDescriptions": [ + "Compact format useful for autocomplete/suggest UIs.", + "[DEPRECATED] Same format as was returned by api.freebase.com.", + "Basic information about the entities.", + "[DEPRECATED] Ordered list of a freebase guids.", + "Ordered list of freebase ids.", + "Ordered list of freebase mids." + ], + "location": "query" + }, + "help": { + "type": "string", + "description": "The keyword to request help on.", + "enum": [ + "langs", + "mappings", + "predicates" + ], + "enumDescriptions": [ + "The language codes served by the service.", + "The property/path mappings supported by the filter and output request parameters.", + "The predicates and path-terminating properties supported by the filter and output request parameters." + ], + "location": "query" + }, + "indent": { + "type": "boolean", + "description": "Whether to indent the json results or not.", + "location": "query" + }, + "lang": { + "type": "string", + "description": "The code of the language to run the query with. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of results to return.", + "default": "20", + "format": "int32", + "location": "query" + }, + "mid": { + "type": "string", + "description": "A mid to use instead of a query.", + "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + "repeated": true, + "location": "query" + }, + "mql_output": { + "type": "string", + "description": "The MQL query to run againist the results to extract more data.", + "location": "query" + }, + "output": { + "type": "string", + "description": "An output expression to request data from matches.", + "pattern": "^\\(.*\\)$", + "location": "query" + }, + "prefixed": { + "type": "boolean", + "description": "Prefix match against names and aliases.", + "location": "query" + }, + "query": { + "type": "string", + "description": "Query term to search for.", + "location": "query" + }, + "scoring": { + "type": "string", + "description": "Relevance scoring algorithm to use.", + "default": "entity", + "enum": [ + "entity", + "freebase", + "schema" + ], + "enumDescriptions": [ + "Use freebase and popularity entity ranking.", + "Use freebase entity ranking.", + "Use schema ranking for properties and types." + ], + "location": "query" + }, + "spell": { + "type": "string", + "description": "Request 'did you mean' suggestions", + "default": "no_spelling", + "enum": [ + "always", + "no_results", + "no_spelling" + ], + "enumDescriptions": [ + "Request spelling suggestions for any query at least three characters long.", + "Request spelling suggestions if no results were found.", + "Don't request spelling suggestions." + ], + "location": "query" + }, + "stemmed": { + "type": "boolean", + "description": "Query on stemmed names and aliases. May not be used with prefixed.", + "location": "query" + }, + "type": { + "type": "string", + "description": "Restrict to topics with this Freebase type id.", + "repeated": true, + "location": "query" + }, + "with": { + "type": "string", + "description": "A rule to match against.", + "repeated": true, + "location": "query" + }, + "without": { + "type": "string", + "description": "A rule to not match against.", + "repeated": true, + "location": "query" + } + }, + "supportsMediaDownload": true + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-gen.go b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-gen.go new file mode 100644 index 0000000000000..e1dcdf0d3ab25 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1/freebase-gen.go @@ -0,0 +1,729 @@ +// Package freebase provides access to the Freebase Search. +// +// See https://developers.google.com/freebase/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/freebase/v1" +// ... +// freebaseService, err := freebase.New(oauthHttpClient) +package freebase + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "freebase:v1" +const apiName = "freebase" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/freebase/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type ReconcileCandidate struct { + // Confidence: Percentage likelihood that this candidate is the unique + // matching entity. Value will be between 0.0 and 1.0 + Confidence float64 `json:"confidence,omitempty"` + + // Lang: Language code that candidate and notable names are displayed + // in. + Lang string `json:"lang,omitempty"` + + // Mid: Freebase MID of candidate entity. + Mid string `json:"mid,omitempty"` + + // Name: Freebase name of matching entity in specified language. + Name string `json:"name,omitempty"` + + // Notable: Type or profession the candidate is notable for. + Notable *ReconcileCandidateNotable `json:"notable,omitempty"` +} + +type ReconcileCandidateNotable struct { + // Id: MID of notable category. + Id string `json:"id,omitempty"` + + // Name: Name of notable category in specified language. + Name string `json:"name,omitempty"` +} + +type ReconcileGet struct { + // Candidate: If filled, then the listed candidates are potential + // matches, and such should be evaluated by a more discerning algorithm + // or human. The matches are ordered by confidence. + Candidate []*ReconcileCandidate `json:"candidate,omitempty"` + + // Costs: Server costs for reconciling. + Costs *ReconcileGetCosts `json:"costs,omitempty"` + + // Match: If filled, this entity is guaranteed to match at requested + // confidence probability (default 99%). + Match *ReconcileCandidate `json:"match,omitempty"` + + // Warning: If filled, then there were recoverable problems that + // affected the request. For example, some of the properties were + // ignored because they either are not valid Freebase predicates or are + // not indexed for reconciliation. The candidates returned should be + // considered valid results, with the caveat that sections of the + // request were ignored as specified by the warning text. + Warning []*ReconcileGetWarning `json:"warning,omitempty"` +} + +type ReconcileGetCosts struct { + // Hits: Total number of hits found. + Hits int64 `json:"hits,omitempty"` + + // Ms: Total milliseconds spent. + Ms int64 `json:"ms,omitempty"` +} + +type ReconcileGetWarning struct { + // Location: Location of warning in the request e.g. invalid predicate. + Location string `json:"location,omitempty"` + + // Message: Warning message to display to the user. + Message string `json:"message,omitempty"` + + // Reason: Code for identifying classes of warnings. + Reason string `json:"reason,omitempty"` +} + +// method id "freebase.reconcile": + +type ReconcileCall struct { + s *Service + opt_ map[string]interface{} +} + +// Reconcile: Reconcile entities to Freebase open data. +func (s *Service) Reconcile() *ReconcileCall { + c := &ReconcileCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// Confidence sets the optional parameter "confidence": Required +// confidence for a candidate to match. Must be between .5 and 1.0 +func (c *ReconcileCall) Confidence(confidence float64) *ReconcileCall { + c.opt_["confidence"] = confidence + return c +} + +// Kind sets the optional parameter "kind": Classifications of entity +// e.g. type, category, title. +func (c *ReconcileCall) Kind(kind string) *ReconcileCall { + c.opt_["kind"] = kind + return c +} + +// Lang sets the optional parameter "lang": Languages for names and +// values. First language is used for display. Default is 'en'. +func (c *ReconcileCall) Lang(lang string) *ReconcileCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of +// candidates to return. +func (c *ReconcileCall) Limit(limit int64) *ReconcileCall { + c.opt_["limit"] = limit + return c +} + +// Name sets the optional parameter "name": Name of entity. +func (c *ReconcileCall) Name(name string) *ReconcileCall { + c.opt_["name"] = name + return c +} + +// Prop sets the optional parameter "prop": Property values for entity +// formatted as +// : +func (c *ReconcileCall) Prop(prop string) *ReconcileCall { + c.opt_["prop"] = prop + return c +} + +func (c *ReconcileCall) Do() (*ReconcileGet, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["confidence"]; ok { + params.Set("confidence", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["kind"]; ok { + params.Set("kind", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prop"]; ok { + params.Set("prop", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reconcile") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReconcileGet) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Reconcile entities to Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.reconcile", + // "parameters": { + // "confidence": { + // "default": "0.99", + // "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + // "format": "float", + // "location": "query", + // "maximum": "1.0", + // "minimum": "0.0", + // "type": "number" + // }, + // "kind": { + // "description": "Classifications of entity e.g. type, category, title.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "lang": { + // "description": "Languages for names and values. First language is used for display. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "3", + // "description": "Maximum number of candidates to return.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "0", + // "type": "integer" + // }, + // "name": { + // "description": "Name of entity.", + // "location": "query", + // "type": "string" + // }, + // "prop": { + // "description": "Property values for entity formatted as\n:", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "reconcile", + // "response": { + // "$ref": "ReconcileGet" + // } + // } + +} + +// method id "freebase.search": + +type SearchCall struct { + s *Service + opt_ map[string]interface{} +} + +// Search: Search Freebase open data. +func (s *Service) Search() *SearchCall { + c := &SearchCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// As_of_time sets the optional parameter "as_of_time": A mql as_of_time +// value to use with mql_output queries. +func (c *SearchCall) As_of_time(as_of_time string) *SearchCall { + c.opt_["as_of_time"] = as_of_time + return c +} + +// Callback sets the optional parameter "callback": JS method name for +// JSONP callbacks. +func (c *SearchCall) Callback(callback string) *SearchCall { + c.opt_["callback"] = callback + return c +} + +// Cursor sets the optional parameter "cursor": The cursor value to use +// for the next page of results. +func (c *SearchCall) Cursor(cursor int64) *SearchCall { + c.opt_["cursor"] = cursor + return c +} + +// Domain sets the optional parameter "domain": Restrict to topics with +// this Freebase domain id. +func (c *SearchCall) Domain(domain string) *SearchCall { + c.opt_["domain"] = domain + return c +} + +// Encode sets the optional parameter "encode": The encoding of the +// response. You can use this parameter to enable html encoding. +func (c *SearchCall) Encode(encode string) *SearchCall { + c.opt_["encode"] = encode + return c +} + +// Exact sets the optional parameter "exact": Query on exact name and +// keys only. +func (c *SearchCall) Exact(exact bool) *SearchCall { + c.opt_["exact"] = exact + return c +} + +// Filter sets the optional parameter "filter": A filter to apply to the +// query. +func (c *SearchCall) Filter(filter string) *SearchCall { + c.opt_["filter"] = filter + return c +} + +// Format sets the optional parameter "format": Structural format of the +// json response. +func (c *SearchCall) Format(format string) *SearchCall { + c.opt_["format"] = format + return c +} + +// Help sets the optional parameter "help": The keyword to request help +// on. +func (c *SearchCall) Help(help string) *SearchCall { + c.opt_["help"] = help + return c +} + +// Indent sets the optional parameter "indent": Whether to indent the +// json results or not. +func (c *SearchCall) Indent(indent bool) *SearchCall { + c.opt_["indent"] = indent + return c +} + +// Lang sets the optional parameter "lang": The code of the language to +// run the query with. Default is 'en'. +func (c *SearchCall) Lang(lang string) *SearchCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of results +// to return. +func (c *SearchCall) Limit(limit int64) *SearchCall { + c.opt_["limit"] = limit + return c +} + +// Mid sets the optional parameter "mid": A mid to use instead of a +// query. +func (c *SearchCall) Mid(mid string) *SearchCall { + c.opt_["mid"] = mid + return c +} + +// Mql_output sets the optional parameter "mql_output": The MQL query to +// run againist the results to extract more data. +func (c *SearchCall) Mql_output(mql_output string) *SearchCall { + c.opt_["mql_output"] = mql_output + return c +} + +// Output sets the optional parameter "output": An output expression to +// request data from matches. +func (c *SearchCall) Output(output string) *SearchCall { + c.opt_["output"] = output + return c +} + +// Prefixed sets the optional parameter "prefixed": Prefix match against +// names and aliases. +func (c *SearchCall) Prefixed(prefixed bool) *SearchCall { + c.opt_["prefixed"] = prefixed + return c +} + +// Query sets the optional parameter "query": Query term to search for. +func (c *SearchCall) Query(query string) *SearchCall { + c.opt_["query"] = query + return c +} + +// Scoring sets the optional parameter "scoring": Relevance scoring +// algorithm to use. +func (c *SearchCall) Scoring(scoring string) *SearchCall { + c.opt_["scoring"] = scoring + return c +} + +// Spell sets the optional parameter "spell": Request 'did you mean' +// suggestions +func (c *SearchCall) Spell(spell string) *SearchCall { + c.opt_["spell"] = spell + return c +} + +// Stemmed sets the optional parameter "stemmed": Query on stemmed names +// and aliases. May not be used with prefixed. +func (c *SearchCall) Stemmed(stemmed bool) *SearchCall { + c.opt_["stemmed"] = stemmed + return c +} + +// Type sets the optional parameter "type": Restrict to topics with this +// Freebase type id. +func (c *SearchCall) Type(type_ string) *SearchCall { + c.opt_["type"] = type_ + return c +} + +// With sets the optional parameter "with": A rule to match against. +func (c *SearchCall) With(with string) *SearchCall { + c.opt_["with"] = with + return c +} + +// Without sets the optional parameter "without": A rule to not match +// against. +func (c *SearchCall) Without(without string) *SearchCall { + c.opt_["without"] = without + return c +} + +func (c *SearchCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["as_of_time"]; ok { + params.Set("as_of_time", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["callback"]; ok { + params.Set("callback", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cursor"]; ok { + params.Set("cursor", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["encode"]; ok { + params.Set("encode", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["exact"]; ok { + params.Set("exact", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["format"]; ok { + params.Set("format", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["help"]; ok { + params.Set("help", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["indent"]; ok { + params.Set("indent", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mid"]; ok { + params.Set("mid", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mql_output"]; ok { + params.Set("mql_output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["output"]; ok { + params.Set("output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefixed"]; ok { + params.Set("prefixed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scoring"]; ok { + params.Set("scoring", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["spell"]; ok { + params.Set("spell", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["stemmed"]; ok { + params.Set("stemmed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["with"]; ok { + params.Set("with", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["without"]; ok { + params.Set("without", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Search Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.search", + // "parameters": { + // "as_of_time": { + // "description": "A mql as_of_time value to use with mql_output queries.", + // "location": "query", + // "type": "string" + // }, + // "callback": { + // "description": "JS method name for JSONP callbacks.", + // "location": "query", + // "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + // "type": "string" + // }, + // "cursor": { + // "description": "The cursor value to use for the next page of results.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "domain": { + // "description": "Restrict to topics with this Freebase domain id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "encode": { + // "default": "off", + // "description": "The encoding of the response. You can use this parameter to enable html encoding.", + // "enum": [ + // "html", + // "off" + // ], + // "enumDescriptions": [ + // "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + // "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + // ], + // "location": "query", + // "type": "string" + // }, + // "exact": { + // "description": "Query on exact name and keys only.", + // "location": "query", + // "type": "boolean" + // }, + // "filter": { + // "description": "A filter to apply to the query.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "repeated": true, + // "type": "string" + // }, + // "format": { + // "default": "entity", + // "description": "Structural format of the json response.", + // "enum": [ + // "ac", + // "classic", + // "entity", + // "guids", + // "ids", + // "mids" + // ], + // "enumDescriptions": [ + // "Compact format useful for autocomplete/suggest UIs.", + // "[DEPRECATED] Same format as was returned by api.freebase.com.", + // "Basic information about the entities.", + // "[DEPRECATED] Ordered list of a freebase guids.", + // "Ordered list of freebase ids.", + // "Ordered list of freebase mids." + // ], + // "location": "query", + // "type": "string" + // }, + // "help": { + // "description": "The keyword to request help on.", + // "enum": [ + // "langs", + // "mappings", + // "predicates" + // ], + // "enumDescriptions": [ + // "The language codes served by the service.", + // "The property/path mappings supported by the filter and output request parameters.", + // "The predicates and path-terminating properties supported by the filter and output request parameters." + // ], + // "location": "query", + // "type": "string" + // }, + // "indent": { + // "description": "Whether to indent the json results or not.", + // "location": "query", + // "type": "boolean" + // }, + // "lang": { + // "description": "The code of the language to run the query with. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "20", + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "mid": { + // "description": "A mid to use instead of a query.", + // "location": "query", + // "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + // "repeated": true, + // "type": "string" + // }, + // "mql_output": { + // "description": "The MQL query to run againist the results to extract more data.", + // "location": "query", + // "type": "string" + // }, + // "output": { + // "description": "An output expression to request data from matches.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "type": "string" + // }, + // "prefixed": { + // "description": "Prefix match against names and aliases.", + // "location": "query", + // "type": "boolean" + // }, + // "query": { + // "description": "Query term to search for.", + // "location": "query", + // "type": "string" + // }, + // "scoring": { + // "default": "entity", + // "description": "Relevance scoring algorithm to use.", + // "enum": [ + // "entity", + // "freebase", + // "schema" + // ], + // "enumDescriptions": [ + // "Use freebase and popularity entity ranking.", + // "Use freebase entity ranking.", + // "Use schema ranking for properties and types." + // ], + // "location": "query", + // "type": "string" + // }, + // "spell": { + // "default": "no_spelling", + // "description": "Request 'did you mean' suggestions", + // "enum": [ + // "always", + // "no_results", + // "no_spelling" + // ], + // "enumDescriptions": [ + // "Request spelling suggestions for any query at least three characters long.", + // "Request spelling suggestions if no results were found.", + // "Don't request spelling suggestions." + // ], + // "location": "query", + // "type": "string" + // }, + // "stemmed": { + // "description": "Query on stemmed names and aliases. May not be used with prefixed.", + // "location": "query", + // "type": "boolean" + // }, + // "type": { + // "description": "Restrict to topics with this Freebase type id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "with": { + // "description": "A rule to match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "without": { + // "description": "A rule to not match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "search", + // "supportsMediaDownload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-api.json b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-api.json new file mode 100644 index 0000000000000..790465359b7a8 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-api.json @@ -0,0 +1,411 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/8YSaj7jxmSfjsRrYtwnK2dHVPrQ\"", + "discoveryVersion": "v1", + "id": "freebase:v1sandbox", + "name": "freebase", + "version": "v1sandbox", + "title": "Freebase Search", + "description": "Find Freebase entities using textual queries and other constraints.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/freebase-16.png", + "x32": "http://www.google.com/images/icons/product/freebase-32.png" + }, + "documentationLink": "https://developers.google.com/freebase/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/freebase/v1sandbox/", + "basePath": "/freebase/v1sandbox/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "freebase/v1sandbox/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "ReconcileCandidate": { + "id": "ReconcileCandidate", + "type": "object", + "properties": { + "confidence": { + "type": "number", + "description": "Percentage likelihood that this candidate is the unique matching entity. Value will be between 0.0 and 1.0", + "format": "float" + }, + "lang": { + "type": "string", + "description": "Language code that candidate and notable names are displayed in." + }, + "mid": { + "type": "string", + "description": "Freebase MID of candidate entity." + }, + "name": { + "type": "string", + "description": "Freebase name of matching entity in specified language." + }, + "notable": { + "type": "object", + "description": "Type or profession the candidate is notable for.", + "properties": { + "id": { + "type": "string", + "description": "MID of notable category." + }, + "name": { + "type": "string", + "description": "Name of notable category in specified language." + } + } + } + } + }, + "ReconcileGet": { + "id": "ReconcileGet", + "type": "object", + "properties": { + "candidate": { + "type": "array", + "description": "If filled, then the listed candidates are potential matches, and such should be evaluated by a more discerning algorithm or human. The matches are ordered by confidence.", + "items": { + "$ref": "ReconcileCandidate" + } + }, + "costs": { + "type": "object", + "description": "Server costs for reconciling.", + "properties": { + "hits": { + "type": "integer", + "description": "Total number of hits found.", + "format": "int32" + }, + "ms": { + "type": "integer", + "description": "Total milliseconds spent.", + "format": "int32" + } + } + }, + "match": { + "$ref": "ReconcileCandidate", + "description": "If filled, this entity is guaranteed to match at requested confidence probability (default 99%)." + }, + "warning": { + "type": "array", + "description": "If filled, then there were recoverable problems that affected the request. For example, some of the properties were ignored because they either are not valid Freebase predicates or are not indexed for reconciliation. The candidates returned should be considered valid results, with the caveat that sections of the request were ignored as specified by the warning text.", + "items": { + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "Location of warning in the request e.g. invalid predicate." + }, + "message": { + "type": "string", + "description": "Warning message to display to the user." + }, + "reason": { + "type": "string", + "description": "Code for identifying classes of warnings." + } + } + } + } + } + } + }, + "methods": { + "reconcile": { + "id": "freebase.reconcile", + "path": "reconcile", + "httpMethod": "GET", + "description": "Reconcile entities to Freebase open data.", + "parameters": { + "confidence": { + "type": "number", + "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + "default": "0.99", + "format": "float", + "minimum": "0.0", + "maximum": "1.0", + "location": "query" + }, + "kind": { + "type": "string", + "description": "Classifications of entity e.g. type, category, title.", + "repeated": true, + "location": "query" + }, + "lang": { + "type": "string", + "description": "Languages for names and values. First language is used for display. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of candidates to return.", + "default": "3", + "format": "int32", + "minimum": "0", + "maximum": "25", + "location": "query" + }, + "name": { + "type": "string", + "description": "Name of entity.", + "location": "query" + }, + "prop": { + "type": "string", + "description": "Property values for entity formatted as\n:", + "repeated": true, + "location": "query" + } + }, + "response": { + "$ref": "ReconcileGet" + } + }, + "search": { + "id": "freebase.search", + "path": "search", + "httpMethod": "GET", + "description": "Search Freebase open data.", + "parameters": { + "as_of_time": { + "type": "string", + "description": "A mql as_of_time value to use with mql_output queries.", + "location": "query" + }, + "callback": { + "type": "string", + "description": "JS method name for JSONP callbacks.", + "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + "location": "query" + }, + "cursor": { + "type": "integer", + "description": "The cursor value to use for the next page of results.", + "format": "int32", + "location": "query" + }, + "domain": { + "type": "string", + "description": "Restrict to topics with this Freebase domain id.", + "repeated": true, + "location": "query" + }, + "encode": { + "type": "string", + "description": "The encoding of the response. You can use this parameter to enable html encoding.", + "default": "off", + "enum": [ + "html", + "off" + ], + "enumDescriptions": [ + "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + ], + "location": "query" + }, + "exact": { + "type": "boolean", + "description": "Query on exact name and keys only.", + "location": "query" + }, + "filter": { + "type": "string", + "description": "A filter to apply to the query.", + "pattern": "^\\(.*\\)$", + "repeated": true, + "location": "query" + }, + "format": { + "type": "string", + "description": "Structural format of the json response.", + "default": "entity", + "enum": [ + "ac", + "classic", + "entity", + "guids", + "ids", + "mids" + ], + "enumDescriptions": [ + "Compact format useful for autocomplete/suggest UIs.", + "[DEPRECATED] Same format as was returned by api.freebase.com.", + "Basic information about the entities.", + "[DEPRECATED] Ordered list of a freebase guids.", + "Ordered list of freebase ids.", + "Ordered list of freebase mids." + ], + "location": "query" + }, + "help": { + "type": "string", + "description": "The keyword to request help on.", + "enum": [ + "langs", + "mappings", + "predicates" + ], + "enumDescriptions": [ + "The language codes served by the service.", + "The property/path mappings supported by the filter and output request parameters.", + "The predicates and path-terminating properties supported by the filter and output request parameters." + ], + "location": "query" + }, + "indent": { + "type": "boolean", + "description": "Whether to indent the json results or not.", + "location": "query" + }, + "lang": { + "type": "string", + "description": "The code of the language to run the query with. Default is 'en'.", + "repeated": true, + "location": "query" + }, + "limit": { + "type": "integer", + "description": "Maximum number of results to return.", + "default": "20", + "format": "int32", + "location": "query" + }, + "mid": { + "type": "string", + "description": "A mid to use instead of a query.", + "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + "repeated": true, + "location": "query" + }, + "mql_output": { + "type": "string", + "description": "The MQL query to run againist the results to extract more data.", + "location": "query" + }, + "output": { + "type": "string", + "description": "An output expression to request data from matches.", + "pattern": "^\\(.*\\)$", + "location": "query" + }, + "prefixed": { + "type": "boolean", + "description": "Prefix match against names and aliases.", + "location": "query" + }, + "query": { + "type": "string", + "description": "Query term to search for.", + "location": "query" + }, + "scoring": { + "type": "string", + "description": "Relevance scoring algorithm to use.", + "default": "entity", + "enum": [ + "entity", + "freebase", + "schema" + ], + "enumDescriptions": [ + "Use freebase and popularity entity ranking.", + "Use freebase entity ranking.", + "Use schema ranking for properties and types." + ], + "location": "query" + }, + "spell": { + "type": "string", + "description": "Request 'did you mean' suggestions", + "default": "no_spelling", + "enum": [ + "always", + "no_results", + "no_spelling" + ], + "enumDescriptions": [ + "Request spelling suggestions for any query at least three characters long.", + "Request spelling suggestions if no results were found.", + "Don't request spelling suggestions." + ], + "location": "query" + }, + "stemmed": { + "type": "boolean", + "description": "Query on stemmed names and aliases. May not be used with prefixed.", + "location": "query" + }, + "type": { + "type": "string", + "description": "Restrict to topics with this Freebase type id.", + "repeated": true, + "location": "query" + }, + "with": { + "type": "string", + "description": "A rule to match against.", + "repeated": true, + "location": "query" + }, + "without": { + "type": "string", + "description": "A rule to not match against.", + "repeated": true, + "location": "query" + } + }, + "supportsMediaDownload": true + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-gen.go b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-gen.go new file mode 100644 index 0000000000000..348528956fb02 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/freebase/v1sandbox/freebase-gen.go @@ -0,0 +1,729 @@ +// Package freebase provides access to the Freebase Search. +// +// See https://developers.google.com/freebase/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/freebase/v1sandbox" +// ... +// freebaseService, err := freebase.New(oauthHttpClient) +package freebase + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "freebase:v1sandbox" +const apiName = "freebase" +const apiVersion = "v1sandbox" +const basePath = "https://www.googleapis.com/freebase/v1sandbox/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type ReconcileCandidate struct { + // Confidence: Percentage likelihood that this candidate is the unique + // matching entity. Value will be between 0.0 and 1.0 + Confidence float64 `json:"confidence,omitempty"` + + // Lang: Language code that candidate and notable names are displayed + // in. + Lang string `json:"lang,omitempty"` + + // Mid: Freebase MID of candidate entity. + Mid string `json:"mid,omitempty"` + + // Name: Freebase name of matching entity in specified language. + Name string `json:"name,omitempty"` + + // Notable: Type or profession the candidate is notable for. + Notable *ReconcileCandidateNotable `json:"notable,omitempty"` +} + +type ReconcileCandidateNotable struct { + // Id: MID of notable category. + Id string `json:"id,omitempty"` + + // Name: Name of notable category in specified language. + Name string `json:"name,omitempty"` +} + +type ReconcileGet struct { + // Candidate: If filled, then the listed candidates are potential + // matches, and such should be evaluated by a more discerning algorithm + // or human. The matches are ordered by confidence. + Candidate []*ReconcileCandidate `json:"candidate,omitempty"` + + // Costs: Server costs for reconciling. + Costs *ReconcileGetCosts `json:"costs,omitempty"` + + // Match: If filled, this entity is guaranteed to match at requested + // confidence probability (default 99%). + Match *ReconcileCandidate `json:"match,omitempty"` + + // Warning: If filled, then there were recoverable problems that + // affected the request. For example, some of the properties were + // ignored because they either are not valid Freebase predicates or are + // not indexed for reconciliation. The candidates returned should be + // considered valid results, with the caveat that sections of the + // request were ignored as specified by the warning text. + Warning []*ReconcileGetWarning `json:"warning,omitempty"` +} + +type ReconcileGetCosts struct { + // Hits: Total number of hits found. + Hits int64 `json:"hits,omitempty"` + + // Ms: Total milliseconds spent. + Ms int64 `json:"ms,omitempty"` +} + +type ReconcileGetWarning struct { + // Location: Location of warning in the request e.g. invalid predicate. + Location string `json:"location,omitempty"` + + // Message: Warning message to display to the user. + Message string `json:"message,omitempty"` + + // Reason: Code for identifying classes of warnings. + Reason string `json:"reason,omitempty"` +} + +// method id "freebase.reconcile": + +type ReconcileCall struct { + s *Service + opt_ map[string]interface{} +} + +// Reconcile: Reconcile entities to Freebase open data. +func (s *Service) Reconcile() *ReconcileCall { + c := &ReconcileCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// Confidence sets the optional parameter "confidence": Required +// confidence for a candidate to match. Must be between .5 and 1.0 +func (c *ReconcileCall) Confidence(confidence float64) *ReconcileCall { + c.opt_["confidence"] = confidence + return c +} + +// Kind sets the optional parameter "kind": Classifications of entity +// e.g. type, category, title. +func (c *ReconcileCall) Kind(kind string) *ReconcileCall { + c.opt_["kind"] = kind + return c +} + +// Lang sets the optional parameter "lang": Languages for names and +// values. First language is used for display. Default is 'en'. +func (c *ReconcileCall) Lang(lang string) *ReconcileCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of +// candidates to return. +func (c *ReconcileCall) Limit(limit int64) *ReconcileCall { + c.opt_["limit"] = limit + return c +} + +// Name sets the optional parameter "name": Name of entity. +func (c *ReconcileCall) Name(name string) *ReconcileCall { + c.opt_["name"] = name + return c +} + +// Prop sets the optional parameter "prop": Property values for entity +// formatted as +// : +func (c *ReconcileCall) Prop(prop string) *ReconcileCall { + c.opt_["prop"] = prop + return c +} + +func (c *ReconcileCall) Do() (*ReconcileGet, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["confidence"]; ok { + params.Set("confidence", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["kind"]; ok { + params.Set("kind", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prop"]; ok { + params.Set("prop", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "reconcile") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ReconcileGet) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Reconcile entities to Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.reconcile", + // "parameters": { + // "confidence": { + // "default": "0.99", + // "description": "Required confidence for a candidate to match. Must be between .5 and 1.0", + // "format": "float", + // "location": "query", + // "maximum": "1.0", + // "minimum": "0.0", + // "type": "number" + // }, + // "kind": { + // "description": "Classifications of entity e.g. type, category, title.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "lang": { + // "description": "Languages for names and values. First language is used for display. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "3", + // "description": "Maximum number of candidates to return.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "0", + // "type": "integer" + // }, + // "name": { + // "description": "Name of entity.", + // "location": "query", + // "type": "string" + // }, + // "prop": { + // "description": "Property values for entity formatted as\n:", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "reconcile", + // "response": { + // "$ref": "ReconcileGet" + // } + // } + +} + +// method id "freebase.search": + +type SearchCall struct { + s *Service + opt_ map[string]interface{} +} + +// Search: Search Freebase open data. +func (s *Service) Search() *SearchCall { + c := &SearchCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// As_of_time sets the optional parameter "as_of_time": A mql as_of_time +// value to use with mql_output queries. +func (c *SearchCall) As_of_time(as_of_time string) *SearchCall { + c.opt_["as_of_time"] = as_of_time + return c +} + +// Callback sets the optional parameter "callback": JS method name for +// JSONP callbacks. +func (c *SearchCall) Callback(callback string) *SearchCall { + c.opt_["callback"] = callback + return c +} + +// Cursor sets the optional parameter "cursor": The cursor value to use +// for the next page of results. +func (c *SearchCall) Cursor(cursor int64) *SearchCall { + c.opt_["cursor"] = cursor + return c +} + +// Domain sets the optional parameter "domain": Restrict to topics with +// this Freebase domain id. +func (c *SearchCall) Domain(domain string) *SearchCall { + c.opt_["domain"] = domain + return c +} + +// Encode sets the optional parameter "encode": The encoding of the +// response. You can use this parameter to enable html encoding. +func (c *SearchCall) Encode(encode string) *SearchCall { + c.opt_["encode"] = encode + return c +} + +// Exact sets the optional parameter "exact": Query on exact name and +// keys only. +func (c *SearchCall) Exact(exact bool) *SearchCall { + c.opt_["exact"] = exact + return c +} + +// Filter sets the optional parameter "filter": A filter to apply to the +// query. +func (c *SearchCall) Filter(filter string) *SearchCall { + c.opt_["filter"] = filter + return c +} + +// Format sets the optional parameter "format": Structural format of the +// json response. +func (c *SearchCall) Format(format string) *SearchCall { + c.opt_["format"] = format + return c +} + +// Help sets the optional parameter "help": The keyword to request help +// on. +func (c *SearchCall) Help(help string) *SearchCall { + c.opt_["help"] = help + return c +} + +// Indent sets the optional parameter "indent": Whether to indent the +// json results or not. +func (c *SearchCall) Indent(indent bool) *SearchCall { + c.opt_["indent"] = indent + return c +} + +// Lang sets the optional parameter "lang": The code of the language to +// run the query with. Default is 'en'. +func (c *SearchCall) Lang(lang string) *SearchCall { + c.opt_["lang"] = lang + return c +} + +// Limit sets the optional parameter "limit": Maximum number of results +// to return. +func (c *SearchCall) Limit(limit int64) *SearchCall { + c.opt_["limit"] = limit + return c +} + +// Mid sets the optional parameter "mid": A mid to use instead of a +// query. +func (c *SearchCall) Mid(mid string) *SearchCall { + c.opt_["mid"] = mid + return c +} + +// Mql_output sets the optional parameter "mql_output": The MQL query to +// run againist the results to extract more data. +func (c *SearchCall) Mql_output(mql_output string) *SearchCall { + c.opt_["mql_output"] = mql_output + return c +} + +// Output sets the optional parameter "output": An output expression to +// request data from matches. +func (c *SearchCall) Output(output string) *SearchCall { + c.opt_["output"] = output + return c +} + +// Prefixed sets the optional parameter "prefixed": Prefix match against +// names and aliases. +func (c *SearchCall) Prefixed(prefixed bool) *SearchCall { + c.opt_["prefixed"] = prefixed + return c +} + +// Query sets the optional parameter "query": Query term to search for. +func (c *SearchCall) Query(query string) *SearchCall { + c.opt_["query"] = query + return c +} + +// Scoring sets the optional parameter "scoring": Relevance scoring +// algorithm to use. +func (c *SearchCall) Scoring(scoring string) *SearchCall { + c.opt_["scoring"] = scoring + return c +} + +// Spell sets the optional parameter "spell": Request 'did you mean' +// suggestions +func (c *SearchCall) Spell(spell string) *SearchCall { + c.opt_["spell"] = spell + return c +} + +// Stemmed sets the optional parameter "stemmed": Query on stemmed names +// and aliases. May not be used with prefixed. +func (c *SearchCall) Stemmed(stemmed bool) *SearchCall { + c.opt_["stemmed"] = stemmed + return c +} + +// Type sets the optional parameter "type": Restrict to topics with this +// Freebase type id. +func (c *SearchCall) Type(type_ string) *SearchCall { + c.opt_["type"] = type_ + return c +} + +// With sets the optional parameter "with": A rule to match against. +func (c *SearchCall) With(with string) *SearchCall { + c.opt_["with"] = with + return c +} + +// Without sets the optional parameter "without": A rule to not match +// against. +func (c *SearchCall) Without(without string) *SearchCall { + c.opt_["without"] = without + return c +} + +func (c *SearchCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["as_of_time"]; ok { + params.Set("as_of_time", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["callback"]; ok { + params.Set("callback", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cursor"]; ok { + params.Set("cursor", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["domain"]; ok { + params.Set("domain", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["encode"]; ok { + params.Set("encode", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["exact"]; ok { + params.Set("exact", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["filter"]; ok { + params.Set("filter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["format"]; ok { + params.Set("format", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["help"]; ok { + params.Set("help", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["indent"]; ok { + params.Set("indent", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mid"]; ok { + params.Set("mid", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mql_output"]; ok { + params.Set("mql_output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["output"]; ok { + params.Set("output", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefixed"]; ok { + params.Set("prefixed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["query"]; ok { + params.Set("query", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scoring"]; ok { + params.Set("scoring", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["spell"]; ok { + params.Set("spell", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["stemmed"]; ok { + params.Set("stemmed", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["with"]; ok { + params.Set("with", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["without"]; ok { + params.Set("without", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Search Freebase open data.", + // "httpMethod": "GET", + // "id": "freebase.search", + // "parameters": { + // "as_of_time": { + // "description": "A mql as_of_time value to use with mql_output queries.", + // "location": "query", + // "type": "string" + // }, + // "callback": { + // "description": "JS method name for JSONP callbacks.", + // "location": "query", + // "pattern": "([A-Za-z0-9_$.]|\\[|\\])+", + // "type": "string" + // }, + // "cursor": { + // "description": "The cursor value to use for the next page of results.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "domain": { + // "description": "Restrict to topics with this Freebase domain id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "encode": { + // "default": "off", + // "description": "The encoding of the response. You can use this parameter to enable html encoding.", + // "enum": [ + // "html", + // "off" + // ], + // "enumDescriptions": [ + // "Encode certain characters in the response (such as tags and ambersands) using html encoding.", + // "No encoding of the response. You should not print the results directly on an web page without html-escaping the content first." + // ], + // "location": "query", + // "type": "string" + // }, + // "exact": { + // "description": "Query on exact name and keys only.", + // "location": "query", + // "type": "boolean" + // }, + // "filter": { + // "description": "A filter to apply to the query.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "repeated": true, + // "type": "string" + // }, + // "format": { + // "default": "entity", + // "description": "Structural format of the json response.", + // "enum": [ + // "ac", + // "classic", + // "entity", + // "guids", + // "ids", + // "mids" + // ], + // "enumDescriptions": [ + // "Compact format useful for autocomplete/suggest UIs.", + // "[DEPRECATED] Same format as was returned by api.freebase.com.", + // "Basic information about the entities.", + // "[DEPRECATED] Ordered list of a freebase guids.", + // "Ordered list of freebase ids.", + // "Ordered list of freebase mids." + // ], + // "location": "query", + // "type": "string" + // }, + // "help": { + // "description": "The keyword to request help on.", + // "enum": [ + // "langs", + // "mappings", + // "predicates" + // ], + // "enumDescriptions": [ + // "The language codes served by the service.", + // "The property/path mappings supported by the filter and output request parameters.", + // "The predicates and path-terminating properties supported by the filter and output request parameters." + // ], + // "location": "query", + // "type": "string" + // }, + // "indent": { + // "description": "Whether to indent the json results or not.", + // "location": "query", + // "type": "boolean" + // }, + // "lang": { + // "description": "The code of the language to run the query with. Default is 'en'.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "limit": { + // "default": "20", + // "description": "Maximum number of results to return.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "mid": { + // "description": "A mid to use instead of a query.", + // "location": "query", + // "pattern": "^/[mgtx]/[0-2][0-9bcdfghjklmnpqrstvwxyz_]{1,24}$", + // "repeated": true, + // "type": "string" + // }, + // "mql_output": { + // "description": "The MQL query to run againist the results to extract more data.", + // "location": "query", + // "type": "string" + // }, + // "output": { + // "description": "An output expression to request data from matches.", + // "location": "query", + // "pattern": "^\\(.*\\)$", + // "type": "string" + // }, + // "prefixed": { + // "description": "Prefix match against names and aliases.", + // "location": "query", + // "type": "boolean" + // }, + // "query": { + // "description": "Query term to search for.", + // "location": "query", + // "type": "string" + // }, + // "scoring": { + // "default": "entity", + // "description": "Relevance scoring algorithm to use.", + // "enum": [ + // "entity", + // "freebase", + // "schema" + // ], + // "enumDescriptions": [ + // "Use freebase and popularity entity ranking.", + // "Use freebase entity ranking.", + // "Use schema ranking for properties and types." + // ], + // "location": "query", + // "type": "string" + // }, + // "spell": { + // "default": "no_spelling", + // "description": "Request 'did you mean' suggestions", + // "enum": [ + // "always", + // "no_results", + // "no_spelling" + // ], + // "enumDescriptions": [ + // "Request spelling suggestions for any query at least three characters long.", + // "Request spelling suggestions if no results were found.", + // "Don't request spelling suggestions." + // ], + // "location": "query", + // "type": "string" + // }, + // "stemmed": { + // "description": "Query on stemmed names and aliases. May not be used with prefixed.", + // "location": "query", + // "type": "boolean" + // }, + // "type": { + // "description": "Restrict to topics with this Freebase type id.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "with": { + // "description": "A rule to match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "without": { + // "description": "A rule to not match against.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "search", + // "supportsMediaDownload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-api.json b/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-api.json new file mode 100644 index 0000000000000..ae49e719ecea5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-api.json @@ -0,0 +1,3643 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"5M1WkxnZyJhziV-cW1kdtwscs8E/wBs-qNgKobkZmtJOx0i4cFgYtC8\"", + "discoveryVersion": "v1", + "id": "games:v1", + "name": "games", + "canonicalName": "Games", + "version": "v1", + "title": "Google Play Game Services API", + "description": "The API for Google Play Game Services.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/games/services/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/games/v1/", + "basePath": "/games/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "games/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/games": { + "description": "Share your Google+ profile information and view and manage your game activity" + }, + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + } + } + } + }, + "schemas": { + "AchievementDefinition": { + "id": "AchievementDefinition", + "type": "object", + "description": "This is a JSON template for an achievement definition object.", + "properties": { + "achievementType": { + "type": "string", + "description": "The type of the achievement.\nPossible values are: \n- \"STANDARD\" - Achievement is either locked or unlocked. \n- \"INCREMENTAL\" - Achievement is incremental." + }, + "description": { + "type": "string", + "description": "The description of the achievement." + }, + "formattedTotalSteps": { + "type": "string", + "description": "The total steps for an incremental achievement as a string." + }, + "id": { + "type": "string", + "description": "The ID of the achievement." + }, + "initialState": { + "type": "string", + "description": "The initial state of the achievement.\nPossible values are: \n- \"HIDDEN\" - Achievement is hidden. \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked." + }, + "isRevealedIconUrlDefault": { + "type": "boolean", + "description": "Indicates whether the revealed icon image being returned is a default image, or is provided by the game." + }, + "isUnlockedIconUrlDefault": { + "type": "boolean", + "description": "Indicates whether the unlocked icon image being returned is a default image, or is game-provided." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementDefinition.", + "default": "games#achievementDefinition" + }, + "name": { + "type": "string", + "description": "The name of the achievement." + }, + "revealedIconUrl": { + "type": "string", + "description": "The image URL for the revealed achievement icon." + }, + "totalSteps": { + "type": "integer", + "description": "The total steps for an incremental achievement.", + "format": "int32" + }, + "unlockedIconUrl": { + "type": "string", + "description": "The image URL for the unlocked achievement icon." + } + } + }, + "AchievementDefinitionsListResponse": { + "id": "AchievementDefinitionsListResponse", + "type": "object", + "description": "This is a JSON template for a list of achievement definition objects.", + "properties": { + "items": { + "type": "array", + "description": "The achievement definitions.", + "items": { + "$ref": "AchievementDefinition" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementDefinitionsListResponse.", + "default": "games#achievementDefinitionsListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "Token corresponding to the next page of results." + } + } + }, + "AchievementIncrementResponse": { + "id": "AchievementIncrementResponse", + "type": "object", + "description": "This is a JSON template for an achievement increment response", + "properties": { + "currentSteps": { + "type": "integer", + "description": "The current steps recorded for this incremental achievement.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementIncrementResponse.", + "default": "games#achievementIncrementResponse" + }, + "newlyUnlocked": { + "type": "boolean", + "description": "Whether the the current steps for the achievement has reached the number of steps required to unlock." + } + } + }, + "AchievementRevealResponse": { + "id": "AchievementRevealResponse", + "type": "object", + "description": "This is a JSON template for an achievement reveal response", + "properties": { + "currentState": { + "type": "string", + "description": "The current state of the achievement for which a reveal was attempted. This might be UNLOCKED if the achievement was already unlocked.\nPossible values are: \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementRevealResponse.", + "default": "games#achievementRevealResponse" + } + } + }, + "AchievementSetStepsAtLeastResponse": { + "id": "AchievementSetStepsAtLeastResponse", + "type": "object", + "description": "This is a JSON template for an achievement set steps at least response.", + "properties": { + "currentSteps": { + "type": "integer", + "description": "The current steps recorded for this incremental achievement.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementSetStepsAtLeastResponse.", + "default": "games#achievementSetStepsAtLeastResponse" + }, + "newlyUnlocked": { + "type": "boolean", + "description": "Whether the the current steps for the achievement has reached the number of steps required to unlock." + } + } + }, + "AchievementUnlockResponse": { + "id": "AchievementUnlockResponse", + "type": "object", + "description": "This is a JSON template for an achievement unlock response", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUnlockResponse.", + "default": "games#achievementUnlockResponse" + }, + "newlyUnlocked": { + "type": "boolean", + "description": "Whether this achievement was newly unlocked (that is, whether the unlock request for the achievement was the first for the player)." + } + } + }, + "AchievementUpdateMultipleRequest": { + "id": "AchievementUpdateMultipleRequest", + "type": "object", + "description": "This is a JSON template for a list of achievement update requests.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateMultipleRequest.", + "default": "games#achievementUpdateMultipleRequest" + }, + "updates": { + "type": "array", + "description": "The individual achievement update requests.", + "items": { + "$ref": "AchievementUpdateRequest" + } + } + } + }, + "AchievementUpdateMultipleResponse": { + "id": "AchievementUpdateMultipleResponse", + "type": "object", + "description": "This is a JSON template for an achievement unlock response.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateListResponse.", + "default": "games#achievementUpdateMultipleResponse" + }, + "updatedAchievements": { + "type": "array", + "description": "The updated state of the achievements.", + "items": { + "$ref": "AchievementUpdateResponse" + } + } + } + }, + "AchievementUpdateRequest": { + "id": "AchievementUpdateRequest", + "type": "object", + "description": "This is a JSON template for a request to update an achievement.", + "properties": { + "achievementId": { + "type": "string", + "description": "The achievement this update is being applied to." + }, + "incrementPayload": { + "$ref": "GamesAchievementIncrement", + "description": "The payload if an update of type INCREMENT was requested for the achievement." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateRequest.", + "default": "games#achievementUpdateRequest" + }, + "setStepsAtLeastPayload": { + "$ref": "GamesAchievementSetStepsAtLeast", + "description": "The payload if an update of type SET_STEPS_AT_LEAST was requested for the achievement." + }, + "updateType": { + "type": "string", + "description": "The type of update being applied.\nPossible values are: \n- \"REVEAL\" - Achievement is revealed. \n- \"UNLOCK\" - Achievement is unlocked. \n- \"INCREMENT\" - Achievement is incremented. \n- \"SET_STEPS_AT_LEAST\" - Achievement progress is set to at least the passed value." + } + } + }, + "AchievementUpdateResponse": { + "id": "AchievementUpdateResponse", + "type": "object", + "description": "This is a JSON template for an achievement update response.", + "properties": { + "achievementId": { + "type": "string", + "description": "The achievement this update is was applied to." + }, + "currentState": { + "type": "string", + "description": "The current state of the achievement.\nPossible values are: \n- \"HIDDEN\" - Achievement is hidden. \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked." + }, + "currentSteps": { + "type": "integer", + "description": "The current steps recorded for this achievement if it is incremental.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#achievementUpdateResponse.", + "default": "games#achievementUpdateResponse" + }, + "newlyUnlocked": { + "type": "boolean", + "description": "Whether this achievement was newly unlocked (that is, whether the unlock request for the achievement was the first for the player)." + }, + "updateOccurred": { + "type": "boolean", + "description": "Whether the requested updates actually affected the achievement." + } + } + }, + "AggregateStats": { + "id": "AggregateStats", + "type": "object", + "description": "This is a JSON template for aggregate stats.", + "properties": { + "count": { + "type": "string", + "description": "The number of messages sent between a pair of peers.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#aggregateStats.", + "default": "games#aggregateStats" + }, + "max": { + "type": "string", + "description": "The maximum amount.", + "format": "int64" + }, + "min": { + "type": "string", + "description": "The minimum amount.", + "format": "int64" + }, + "sum": { + "type": "string", + "description": "The total number of bytes sent for messages between a pair of peers.", + "format": "int64" + } + } + }, + "AnonymousPlayer": { + "id": "AnonymousPlayer", + "type": "object", + "description": "This is a JSON template for an anonymous player", + "properties": { + "avatarImageUrl": { + "type": "string", + "description": "The base URL for the image to display for the anonymous player." + }, + "displayName": { + "type": "string", + "description": "The name to display for the anonymous player." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#anonymousPlayer.", + "default": "games#anonymousPlayer" + } + } + }, + "Application": { + "id": "Application", + "type": "object", + "description": "This is a JSON template for the Application resource.", + "properties": { + "achievement_count": { + "type": "integer", + "description": "The number of achievements visible to the currently authenticated player.", + "format": "int32" + }, + "assets": { + "type": "array", + "description": "The assets of the application.", + "items": { + "$ref": "ImageAsset" + } + }, + "author": { + "type": "string", + "description": "The author of the application." + }, + "category": { + "$ref": "ApplicationCategory", + "description": "The category of the application." + }, + "description": { + "type": "string", + "description": "The description of the application." + }, + "id": { + "type": "string", + "description": "The ID of the application." + }, + "instances": { + "type": "array", + "description": "The instances of the application.", + "items": { + "$ref": "Instance" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#application.", + "default": "games#application" + }, + "lastUpdatedTimestamp": { + "type": "string", + "description": "The last updated timestamp of the application.", + "format": "int64" + }, + "leaderboard_count": { + "type": "integer", + "description": "The number of leaderboards visible to the currently authenticated player.", + "format": "int32" + }, + "name": { + "type": "string", + "description": "The name of the application." + } + } + }, + "ApplicationCategory": { + "id": "ApplicationCategory", + "type": "object", + "description": "This is a JSON template for an application category object.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#applicationCategory.", + "default": "games#applicationCategory" + }, + "primary": { + "type": "string", + "description": "The primary category." + }, + "secondary": { + "type": "string", + "description": "The secondary category." + } + } + }, + "GamesAchievementIncrement": { + "id": "GamesAchievementIncrement", + "type": "object", + "description": "This is a JSON template for the payload to request to increment an achievement.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#GamesAchievementIncrement.", + "default": "games#GamesAchievementIncrement" + }, + "requestId": { + "type": "string", + "description": "The requestId associated with an increment to an achievement.", + "format": "int64" + }, + "steps": { + "type": "integer", + "description": "The number of steps to be incremented.", + "format": "int32" + } + } + }, + "GamesAchievementSetStepsAtLeast": { + "id": "GamesAchievementSetStepsAtLeast", + "type": "object", + "description": "This is a JSON template for the payload to request to increment an achievement.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#GamesAchievementSetStepsAtLeast.", + "default": "games#GamesAchievementSetStepsAtLeast" + }, + "steps": { + "type": "integer", + "description": "The minimum number of steps for the achievement to be set to.", + "format": "int32" + } + } + }, + "ImageAsset": { + "id": "ImageAsset", + "type": "object", + "description": "This is a JSON template for an image asset object.", + "properties": { + "height": { + "type": "integer", + "description": "The height of the asset.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#imageAsset.", + "default": "games#imageAsset" + }, + "name": { + "type": "string", + "description": "The name of the asset." + }, + "url": { + "type": "string", + "description": "The URL of the asset." + }, + "width": { + "type": "integer", + "description": "The width of the asset.", + "format": "int32" + } + } + }, + "Instance": { + "id": "Instance", + "type": "object", + "description": "This is a JSON template for the Instance resource.", + "properties": { + "acquisitionUri": { + "type": "string", + "description": "URI which shows where a user can acquire this instance." + }, + "androidInstance": { + "$ref": "InstanceAndroidDetails", + "description": "Platform dependent details for Android." + }, + "iosInstance": { + "$ref": "InstanceIosDetails", + "description": "Platform dependent details for iOS." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#instance.", + "default": "games#instance" + }, + "name": { + "type": "string", + "description": "Localized display name." + }, + "platformType": { + "type": "string", + "description": "The platform type.\nPossible values are: \n- \"ANDROID\" - Instance is for Android. \n- \"IOS\" - Instance is for iOS \n- \"WEB_APP\" - Instance is for Web App." + }, + "realtimePlay": { + "type": "boolean", + "description": "Flag to show if this game instance supports realtime play." + }, + "turnBasedPlay": { + "type": "boolean", + "description": "Flag to show if this game instance supports turn based play." + }, + "webInstance": { + "$ref": "InstanceWebDetails", + "description": "Platform dependent details for Web." + } + } + }, + "InstanceAndroidDetails": { + "id": "InstanceAndroidDetails", + "type": "object", + "description": "This is a JSON template for the Android instance details resource.", + "properties": { + "enablePiracyCheck": { + "type": "boolean", + "description": "Flag indicating whether the anti-piracy check is enabled." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#instanceAndroidDetails.", + "default": "games#instanceAndroidDetails" + }, + "packageName": { + "type": "string", + "description": "Android package name which maps to Google Play URL." + }, + "preferred": { + "type": "boolean", + "description": "Indicates that this instance is the default for new installations." + } + } + }, + "InstanceIosDetails": { + "id": "InstanceIosDetails", + "type": "object", + "description": "This is a JSON template for the iOS details resource.", + "properties": { + "bundleIdentifier": { + "type": "string", + "description": "Bundle identifier." + }, + "itunesAppId": { + "type": "string", + "description": "iTunes App ID." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#instanceIosDetails.", + "default": "games#instanceIosDetails" + }, + "preferredForIpad": { + "type": "boolean", + "description": "Indicates that this instance is the default for new installations on iPad devices." + }, + "preferredForIphone": { + "type": "boolean", + "description": "Indicates that this instance is the default for new installations on iPhone devices." + }, + "supportIpad": { + "type": "boolean", + "description": "Flag to indicate if this instance supports iPad." + }, + "supportIphone": { + "type": "boolean", + "description": "Flag to indicate if this instance supports iPhone." + } + } + }, + "InstanceWebDetails": { + "id": "InstanceWebDetails", + "type": "object", + "description": "This is a JSON template for the Web details resource.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#instanceWebDetails.", + "default": "games#instanceWebDetails" + }, + "launchUrl": { + "type": "string", + "description": "Launch URL for the game." + }, + "preferred": { + "type": "boolean", + "description": "Indicates that this instance is the default for new installations." + } + } + }, + "Leaderboard": { + "id": "Leaderboard", + "type": "object", + "description": "This is a JSON template for the Leaderboard resource.", + "properties": { + "iconUrl": { + "type": "string", + "description": "The icon for the leaderboard." + }, + "id": { + "type": "string", + "description": "The leaderboard ID." + }, + "isIconUrlDefault": { + "type": "boolean", + "description": "Indicates whether the icon image being returned is a default image, or is game-provided." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#leaderboard.", + "default": "games#leaderboard" + }, + "name": { + "type": "string", + "description": "The name of the leaderboard." + }, + "order": { + "type": "string", + "description": "How scores are ordered.\nPossible values are: \n- \"LARGER_IS_BETTER\" - Larger values are better; scores are sorted in descending order. \n- \"SMALLER_IS_BETTER\" - Smaller values are better; scores are sorted in ascending order." + } + } + }, + "LeaderboardEntry": { + "id": "LeaderboardEntry", + "type": "object", + "description": "This is a JSON template for the Leaderboard Entry resource.", + "properties": { + "formattedScore": { + "type": "string", + "description": "The localized string for the numerical value of this score." + }, + "formattedScoreRank": { + "type": "string", + "description": "The localized string for the rank of this score for this leaderboard." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#leaderboardEntry.", + "default": "games#leaderboardEntry" + }, + "player": { + "$ref": "Player", + "description": "The player who holds this score." + }, + "scoreRank": { + "type": "string", + "description": "The rank of this score for this leaderboard.", + "format": "int64" + }, + "scoreTag": { + "type": "string", + "description": "Additional information about the score. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986." + }, + "scoreValue": { + "type": "string", + "description": "The numerical value of this score.", + "format": "int64" + }, + "timeSpan": { + "type": "string", + "description": "The time span of this high score.\nPossible values are: \n- \"ALL_TIME\" - The score is an all-time high score. \n- \"WEEKLY\" - The score is a weekly high score. \n- \"DAILY\" - The score is a daily high score." + }, + "writeTimestampMillis": { + "type": "string", + "description": "The timestamp at which this score was recorded, in milliseconds since the epoch in UTC.", + "format": "int64" + } + } + }, + "LeaderboardListResponse": { + "id": "LeaderboardListResponse", + "type": "object", + "description": "This is a JSON template for a list of leaderboard objects.", + "properties": { + "items": { + "type": "array", + "description": "The leaderboards.", + "items": { + "$ref": "Leaderboard" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#leaderboardListResponse.", + "default": "games#leaderboardListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "Token corresponding to the next page of results." + } + } + }, + "LeaderboardScoreRank": { + "id": "LeaderboardScoreRank", + "type": "object", + "description": "This is a JSON template for a score rank in a leaderboard.", + "properties": { + "formattedNumScores": { + "type": "string", + "description": "The number of scores in the leaderboard as a string." + }, + "formattedRank": { + "type": "string", + "description": "The rank in the leaderboard as a string." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#leaderboardScoreRank.", + "default": "games#leaderboardScoreRank" + }, + "numScores": { + "type": "string", + "description": "The number of scores in the leaderboard.", + "format": "int64" + }, + "rank": { + "type": "string", + "description": "The rank in the leaderboard.", + "format": "int64" + } + } + }, + "LeaderboardScores": { + "id": "LeaderboardScores", + "type": "object", + "description": "This is a JSON template for a ListScores response.", + "properties": { + "items": { + "type": "array", + "description": "The scores in the leaderboard.", + "items": { + "$ref": "LeaderboardEntry" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#leaderboardScores.", + "default": "games#leaderboardScores" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + }, + "numScores": { + "type": "string", + "description": "The total number of scores in the leaderboard.", + "format": "int64" + }, + "playerScore": { + "$ref": "LeaderboardEntry", + "description": "The score of the requesting player on the leaderboard. The player's score may appear both here and in the list of scores above. If you are viewing a public leaderboard and the player is not sharing their gameplay information publicly, the scoreRank and formattedScoreRank values will not be present." + }, + "prevPageToken": { + "type": "string", + "description": "The pagination token for the previous page of results." + } + } + }, + "NetworkDiagnostics": { + "id": "NetworkDiagnostics", + "type": "object", + "description": "This is a JSON template for network diagnostics reported for a client.", + "properties": { + "androidNetworkSubtype": { + "type": "integer", + "description": "The Android network subtype.", + "format": "int32" + }, + "androidNetworkType": { + "type": "integer", + "description": "The Android network type.", + "format": "int32" + }, + "iosNetworkType": { + "type": "integer", + "description": "iOS network type as defined in Reachability.h.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#networkDiagnostics.", + "default": "games#networkDiagnostics" + }, + "registrationLatencyMillis": { + "type": "integer", + "description": "The amount of time in milliseconds it took for the client to establish a connection with the XMPP server.", + "format": "int32" + } + } + }, + "ParticipantResult": { + "id": "ParticipantResult", + "type": "object", + "description": "This is a JSON template for a result for a match participant.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#participantResult.", + "default": "games#participantResult" + }, + "participantId": { + "type": "string", + "description": "The ID of the participant." + }, + "placing": { + "type": "integer", + "description": "The placement or ranking of the participant in the match results; a number from one to the number of participants in the match. Multiple participants may have the same placing value in case of a type.", + "format": "int32" + }, + "result": { + "type": "string", + "description": "The result of the participant for this match.\nPossible values are: \n- \"MATCH_RESULT_WIN\" - The participant won the match. \n- \"MATCH_RESULT_LOSS\" - The participant lost the match. \n- \"MATCH_RESULT_TIE\" - The participant tied the match. \n- \"MATCH_RESULT_NONE\" - There was no winner for the match (nobody wins or loses this kind of game.) \n- \"MATCH_RESULT_DISCONNECT\" - The participant disconnected / left during the match. \n- \"MATCH_RESULT_DISAGREED\" - Different clients reported different results for this participant." + } + } + }, + "PeerChannelDiagnostics": { + "id": "PeerChannelDiagnostics", + "type": "object", + "description": "This is a JSON template for peer channel diagnostics.", + "properties": { + "bytesReceived": { + "$ref": "AggregateStats", + "description": "Number of bytes received." + }, + "bytesSent": { + "$ref": "AggregateStats", + "description": "Number of bytes sent." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#peerChannelDiagnostics.", + "default": "games#peerChannelDiagnostics" + }, + "numMessagesLost": { + "type": "integer", + "description": "Number of messages lost.", + "format": "int32" + }, + "numMessagesReceived": { + "type": "integer", + "description": "Number of messages received.", + "format": "int32" + }, + "numMessagesSent": { + "type": "integer", + "description": "Number of messages sent.", + "format": "int32" + }, + "numSendFailures": { + "type": "integer", + "description": "Number of send failures.", + "format": "int32" + }, + "roundtripLatencyMillis": { + "$ref": "AggregateStats", + "description": "Roundtrip latency stats in milliseconds." + } + } + }, + "PeerSessionDiagnostics": { + "id": "PeerSessionDiagnostics", + "type": "object", + "description": "This is a JSON template for peer session diagnostics.", + "properties": { + "connectedTimestampMillis": { + "type": "string", + "description": "Connected time in milliseconds.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#peerSessionDiagnostics.", + "default": "games#peerSessionDiagnostics" + }, + "participantId": { + "type": "string", + "description": "The participant ID of the peer." + }, + "reliableChannel": { + "$ref": "PeerChannelDiagnostics", + "description": "Reliable channel diagnostics." + }, + "unreliableChannel": { + "$ref": "PeerChannelDiagnostics", + "description": "Unreliable channel diagnostics." + } + } + }, + "Played": { + "id": "Played", + "type": "object", + "description": "This is a JSON template for 3P metadata about a player playing a game.", + "properties": { + "autoMatched": { + "type": "boolean", + "description": "True if the player was auto-matched with the currently authenticated user." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#played.", + "default": "games#played" + }, + "timeMillis": { + "type": "string", + "description": "The last time the player played the game in milliseconds since the epoch in UTC.", + "format": "int64" + } + } + }, + "Player": { + "id": "Player", + "type": "object", + "description": "This is a JSON template for a Player resource.", + "properties": { + "avatarImageUrl": { + "type": "string", + "description": "The base URL for the image that represents the player." + }, + "displayName": { + "type": "string", + "description": "The name to display for the player." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#player.", + "default": "games#player" + }, + "lastPlayedWith": { + "$ref": "Played", + "description": "Details about the last time this player played a multiplayer game with the currently authenticated player. Populated for PLAYED_WITH player collection members." + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of the player's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this player." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this player." + } + } + }, + "playerId": { + "type": "string", + "description": "The ID of the player." + } + } + }, + "PlayerAchievement": { + "id": "PlayerAchievement", + "type": "object", + "description": "This is a JSON template for an achievement object.", + "properties": { + "achievementState": { + "type": "string", + "description": "The state of the achievement.\nPossible values are: \n- \"HIDDEN\" - Achievement is hidden. \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked." + }, + "currentSteps": { + "type": "integer", + "description": "The current steps for an incremental achievement.", + "format": "int32" + }, + "formattedCurrentStepsString": { + "type": "string", + "description": "The current steps for an incremental achievement as a string." + }, + "id": { + "type": "string", + "description": "The ID of the achievement." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerAchievement.", + "default": "games#playerAchievement" + }, + "lastUpdatedTimestamp": { + "type": "string", + "description": "The timestamp of the last modification to this achievement's state.", + "format": "int64" + } + } + }, + "PlayerAchievementListResponse": { + "id": "PlayerAchievementListResponse", + "type": "object", + "description": "This is a JSON template for a list of achievement objects.", + "properties": { + "items": { + "type": "array", + "description": "The achievements.", + "items": { + "$ref": "PlayerAchievement" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerAchievementListResponse.", + "default": "games#playerAchievementListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "Token corresponding to the next page of results." + } + } + }, + "PlayerLeaderboardScore": { + "id": "PlayerLeaderboardScore", + "type": "object", + "description": "This is a JSON template for a player leaderboard score object.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerLeaderboardScore.", + "default": "games#playerLeaderboardScore" + }, + "leaderboard_id": { + "type": "string", + "description": "The ID of the leaderboard this score is in." + }, + "publicRank": { + "$ref": "LeaderboardScoreRank", + "description": "The public rank of the score in this leaderboard. This object will not be present if the user is not sharing their scores publicly." + }, + "scoreString": { + "type": "string", + "description": "The formatted value of this score." + }, + "scoreTag": { + "type": "string", + "description": "Additional information about the score. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986." + }, + "scoreValue": { + "type": "string", + "description": "The numerical value of this score.", + "format": "int64" + }, + "socialRank": { + "$ref": "LeaderboardScoreRank", + "description": "The social rank of the score in this leaderboard." + }, + "timeSpan": { + "type": "string", + "description": "The time span of this score.\nPossible values are: \n- \"ALL_TIME\" - The score is an all-time score. \n- \"WEEKLY\" - The score is a weekly score. \n- \"DAILY\" - The score is a daily score." + }, + "writeTimestamp": { + "type": "string", + "description": "The timestamp at which this score was recorded, in milliseconds since the epoch in UTC.", + "format": "int64" + } + } + }, + "PlayerLeaderboardScoreListResponse": { + "id": "PlayerLeaderboardScoreListResponse", + "type": "object", + "description": "This is a JSON template for a list of player leaderboard scores.", + "properties": { + "items": { + "type": "array", + "description": "The leaderboard scores.", + "items": { + "$ref": "PlayerLeaderboardScore" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerLeaderboardScoreListResponse.", + "default": "games#playerLeaderboardScoreListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + }, + "player": { + "$ref": "Player", + "description": "The Player resources for the owner of this score." + } + } + }, + "PlayerListResponse": { + "id": "PlayerListResponse", + "type": "object", + "description": "This is a JSON template for a third party player list response.", + "properties": { + "items": { + "type": "array", + "description": "The players.", + "items": { + "$ref": "Player" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerListResponse.", + "default": "games#playerListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "Token corresponding to the next page of results." + } + } + }, + "PlayerScore": { + "id": "PlayerScore", + "type": "object", + "description": "This is a JSON template for a player score.", + "properties": { + "formattedScore": { + "type": "string", + "description": "The formatted score for this player score." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerScore.", + "default": "games#playerScore" + }, + "score": { + "type": "string", + "description": "The numerical value for this player score.", + "format": "int64" + }, + "scoreTag": { + "type": "string", + "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986." + }, + "timeSpan": { + "type": "string", + "description": "The time span for this player score.\nPossible values are: \n- \"ALL_TIME\" - The score is an all-time score. \n- \"WEEKLY\" - The score is a weekly score. \n- \"DAILY\" - The score is a daily score." + } + } + }, + "PlayerScoreListResponse": { + "id": "PlayerScoreListResponse", + "type": "object", + "description": "This is a JSON template for a list of score submission statuses.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerScoreListResponse.", + "default": "games#playerScoreListResponse" + }, + "submittedScores": { + "type": "array", + "description": "The score submissions statuses.", + "items": { + "$ref": "PlayerScoreResponse" + } + } + } + }, + "PlayerScoreResponse": { + "id": "PlayerScoreResponse", + "type": "object", + "description": "This is a JSON template for a list of leaderboard entry resources.", + "properties": { + "beatenScoreTimeSpans": { + "type": "array", + "description": "The time spans where the submitted score is better than the existing score for that time span.\nPossible values are: \n- \"ALL_TIME\" - The score is an all-time score. \n- \"WEEKLY\" - The score is a weekly score. \n- \"DAILY\" - The score is a daily score.", + "items": { + "type": "string" + } + }, + "formattedScore": { + "type": "string", + "description": "The formatted value of the submitted score." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerScoreResponse.", + "default": "games#playerScoreResponse" + }, + "leaderboardId": { + "type": "string", + "description": "The leaderboard ID that this score was submitted to." + }, + "scoreTag": { + "type": "string", + "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986." + }, + "unbeatenScores": { + "type": "array", + "description": "The scores in time spans that have not been beaten. As an example, the submitted score may be better than the player's DAILY score, but not better than the player's scores for the WEEKLY or ALL_TIME time spans.", + "items": { + "$ref": "PlayerScore" + } + } + } + }, + "PlayerScoreSubmissionList": { + "id": "PlayerScoreSubmissionList", + "type": "object", + "description": "This is a JSON template for a list of score submission requests", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#playerScoreSubmissionList.", + "default": "games#playerScoreSubmissionList" + }, + "scores": { + "type": "array", + "description": "The score submissions.", + "items": { + "$ref": "ScoreSubmission" + } + } + } + }, + "PushToken": { + "id": "PushToken", + "type": "object", + "description": "This is a JSON template for a push token resource.", + "properties": { + "clientRevision": { + "type": "string", + "description": "The revision of the client SDK used by your application, in the same format that's used by revisions.check. Used to send backward compatible messages. Format: [PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE are: \n- IOS - Push token is for iOS" + }, + "id": { + "$ref": "PushTokenId", + "description": "Unique identifier for this push token." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#pushToken.", + "default": "games#pushToken" + }, + "language": { + "type": "string", + "description": "The preferred language for notifications that are sent using this token." + } + } + }, + "PushTokenId": { + "id": "PushTokenId", + "type": "object", + "description": "This is a JSON template for a push token ID resource.", + "properties": { + "ios": { + "type": "object", + "description": "A push token ID for iOS devices.", + "properties": { + "apns_device_token": { + "type": "string", + "description": "Device token supplied by an iOS system call to register for remote notifications. Encode this field as web-safe base64.", + "format": "byte" + }, + "apns_environment": { + "type": "string", + "description": "Use SANDBOX during development for the APNS test server at gateway.sandbox.push.apple.com or PRODUCTION for the production server at gateway.push.apple.com." + } + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#pushTokenId.", + "default": "games#pushTokenId" + } + } + }, + "RevisionCheckResponse": { + "id": "RevisionCheckResponse", + "type": "object", + "description": "This is a JSON template for the result of checking a revision.", + "properties": { + "apiVersion": { + "type": "string", + "description": "The version of the API this client revision should use when calling API methods." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#revisionCheckResponse.", + "default": "games#revisionCheckResponse" + }, + "revisionStatus": { + "type": "string", + "description": "The result of the revision check.\nPossible values are: \n- \"OK\" - The revision being used is current. \n- \"DEPRECATED\" - There is currently a newer version available, but the revision being used still works. \n- \"INVALID\" - The revision being used is not supported in any released version." + } + } + }, + "Room": { + "id": "Room", + "type": "object", + "description": "This is a JSON template for a room resource object.", + "properties": { + "applicationId": { + "type": "string", + "description": "The ID of the application being played." + }, + "autoMatchingCriteria": { + "$ref": "RoomAutoMatchingCriteria", + "description": "Criteria for auto-matching players into this room." + }, + "autoMatchingStatus": { + "$ref": "RoomAutoMatchStatus", + "description": "Auto-matching status for this room. Not set if the room is not currently in the auto-matching queue." + }, + "creationDetails": { + "$ref": "RoomModification", + "description": "Details about the room creation." + }, + "description": { + "type": "string", + "description": "This short description is generated by our servers and worded relative to the player requesting the room. It is intended to be displayed when the room is shown in a list (that is, an invitation to a room.)" + }, + "inviterId": { + "type": "string", + "description": "The ID of the participant that invited the user to the room. Not set if the user was not invited to the room." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#room.", + "default": "games#room" + }, + "lastUpdateDetails": { + "$ref": "RoomModification", + "description": "Details about the last update to the room." + }, + "participants": { + "type": "array", + "description": "The participants involved in the room, along with their statuses. Includes participants who have left or declined invitations.", + "items": { + "$ref": "RoomParticipant" + } + }, + "roomId": { + "type": "string", + "description": "Globally unique ID for a room." + }, + "roomStatusVersion": { + "type": "integer", + "description": "The version of the room status: an increasing counter, used by the client to ignore out-of-order updates to room status.", + "format": "int32" + }, + "status": { + "type": "string", + "description": "The status of the room.\nPossible values are: \n- \"ROOM_INVITING\" - One or more players have been invited and not responded. \n- \"ROOM_AUTO_MATCHING\" - One or more slots need to be filled by auto-matching. \n- \"ROOM_CONNECTING\" - Players have joined and are connecting to each other (either before or after auto-matching). \n- \"ROOM_ACTIVE\" - All players have joined and connected to each other. \n- \"ROOM_DELETED\" - The room should no longer be shown on the client. Returned in sync calls when a player joins a room (as a tombstone), or for rooms where all joined participants have left." + }, + "variant": { + "type": "integer", + "description": "The variant / mode of the application being played; can be any integer value, or left blank.", + "format": "int32" + } + } + }, + "RoomAutoMatchStatus": { + "id": "RoomAutoMatchStatus", + "type": "object", + "description": "This is a JSON template for status of room automatching that is in progress.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomAutoMatchStatus.", + "default": "games#roomAutoMatchStatus" + }, + "waitEstimateSeconds": { + "type": "integer", + "description": "An estimate for the amount of time (in seconds) that auto-matching is expected to take to complete.", + "format": "int32" + } + } + }, + "RoomAutoMatchingCriteria": { + "id": "RoomAutoMatchingCriteria", + "type": "object", + "description": "This is a JSON template for a room auto-match criteria object.", + "properties": { + "exclusiveBitmask": { + "type": "string", + "description": "A bitmask indicating when auto-matches are valid. When ANDed with other exclusive bitmasks, the result must be zero. Can be used to support exclusive roles within a game.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomAutoMatchingCriteria.", + "default": "games#roomAutoMatchingCriteria" + }, + "maxAutoMatchingPlayers": { + "type": "integer", + "description": "The maximum number of players that should be added to the room by auto-matching.", + "format": "int32" + }, + "minAutoMatchingPlayers": { + "type": "integer", + "description": "The minimum number of players that should be added to the room by auto-matching.", + "format": "int32" + } + } + }, + "RoomClientAddress": { + "id": "RoomClientAddress", + "type": "object", + "description": "This is a JSON template for the client address when setting up a room.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomClientAddress.", + "default": "games#roomClientAddress" + }, + "xmppAddress": { + "type": "string", + "description": "The XMPP address of the client on the Google Games XMPP network." + } + } + }, + "RoomCreateRequest": { + "id": "RoomCreateRequest", + "type": "object", + "description": "This is a JSON template for a room creation request.", + "properties": { + "autoMatchingCriteria": { + "$ref": "RoomAutoMatchingCriteria", + "description": "Criteria for auto-matching players into this room." + }, + "capabilities": { + "type": "array", + "description": "The capabilities that this client supports for realtime communication.", + "items": { + "type": "string" + } + }, + "clientAddress": { + "$ref": "RoomClientAddress", + "description": "Client address for the player creating the room." + }, + "invitedPlayerIds": { + "type": "array", + "description": "The player IDs to invite to the room.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomCreateRequest.", + "default": "games#roomCreateRequest" + }, + "networkDiagnostics": { + "$ref": "NetworkDiagnostics", + "description": "Network diagnostics for the client creating the room." + }, + "requestId": { + "type": "string", + "description": "A randomly generated numeric ID. This number is used at the server to ensure that the request is handled correctly across retries.", + "format": "int64" + }, + "variant": { + "type": "integer", + "description": "The variant / mode of the application to be played. This can be any integer value, or left blank. You should use a small number of variants to keep the auto-matching pool as large as possible.", + "format": "int32" + } + } + }, + "RoomJoinRequest": { + "id": "RoomJoinRequest", + "type": "object", + "description": "This is a JSON template for a join room request.", + "properties": { + "capabilities": { + "type": "array", + "description": "The capabilities that this client supports for realtime communication.", + "items": { + "type": "string" + } + }, + "clientAddress": { + "$ref": "RoomClientAddress", + "description": "Client address for the player joining the room." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomJoinRequest.", + "default": "games#roomJoinRequest" + }, + "networkDiagnostics": { + "$ref": "NetworkDiagnostics", + "description": "Network diagnostics for the client joining the room." + } + } + }, + "RoomLeaveDiagnostics": { + "id": "RoomLeaveDiagnostics", + "type": "object", + "description": "This is a JSON template for room leave diagnostics.", + "properties": { + "androidNetworkSubtype": { + "type": "integer", + "description": "Android network subtype. http://developer.android.com/reference/android/net/NetworkInfo.html#getSubtype()", + "format": "int32" + }, + "androidNetworkType": { + "type": "integer", + "description": "Android network type. http://developer.android.com/reference/android/net/NetworkInfo.html#getType()", + "format": "int32" + }, + "iosNetworkType": { + "type": "integer", + "description": "iOS network type as defined in Reachability.h.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomLeaveDiagnostics.", + "default": "games#roomLeaveDiagnostics" + }, + "peerSession": { + "type": "array", + "description": "Diagnostics about all peer sessions.", + "items": { + "$ref": "PeerSessionDiagnostics" + } + }, + "socketsUsed": { + "type": "boolean", + "description": "Whether or not sockets were used." + } + } + }, + "RoomLeaveRequest": { + "id": "RoomLeaveRequest", + "type": "object", + "description": "This is a JSON template for a leave room request.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomLeaveRequest.", + "default": "games#roomLeaveRequest" + }, + "leaveDiagnostics": { + "$ref": "RoomLeaveDiagnostics", + "description": "Diagnostics for a player leaving the room." + }, + "reason": { + "type": "string", + "description": "Reason for leaving the match.\nPossible values are: \n- \"PLAYER_LEFT\" - The player chose to leave the room.. \n- \"GAME_LEFT\" - The game chose to remove the player from the room. \n- \"REALTIME_ABANDONED\" - The player switched to another application and abandoned the room. \n- \"REALTIME_PEER_CONNECTION_FAILURE\" - The client was unable to establish a connection to other peer(s). \n- \"REALTIME_SERVER_CONNECTION_FAILURE\" - The client was unable to communicate with the server. \n- \"REALTIME_SERVER_ERROR\" - The client received an error response when it tried to communicate with the server. \n- \"REALTIME_TIMEOUT\" - The client timed out while waiting for a room." + } + } + }, + "RoomList": { + "id": "RoomList", + "type": "object", + "description": "This is a JSON template for a list of rooms.", + "properties": { + "items": { + "type": "array", + "description": "The rooms.", + "items": { + "$ref": "Room" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomList.", + "default": "games#roomList" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + } + } + }, + "RoomModification": { + "id": "RoomModification", + "type": "object", + "description": "This is a JSON template for room modification metadata.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomModification.", + "default": "games#roomModification" + }, + "modifiedTimestampMillis": { + "type": "string", + "description": "The timestamp at which they modified the room, in milliseconds since the epoch in UTC.", + "format": "int64" + }, + "participantId": { + "type": "string", + "description": "The ID of the participant that modified the room." + } + } + }, + "RoomP2PStatus": { + "id": "RoomP2PStatus", + "type": "object", + "description": "This is a JSON template for an update on the status of a peer in a room.", + "properties": { + "connectionSetupLatencyMillis": { + "type": "integer", + "description": "The amount of time in milliseconds it took to establish connections with this peer.", + "format": "int32" + }, + "error": { + "type": "string", + "description": "The error code in event of a failure.\nPossible values are: \n- \"P2P_FAILED\" - The client failed to establish a P2P connection with the peer. \n- \"PRESENCE_FAILED\" - The client failed to register to receive P2P connections. \n- \"RELAY_SERVER_FAILED\" - The client received an error when trying to use the relay server to establish a P2P connection with the peer." + }, + "error_reason": { + "type": "string", + "description": "More detailed diagnostic message returned in event of a failure." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomP2PStatus.", + "default": "games#roomP2PStatus" + }, + "participantId": { + "type": "string", + "description": "The ID of the participant." + }, + "status": { + "type": "string", + "description": "The status of the peer in the room.\nPossible values are: \n- \"CONNECTION_ESTABLISHED\" - The client established a P2P connection with the peer. \n- \"CONNECTION_FAILED\" - The client failed to establish directed presence with the peer." + }, + "unreliableRoundtripLatencyMillis": { + "type": "integer", + "description": "The amount of time in milliseconds it took to send packets back and forth on the unreliable channel with this peer.", + "format": "int32" + } + } + }, + "RoomP2PStatuses": { + "id": "RoomP2PStatuses", + "type": "object", + "description": "This is a JSON template for an update on the status of peers in a room.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomP2PStatuses.", + "default": "games#roomP2PStatuses" + }, + "updates": { + "type": "array", + "description": "The updates for the peers.", + "items": { + "$ref": "RoomP2PStatus" + } + } + } + }, + "RoomParticipant": { + "id": "RoomParticipant", + "type": "object", + "description": "This is a JSON template for a participant in a room.", + "properties": { + "autoMatched": { + "type": "boolean", + "description": "True if this participant was auto-matched with the requesting player." + }, + "autoMatchedPlayer": { + "$ref": "AnonymousPlayer", + "description": "Information about a player that has been anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)" + }, + "capabilities": { + "type": "array", + "description": "The capabilities which can be used when communicating with this participant.", + "items": { + "type": "string" + } + }, + "clientAddress": { + "$ref": "RoomClientAddress", + "description": "Client address for the participant." + }, + "connected": { + "type": "boolean", + "description": "True if this participant is in the fully connected set of peers in the room." + }, + "id": { + "type": "string", + "description": "An identifier for the participant in the scope of the room. Cannot be used to identify a player across rooms or in other contexts." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomParticipant.", + "default": "games#roomParticipant" + }, + "leaveReason": { + "type": "string", + "description": "The reason the participant left the room; populated if the participant status is PARTICIPANT_LEFT.\nPossible values are: \n- \"PLAYER_LEFT\" - The player explicitly chose to leave the room. \n- \"GAME_LEFT\" - The game chose to remove the player from the room. \n- \"ABANDONED\" - The player switched to another application and abandoned the room.\n- \"PEER_CONNECTION_FAILURE\" - The client was unable to establish or maintain a connection to other peer(s) in the room.\n- \"SERVER_ERROR\" - The client received an error response when it tried to communicate with the server. \n- \"TIMEOUT\" - The client timed out while waiting for players to join and connect. \n- \"PRESENCE_FAILURE\" - The client's XMPP connection ended abruptly." + }, + "player": { + "$ref": "Player", + "description": "Information about the player. Not populated if this player was anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)" + }, + "status": { + "type": "string", + "description": "The status of the participant with respect to the room.\nPossible values are: \n- \"PARTICIPANT_INVITED\" - The participant has been invited to join the room, but has not yet responded. \n- \"PARTICIPANT_JOINED\" - The participant has joined the room (either after creating it or accepting an invitation.) \n- \"PARTICIPANT_DECLINED\" - The participant declined an invitation to join the room. \n- \"PARTICIPANT_LEFT\" - The participant joined the room and then left it." + } + } + }, + "RoomStatus": { + "id": "RoomStatus", + "type": "object", + "description": "This is a JSON template for the status of a room that the player has joined.", + "properties": { + "autoMatchingStatus": { + "$ref": "RoomAutoMatchStatus", + "description": "Auto-matching status for this room. Not set if the room is not currently in the automatching queue." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#roomStatus.", + "default": "games#roomStatus" + }, + "participants": { + "type": "array", + "description": "The participants involved in the room, along with their statuses. Includes participants who have left or declined invitations.", + "items": { + "$ref": "RoomParticipant" + } + }, + "roomId": { + "type": "string", + "description": "Globally unique ID for a room." + }, + "status": { + "type": "string", + "description": "The status of the room.\nPossible values are: \n- \"ROOM_INVITING\" - One or more players have been invited and not responded. \n- \"ROOM_AUTO_MATCHING\" - One or more slots need to be filled by auto-matching. \n- \"ROOM_CONNECTING\" - Players have joined are connecting to each other (either before or after auto-matching). \n- \"ROOM_ACTIVE\" - All players have joined and connected to each other. \n- \"ROOM_DELETED\" - All joined players have left." + }, + "statusVersion": { + "type": "integer", + "description": "The version of the status for the room: an increasing counter, used by the client to ignore out-of-order updates to room status.", + "format": "int32" + } + } + }, + "ScoreSubmission": { + "id": "ScoreSubmission", + "type": "object", + "description": "This is a JSON template for a request to submit a score to leaderboards.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#scoreSubmission.", + "default": "games#scoreSubmission" + }, + "leaderboardId": { + "type": "string", + "description": "The leaderboard this score is being submitted to." + }, + "score": { + "type": "string", + "description": "The new score being submitted.", + "format": "int64" + }, + "scoreTag": { + "type": "string", + "description": "Additional information about this score. Values will contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.", + "pattern": "[a-zA-Z0-9-._~]{0,64}" + } + } + }, + "TurnBasedAutoMatchingCriteria": { + "id": "TurnBasedAutoMatchingCriteria", + "type": "object", + "description": "This is a JSON template for an turn-based auto-match criteria object.", + "properties": { + "exclusiveBitmask": { + "type": "string", + "description": "A bitmask indicating when auto-matches are valid. When ANDed with other exclusive bitmasks, the result must be zero. Can be used to support exclusive roles within a game.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedAutoMatchingCriteria.", + "default": "games#turnBasedAutoMatchingCriteria" + }, + "maxAutoMatchingPlayers": { + "type": "integer", + "description": "The maximum number of players that should be added to the match by auto-matching.", + "format": "int32" + }, + "minAutoMatchingPlayers": { + "type": "integer", + "description": "The minimum number of players that should be added to the match by auto-matching.", + "format": "int32" + } + } + }, + "TurnBasedMatch": { + "id": "TurnBasedMatch", + "type": "object", + "description": "This is a JSON template for a turn-based match resource object.", + "properties": { + "applicationId": { + "type": "string", + "description": "The ID of the application being played." + }, + "autoMatchingCriteria": { + "$ref": "TurnBasedAutoMatchingCriteria", + "description": "Criteria for auto-matching players into this match." + }, + "creationDetails": { + "$ref": "TurnBasedMatchModification", + "description": "Details about the match creation." + }, + "data": { + "$ref": "TurnBasedMatchData", + "description": "The data / game state for this match." + }, + "description": { + "type": "string", + "description": "This short description is generated by our servers based on turn state and is localized and worded relative to the player requesting the match. It is intended to be displayed when the match is shown in a list." + }, + "inviterId": { + "type": "string", + "description": "The ID of the participant that invited the user to the match. Not set if the user was not invited to the match." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatch.", + "default": "games#turnBasedMatch" + }, + "lastUpdateDetails": { + "$ref": "TurnBasedMatchModification", + "description": "Details about the last update to the match." + }, + "matchId": { + "type": "string", + "description": "Globally unique ID for a turn-based match." + }, + "matchNumber": { + "type": "integer", + "description": "The number of the match in a chain of rematches. Will be set to 1 for the first match and incremented by 1 for each rematch.", + "format": "int32" + }, + "matchVersion": { + "type": "integer", + "description": "The version of this match: an increasing counter, used to avoid out-of-date updates to the match.", + "format": "int32" + }, + "participants": { + "type": "array", + "description": "The participants involved in the match, along with their statuses. Includes participants who have left or declined invitations.", + "items": { + "$ref": "TurnBasedMatchParticipant" + } + }, + "pendingParticipantId": { + "type": "string", + "description": "The ID of the participant that is taking a turn." + }, + "previousMatchData": { + "$ref": "TurnBasedMatchData", + "description": "The data / game state for the previous match; set for the first turn of rematches only." + }, + "rematchId": { + "type": "string", + "description": "The ID of a rematch of this match. Only set for completed matches that have been rematched." + }, + "results": { + "type": "array", + "description": "The results reported for this match.", + "items": { + "$ref": "ParticipantResult" + } + }, + "status": { + "type": "string", + "description": "The status of the match.\nPossible values are: \n- \"MATCH_AUTO_MATCHING\" - One or more slots need to be filled by auto-matching; the match cannot be established until they are filled. \n- \"MATCH_ACTIVE\" - The match has started. \n- \"MATCH_COMPLETE\" - The match has finished. \n- \"MATCH_CANCELED\" - The match was canceled. \n- \"MATCH_EXPIRED\" - The match expired due to inactivity. \n- \"MATCH_DELETED\" - The match should no longer be shown on the client. Returned only for tombstones for matches when sync is called." + }, + "userMatchStatus": { + "type": "string", + "description": "The status of the current user in the match. Derived from the match type, match status, the user's participant status, and the pending participant for the match.\nPossible values are: \n- \"USER_INVITED\" - The user has been invited to join the match and has not responded yet. \n- \"USER_AWAITING_TURN\" - The user is waiting for their turn. \n- \"USER_TURN\" - The user has an action to take in the match. \n- \"USER_MATCH_COMPLETED\" - The match has ended (it is completed, canceled, or expired.)" + }, + "variant": { + "type": "integer", + "description": "The variant / mode of the application being played; can be any integer value, or left blank.", + "format": "int32" + }, + "withParticipantId": { + "type": "string", + "description": "The ID of another participant in the match that can be used when describing the participants the user is playing with." + } + } + }, + "TurnBasedMatchCreateRequest": { + "id": "TurnBasedMatchCreateRequest", + "type": "object", + "description": "This is a JSON template for a turn-based match creation request.", + "properties": { + "autoMatchingCriteria": { + "$ref": "TurnBasedAutoMatchingCriteria", + "description": "Criteria for auto-matching players into this match." + }, + "invitedPlayerIds": { + "type": "array", + "description": "The player ids to invite to the match.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchCreateRequest.", + "default": "games#turnBasedMatchCreateRequest" + }, + "requestId": { + "type": "string", + "description": "A randomly generated numeric ID. This number is used at the server to ensure that the request is handled correctly across retries.", + "format": "int64" + }, + "variant": { + "type": "integer", + "description": "The variant / mode of the application to be played. This can be any integer value, or left blank. You should use a small number of variants to keep the auto-matching pool as large as possible.", + "format": "int32" + } + } + }, + "TurnBasedMatchData": { + "id": "TurnBasedMatchData", + "type": "object", + "description": "This is a JSON template for a turn-based match data object.", + "properties": { + "data": { + "type": "string", + "description": "The byte representation of the data (limited to 128 kB), as a Base64-encoded string with the URL_SAFE encoding option.", + "format": "byte" + }, + "dataAvailable": { + "type": "boolean", + "description": "True if this match has data available but it wasn't returned in a list response; fetching the match individually will retrieve this data." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchData.", + "default": "games#turnBasedMatchData" + } + } + }, + "TurnBasedMatchDataRequest": { + "id": "TurnBasedMatchDataRequest", + "type": "object", + "description": "This is a JSON template for sending a turn-based match data object.", + "properties": { + "data": { + "type": "string", + "description": "The byte representation of the data (limited to 128 kB), as a Base64-encoded string with the URL_SAFE encoding option.", + "format": "byte" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchDataRequest.", + "default": "games#turnBasedMatchDataRequest" + } + } + }, + "TurnBasedMatchList": { + "id": "TurnBasedMatchList", + "type": "object", + "description": "This is a JSON template for a list of turn-based matches.", + "properties": { + "items": { + "type": "array", + "description": "The matches.", + "items": { + "$ref": "TurnBasedMatch" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchList.", + "default": "games#turnBasedMatchList" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + } + } + }, + "TurnBasedMatchModification": { + "id": "TurnBasedMatchModification", + "type": "object", + "description": "This is a JSON template for turn-based match modification metadata.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchModification.", + "default": "games#turnBasedMatchModification" + }, + "modifiedTimestampMillis": { + "type": "string", + "description": "The timestamp at which they modified the match, in milliseconds since the epoch in UTC.", + "format": "int64" + }, + "participantId": { + "type": "string", + "description": "The ID of the participant that modified the match." + } + } + }, + "TurnBasedMatchParticipant": { + "id": "TurnBasedMatchParticipant", + "type": "object", + "description": "This is a JSON template for a participant in a turn-based match.", + "properties": { + "autoMatched": { + "type": "boolean", + "description": "True if this participant was auto-matched with the requesting player." + }, + "autoMatchedPlayer": { + "$ref": "AnonymousPlayer", + "description": "Information about a player that has been anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)" + }, + "id": { + "type": "string", + "description": "An identifier for the participant in the scope of the match. Cannot be used to identify a player across matches or in other contexts." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchParticipant.", + "default": "games#turnBasedMatchParticipant" + }, + "player": { + "$ref": "Player", + "description": "Information about the player. Not populated if this player was anonymously auto-matched against the requesting player. (Either player or autoMatchedPlayer will be set.)" + }, + "status": { + "type": "string", + "description": "The status of the participant with respect to the match.\nPossible values are: \n- \"PARTICIPANT_NOT_INVITED_YET\" - The participant is slated to be invited to the match, but the invitation has not been sent; the invite will be sent when it becomes their turn. \n- \"PARTICIPANT_INVITED\" - The participant has been invited to join the match, but has not yet responded. \n- \"PARTICIPANT_JOINED\" - The participant has joined the match (either after creating it or accepting an invitation.) \n- \"PARTICIPANT_DECLINED\" - The participant declined an invitation to join the match. \n- \"PARTICIPANT_LEFT\" - The participant joined the match and then left it. \n- \"PARTICIPANT_FINISHED\" - The participant finished playing in the match. \n- \"PARTICIPANT_UNRESPONSIVE\" - The participant did not take their turn in the allotted time." + } + } + }, + "TurnBasedMatchRematch": { + "id": "TurnBasedMatchRematch", + "type": "object", + "description": "This is a JSON template for a rematch response.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchRematch.", + "default": "games#turnBasedMatchRematch" + }, + "previousMatch": { + "$ref": "TurnBasedMatch", + "description": "The old match that the rematch was created from; will be updated such that the rematchId field will point at the new match." + }, + "rematch": { + "$ref": "TurnBasedMatch", + "description": "The newly created match; a rematch of the old match with the same participants." + } + } + }, + "TurnBasedMatchResults": { + "id": "TurnBasedMatchResults", + "type": "object", + "description": "This is a JSON template for a turn-based match results object.", + "properties": { + "data": { + "$ref": "TurnBasedMatchDataRequest", + "description": "The final match data." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchResults.", + "default": "games#turnBasedMatchResults" + }, + "matchVersion": { + "type": "integer", + "description": "The version of the match being updated.", + "format": "int32" + }, + "results": { + "type": "array", + "description": "The match results for the participants in the match.", + "items": { + "$ref": "ParticipantResult" + } + } + } + }, + "TurnBasedMatchSync": { + "id": "TurnBasedMatchSync", + "type": "object", + "description": "This is a JSON template for a list of turn-based matches returned from a sync.", + "properties": { + "items": { + "type": "array", + "description": "The matches.", + "items": { + "$ref": "TurnBasedMatch" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchSync.", + "default": "games#turnBasedMatchSync" + }, + "moreAvailable": { + "type": "boolean", + "description": "True if there were more matches available to fetch at the time the response was generated (which were not returned due to page size limits.)" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + } + } + }, + "TurnBasedMatchTurn": { + "id": "TurnBasedMatchTurn", + "type": "object", + "description": "This is a JSON template for the object representing a turn.", + "properties": { + "data": { + "$ref": "TurnBasedMatchDataRequest", + "description": "The shared game state data after the turn is over." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string games#turnBasedMatchTurn.", + "default": "games#turnBasedMatchTurn" + }, + "matchVersion": { + "type": "integer", + "description": "The version of this match: an increasing counter, used to avoid out-of-date updates to the match.", + "format": "int32" + }, + "pendingParticipantId": { + "type": "string", + "description": "The ID of the participant who should take their turn next. May be set to the current player's participant ID to update match state without changing the turn. If not set, the match will wait for other player(s) to join via automatching; this is only valid if automatch criteria is set on the match with remaining slots for automatched players." + }, + "results": { + "type": "array", + "description": "The match results for the participants in the match.", + "items": { + "$ref": "ParticipantResult" + } + } + } + } + }, + "resources": { + "achievementDefinitions": { + "methods": { + "list": { + "id": "games.achievementDefinitions.list", + "path": "achievements", + "httpMethod": "GET", + "description": "Lists all the achievement definitions for your application.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of achievement resources to return in the response, used for paging. For any response, the actual number of achievement resources returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "response": { + "$ref": "AchievementDefinitionsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "achievements": { + "methods": { + "increment": { + "id": "games.achievements.increment", + "path": "achievements/{achievementId}/increment", + "httpMethod": "POST", + "description": "Increments the steps of the achievement with the given ID for the currently authenticated player.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + }, + "requestId": { + "type": "string", + "description": "A randomly generated numeric ID for each request specified by the caller. This number is used at the server to ensure that the request is handled correctly across retries.", + "format": "int64", + "location": "query" + }, + "stepsToIncrement": { + "type": "integer", + "description": "The number of steps to increment.", + "required": true, + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "achievementId", + "stepsToIncrement" + ], + "response": { + "$ref": "AchievementIncrementResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.achievements.list", + "path": "players/{playerId}/achievements", + "httpMethod": "GET", + "description": "Lists the progress for all your application's achievements for the currently authenticated player.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of achievement resources to return in the response, used for paging. For any response, the actual number of achievement resources returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + }, + "playerId": { + "type": "string", + "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + "required": true, + "location": "path" + }, + "state": { + "type": "string", + "description": "Tells the server to return only achievements with the specified state. If this parameter isn't specified, all achievements are returned.", + "enum": [ + "ALL", + "HIDDEN", + "REVEALED", + "UNLOCKED" + ], + "enumDescriptions": [ + "List all achievements. This is the default.", + "List only hidden achievements.", + "List only revealed achievements.", + "List only unlocked achievements." + ], + "location": "query" + } + }, + "parameterOrder": [ + "playerId" + ], + "response": { + "$ref": "PlayerAchievementListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "reveal": { + "id": "games.achievements.reveal", + "path": "achievements/{achievementId}/reveal", + "httpMethod": "POST", + "description": "Sets the state of the achievement with the given ID to REVEALED for the currently authenticated player.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "achievementId" + ], + "response": { + "$ref": "AchievementRevealResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "setStepsAtLeast": { + "id": "games.achievements.setStepsAtLeast", + "path": "achievements/{achievementId}/setStepsAtLeast", + "httpMethod": "POST", + "description": "Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + }, + "steps": { + "type": "integer", + "description": "The minimum value to set the steps to.", + "required": true, + "format": "int32", + "minimum": "1", + "location": "query" + } + }, + "parameterOrder": [ + "achievementId", + "steps" + ], + "response": { + "$ref": "AchievementSetStepsAtLeastResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "unlock": { + "id": "games.achievements.unlock", + "path": "achievements/{achievementId}/unlock", + "httpMethod": "POST", + "description": "Unlocks this achievement for the currently authenticated player.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "achievementId" + ], + "response": { + "$ref": "AchievementUnlockResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "updateMultiple": { + "id": "games.achievements.updateMultiple", + "path": "achievements/updateMultiple", + "httpMethod": "POST", + "description": "Updates multiple achievements for the currently authenticated player.", + "request": { + "$ref": "AchievementUpdateMultipleRequest" + }, + "response": { + "$ref": "AchievementUpdateMultipleResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "applications": { + "methods": { + "get": { + "id": "games.applications.get", + "path": "applications/{applicationId}", + "httpMethod": "GET", + "description": "Retrieves the metadata of the application with the given ID. If the requested application is not available for the specified platformType, the returned response will not include any instance data.", + "parameters": { + "applicationId": { + "type": "string", + "description": "The application being requested.", + "required": true, + "location": "path" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "platformType": { + "type": "string", + "description": "Restrict application details returned to the specific platform.", + "enum": [ + "ANDROID", + "IOS", + "WEB_APP" + ], + "enumDescriptions": [ + "Retrieve applications that can be played on Android.", + "Retrieve applications that can be played on iOS.", + "Retrieve applications that can be played on desktop web." + ], + "location": "query" + } + }, + "parameterOrder": [ + "applicationId" + ], + "response": { + "$ref": "Application" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "played": { + "id": "games.applications.played", + "path": "applications/played", + "httpMethod": "POST", + "description": "Indicate that the the currently authenticated user is playing your application.", + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "leaderboards": { + "methods": { + "get": { + "id": "games.leaderboards.get", + "path": "leaderboards/{leaderboardId}", + "httpMethod": "GET", + "description": "Retrieves the metadata of the leaderboard with the given ID.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "leaderboardId" + ], + "response": { + "$ref": "Leaderboard" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.leaderboards.list", + "path": "leaderboards", + "httpMethod": "GET", + "description": "Lists all the leaderboard metadata for your application.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of leaderboards to return in the response. For any response, the actual number of leaderboards returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "200", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "response": { + "$ref": "LeaderboardListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "players": { + "methods": { + "get": { + "id": "games.players.get", + "path": "players/{playerId}", + "httpMethod": "GET", + "description": "Retrieves the Player resource with the given ID. To retrieve the player for the currently authenticated user, set playerId to me.", + "parameters": { + "playerId": { + "type": "string", + "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "playerId" + ], + "response": { + "$ref": "Player" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.players.list", + "path": "players/me/players/{collection}", + "httpMethod": "GET", + "description": "Get the collection of players for the currently authenticated user.", + "parameters": { + "collection": { + "type": "string", + "description": "Collection of players being retrieved", + "required": true, + "enum": [ + "playedWith" + ], + "enumDescriptions": [ + "Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of player resources to return in the response, used for paging. For any response, the actual number of player resources returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "15", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "parameterOrder": [ + "collection" + ], + "response": { + "$ref": "PlayerListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "pushtokens": { + "methods": { + "remove": { + "id": "games.pushtokens.remove", + "path": "pushtokens/remove", + "httpMethod": "POST", + "description": "Removes a push token for the current user and application. Removing a non-existent push token will report success.", + "request": { + "$ref": "PushTokenId" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "update": { + "id": "games.pushtokens.update", + "path": "pushtokens", + "httpMethod": "PUT", + "description": "Registers a push token for the current user and application.", + "request": { + "$ref": "PushToken" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "revisions": { + "methods": { + "check": { + "id": "games.revisions.check", + "path": "revisions/check", + "httpMethod": "GET", + "description": "Checks whether the games client is out of date.", + "parameters": { + "clientRevision": { + "type": "string", + "description": "The revision of the client SDK used by your application. Format:\n[PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE are:\n \n- \"ANDROID\" - Client is running the Android SDK. \n- \"IOS\" - Client is running the iOS SDK. \n- \"WEB_APP\" - Client is running as a Web App.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "clientRevision" + ], + "response": { + "$ref": "RevisionCheckResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "rooms": { + "methods": { + "create": { + "id": "games.rooms.create", + "path": "rooms/create", + "httpMethod": "POST", + "description": "Create a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + } + }, + "request": { + "$ref": "RoomCreateRequest" + }, + "response": { + "$ref": "Room" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "decline": { + "id": "games.rooms.decline", + "path": "rooms/{roomId}/decline", + "httpMethod": "POST", + "description": "Decline an invitation to join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "response": { + "$ref": "Room" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "dismiss": { + "id": "games.rooms.dismiss", + "path": "rooms/{roomId}/dismiss", + "httpMethod": "POST", + "description": "Dismiss an invitation to join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "get": { + "id": "games.rooms.get", + "path": "rooms/{roomId}", + "httpMethod": "GET", + "description": "Get the data for a room.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "response": { + "$ref": "Room" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "join": { + "id": "games.rooms.join", + "path": "rooms/{roomId}/join", + "httpMethod": "POST", + "description": "Join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "request": { + "$ref": "RoomJoinRequest" + }, + "response": { + "$ref": "Room" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "leave": { + "id": "games.rooms.leave", + "path": "rooms/{roomId}/leave", + "httpMethod": "POST", + "description": "Leave a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "request": { + "$ref": "RoomLeaveRequest" + }, + "response": { + "$ref": "Room" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.rooms.list", + "path": "rooms", + "httpMethod": "GET", + "description": "Returns invitations to join rooms.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of rooms to return in the response, used for paging. For any response, the actual number of rooms to return may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "response": { + "$ref": "RoomList" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "reportStatus": { + "id": "games.rooms.reportStatus", + "path": "rooms/{roomId}/reportstatus", + "httpMethod": "POST", + "description": "Updates sent by a client reporting the status of peers in a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + "parameters": { + "roomId": { + "type": "string", + "description": "The ID of the room.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "roomId" + ], + "request": { + "$ref": "RoomP2PStatuses" + }, + "response": { + "$ref": "RoomStatus" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "scores": { + "methods": { + "get": { + "id": "games.scores.get", + "path": "players/{playerId}/leaderboards/{leaderboardId}/scores/{timeSpan}", + "httpMethod": "GET", + "description": "Get high scores, and optionally ranks, in leaderboards for the currently authenticated player. For a specific time span, leaderboardId can be set to ALL to retrieve data for all leaderboards in a given time span.\nNOTE: You cannot ask for 'ALL' leaderboards and 'ALL' timeSpans in the same request; only one parameter may be set to 'ALL'.", + "parameters": { + "includeRankType": { + "type": "string", + "description": "The types of ranks to return. If the parameter is omitted, no ranks will be returned.", + "enum": [ + "ALL", + "PUBLIC", + "SOCIAL" + ], + "enumDescriptions": [ + "Retrieve public and social ranks.", + "Retrieve public ranks, if the player is sharing their gameplay activity publicly.", + "Retrieve the social rank." + ], + "location": "query" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard. Can be set to 'ALL' to retrieve data for all leaderboards for this application.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "25", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + }, + "playerId": { + "type": "string", + "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + "required": true, + "location": "path" + }, + "timeSpan": { + "type": "string", + "description": "The time span for the scores and ranks you're requesting.", + "required": true, + "enum": [ + "ALL", + "ALL_TIME", + "DAILY", + "WEEKLY" + ], + "enumDescriptions": [ + "Get the high scores for all time spans. If this is used, maxResults values will be ignored.", + "Get the all time high score.", + "List the top scores for the current day.", + "List the top scores for the current week." + ], + "location": "path" + } + }, + "parameterOrder": [ + "playerId", + "leaderboardId", + "timeSpan" + ], + "response": { + "$ref": "PlayerLeaderboardScoreListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.scores.list", + "path": "leaderboards/{leaderboardId}/scores/{collection}", + "httpMethod": "GET", + "description": "Lists the scores in a leaderboard, starting from the top.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of scores you're requesting.", + "required": true, + "enum": [ + "PUBLIC", + "SOCIAL" + ], + "enumDescriptions": [ + "List all scores in the public leaderboard.", + "List only social scores." + ], + "location": "path" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "25", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + }, + "timeSpan": { + "type": "string", + "description": "The time span for the scores and ranks you're requesting.", + "required": true, + "enum": [ + "ALL_TIME", + "DAILY", + "WEEKLY" + ], + "enumDescriptions": [ + "List the all-time top scores.", + "List the top scores for the current day.", + "List the top scores for the current week." + ], + "location": "query" + } + }, + "parameterOrder": [ + "leaderboardId", + "collection", + "timeSpan" + ], + "response": { + "$ref": "LeaderboardScores" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "listWindow": { + "id": "games.scores.listWindow", + "path": "leaderboards/{leaderboardId}/window/{collection}", + "httpMethod": "GET", + "description": "Lists the scores in a leaderboard around (and including) a player's score.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of scores you're requesting.", + "required": true, + "enum": [ + "PUBLIC", + "SOCIAL" + ], + "enumDescriptions": [ + "List all scores in the public leaderboard.", + "List only social scores." + ], + "location": "path" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "25", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + }, + "resultsAbove": { + "type": "integer", + "description": "The preferred number of scores to return above the player's score. More scores may be returned if the player is at the bottom of the leaderboard; fewer may be returned if the player is at the top. Must be less than or equal to maxResults.", + "format": "int32", + "location": "query" + }, + "returnTopIfAbsent": { + "type": "boolean", + "description": "True if the top scores should be returned when the player is not in the leaderboard. Defaults to true.", + "location": "query" + }, + "timeSpan": { + "type": "string", + "description": "The time span for the scores and ranks you're requesting.", + "required": true, + "enum": [ + "ALL_TIME", + "DAILY", + "WEEKLY" + ], + "enumDescriptions": [ + "List the all-time top scores.", + "List the top scores for the current day.", + "List the top scores for the current week." + ], + "location": "query" + } + }, + "parameterOrder": [ + "leaderboardId", + "collection", + "timeSpan" + ], + "response": { + "$ref": "LeaderboardScores" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "submit": { + "id": "games.scores.submit", + "path": "leaderboards/{leaderboardId}/scores", + "httpMethod": "POST", + "description": "Submits a score to the specified leaderboard.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + }, + "score": { + "type": "string", + "description": "The score you're submitting. The submitted score is ignored if it is worse than a previously submitted score, where worse depends on the leaderboard sort order. The meaning of the score value depends on the leaderboard format type. For fixed-point, the score represents the raw value. For time, the score represents elapsed time in milliseconds. For currency, the score represents a value in micro units.", + "required": true, + "format": "int64", + "location": "query" + }, + "scoreTag": { + "type": "string", + "description": "Additional information about the score you're submitting. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.", + "pattern": "[a-zA-Z0-9-._~]{0,64}", + "location": "query" + } + }, + "parameterOrder": [ + "leaderboardId", + "score" + ], + "response": { + "$ref": "PlayerScoreResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "submitMultiple": { + "id": "games.scores.submitMultiple", + "path": "leaderboards/scores", + "httpMethod": "POST", + "description": "Submits multiple scores to leaderboards.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + } + }, + "request": { + "$ref": "PlayerScoreSubmissionList" + }, + "response": { + "$ref": "PlayerScoreListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "turnBasedMatches": { + "methods": { + "cancel": { + "id": "games.turnBasedMatches.cancel", + "path": "turnbasedmatches/{matchId}/cancel", + "httpMethod": "PUT", + "description": "Cancel a turn-based match.", + "parameters": { + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "create": { + "id": "games.turnBasedMatches.create", + "path": "turnbasedmatches/create", + "httpMethod": "POST", + "description": "Create a turn-based match.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + } + }, + "request": { + "$ref": "TurnBasedMatchCreateRequest" + }, + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "decline": { + "id": "games.turnBasedMatches.decline", + "path": "turnbasedmatches/{matchId}/decline", + "httpMethod": "PUT", + "description": "Decline an invitation to play a turn-based match.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "dismiss": { + "id": "games.turnBasedMatches.dismiss", + "path": "turnbasedmatches/{matchId}/dismiss", + "httpMethod": "PUT", + "description": "Dismiss a turn-based match from the match list. The match will no longer show up in the list and will not generate notifications.", + "parameters": { + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "finish": { + "id": "games.turnBasedMatches.finish", + "path": "turnbasedmatches/{matchId}/finish", + "httpMethod": "PUT", + "description": "Finish a turn-based match. Each player should make this call once, after all results are in. Only the player whose turn it is may make the first call to Finish, and can pass in the final match state.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "request": { + "$ref": "TurnBasedMatchResults" + }, + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "get": { + "id": "games.turnBasedMatches.get", + "path": "turnbasedmatches/{matchId}", + "httpMethod": "GET", + "description": "Get the data for a turn-based match.", + "parameters": { + "includeMatchData": { + "type": "boolean", + "description": "Get match data along with metadata.", + "location": "query" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "join": { + "id": "games.turnBasedMatches.join", + "path": "turnbasedmatches/{matchId}/join", + "httpMethod": "PUT", + "description": "Join a turn-based match.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "leave": { + "id": "games.turnBasedMatches.leave", + "path": "turnbasedmatches/{matchId}/leave", + "httpMethod": "PUT", + "description": "Leave a turn-based match when it is not the current player's turn, without canceling the match.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "leaveTurn": { + "id": "games.turnBasedMatches.leaveTurn", + "path": "turnbasedmatches/{matchId}/leaveTurn", + "httpMethod": "PUT", + "description": "Leave a turn-based match during the current player's turn, without canceling the match.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + }, + "matchVersion": { + "type": "integer", + "description": "The version of the match being updated.", + "required": true, + "format": "int32", + "location": "query" + }, + "pendingParticipantId": { + "type": "string", + "description": "The ID of another participant who should take their turn next. If not set, the match will wait for other player(s) to join via automatching; this is only valid if automatch criteria is set on the match with remaining slots for automatched players.", + "location": "query" + } + }, + "parameterOrder": [ + "matchId", + "matchVersion" + ], + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "list": { + "id": "games.turnBasedMatches.list", + "path": "turnbasedmatches", + "httpMethod": "GET", + "description": "Returns turn-based matches the player is or was involved in.", + "parameters": { + "includeMatchData": { + "type": "boolean", + "description": "True if match data should be returned in the response. Note that not all data will necessarily be returned if include_match_data is true; the server may decide to only return data for some of the matches to limit download size for the client. The remainder of the data for these matches will be retrievable on request.", + "location": "query" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxCompletedMatches": { + "type": "integer", + "description": "The maximum number of completed or canceled matches to return in the response. If not set, all matches returned could be completed or canceled.", + "format": "int32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of matches to return in the response, used for paging. For any response, the actual number of matches to return may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "response": { + "$ref": "TurnBasedMatchList" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "rematch": { + "id": "games.turnBasedMatches.rematch", + "path": "turnbasedmatches/{matchId}/rematch", + "httpMethod": "POST", + "description": "Create a rematch of a match that was previously completed, with the same participants. This can be called by only one player on a match still in their list; the player must have called Finish first. Returns the newly created match; it will be the caller's turn.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + }, + "requestId": { + "type": "string", + "description": "A randomly generated numeric ID for each request specified by the caller. This number is used at the server to ensure that the request is handled correctly across retries.", + "format": "int64", + "location": "query" + } + }, + "parameterOrder": [ + "matchId" + ], + "response": { + "$ref": "TurnBasedMatchRematch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "sync": { + "id": "games.turnBasedMatches.sync", + "path": "turnbasedmatches/sync", + "httpMethod": "GET", + "description": "Returns turn-based matches the player is or was involved in that changed since the last sync call, with the least recent changes coming first. Matches that should be removed from the local cache will have a status of MATCH_DELETED.", + "parameters": { + "includeMatchData": { + "type": "boolean", + "description": "True if match data should be returned in the response. Note that not all data will necessarily be returned if include_match_data is true; the server may decide to only return data for some of the matches to limit download size for the client. The remainder of the data for these matches will be retrievable on request.", + "location": "query" + }, + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "maxCompletedMatches": { + "type": "integer", + "description": "The maximum number of completed or canceled matches to return in the response. If not set, all matches returned could be completed or canceled.", + "format": "int32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of matches to return in the response, used for paging. For any response, the actual number of matches to return may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "response": { + "$ref": "TurnBasedMatchSync" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "takeTurn": { + "id": "games.turnBasedMatches.takeTurn", + "path": "turnbasedmatches/{matchId}/turn", + "httpMethod": "PUT", + "description": "Commit the results of a player turn.", + "parameters": { + "language": { + "type": "string", + "description": "The preferred language to use for strings returned by this method.", + "location": "query" + }, + "matchId": { + "type": "string", + "description": "The ID of the match.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "matchId" + ], + "request": { + "$ref": "TurnBasedMatchTurn" + }, + "response": { + "$ref": "TurnBasedMatch" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-gen.go b/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-gen.go new file mode 100644 index 0000000000000..bcc80a0c42c8f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/games/v1/games-gen.go @@ -0,0 +1,5694 @@ +// Package games provides access to the Google Play Game Services API. +// +// See https://developers.google.com/games/services/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/games/v1" +// ... +// gamesService, err := games.New(oauthHttpClient) +package games + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "games:v1" +const apiName = "games" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/games/v1/" + +// OAuth2 scopes used by this API. +const ( + // Share your Google+ profile information and view and manage your game + // activity + GamesScope = "https://www.googleapis.com/auth/games" + + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.AchievementDefinitions = NewAchievementDefinitionsService(s) + s.Achievements = NewAchievementsService(s) + s.Applications = NewApplicationsService(s) + s.Leaderboards = NewLeaderboardsService(s) + s.Players = NewPlayersService(s) + s.Pushtokens = NewPushtokensService(s) + s.Revisions = NewRevisionsService(s) + s.Rooms = NewRoomsService(s) + s.Scores = NewScoresService(s) + s.TurnBasedMatches = NewTurnBasedMatchesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + AchievementDefinitions *AchievementDefinitionsService + + Achievements *AchievementsService + + Applications *ApplicationsService + + Leaderboards *LeaderboardsService + + Players *PlayersService + + Pushtokens *PushtokensService + + Revisions *RevisionsService + + Rooms *RoomsService + + Scores *ScoresService + + TurnBasedMatches *TurnBasedMatchesService +} + +func NewAchievementDefinitionsService(s *Service) *AchievementDefinitionsService { + rs := &AchievementDefinitionsService{s: s} + return rs +} + +type AchievementDefinitionsService struct { + s *Service +} + +func NewAchievementsService(s *Service) *AchievementsService { + rs := &AchievementsService{s: s} + return rs +} + +type AchievementsService struct { + s *Service +} + +func NewApplicationsService(s *Service) *ApplicationsService { + rs := &ApplicationsService{s: s} + return rs +} + +type ApplicationsService struct { + s *Service +} + +func NewLeaderboardsService(s *Service) *LeaderboardsService { + rs := &LeaderboardsService{s: s} + return rs +} + +type LeaderboardsService struct { + s *Service +} + +func NewPlayersService(s *Service) *PlayersService { + rs := &PlayersService{s: s} + return rs +} + +type PlayersService struct { + s *Service +} + +func NewPushtokensService(s *Service) *PushtokensService { + rs := &PushtokensService{s: s} + return rs +} + +type PushtokensService struct { + s *Service +} + +func NewRevisionsService(s *Service) *RevisionsService { + rs := &RevisionsService{s: s} + return rs +} + +type RevisionsService struct { + s *Service +} + +func NewRoomsService(s *Service) *RoomsService { + rs := &RoomsService{s: s} + return rs +} + +type RoomsService struct { + s *Service +} + +func NewScoresService(s *Service) *ScoresService { + rs := &ScoresService{s: s} + return rs +} + +type ScoresService struct { + s *Service +} + +func NewTurnBasedMatchesService(s *Service) *TurnBasedMatchesService { + rs := &TurnBasedMatchesService{s: s} + return rs +} + +type TurnBasedMatchesService struct { + s *Service +} + +type AchievementDefinition struct { + // AchievementType: The type of the achievement. + // Possible values are: + // + // - "STANDARD" - Achievement is either locked or unlocked. + // - + // "INCREMENTAL" - Achievement is incremental. + AchievementType string `json:"achievementType,omitempty"` + + // Description: The description of the achievement. + Description string `json:"description,omitempty"` + + // FormattedTotalSteps: The total steps for an incremental achievement + // as a string. + FormattedTotalSteps string `json:"formattedTotalSteps,omitempty"` + + // Id: The ID of the achievement. + Id string `json:"id,omitempty"` + + // InitialState: The initial state of the achievement. + // Possible values + // are: + // - "HIDDEN" - Achievement is hidden. + // - "REVEALED" - + // Achievement is revealed. + // - "UNLOCKED" - Achievement is unlocked. + InitialState string `json:"initialState,omitempty"` + + // IsRevealedIconUrlDefault: Indicates whether the revealed icon image + // being returned is a default image, or is provided by the game. + IsRevealedIconUrlDefault bool `json:"isRevealedIconUrlDefault,omitempty"` + + // IsUnlockedIconUrlDefault: Indicates whether the unlocked icon image + // being returned is a default image, or is game-provided. + IsUnlockedIconUrlDefault bool `json:"isUnlockedIconUrlDefault,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementDefinition. + Kind string `json:"kind,omitempty"` + + // Name: The name of the achievement. + Name string `json:"name,omitempty"` + + // RevealedIconUrl: The image URL for the revealed achievement icon. + RevealedIconUrl string `json:"revealedIconUrl,omitempty"` + + // TotalSteps: The total steps for an incremental achievement. + TotalSteps int64 `json:"totalSteps,omitempty"` + + // UnlockedIconUrl: The image URL for the unlocked achievement icon. + UnlockedIconUrl string `json:"unlockedIconUrl,omitempty"` +} + +type AchievementDefinitionsListResponse struct { + // Items: The achievement definitions. + Items []*AchievementDefinition `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementDefinitionsListResponse. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token corresponding to the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type AchievementIncrementResponse struct { + // CurrentSteps: The current steps recorded for this incremental + // achievement. + CurrentSteps int64 `json:"currentSteps,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementIncrementResponse. + Kind string `json:"kind,omitempty"` + + // NewlyUnlocked: Whether the the current steps for the achievement has + // reached the number of steps required to unlock. + NewlyUnlocked bool `json:"newlyUnlocked,omitempty"` +} + +type AchievementRevealResponse struct { + // CurrentState: The current state of the achievement for which a reveal + // was attempted. This might be UNLOCKED if the achievement was already + // unlocked. + // Possible values are: + // - "REVEALED" - Achievement is + // revealed. + // - "UNLOCKED" - Achievement is unlocked. + CurrentState string `json:"currentState,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementRevealResponse. + Kind string `json:"kind,omitempty"` +} + +type AchievementSetStepsAtLeastResponse struct { + // CurrentSteps: The current steps recorded for this incremental + // achievement. + CurrentSteps int64 `json:"currentSteps,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementSetStepsAtLeastResponse. + Kind string `json:"kind,omitempty"` + + // NewlyUnlocked: Whether the the current steps for the achievement has + // reached the number of steps required to unlock. + NewlyUnlocked bool `json:"newlyUnlocked,omitempty"` +} + +type AchievementUnlockResponse struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementUnlockResponse. + Kind string `json:"kind,omitempty"` + + // NewlyUnlocked: Whether this achievement was newly unlocked (that is, + // whether the unlock request for the achievement was the first for the + // player). + NewlyUnlocked bool `json:"newlyUnlocked,omitempty"` +} + +type AchievementUpdateMultipleRequest struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementUpdateMultipleRequest. + Kind string `json:"kind,omitempty"` + + // Updates: The individual achievement update requests. + Updates []*AchievementUpdateRequest `json:"updates,omitempty"` +} + +type AchievementUpdateMultipleResponse struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementUpdateListResponse. + Kind string `json:"kind,omitempty"` + + // UpdatedAchievements: The updated state of the achievements. + UpdatedAchievements []*AchievementUpdateResponse `json:"updatedAchievements,omitempty"` +} + +type AchievementUpdateRequest struct { + // AchievementId: The achievement this update is being applied to. + AchievementId string `json:"achievementId,omitempty"` + + // IncrementPayload: The payload if an update of type INCREMENT was + // requested for the achievement. + IncrementPayload *GamesAchievementIncrement `json:"incrementPayload,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementUpdateRequest. + Kind string `json:"kind,omitempty"` + + // SetStepsAtLeastPayload: The payload if an update of type + // SET_STEPS_AT_LEAST was requested for the achievement. + SetStepsAtLeastPayload *GamesAchievementSetStepsAtLeast `json:"setStepsAtLeastPayload,omitempty"` + + // UpdateType: The type of update being applied. + // Possible values are: + // + // - "REVEAL" - Achievement is revealed. + // - "UNLOCK" - Achievement is + // unlocked. + // - "INCREMENT" - Achievement is incremented. + // - + // "SET_STEPS_AT_LEAST" - Achievement progress is set to at least the + // passed value. + UpdateType string `json:"updateType,omitempty"` +} + +type AchievementUpdateResponse struct { + // AchievementId: The achievement this update is was applied to. + AchievementId string `json:"achievementId,omitempty"` + + // CurrentState: The current state of the achievement. + // Possible values + // are: + // - "HIDDEN" - Achievement is hidden. + // - "REVEALED" - + // Achievement is revealed. + // - "UNLOCKED" - Achievement is unlocked. + CurrentState string `json:"currentState,omitempty"` + + // CurrentSteps: The current steps recorded for this achievement if it + // is incremental. + CurrentSteps int64 `json:"currentSteps,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#achievementUpdateResponse. + Kind string `json:"kind,omitempty"` + + // NewlyUnlocked: Whether this achievement was newly unlocked (that is, + // whether the unlock request for the achievement was the first for the + // player). + NewlyUnlocked bool `json:"newlyUnlocked,omitempty"` + + // UpdateOccurred: Whether the requested updates actually affected the + // achievement. + UpdateOccurred bool `json:"updateOccurred,omitempty"` +} + +type AggregateStats struct { + // Count: The number of messages sent between a pair of peers. + Count int64 `json:"count,omitempty,string"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#aggregateStats. + Kind string `json:"kind,omitempty"` + + // Max: The maximum amount. + Max int64 `json:"max,omitempty,string"` + + // Min: The minimum amount. + Min int64 `json:"min,omitempty,string"` + + // Sum: The total number of bytes sent for messages between a pair of + // peers. + Sum int64 `json:"sum,omitempty,string"` +} + +type AnonymousPlayer struct { + // AvatarImageUrl: The base URL for the image to display for the + // anonymous player. + AvatarImageUrl string `json:"avatarImageUrl,omitempty"` + + // DisplayName: The name to display for the anonymous player. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#anonymousPlayer. + Kind string `json:"kind,omitempty"` +} + +type Application struct { + // Achievement_count: The number of achievements visible to the + // currently authenticated player. + Achievement_count int64 `json:"achievement_count,omitempty"` + + // Assets: The assets of the application. + Assets []*ImageAsset `json:"assets,omitempty"` + + // Author: The author of the application. + Author string `json:"author,omitempty"` + + // Category: The category of the application. + Category *ApplicationCategory `json:"category,omitempty"` + + // Description: The description of the application. + Description string `json:"description,omitempty"` + + // Id: The ID of the application. + Id string `json:"id,omitempty"` + + // Instances: The instances of the application. + Instances []*Instance `json:"instances,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#application. + Kind string `json:"kind,omitempty"` + + // LastUpdatedTimestamp: The last updated timestamp of the application. + LastUpdatedTimestamp int64 `json:"lastUpdatedTimestamp,omitempty,string"` + + // Leaderboard_count: The number of leaderboards visible to the + // currently authenticated player. + Leaderboard_count int64 `json:"leaderboard_count,omitempty"` + + // Name: The name of the application. + Name string `json:"name,omitempty"` +} + +type ApplicationCategory struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#applicationCategory. + Kind string `json:"kind,omitempty"` + + // Primary: The primary category. + Primary string `json:"primary,omitempty"` + + // Secondary: The secondary category. + Secondary string `json:"secondary,omitempty"` +} + +type GamesAchievementIncrement struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#GamesAchievementIncrement. + Kind string `json:"kind,omitempty"` + + // RequestId: The requestId associated with an increment to an + // achievement. + RequestId int64 `json:"requestId,omitempty,string"` + + // Steps: The number of steps to be incremented. + Steps int64 `json:"steps,omitempty"` +} + +type GamesAchievementSetStepsAtLeast struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#GamesAchievementSetStepsAtLeast. + Kind string `json:"kind,omitempty"` + + // Steps: The minimum number of steps for the achievement to be set to. + Steps int64 `json:"steps,omitempty"` +} + +type ImageAsset struct { + // Height: The height of the asset. + Height int64 `json:"height,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#imageAsset. + Kind string `json:"kind,omitempty"` + + // Name: The name of the asset. + Name string `json:"name,omitempty"` + + // Url: The URL of the asset. + Url string `json:"url,omitempty"` + + // Width: The width of the asset. + Width int64 `json:"width,omitempty"` +} + +type Instance struct { + // AcquisitionUri: URI which shows where a user can acquire this + // instance. + AcquisitionUri string `json:"acquisitionUri,omitempty"` + + // AndroidInstance: Platform dependent details for Android. + AndroidInstance *InstanceAndroidDetails `json:"androidInstance,omitempty"` + + // IosInstance: Platform dependent details for iOS. + IosInstance *InstanceIosDetails `json:"iosInstance,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#instance. + Kind string `json:"kind,omitempty"` + + // Name: Localized display name. + Name string `json:"name,omitempty"` + + // PlatformType: The platform type. + // Possible values are: + // - "ANDROID" - + // Instance is for Android. + // - "IOS" - Instance is for iOS + // - "WEB_APP" + // - Instance is for Web App. + PlatformType string `json:"platformType,omitempty"` + + // RealtimePlay: Flag to show if this game instance supports realtime + // play. + RealtimePlay bool `json:"realtimePlay,omitempty"` + + // TurnBasedPlay: Flag to show if this game instance supports turn based + // play. + TurnBasedPlay bool `json:"turnBasedPlay,omitempty"` + + // WebInstance: Platform dependent details for Web. + WebInstance *InstanceWebDetails `json:"webInstance,omitempty"` +} + +type InstanceAndroidDetails struct { + // EnablePiracyCheck: Flag indicating whether the anti-piracy check is + // enabled. + EnablePiracyCheck bool `json:"enablePiracyCheck,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#instanceAndroidDetails. + Kind string `json:"kind,omitempty"` + + // PackageName: Android package name which maps to Google Play URL. + PackageName string `json:"packageName,omitempty"` + + // Preferred: Indicates that this instance is the default for new + // installations. + Preferred bool `json:"preferred,omitempty"` +} + +type InstanceIosDetails struct { + // BundleIdentifier: Bundle identifier. + BundleIdentifier string `json:"bundleIdentifier,omitempty"` + + // ItunesAppId: iTunes App ID. + ItunesAppId string `json:"itunesAppId,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#instanceIosDetails. + Kind string `json:"kind,omitempty"` + + // PreferredForIpad: Indicates that this instance is the default for new + // installations on iPad devices. + PreferredForIpad bool `json:"preferredForIpad,omitempty"` + + // PreferredForIphone: Indicates that this instance is the default for + // new installations on iPhone devices. + PreferredForIphone bool `json:"preferredForIphone,omitempty"` + + // SupportIpad: Flag to indicate if this instance supports iPad. + SupportIpad bool `json:"supportIpad,omitempty"` + + // SupportIphone: Flag to indicate if this instance supports iPhone. + SupportIphone bool `json:"supportIphone,omitempty"` +} + +type InstanceWebDetails struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#instanceWebDetails. + Kind string `json:"kind,omitempty"` + + // LaunchUrl: Launch URL for the game. + LaunchUrl string `json:"launchUrl,omitempty"` + + // Preferred: Indicates that this instance is the default for new + // installations. + Preferred bool `json:"preferred,omitempty"` +} + +type Leaderboard struct { + // IconUrl: The icon for the leaderboard. + IconUrl string `json:"iconUrl,omitempty"` + + // Id: The leaderboard ID. + Id string `json:"id,omitempty"` + + // IsIconUrlDefault: Indicates whether the icon image being returned is + // a default image, or is game-provided. + IsIconUrlDefault bool `json:"isIconUrlDefault,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#leaderboard. + Kind string `json:"kind,omitempty"` + + // Name: The name of the leaderboard. + Name string `json:"name,omitempty"` + + // Order: How scores are ordered. + // Possible values are: + // - + // "LARGER_IS_BETTER" - Larger values are better; scores are sorted in + // descending order. + // - "SMALLER_IS_BETTER" - Smaller values are better; + // scores are sorted in ascending order. + Order string `json:"order,omitempty"` +} + +type LeaderboardEntry struct { + // FormattedScore: The localized string for the numerical value of this + // score. + FormattedScore string `json:"formattedScore,omitempty"` + + // FormattedScoreRank: The localized string for the rank of this score + // for this leaderboard. + FormattedScoreRank string `json:"formattedScoreRank,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#leaderboardEntry. + Kind string `json:"kind,omitempty"` + + // Player: The player who holds this score. + Player *Player `json:"player,omitempty"` + + // ScoreRank: The rank of this score for this leaderboard. + ScoreRank int64 `json:"scoreRank,omitempty,string"` + + // ScoreTag: Additional information about the score. Values must contain + // no more than 64 URI-safe characters as defined by section 2.3 of RFC + // 3986. + ScoreTag string `json:"scoreTag,omitempty"` + + // ScoreValue: The numerical value of this score. + ScoreValue int64 `json:"scoreValue,omitempty,string"` + + // TimeSpan: The time span of this high score. + // Possible values are: + // - + // "ALL_TIME" - The score is an all-time high score. + // - "WEEKLY" - The + // score is a weekly high score. + // - "DAILY" - The score is a daily high + // score. + TimeSpan string `json:"timeSpan,omitempty"` + + // WriteTimestampMillis: The timestamp at which this score was recorded, + // in milliseconds since the epoch in UTC. + WriteTimestampMillis int64 `json:"writeTimestampMillis,omitempty,string"` +} + +type LeaderboardListResponse struct { + // Items: The leaderboards. + Items []*Leaderboard `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#leaderboardListResponse. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token corresponding to the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type LeaderboardScoreRank struct { + // FormattedNumScores: The number of scores in the leaderboard as a + // string. + FormattedNumScores string `json:"formattedNumScores,omitempty"` + + // FormattedRank: The rank in the leaderboard as a string. + FormattedRank string `json:"formattedRank,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#leaderboardScoreRank. + Kind string `json:"kind,omitempty"` + + // NumScores: The number of scores in the leaderboard. + NumScores int64 `json:"numScores,omitempty,string"` + + // Rank: The rank in the leaderboard. + Rank int64 `json:"rank,omitempty,string"` +} + +type LeaderboardScores struct { + // Items: The scores in the leaderboard. + Items []*LeaderboardEntry `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#leaderboardScores. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // NumScores: The total number of scores in the leaderboard. + NumScores int64 `json:"numScores,omitempty,string"` + + // PlayerScore: The score of the requesting player on the leaderboard. + // The player's score may appear both here and in the list of scores + // above. If you are viewing a public leaderboard and the player is not + // sharing their gameplay information publicly, the scoreRank and + // formattedScoreRank values will not be present. + PlayerScore *LeaderboardEntry `json:"playerScore,omitempty"` + + // PrevPageToken: The pagination token for the previous page of results. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type NetworkDiagnostics struct { + // AndroidNetworkSubtype: The Android network subtype. + AndroidNetworkSubtype int64 `json:"androidNetworkSubtype,omitempty"` + + // AndroidNetworkType: The Android network type. + AndroidNetworkType int64 `json:"androidNetworkType,omitempty"` + + // IosNetworkType: iOS network type as defined in Reachability.h. + IosNetworkType int64 `json:"iosNetworkType,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#networkDiagnostics. + Kind string `json:"kind,omitempty"` + + // RegistrationLatencyMillis: The amount of time in milliseconds it took + // for the client to establish a connection with the XMPP server. + RegistrationLatencyMillis int64 `json:"registrationLatencyMillis,omitempty"` +} + +type ParticipantResult struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#participantResult. + Kind string `json:"kind,omitempty"` + + // ParticipantId: The ID of the participant. + ParticipantId string `json:"participantId,omitempty"` + + // Placing: The placement or ranking of the participant in the match + // results; a number from one to the number of participants in the + // match. Multiple participants may have the same placing value in case + // of a type. + Placing int64 `json:"placing,omitempty"` + + // Result: The result of the participant for this match. + // Possible values + // are: + // - "MATCH_RESULT_WIN" - The participant won the match. + // - + // "MATCH_RESULT_LOSS" - The participant lost the match. + // - + // "MATCH_RESULT_TIE" - The participant tied the match. + // - + // "MATCH_RESULT_NONE" - There was no winner for the match (nobody wins + // or loses this kind of game.) + // - "MATCH_RESULT_DISCONNECT" - The + // participant disconnected / left during the match. + // - + // "MATCH_RESULT_DISAGREED" - Different clients reported different + // results for this participant. + Result string `json:"result,omitempty"` +} + +type PeerChannelDiagnostics struct { + // BytesReceived: Number of bytes received. + BytesReceived *AggregateStats `json:"bytesReceived,omitempty"` + + // BytesSent: Number of bytes sent. + BytesSent *AggregateStats `json:"bytesSent,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#peerChannelDiagnostics. + Kind string `json:"kind,omitempty"` + + // NumMessagesLost: Number of messages lost. + NumMessagesLost int64 `json:"numMessagesLost,omitempty"` + + // NumMessagesReceived: Number of messages received. + NumMessagesReceived int64 `json:"numMessagesReceived,omitempty"` + + // NumMessagesSent: Number of messages sent. + NumMessagesSent int64 `json:"numMessagesSent,omitempty"` + + // NumSendFailures: Number of send failures. + NumSendFailures int64 `json:"numSendFailures,omitempty"` + + // RoundtripLatencyMillis: Roundtrip latency stats in milliseconds. + RoundtripLatencyMillis *AggregateStats `json:"roundtripLatencyMillis,omitempty"` +} + +type PeerSessionDiagnostics struct { + // ConnectedTimestampMillis: Connected time in milliseconds. + ConnectedTimestampMillis int64 `json:"connectedTimestampMillis,omitempty,string"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#peerSessionDiagnostics. + Kind string `json:"kind,omitempty"` + + // ParticipantId: The participant ID of the peer. + ParticipantId string `json:"participantId,omitempty"` + + // ReliableChannel: Reliable channel diagnostics. + ReliableChannel *PeerChannelDiagnostics `json:"reliableChannel,omitempty"` + + // UnreliableChannel: Unreliable channel diagnostics. + UnreliableChannel *PeerChannelDiagnostics `json:"unreliableChannel,omitempty"` +} + +type Played struct { + // AutoMatched: True if the player was auto-matched with the currently + // authenticated user. + AutoMatched bool `json:"autoMatched,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#played. + Kind string `json:"kind,omitempty"` + + // TimeMillis: The last time the player played the game in milliseconds + // since the epoch in UTC. + TimeMillis int64 `json:"timeMillis,omitempty,string"` +} + +type Player struct { + // AvatarImageUrl: The base URL for the image that represents the + // player. + AvatarImageUrl string `json:"avatarImageUrl,omitempty"` + + // DisplayName: The name to display for the player. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#player. + Kind string `json:"kind,omitempty"` + + // LastPlayedWith: Details about the last time this player played a + // multiplayer game with the currently authenticated player. Populated + // for PLAYED_WITH player collection members. + LastPlayedWith *Played `json:"lastPlayedWith,omitempty"` + + // Name: An object representation of the individual components of the + // player's name. + Name *PlayerName `json:"name,omitempty"` + + // PlayerId: The ID of the player. + PlayerId string `json:"playerId,omitempty"` +} + +type PlayerName struct { + // FamilyName: The family name (last name) of this player. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name (first name) of this player. + GivenName string `json:"givenName,omitempty"` +} + +type PlayerAchievement struct { + // AchievementState: The state of the achievement. + // Possible values are: + // + // - "HIDDEN" - Achievement is hidden. + // - "REVEALED" - Achievement is + // revealed. + // - "UNLOCKED" - Achievement is unlocked. + AchievementState string `json:"achievementState,omitempty"` + + // CurrentSteps: The current steps for an incremental achievement. + CurrentSteps int64 `json:"currentSteps,omitempty"` + + // FormattedCurrentStepsString: The current steps for an incremental + // achievement as a string. + FormattedCurrentStepsString string `json:"formattedCurrentStepsString,omitempty"` + + // Id: The ID of the achievement. + Id string `json:"id,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerAchievement. + Kind string `json:"kind,omitempty"` + + // LastUpdatedTimestamp: The timestamp of the last modification to this + // achievement's state. + LastUpdatedTimestamp int64 `json:"lastUpdatedTimestamp,omitempty,string"` +} + +type PlayerAchievementListResponse struct { + // Items: The achievements. + Items []*PlayerAchievement `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerAchievementListResponse. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token corresponding to the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type PlayerLeaderboardScore struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerLeaderboardScore. + Kind string `json:"kind,omitempty"` + + // Leaderboard_id: The ID of the leaderboard this score is in. + Leaderboard_id string `json:"leaderboard_id,omitempty"` + + // PublicRank: The public rank of the score in this leaderboard. This + // object will not be present if the user is not sharing their scores + // publicly. + PublicRank *LeaderboardScoreRank `json:"publicRank,omitempty"` + + // ScoreString: The formatted value of this score. + ScoreString string `json:"scoreString,omitempty"` + + // ScoreTag: Additional information about the score. Values must contain + // no more than 64 URI-safe characters as defined by section 2.3 of RFC + // 3986. + ScoreTag string `json:"scoreTag,omitempty"` + + // ScoreValue: The numerical value of this score. + ScoreValue int64 `json:"scoreValue,omitempty,string"` + + // SocialRank: The social rank of the score in this leaderboard. + SocialRank *LeaderboardScoreRank `json:"socialRank,omitempty"` + + // TimeSpan: The time span of this score. + // Possible values are: + // - + // "ALL_TIME" - The score is an all-time score. + // - "WEEKLY" - The score + // is a weekly score. + // - "DAILY" - The score is a daily score. + TimeSpan string `json:"timeSpan,omitempty"` + + // WriteTimestamp: The timestamp at which this score was recorded, in + // milliseconds since the epoch in UTC. + WriteTimestamp int64 `json:"writeTimestamp,omitempty,string"` +} + +type PlayerLeaderboardScoreListResponse struct { + // Items: The leaderboard scores. + Items []*PlayerLeaderboardScore `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerLeaderboardScoreListResponse. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Player: The Player resources for the owner of this score. + Player *Player `json:"player,omitempty"` +} + +type PlayerListResponse struct { + // Items: The players. + Items []*Player `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerListResponse. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token corresponding to the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type PlayerScore struct { + // FormattedScore: The formatted score for this player score. + FormattedScore string `json:"formattedScore,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerScore. + Kind string `json:"kind,omitempty"` + + // Score: The numerical value for this player score. + Score int64 `json:"score,omitempty,string"` + + // ScoreTag: Additional information about this score. Values will + // contain no more than 64 URI-safe characters as defined by section 2.3 + // of RFC 3986. + ScoreTag string `json:"scoreTag,omitempty"` + + // TimeSpan: The time span for this player score. + // Possible values are: + // + // - "ALL_TIME" - The score is an all-time score. + // - "WEEKLY" - The + // score is a weekly score. + // - "DAILY" - The score is a daily score. + TimeSpan string `json:"timeSpan,omitempty"` +} + +type PlayerScoreListResponse struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerScoreListResponse. + Kind string `json:"kind,omitempty"` + + // SubmittedScores: The score submissions statuses. + SubmittedScores []*PlayerScoreResponse `json:"submittedScores,omitempty"` +} + +type PlayerScoreResponse struct { + // BeatenScoreTimeSpans: The time spans where the submitted score is + // better than the existing score for that time span. + // Possible values + // are: + // - "ALL_TIME" - The score is an all-time score. + // - "WEEKLY" - + // The score is a weekly score. + // - "DAILY" - The score is a daily score. + BeatenScoreTimeSpans []string `json:"beatenScoreTimeSpans,omitempty"` + + // FormattedScore: The formatted value of the submitted score. + FormattedScore string `json:"formattedScore,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerScoreResponse. + Kind string `json:"kind,omitempty"` + + // LeaderboardId: The leaderboard ID that this score was submitted to. + LeaderboardId string `json:"leaderboardId,omitempty"` + + // ScoreTag: Additional information about this score. Values will + // contain no more than 64 URI-safe characters as defined by section 2.3 + // of RFC 3986. + ScoreTag string `json:"scoreTag,omitempty"` + + // UnbeatenScores: The scores in time spans that have not been beaten. + // As an example, the submitted score may be better than the player's + // DAILY score, but not better than the player's scores for the WEEKLY + // or ALL_TIME time spans. + UnbeatenScores []*PlayerScore `json:"unbeatenScores,omitempty"` +} + +type PlayerScoreSubmissionList struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#playerScoreSubmissionList. + Kind string `json:"kind,omitempty"` + + // Scores: The score submissions. + Scores []*ScoreSubmission `json:"scores,omitempty"` +} + +type PushToken struct { + // ClientRevision: The revision of the client SDK used by your + // application, in the same format that's used by revisions.check. Used + // to send backward compatible messages. Format: + // [PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE + // are: + // - IOS - Push token is for iOS + ClientRevision string `json:"clientRevision,omitempty"` + + // Id: Unique identifier for this push token. + Id *PushTokenId `json:"id,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#pushToken. + Kind string `json:"kind,omitempty"` + + // Language: The preferred language for notifications that are sent + // using this token. + Language string `json:"language,omitempty"` +} + +type PushTokenId struct { + // Ios: A push token ID for iOS devices. + Ios *PushTokenIdIos `json:"ios,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#pushTokenId. + Kind string `json:"kind,omitempty"` +} + +type PushTokenIdIos struct { + // Apns_device_token: Device token supplied by an iOS system call to + // register for remote notifications. Encode this field as web-safe + // base64. + Apns_device_token string `json:"apns_device_token,omitempty"` + + // Apns_environment: Use SANDBOX during development for the APNS test + // server at gateway.sandbox.push.apple.com or PRODUCTION for the + // production server at gateway.push.apple.com. + Apns_environment string `json:"apns_environment,omitempty"` +} + +type RevisionCheckResponse struct { + // ApiVersion: The version of the API this client revision should use + // when calling API methods. + ApiVersion string `json:"apiVersion,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#revisionCheckResponse. + Kind string `json:"kind,omitempty"` + + // RevisionStatus: The result of the revision check. + // Possible values + // are: + // - "OK" - The revision being used is current. + // - "DEPRECATED" - + // There is currently a newer version available, but the revision being + // used still works. + // - "INVALID" - The revision being used is not + // supported in any released version. + RevisionStatus string `json:"revisionStatus,omitempty"` +} + +type Room struct { + // ApplicationId: The ID of the application being played. + ApplicationId string `json:"applicationId,omitempty"` + + // AutoMatchingCriteria: Criteria for auto-matching players into this + // room. + AutoMatchingCriteria *RoomAutoMatchingCriteria `json:"autoMatchingCriteria,omitempty"` + + // AutoMatchingStatus: Auto-matching status for this room. Not set if + // the room is not currently in the auto-matching queue. + AutoMatchingStatus *RoomAutoMatchStatus `json:"autoMatchingStatus,omitempty"` + + // CreationDetails: Details about the room creation. + CreationDetails *RoomModification `json:"creationDetails,omitempty"` + + // Description: This short description is generated by our servers and + // worded relative to the player requesting the room. It is intended to + // be displayed when the room is shown in a list (that is, an invitation + // to a room.) + Description string `json:"description,omitempty"` + + // InviterId: The ID of the participant that invited the user to the + // room. Not set if the user was not invited to the room. + InviterId string `json:"inviterId,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#room. + Kind string `json:"kind,omitempty"` + + // LastUpdateDetails: Details about the last update to the room. + LastUpdateDetails *RoomModification `json:"lastUpdateDetails,omitempty"` + + // Participants: The participants involved in the room, along with their + // statuses. Includes participants who have left or declined + // invitations. + Participants []*RoomParticipant `json:"participants,omitempty"` + + // RoomId: Globally unique ID for a room. + RoomId string `json:"roomId,omitempty"` + + // RoomStatusVersion: The version of the room status: an increasing + // counter, used by the client to ignore out-of-order updates to room + // status. + RoomStatusVersion int64 `json:"roomStatusVersion,omitempty"` + + // Status: The status of the room. + // Possible values are: + // - + // "ROOM_INVITING" - One or more players have been invited and not + // responded. + // - "ROOM_AUTO_MATCHING" - One or more slots need to be + // filled by auto-matching. + // - "ROOM_CONNECTING" - Players have joined + // and are connecting to each other (either before or after + // auto-matching). + // - "ROOM_ACTIVE" - All players have joined and + // connected to each other. + // - "ROOM_DELETED" - The room should no + // longer be shown on the client. Returned in sync calls when a player + // joins a room (as a tombstone), or for rooms where all joined + // participants have left. + Status string `json:"status,omitempty"` + + // Variant: The variant / mode of the application being played; can be + // any integer value, or left blank. + Variant int64 `json:"variant,omitempty"` +} + +type RoomAutoMatchStatus struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomAutoMatchStatus. + Kind string `json:"kind,omitempty"` + + // WaitEstimateSeconds: An estimate for the amount of time (in seconds) + // that auto-matching is expected to take to complete. + WaitEstimateSeconds int64 `json:"waitEstimateSeconds,omitempty"` +} + +type RoomAutoMatchingCriteria struct { + // ExclusiveBitmask: A bitmask indicating when auto-matches are valid. + // When ANDed with other exclusive bitmasks, the result must be zero. + // Can be used to support exclusive roles within a game. + ExclusiveBitmask int64 `json:"exclusiveBitmask,omitempty,string"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomAutoMatchingCriteria. + Kind string `json:"kind,omitempty"` + + // MaxAutoMatchingPlayers: The maximum number of players that should be + // added to the room by auto-matching. + MaxAutoMatchingPlayers int64 `json:"maxAutoMatchingPlayers,omitempty"` + + // MinAutoMatchingPlayers: The minimum number of players that should be + // added to the room by auto-matching. + MinAutoMatchingPlayers int64 `json:"minAutoMatchingPlayers,omitempty"` +} + +type RoomClientAddress struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomClientAddress. + Kind string `json:"kind,omitempty"` + + // XmppAddress: The XMPP address of the client on the Google Games XMPP + // network. + XmppAddress string `json:"xmppAddress,omitempty"` +} + +type RoomCreateRequest struct { + // AutoMatchingCriteria: Criteria for auto-matching players into this + // room. + AutoMatchingCriteria *RoomAutoMatchingCriteria `json:"autoMatchingCriteria,omitempty"` + + // Capabilities: The capabilities that this client supports for realtime + // communication. + Capabilities []string `json:"capabilities,omitempty"` + + // ClientAddress: Client address for the player creating the room. + ClientAddress *RoomClientAddress `json:"clientAddress,omitempty"` + + // InvitedPlayerIds: The player IDs to invite to the room. + InvitedPlayerIds []string `json:"invitedPlayerIds,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomCreateRequest. + Kind string `json:"kind,omitempty"` + + // NetworkDiagnostics: Network diagnostics for the client creating the + // room. + NetworkDiagnostics *NetworkDiagnostics `json:"networkDiagnostics,omitempty"` + + // RequestId: A randomly generated numeric ID. This number is used at + // the server to ensure that the request is handled correctly across + // retries. + RequestId int64 `json:"requestId,omitempty,string"` + + // Variant: The variant / mode of the application to be played. This can + // be any integer value, or left blank. You should use a small number of + // variants to keep the auto-matching pool as large as possible. + Variant int64 `json:"variant,omitempty"` +} + +type RoomJoinRequest struct { + // Capabilities: The capabilities that this client supports for realtime + // communication. + Capabilities []string `json:"capabilities,omitempty"` + + // ClientAddress: Client address for the player joining the room. + ClientAddress *RoomClientAddress `json:"clientAddress,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomJoinRequest. + Kind string `json:"kind,omitempty"` + + // NetworkDiagnostics: Network diagnostics for the client joining the + // room. + NetworkDiagnostics *NetworkDiagnostics `json:"networkDiagnostics,omitempty"` +} + +type RoomLeaveDiagnostics struct { + // AndroidNetworkSubtype: Android network subtype. + // http://developer.android.com/reference/android/net/NetworkInfo.html#ge + // tSubtype() + AndroidNetworkSubtype int64 `json:"androidNetworkSubtype,omitempty"` + + // AndroidNetworkType: Android network type. + // http://developer.android.com/reference/android/net/NetworkInfo.html#ge + // tType() + AndroidNetworkType int64 `json:"androidNetworkType,omitempty"` + + // IosNetworkType: iOS network type as defined in Reachability.h. + IosNetworkType int64 `json:"iosNetworkType,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomLeaveDiagnostics. + Kind string `json:"kind,omitempty"` + + // PeerSession: Diagnostics about all peer sessions. + PeerSession []*PeerSessionDiagnostics `json:"peerSession,omitempty"` + + // SocketsUsed: Whether or not sockets were used. + SocketsUsed bool `json:"socketsUsed,omitempty"` +} + +type RoomLeaveRequest struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomLeaveRequest. + Kind string `json:"kind,omitempty"` + + // LeaveDiagnostics: Diagnostics for a player leaving the room. + LeaveDiagnostics *RoomLeaveDiagnostics `json:"leaveDiagnostics,omitempty"` + + // Reason: Reason for leaving the match. + // Possible values are: + // - + // "PLAYER_LEFT" - The player chose to leave the room.. + // - "GAME_LEFT" - + // The game chose to remove the player from the room. + // - + // "REALTIME_ABANDONED" - The player switched to another application and + // abandoned the room. + // - "REALTIME_PEER_CONNECTION_FAILURE" - The + // client was unable to establish a connection to other peer(s). + // - + // "REALTIME_SERVER_CONNECTION_FAILURE" - The client was unable to + // communicate with the server. + // - "REALTIME_SERVER_ERROR" - The client + // received an error response when it tried to communicate with the + // server. + // - "REALTIME_TIMEOUT" - The client timed out while waiting + // for a room. + Reason string `json:"reason,omitempty"` +} + +type RoomList struct { + // Items: The rooms. + Items []*Room `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type RoomModification struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomModification. + Kind string `json:"kind,omitempty"` + + // ModifiedTimestampMillis: The timestamp at which they modified the + // room, in milliseconds since the epoch in UTC. + ModifiedTimestampMillis int64 `json:"modifiedTimestampMillis,omitempty,string"` + + // ParticipantId: The ID of the participant that modified the room. + ParticipantId string `json:"participantId,omitempty"` +} + +type RoomP2PStatus struct { + // ConnectionSetupLatencyMillis: The amount of time in milliseconds it + // took to establish connections with this peer. + ConnectionSetupLatencyMillis int64 `json:"connectionSetupLatencyMillis,omitempty"` + + // Error: The error code in event of a failure. + // Possible values are: + // - + // "P2P_FAILED" - The client failed to establish a P2P connection with + // the peer. + // - "PRESENCE_FAILED" - The client failed to register to + // receive P2P connections. + // - "RELAY_SERVER_FAILED" - The client + // received an error when trying to use the relay server to establish a + // P2P connection with the peer. + Error string `json:"error,omitempty"` + + // Error_reason: More detailed diagnostic message returned in event of a + // failure. + Error_reason string `json:"error_reason,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomP2PStatus. + Kind string `json:"kind,omitempty"` + + // ParticipantId: The ID of the participant. + ParticipantId string `json:"participantId,omitempty"` + + // Status: The status of the peer in the room. + // Possible values are: + // - + // "CONNECTION_ESTABLISHED" - The client established a P2P connection + // with the peer. + // - "CONNECTION_FAILED" - The client failed to + // establish directed presence with the peer. + Status string `json:"status,omitempty"` + + // UnreliableRoundtripLatencyMillis: The amount of time in milliseconds + // it took to send packets back and forth on the unreliable channel with + // this peer. + UnreliableRoundtripLatencyMillis int64 `json:"unreliableRoundtripLatencyMillis,omitempty"` +} + +type RoomP2PStatuses struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomP2PStatuses. + Kind string `json:"kind,omitempty"` + + // Updates: The updates for the peers. + Updates []*RoomP2PStatus `json:"updates,omitempty"` +} + +type RoomParticipant struct { + // AutoMatched: True if this participant was auto-matched with the + // requesting player. + AutoMatched bool `json:"autoMatched,omitempty"` + + // AutoMatchedPlayer: Information about a player that has been + // anonymously auto-matched against the requesting player. (Either + // player or autoMatchedPlayer will be set.) + AutoMatchedPlayer *AnonymousPlayer `json:"autoMatchedPlayer,omitempty"` + + // Capabilities: The capabilities which can be used when communicating + // with this participant. + Capabilities []string `json:"capabilities,omitempty"` + + // ClientAddress: Client address for the participant. + ClientAddress *RoomClientAddress `json:"clientAddress,omitempty"` + + // Connected: True if this participant is in the fully connected set of + // peers in the room. + Connected bool `json:"connected,omitempty"` + + // Id: An identifier for the participant in the scope of the room. + // Cannot be used to identify a player across rooms or in other + // contexts. + Id string `json:"id,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomParticipant. + Kind string `json:"kind,omitempty"` + + // LeaveReason: The reason the participant left the room; populated if + // the participant status is PARTICIPANT_LEFT. + // Possible values are: + // - + // "PLAYER_LEFT" - The player explicitly chose to leave the room. + // - + // "GAME_LEFT" - The game chose to remove the player from the room. + // - + // "ABANDONED" - The player switched to another application and + // abandoned the room. + // - "PEER_CONNECTION_FAILURE" - The client was + // unable to establish or maintain a connection to other peer(s) in the + // room. + // - "SERVER_ERROR" - The client received an error response when + // it tried to communicate with the server. + // - "TIMEOUT" - The client + // timed out while waiting for players to join and connect. + // - + // "PRESENCE_FAILURE" - The client's XMPP connection ended abruptly. + LeaveReason string `json:"leaveReason,omitempty"` + + // Player: Information about the player. Not populated if this player + // was anonymously auto-matched against the requesting player. (Either + // player or autoMatchedPlayer will be set.) + Player *Player `json:"player,omitempty"` + + // Status: The status of the participant with respect to the + // room. + // Possible values are: + // - "PARTICIPANT_INVITED" - The + // participant has been invited to join the room, but has not yet + // responded. + // - "PARTICIPANT_JOINED" - The participant has joined the + // room (either after creating it or accepting an invitation.) + // - + // "PARTICIPANT_DECLINED" - The participant declined an invitation to + // join the room. + // - "PARTICIPANT_LEFT" - The participant joined the + // room and then left it. + Status string `json:"status,omitempty"` +} + +type RoomStatus struct { + // AutoMatchingStatus: Auto-matching status for this room. Not set if + // the room is not currently in the automatching queue. + AutoMatchingStatus *RoomAutoMatchStatus `json:"autoMatchingStatus,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#roomStatus. + Kind string `json:"kind,omitempty"` + + // Participants: The participants involved in the room, along with their + // statuses. Includes participants who have left or declined + // invitations. + Participants []*RoomParticipant `json:"participants,omitempty"` + + // RoomId: Globally unique ID for a room. + RoomId string `json:"roomId,omitempty"` + + // Status: The status of the room. + // Possible values are: + // - + // "ROOM_INVITING" - One or more players have been invited and not + // responded. + // - "ROOM_AUTO_MATCHING" - One or more slots need to be + // filled by auto-matching. + // - "ROOM_CONNECTING" - Players have joined + // are connecting to each other (either before or after auto-matching). + // + // - "ROOM_ACTIVE" - All players have joined and connected to each + // other. + // - "ROOM_DELETED" - All joined players have left. + Status string `json:"status,omitempty"` + + // StatusVersion: The version of the status for the room: an increasing + // counter, used by the client to ignore out-of-order updates to room + // status. + StatusVersion int64 `json:"statusVersion,omitempty"` +} + +type ScoreSubmission struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#scoreSubmission. + Kind string `json:"kind,omitempty"` + + // LeaderboardId: The leaderboard this score is being submitted to. + LeaderboardId string `json:"leaderboardId,omitempty"` + + // Score: The new score being submitted. + Score int64 `json:"score,omitempty,string"` + + // ScoreTag: Additional information about this score. Values will + // contain no more than 64 URI-safe characters as defined by section 2.3 + // of RFC 3986. + ScoreTag string `json:"scoreTag,omitempty"` +} + +type TurnBasedAutoMatchingCriteria struct { + // ExclusiveBitmask: A bitmask indicating when auto-matches are valid. + // When ANDed with other exclusive bitmasks, the result must be zero. + // Can be used to support exclusive roles within a game. + ExclusiveBitmask int64 `json:"exclusiveBitmask,omitempty,string"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedAutoMatchingCriteria. + Kind string `json:"kind,omitempty"` + + // MaxAutoMatchingPlayers: The maximum number of players that should be + // added to the match by auto-matching. + MaxAutoMatchingPlayers int64 `json:"maxAutoMatchingPlayers,omitempty"` + + // MinAutoMatchingPlayers: The minimum number of players that should be + // added to the match by auto-matching. + MinAutoMatchingPlayers int64 `json:"minAutoMatchingPlayers,omitempty"` +} + +type TurnBasedMatch struct { + // ApplicationId: The ID of the application being played. + ApplicationId string `json:"applicationId,omitempty"` + + // AutoMatchingCriteria: Criteria for auto-matching players into this + // match. + AutoMatchingCriteria *TurnBasedAutoMatchingCriteria `json:"autoMatchingCriteria,omitempty"` + + // CreationDetails: Details about the match creation. + CreationDetails *TurnBasedMatchModification `json:"creationDetails,omitempty"` + + // Data: The data / game state for this match. + Data *TurnBasedMatchData `json:"data,omitempty"` + + // Description: This short description is generated by our servers based + // on turn state and is localized and worded relative to the player + // requesting the match. It is intended to be displayed when the match + // is shown in a list. + Description string `json:"description,omitempty"` + + // InviterId: The ID of the participant that invited the user to the + // match. Not set if the user was not invited to the match. + InviterId string `json:"inviterId,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatch. + Kind string `json:"kind,omitempty"` + + // LastUpdateDetails: Details about the last update to the match. + LastUpdateDetails *TurnBasedMatchModification `json:"lastUpdateDetails,omitempty"` + + // MatchId: Globally unique ID for a turn-based match. + MatchId string `json:"matchId,omitempty"` + + // MatchNumber: The number of the match in a chain of rematches. Will be + // set to 1 for the first match and incremented by 1 for each rematch. + MatchNumber int64 `json:"matchNumber,omitempty"` + + // MatchVersion: The version of this match: an increasing counter, used + // to avoid out-of-date updates to the match. + MatchVersion int64 `json:"matchVersion,omitempty"` + + // Participants: The participants involved in the match, along with + // their statuses. Includes participants who have left or declined + // invitations. + Participants []*TurnBasedMatchParticipant `json:"participants,omitempty"` + + // PendingParticipantId: The ID of the participant that is taking a + // turn. + PendingParticipantId string `json:"pendingParticipantId,omitempty"` + + // PreviousMatchData: The data / game state for the previous match; set + // for the first turn of rematches only. + PreviousMatchData *TurnBasedMatchData `json:"previousMatchData,omitempty"` + + // RematchId: The ID of a rematch of this match. Only set for completed + // matches that have been rematched. + RematchId string `json:"rematchId,omitempty"` + + // Results: The results reported for this match. + Results []*ParticipantResult `json:"results,omitempty"` + + // Status: The status of the match. + // Possible values are: + // - + // "MATCH_AUTO_MATCHING" - One or more slots need to be filled by + // auto-matching; the match cannot be established until they are filled. + // + // - "MATCH_ACTIVE" - The match has started. + // - "MATCH_COMPLETE" - The + // match has finished. + // - "MATCH_CANCELED" - The match was canceled. + // - + // "MATCH_EXPIRED" - The match expired due to inactivity. + // - + // "MATCH_DELETED" - The match should no longer be shown on the client. + // Returned only for tombstones for matches when sync is called. + Status string `json:"status,omitempty"` + + // UserMatchStatus: The status of the current user in the match. Derived + // from the match type, match status, the user's participant status, and + // the pending participant for the match. + // Possible values are: + // - + // "USER_INVITED" - The user has been invited to join the match and has + // not responded yet. + // - "USER_AWAITING_TURN" - The user is waiting for + // their turn. + // - "USER_TURN" - The user has an action to take in the + // match. + // - "USER_MATCH_COMPLETED" - The match has ended (it is + // completed, canceled, or expired.) + UserMatchStatus string `json:"userMatchStatus,omitempty"` + + // Variant: The variant / mode of the application being played; can be + // any integer value, or left blank. + Variant int64 `json:"variant,omitempty"` + + // WithParticipantId: The ID of another participant in the match that + // can be used when describing the participants the user is playing + // with. + WithParticipantId string `json:"withParticipantId,omitempty"` +} + +type TurnBasedMatchCreateRequest struct { + // AutoMatchingCriteria: Criteria for auto-matching players into this + // match. + AutoMatchingCriteria *TurnBasedAutoMatchingCriteria `json:"autoMatchingCriteria,omitempty"` + + // InvitedPlayerIds: The player ids to invite to the match. + InvitedPlayerIds []string `json:"invitedPlayerIds,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchCreateRequest. + Kind string `json:"kind,omitempty"` + + // RequestId: A randomly generated numeric ID. This number is used at + // the server to ensure that the request is handled correctly across + // retries. + RequestId int64 `json:"requestId,omitempty,string"` + + // Variant: The variant / mode of the application to be played. This can + // be any integer value, or left blank. You should use a small number of + // variants to keep the auto-matching pool as large as possible. + Variant int64 `json:"variant,omitempty"` +} + +type TurnBasedMatchData struct { + // Data: The byte representation of the data (limited to 128 kB), as a + // Base64-encoded string with the URL_SAFE encoding option. + Data string `json:"data,omitempty"` + + // DataAvailable: True if this match has data available but it wasn't + // returned in a list response; fetching the match individually will + // retrieve this data. + DataAvailable bool `json:"dataAvailable,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchData. + Kind string `json:"kind,omitempty"` +} + +type TurnBasedMatchDataRequest struct { + // Data: The byte representation of the data (limited to 128 kB), as a + // Base64-encoded string with the URL_SAFE encoding option. + Data string `json:"data,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchDataRequest. + Kind string `json:"kind,omitempty"` +} + +type TurnBasedMatchList struct { + // Items: The matches. + Items []*TurnBasedMatch `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type TurnBasedMatchModification struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchModification. + Kind string `json:"kind,omitempty"` + + // ModifiedTimestampMillis: The timestamp at which they modified the + // match, in milliseconds since the epoch in UTC. + ModifiedTimestampMillis int64 `json:"modifiedTimestampMillis,omitempty,string"` + + // ParticipantId: The ID of the participant that modified the match. + ParticipantId string `json:"participantId,omitempty"` +} + +type TurnBasedMatchParticipant struct { + // AutoMatched: True if this participant was auto-matched with the + // requesting player. + AutoMatched bool `json:"autoMatched,omitempty"` + + // AutoMatchedPlayer: Information about a player that has been + // anonymously auto-matched against the requesting player. (Either + // player or autoMatchedPlayer will be set.) + AutoMatchedPlayer *AnonymousPlayer `json:"autoMatchedPlayer,omitempty"` + + // Id: An identifier for the participant in the scope of the match. + // Cannot be used to identify a player across matches or in other + // contexts. + Id string `json:"id,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchParticipant. + Kind string `json:"kind,omitempty"` + + // Player: Information about the player. Not populated if this player + // was anonymously auto-matched against the requesting player. (Either + // player or autoMatchedPlayer will be set.) + Player *Player `json:"player,omitempty"` + + // Status: The status of the participant with respect to the + // match. + // Possible values are: + // - "PARTICIPANT_NOT_INVITED_YET" - The + // participant is slated to be invited to the match, but the invitation + // has not been sent; the invite will be sent when it becomes their + // turn. + // - "PARTICIPANT_INVITED" - The participant has been invited to + // join the match, but has not yet responded. + // - "PARTICIPANT_JOINED" - + // The participant has joined the match (either after creating it or + // accepting an invitation.) + // - "PARTICIPANT_DECLINED" - The participant + // declined an invitation to join the match. + // - "PARTICIPANT_LEFT" - The + // participant joined the match and then left it. + // - + // "PARTICIPANT_FINISHED" - The participant finished playing in the + // match. + // - "PARTICIPANT_UNRESPONSIVE" - The participant did not take + // their turn in the allotted time. + Status string `json:"status,omitempty"` +} + +type TurnBasedMatchRematch struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchRematch. + Kind string `json:"kind,omitempty"` + + // PreviousMatch: The old match that the rematch was created from; will + // be updated such that the rematchId field will point at the new match. + PreviousMatch *TurnBasedMatch `json:"previousMatch,omitempty"` + + // Rematch: The newly created match; a rematch of the old match with the + // same participants. + Rematch *TurnBasedMatch `json:"rematch,omitempty"` +} + +type TurnBasedMatchResults struct { + // Data: The final match data. + Data *TurnBasedMatchDataRequest `json:"data,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchResults. + Kind string `json:"kind,omitempty"` + + // MatchVersion: The version of the match being updated. + MatchVersion int64 `json:"matchVersion,omitempty"` + + // Results: The match results for the participants in the match. + Results []*ParticipantResult `json:"results,omitempty"` +} + +type TurnBasedMatchSync struct { + // Items: The matches. + Items []*TurnBasedMatch `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchSync. + Kind string `json:"kind,omitempty"` + + // MoreAvailable: True if there were more matches available to fetch at + // the time the response was generated (which were not returned due to + // page size limits.) + MoreAvailable bool `json:"moreAvailable,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type TurnBasedMatchTurn struct { + // Data: The shared game state data after the turn is over. + Data *TurnBasedMatchDataRequest `json:"data,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string games#turnBasedMatchTurn. + Kind string `json:"kind,omitempty"` + + // MatchVersion: The version of this match: an increasing counter, used + // to avoid out-of-date updates to the match. + MatchVersion int64 `json:"matchVersion,omitempty"` + + // PendingParticipantId: The ID of the participant who should take their + // turn next. May be set to the current player's participant ID to + // update match state without changing the turn. If not set, the match + // will wait for other player(s) to join via automatching; this is only + // valid if automatch criteria is set on the match with remaining slots + // for automatched players. + PendingParticipantId string `json:"pendingParticipantId,omitempty"` + + // Results: The match results for the participants in the match. + Results []*ParticipantResult `json:"results,omitempty"` +} + +// method id "games.achievementDefinitions.list": + +type AchievementDefinitionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all the achievement definitions for your application. +func (r *AchievementDefinitionsService) List() *AchievementDefinitionsListCall { + c := &AchievementDefinitionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *AchievementDefinitionsListCall) Language(language string) *AchievementDefinitionsListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of achievement resources to return in the response, used for +// paging. For any response, the actual number of achievement resources +// returned may be less than the specified maxResults. +func (c *AchievementDefinitionsListCall) MaxResults(maxResults int64) *AchievementDefinitionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *AchievementDefinitionsListCall) PageToken(pageToken string) *AchievementDefinitionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AchievementDefinitionsListCall) Do() (*AchievementDefinitionsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementDefinitionsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the achievement definitions for your application.", + // "httpMethod": "GET", + // "id": "games.achievementDefinitions.list", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of achievement resources to return in the response, used for paging. For any response, the actual number of achievement resources returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "200", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "achievements", + // "response": { + // "$ref": "AchievementDefinitionsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.increment": + +type AchievementsIncrementCall struct { + s *Service + achievementId string + stepsToIncrement int64 + opt_ map[string]interface{} +} + +// Increment: Increments the steps of the achievement with the given ID +// for the currently authenticated player. +func (r *AchievementsService) Increment(achievementId string, stepsToIncrement int64) *AchievementsIncrementCall { + c := &AchievementsIncrementCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + c.stepsToIncrement = stepsToIncrement + return c +} + +// RequestId sets the optional parameter "requestId": A randomly +// generated numeric ID for each request specified by the caller. This +// number is used at the server to ensure that the request is handled +// correctly across retries. +func (c *AchievementsIncrementCall) RequestId(requestId int64) *AchievementsIncrementCall { + c.opt_["requestId"] = requestId + return c +} + +func (c *AchievementsIncrementCall) Do() (*AchievementIncrementResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("stepsToIncrement", fmt.Sprintf("%v", c.stepsToIncrement)) + if v, ok := c.opt_["requestId"]; ok { + params.Set("requestId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/increment") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementIncrementResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Increments the steps of the achievement with the given ID for the currently authenticated player.", + // "httpMethod": "POST", + // "id": "games.achievements.increment", + // "parameterOrder": [ + // "achievementId", + // "stepsToIncrement" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "requestId": { + // "description": "A randomly generated numeric ID for each request specified by the caller. This number is used at the server to ensure that the request is handled correctly across retries.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "stepsToIncrement": { + // "description": "The number of steps to increment.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "achievements/{achievementId}/increment", + // "response": { + // "$ref": "AchievementIncrementResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.list": + +type AchievementsListCall struct { + s *Service + playerId string + opt_ map[string]interface{} +} + +// List: Lists the progress for all your application's achievements for +// the currently authenticated player. +func (r *AchievementsService) List(playerId string) *AchievementsListCall { + c := &AchievementsListCall{s: r.s, opt_: make(map[string]interface{})} + c.playerId = playerId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *AchievementsListCall) Language(language string) *AchievementsListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of achievement resources to return in the response, used for +// paging. For any response, the actual number of achievement resources +// returned may be less than the specified maxResults. +func (c *AchievementsListCall) MaxResults(maxResults int64) *AchievementsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *AchievementsListCall) PageToken(pageToken string) *AchievementsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// State sets the optional parameter "state": Tells the server to return +// only achievements with the specified state. If this parameter isn't +// specified, all achievements are returned. +func (c *AchievementsListCall) State(state string) *AchievementsListCall { + c.opt_["state"] = state + return c +} + +func (c *AchievementsListCall) Do() (*PlayerAchievementListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["state"]; ok { + params.Set("state", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "players/{playerId}/achievements") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{playerId}", url.QueryEscape(c.playerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerAchievementListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the progress for all your application's achievements for the currently authenticated player.", + // "httpMethod": "GET", + // "id": "games.achievements.list", + // "parameterOrder": [ + // "playerId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of achievement resources to return in the response, used for paging. For any response, the actual number of achievement resources returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "200", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // }, + // "playerId": { + // "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "state": { + // "description": "Tells the server to return only achievements with the specified state. If this parameter isn't specified, all achievements are returned.", + // "enum": [ + // "ALL", + // "HIDDEN", + // "REVEALED", + // "UNLOCKED" + // ], + // "enumDescriptions": [ + // "List all achievements. This is the default.", + // "List only hidden achievements.", + // "List only revealed achievements.", + // "List only unlocked achievements." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "players/{playerId}/achievements", + // "response": { + // "$ref": "PlayerAchievementListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.reveal": + +type AchievementsRevealCall struct { + s *Service + achievementId string + opt_ map[string]interface{} +} + +// Reveal: Sets the state of the achievement with the given ID to +// REVEALED for the currently authenticated player. +func (r *AchievementsService) Reveal(achievementId string) *AchievementsRevealCall { + c := &AchievementsRevealCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + return c +} + +func (c *AchievementsRevealCall) Do() (*AchievementRevealResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/reveal") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementRevealResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the state of the achievement with the given ID to REVEALED for the currently authenticated player.", + // "httpMethod": "POST", + // "id": "games.achievements.reveal", + // "parameterOrder": [ + // "achievementId" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "achievements/{achievementId}/reveal", + // "response": { + // "$ref": "AchievementRevealResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.setStepsAtLeast": + +type AchievementsSetStepsAtLeastCall struct { + s *Service + achievementId string + steps int64 + opt_ map[string]interface{} +} + +// SetStepsAtLeast: Sets the steps for the currently authenticated +// player towards unlocking an achievement. If the steps parameter is +// less than the current number of steps that the player already gained +// for the achievement, the achievement is not modified. +func (r *AchievementsService) SetStepsAtLeast(achievementId string, steps int64) *AchievementsSetStepsAtLeastCall { + c := &AchievementsSetStepsAtLeastCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + c.steps = steps + return c +} + +func (c *AchievementsSetStepsAtLeastCall) Do() (*AchievementSetStepsAtLeastResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("steps", fmt.Sprintf("%v", c.steps)) + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/setStepsAtLeast") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementSetStepsAtLeastResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the steps for the currently authenticated player towards unlocking an achievement. If the steps parameter is less than the current number of steps that the player already gained for the achievement, the achievement is not modified.", + // "httpMethod": "POST", + // "id": "games.achievements.setStepsAtLeast", + // "parameterOrder": [ + // "achievementId", + // "steps" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "steps": { + // "description": "The minimum value to set the steps to.", + // "format": "int32", + // "location": "query", + // "minimum": "1", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "achievements/{achievementId}/setStepsAtLeast", + // "response": { + // "$ref": "AchievementSetStepsAtLeastResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.unlock": + +type AchievementsUnlockCall struct { + s *Service + achievementId string + opt_ map[string]interface{} +} + +// Unlock: Unlocks this achievement for the currently authenticated +// player. +func (r *AchievementsService) Unlock(achievementId string) *AchievementsUnlockCall { + c := &AchievementsUnlockCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + return c +} + +func (c *AchievementsUnlockCall) Do() (*AchievementUnlockResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/unlock") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementUnlockResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Unlocks this achievement for the currently authenticated player.", + // "httpMethod": "POST", + // "id": "games.achievements.unlock", + // "parameterOrder": [ + // "achievementId" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "achievements/{achievementId}/unlock", + // "response": { + // "$ref": "AchievementUnlockResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.achievements.updateMultiple": + +type AchievementsUpdateMultipleCall struct { + s *Service + achievementupdatemultiplerequest *AchievementUpdateMultipleRequest + opt_ map[string]interface{} +} + +// UpdateMultiple: Updates multiple achievements for the currently +// authenticated player. +func (r *AchievementsService) UpdateMultiple(achievementupdatemultiplerequest *AchievementUpdateMultipleRequest) *AchievementsUpdateMultipleCall { + c := &AchievementsUpdateMultipleCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementupdatemultiplerequest = achievementupdatemultiplerequest + return c +} + +func (c *AchievementsUpdateMultipleCall) Do() (*AchievementUpdateMultipleResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.achievementupdatemultiplerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/updateMultiple") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementUpdateMultipleResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates multiple achievements for the currently authenticated player.", + // "httpMethod": "POST", + // "id": "games.achievements.updateMultiple", + // "path": "achievements/updateMultiple", + // "request": { + // "$ref": "AchievementUpdateMultipleRequest" + // }, + // "response": { + // "$ref": "AchievementUpdateMultipleResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.applications.get": + +type ApplicationsGetCall struct { + s *Service + applicationId string + opt_ map[string]interface{} +} + +// Get: Retrieves the metadata of the application with the given ID. If +// the requested application is not available for the specified +// platformType, the returned response will not include any instance +// data. +func (r *ApplicationsService) Get(applicationId string) *ApplicationsGetCall { + c := &ApplicationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.applicationId = applicationId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ApplicationsGetCall) Language(language string) *ApplicationsGetCall { + c.opt_["language"] = language + return c +} + +// PlatformType sets the optional parameter "platformType": Restrict +// application details returned to the specific platform. +func (c *ApplicationsGetCall) PlatformType(platformType string) *ApplicationsGetCall { + c.opt_["platformType"] = platformType + return c +} + +func (c *ApplicationsGetCall) Do() (*Application, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["platformType"]; ok { + params.Set("platformType", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationId}", url.QueryEscape(c.applicationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Application) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the metadata of the application with the given ID. If the requested application is not available for the specified platformType, the returned response will not include any instance data.", + // "httpMethod": "GET", + // "id": "games.applications.get", + // "parameterOrder": [ + // "applicationId" + // ], + // "parameters": { + // "applicationId": { + // "description": "The application being requested.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "platformType": { + // "description": "Restrict application details returned to the specific platform.", + // "enum": [ + // "ANDROID", + // "IOS", + // "WEB_APP" + // ], + // "enumDescriptions": [ + // "Retrieve applications that can be played on Android.", + // "Retrieve applications that can be played on iOS.", + // "Retrieve applications that can be played on desktop web." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "applications/{applicationId}", + // "response": { + // "$ref": "Application" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.applications.played": + +type ApplicationsPlayedCall struct { + s *Service + opt_ map[string]interface{} +} + +// Played: Indicate that the the currently authenticated user is playing +// your application. +func (r *ApplicationsService) Played() *ApplicationsPlayedCall { + c := &ApplicationsPlayedCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ApplicationsPlayedCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "applications/played") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Indicate that the the currently authenticated user is playing your application.", + // "httpMethod": "POST", + // "id": "games.applications.played", + // "path": "applications/played", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.leaderboards.get": + +type LeaderboardsGetCall struct { + s *Service + leaderboardId string + opt_ map[string]interface{} +} + +// Get: Retrieves the metadata of the leaderboard with the given ID. +func (r *LeaderboardsService) Get(leaderboardId string) *LeaderboardsGetCall { + c := &LeaderboardsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *LeaderboardsGetCall) Language(language string) *LeaderboardsGetCall { + c.opt_["language"] = language + return c +} + +func (c *LeaderboardsGetCall) Do() (*Leaderboard, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Leaderboard) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the metadata of the leaderboard with the given ID.", + // "httpMethod": "GET", + // "id": "games.leaderboards.get", + // "parameterOrder": [ + // "leaderboardId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}", + // "response": { + // "$ref": "Leaderboard" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.leaderboards.list": + +type LeaderboardsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all the leaderboard metadata for your application. +func (r *LeaderboardsService) List() *LeaderboardsListCall { + c := &LeaderboardsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *LeaderboardsListCall) Language(language string) *LeaderboardsListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of leaderboards to return in the response. For any response, +// the actual number of leaderboards returned may be less than the +// specified maxResults. +func (c *LeaderboardsListCall) MaxResults(maxResults int64) *LeaderboardsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *LeaderboardsListCall) PageToken(pageToken string) *LeaderboardsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *LeaderboardsListCall) Do() (*LeaderboardListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LeaderboardListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all the leaderboard metadata for your application.", + // "httpMethod": "GET", + // "id": "games.leaderboards.list", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of leaderboards to return in the response. For any response, the actual number of leaderboards returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "200", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "leaderboards", + // "response": { + // "$ref": "LeaderboardListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.players.get": + +type PlayersGetCall struct { + s *Service + playerId string + opt_ map[string]interface{} +} + +// Get: Retrieves the Player resource with the given ID. To retrieve the +// player for the currently authenticated user, set playerId to me. +func (r *PlayersService) Get(playerId string) *PlayersGetCall { + c := &PlayersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.playerId = playerId + return c +} + +func (c *PlayersGetCall) Do() (*Player, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "players/{playerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{playerId}", url.QueryEscape(c.playerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Player) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the Player resource with the given ID. To retrieve the player for the currently authenticated user, set playerId to me.", + // "httpMethod": "GET", + // "id": "games.players.get", + // "parameterOrder": [ + // "playerId" + // ], + // "parameters": { + // "playerId": { + // "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "players/{playerId}", + // "response": { + // "$ref": "Player" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.players.list": + +type PlayersListCall struct { + s *Service + collection string + opt_ map[string]interface{} +} + +// List: Get the collection of players for the currently authenticated +// user. +func (r *PlayersService) List(collection string) *PlayersListCall { + c := &PlayersListCall{s: r.s, opt_: make(map[string]interface{})} + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of player resources to return in the response, used for +// paging. For any response, the actual number of player resources +// returned may be less than the specified maxResults. +func (c *PlayersListCall) MaxResults(maxResults int64) *PlayersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *PlayersListCall) PageToken(pageToken string) *PlayersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PlayersListCall) Do() (*PlayerListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "players/me/players/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the collection of players for the currently authenticated user.", + // "httpMethod": "GET", + // "id": "games.players.list", + // "parameterOrder": [ + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "Collection of players being retrieved", + // "enum": [ + // "playedWith" + // ], + // "enumDescriptions": [ + // "Retrieve a list of players you have played a multiplayer game (realtime or turn-based) with recently." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of player resources to return in the response, used for paging. For any response, the actual number of player resources returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "15", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "players/me/players/{collection}", + // "response": { + // "$ref": "PlayerListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.pushtokens.remove": + +type PushtokensRemoveCall struct { + s *Service + pushtokenid *PushTokenId + opt_ map[string]interface{} +} + +// Remove: Removes a push token for the current user and application. +// Removing a non-existent push token will report success. +func (r *PushtokensService) Remove(pushtokenid *PushTokenId) *PushtokensRemoveCall { + c := &PushtokensRemoveCall{s: r.s, opt_: make(map[string]interface{})} + c.pushtokenid = pushtokenid + return c +} + +func (c *PushtokensRemoveCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pushtokenid) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "pushtokens/remove") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a push token for the current user and application. Removing a non-existent push token will report success.", + // "httpMethod": "POST", + // "id": "games.pushtokens.remove", + // "path": "pushtokens/remove", + // "request": { + // "$ref": "PushTokenId" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.pushtokens.update": + +type PushtokensUpdateCall struct { + s *Service + pushtoken *PushToken + opt_ map[string]interface{} +} + +// Update: Registers a push token for the current user and application. +func (r *PushtokensService) Update(pushtoken *PushToken) *PushtokensUpdateCall { + c := &PushtokensUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.pushtoken = pushtoken + return c +} + +func (c *PushtokensUpdateCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pushtoken) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "pushtokens") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Registers a push token for the current user and application.", + // "httpMethod": "PUT", + // "id": "games.pushtokens.update", + // "path": "pushtokens", + // "request": { + // "$ref": "PushToken" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.revisions.check": + +type RevisionsCheckCall struct { + s *Service + clientRevision string + opt_ map[string]interface{} +} + +// Check: Checks whether the games client is out of date. +func (r *RevisionsService) Check(clientRevision string) *RevisionsCheckCall { + c := &RevisionsCheckCall{s: r.s, opt_: make(map[string]interface{})} + c.clientRevision = clientRevision + return c +} + +func (c *RevisionsCheckCall) Do() (*RevisionCheckResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("clientRevision", fmt.Sprintf("%v", c.clientRevision)) + urls := googleapi.ResolveRelative(c.s.BasePath, "revisions/check") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RevisionCheckResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Checks whether the games client is out of date.", + // "httpMethod": "GET", + // "id": "games.revisions.check", + // "parameterOrder": [ + // "clientRevision" + // ], + // "parameters": { + // "clientRevision": { + // "description": "The revision of the client SDK used by your application. Format:\n[PLATFORM_TYPE]:[VERSION_NUMBER]. Possible values of PLATFORM_TYPE are:\n \n- \"ANDROID\" - Client is running the Android SDK. \n- \"IOS\" - Client is running the iOS SDK. \n- \"WEB_APP\" - Client is running as a Web App.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "revisions/check", + // "response": { + // "$ref": "RevisionCheckResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.create": + +type RoomsCreateCall struct { + s *Service + roomcreaterequest *RoomCreateRequest + opt_ map[string]interface{} +} + +// Create: Create a room. For internal use by the Games SDK only. +// Calling this method directly is unsupported. +func (r *RoomsService) Create(roomcreaterequest *RoomCreateRequest) *RoomsCreateCall { + c := &RoomsCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.roomcreaterequest = roomcreaterequest + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *RoomsCreateCall) Language(language string) *RoomsCreateCall { + c.opt_["language"] = language + return c +} + +func (c *RoomsCreateCall) Do() (*Room, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomcreaterequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/create") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Room) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.create", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rooms/create", + // "request": { + // "$ref": "RoomCreateRequest" + // }, + // "response": { + // "$ref": "Room" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.decline": + +type RoomsDeclineCall struct { + s *Service + roomId string + opt_ map[string]interface{} +} + +// Decline: Decline an invitation to join a room. For internal use by +// the Games SDK only. Calling this method directly is unsupported. +func (r *RoomsService) Decline(roomId string) *RoomsDeclineCall { + c := &RoomsDeclineCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + return c +} + +func (c *RoomsDeclineCall) Do() (*Room, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/decline") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Room) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Decline an invitation to join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.decline", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}/decline", + // "response": { + // "$ref": "Room" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.dismiss": + +type RoomsDismissCall struct { + s *Service + roomId string + opt_ map[string]interface{} +} + +// Dismiss: Dismiss an invitation to join a room. For internal use by +// the Games SDK only. Calling this method directly is unsupported. +func (r *RoomsService) Dismiss(roomId string) *RoomsDismissCall { + c := &RoomsDismissCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + return c +} + +func (c *RoomsDismissCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/dismiss") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Dismiss an invitation to join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.dismiss", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}/dismiss", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.get": + +type RoomsGetCall struct { + s *Service + roomId string + opt_ map[string]interface{} +} + +// Get: Get the data for a room. +func (r *RoomsService) Get(roomId string) *RoomsGetCall { + c := &RoomsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *RoomsGetCall) Language(language string) *RoomsGetCall { + c.opt_["language"] = language + return c +} + +func (c *RoomsGetCall) Do() (*Room, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Room) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the data for a room.", + // "httpMethod": "GET", + // "id": "games.rooms.get", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}", + // "response": { + // "$ref": "Room" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.join": + +type RoomsJoinCall struct { + s *Service + roomId string + roomjoinrequest *RoomJoinRequest + opt_ map[string]interface{} +} + +// Join: Join a room. For internal use by the Games SDK only. Calling +// this method directly is unsupported. +func (r *RoomsService) Join(roomId string, roomjoinrequest *RoomJoinRequest) *RoomsJoinCall { + c := &RoomsJoinCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + c.roomjoinrequest = roomjoinrequest + return c +} + +func (c *RoomsJoinCall) Do() (*Room, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomjoinrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/join") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Room) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Join a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.join", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}/join", + // "request": { + // "$ref": "RoomJoinRequest" + // }, + // "response": { + // "$ref": "Room" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.leave": + +type RoomsLeaveCall struct { + s *Service + roomId string + roomleaverequest *RoomLeaveRequest + opt_ map[string]interface{} +} + +// Leave: Leave a room. For internal use by the Games SDK only. Calling +// this method directly is unsupported. +func (r *RoomsService) Leave(roomId string, roomleaverequest *RoomLeaveRequest) *RoomsLeaveCall { + c := &RoomsLeaveCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + c.roomleaverequest = roomleaverequest + return c +} + +func (c *RoomsLeaveCall) Do() (*Room, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomleaverequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/leave") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Room) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Leave a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.leave", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}/leave", + // "request": { + // "$ref": "RoomLeaveRequest" + // }, + // "response": { + // "$ref": "Room" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.list": + +type RoomsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Returns invitations to join rooms. +func (r *RoomsService) List() *RoomsListCall { + c := &RoomsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *RoomsListCall) Language(language string) *RoomsListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of rooms to return in the response, used for paging. For any +// response, the actual number of rooms to return may be less than the +// specified maxResults. +func (c *RoomsListCall) MaxResults(maxResults int64) *RoomsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *RoomsListCall) PageToken(pageToken string) *RoomsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RoomsListCall) Do() (*RoomList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RoomList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns invitations to join rooms.", + // "httpMethod": "GET", + // "id": "games.rooms.list", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of rooms to return in the response, used for paging. For any response, the actual number of rooms to return may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rooms", + // "response": { + // "$ref": "RoomList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.rooms.reportStatus": + +type RoomsReportStatusCall struct { + s *Service + roomId string + roomp2pstatuses *RoomP2PStatuses + opt_ map[string]interface{} +} + +// ReportStatus: Updates sent by a client reporting the status of peers +// in a room. For internal use by the Games SDK only. Calling this +// method directly is unsupported. +func (r *RoomsService) ReportStatus(roomId string, roomp2pstatuses *RoomP2PStatuses) *RoomsReportStatusCall { + c := &RoomsReportStatusCall{s: r.s, opt_: make(map[string]interface{})} + c.roomId = roomId + c.roomp2pstatuses = roomp2pstatuses + return c +} + +func (c *RoomsReportStatusCall) Do() (*RoomStatus, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.roomp2pstatuses) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/{roomId}/reportstatus") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{roomId}", url.QueryEscape(c.roomId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RoomStatus) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates sent by a client reporting the status of peers in a room. For internal use by the Games SDK only. Calling this method directly is unsupported.", + // "httpMethod": "POST", + // "id": "games.rooms.reportStatus", + // "parameterOrder": [ + // "roomId" + // ], + // "parameters": { + // "roomId": { + // "description": "The ID of the room.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rooms/{roomId}/reportstatus", + // "request": { + // "$ref": "RoomP2PStatuses" + // }, + // "response": { + // "$ref": "RoomStatus" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.scores.get": + +type ScoresGetCall struct { + s *Service + playerId string + leaderboardId string + timeSpan string + opt_ map[string]interface{} +} + +// Get: Get high scores, and optionally ranks, in leaderboards for the +// currently authenticated player. For a specific time span, +// leaderboardId can be set to ALL to retrieve data for all leaderboards +// in a given time span. +// NOTE: You cannot ask for 'ALL' leaderboards and +// 'ALL' timeSpans in the same request; only one parameter may be set to +// 'ALL'. +func (r *ScoresService) Get(playerId string, leaderboardId string, timeSpan string) *ScoresGetCall { + c := &ScoresGetCall{s: r.s, opt_: make(map[string]interface{})} + c.playerId = playerId + c.leaderboardId = leaderboardId + c.timeSpan = timeSpan + return c +} + +// IncludeRankType sets the optional parameter "includeRankType": The +// types of ranks to return. If the parameter is omitted, no ranks will +// be returned. +func (c *ScoresGetCall) IncludeRankType(includeRankType string) *ScoresGetCall { + c.opt_["includeRankType"] = includeRankType + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ScoresGetCall) Language(language string) *ScoresGetCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of leaderboard scores to return in the response. For any +// response, the actual number of leaderboard scores returned may be +// less than the specified maxResults. +func (c *ScoresGetCall) MaxResults(maxResults int64) *ScoresGetCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *ScoresGetCall) PageToken(pageToken string) *ScoresGetCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ScoresGetCall) Do() (*PlayerLeaderboardScoreListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeRankType"]; ok { + params.Set("includeRankType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "players/{playerId}/leaderboards/{leaderboardId}/scores/{timeSpan}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{playerId}", url.QueryEscape(c.playerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{timeSpan}", url.QueryEscape(c.timeSpan), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerLeaderboardScoreListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get high scores, and optionally ranks, in leaderboards for the currently authenticated player. For a specific time span, leaderboardId can be set to ALL to retrieve data for all leaderboards in a given time span.\nNOTE: You cannot ask for 'ALL' leaderboards and 'ALL' timeSpans in the same request; only one parameter may be set to 'ALL'.", + // "httpMethod": "GET", + // "id": "games.scores.get", + // "parameterOrder": [ + // "playerId", + // "leaderboardId", + // "timeSpan" + // ], + // "parameters": { + // "includeRankType": { + // "description": "The types of ranks to return. If the parameter is omitted, no ranks will be returned.", + // "enum": [ + // "ALL", + // "PUBLIC", + // "SOCIAL" + // ], + // "enumDescriptions": [ + // "Retrieve public and social ranks.", + // "Retrieve public ranks, if the player is sharing their gameplay activity publicly.", + // "Retrieve the social rank." + // ], + // "location": "query", + // "type": "string" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "leaderboardId": { + // "description": "The ID of the leaderboard. Can be set to 'ALL' to retrieve data for all leaderboards for this application.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // }, + // "playerId": { + // "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "timeSpan": { + // "description": "The time span for the scores and ranks you're requesting.", + // "enum": [ + // "ALL", + // "ALL_TIME", + // "DAILY", + // "WEEKLY" + // ], + // "enumDescriptions": [ + // "Get the high scores for all time spans. If this is used, maxResults values will be ignored.", + // "Get the all time high score.", + // "List the top scores for the current day.", + // "List the top scores for the current week." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "players/{playerId}/leaderboards/{leaderboardId}/scores/{timeSpan}", + // "response": { + // "$ref": "PlayerLeaderboardScoreListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.scores.list": + +type ScoresListCall struct { + s *Service + leaderboardId string + collection string + timeSpan string + opt_ map[string]interface{} +} + +// List: Lists the scores in a leaderboard, starting from the top. +func (r *ScoresService) List(leaderboardId string, collection string, timeSpan string) *ScoresListCall { + c := &ScoresListCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + c.collection = collection + c.timeSpan = timeSpan + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ScoresListCall) Language(language string) *ScoresListCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of leaderboard scores to return in the response. For any +// response, the actual number of leaderboard scores returned may be +// less than the specified maxResults. +func (c *ScoresListCall) MaxResults(maxResults int64) *ScoresListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *ScoresListCall) PageToken(pageToken string) *ScoresListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ScoresListCall) Do() (*LeaderboardScores, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("timeSpan", fmt.Sprintf("%v", c.timeSpan)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LeaderboardScores) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the scores in a leaderboard, starting from the top.", + // "httpMethod": "GET", + // "id": "games.scores.list", + // "parameterOrder": [ + // "leaderboardId", + // "collection", + // "timeSpan" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of scores you're requesting.", + // "enum": [ + // "PUBLIC", + // "SOCIAL" + // ], + // "enumDescriptions": [ + // "List all scores in the public leaderboard.", + // "List only social scores." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // }, + // "timeSpan": { + // "description": "The time span for the scores and ranks you're requesting.", + // "enum": [ + // "ALL_TIME", + // "DAILY", + // "WEEKLY" + // ], + // "enumDescriptions": [ + // "List the all-time top scores.", + // "List the top scores for the current day.", + // "List the top scores for the current week." + // ], + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}/scores/{collection}", + // "response": { + // "$ref": "LeaderboardScores" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.scores.listWindow": + +type ScoresListWindowCall struct { + s *Service + leaderboardId string + collection string + timeSpan string + opt_ map[string]interface{} +} + +// ListWindow: Lists the scores in a leaderboard around (and including) +// a player's score. +func (r *ScoresService) ListWindow(leaderboardId string, collection string, timeSpan string) *ScoresListWindowCall { + c := &ScoresListWindowCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + c.collection = collection + c.timeSpan = timeSpan + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ScoresListWindowCall) Language(language string) *ScoresListWindowCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of leaderboard scores to return in the response. For any +// response, the actual number of leaderboard scores returned may be +// less than the specified maxResults. +func (c *ScoresListWindowCall) MaxResults(maxResults int64) *ScoresListWindowCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *ScoresListWindowCall) PageToken(pageToken string) *ScoresListWindowCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ResultsAbove sets the optional parameter "resultsAbove": The +// preferred number of scores to return above the player's score. More +// scores may be returned if the player is at the bottom of the +// leaderboard; fewer may be returned if the player is at the top. Must +// be less than or equal to maxResults. +func (c *ScoresListWindowCall) ResultsAbove(resultsAbove int64) *ScoresListWindowCall { + c.opt_["resultsAbove"] = resultsAbove + return c +} + +// ReturnTopIfAbsent sets the optional parameter "returnTopIfAbsent": +// True if the top scores should be returned when the player is not in +// the leaderboard. Defaults to true. +func (c *ScoresListWindowCall) ReturnTopIfAbsent(returnTopIfAbsent bool) *ScoresListWindowCall { + c.opt_["returnTopIfAbsent"] = returnTopIfAbsent + return c +} + +func (c *ScoresListWindowCall) Do() (*LeaderboardScores, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("timeSpan", fmt.Sprintf("%v", c.timeSpan)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["resultsAbove"]; ok { + params.Set("resultsAbove", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["returnTopIfAbsent"]; ok { + params.Set("returnTopIfAbsent", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/window/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LeaderboardScores) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the scores in a leaderboard around (and including) a player's score.", + // "httpMethod": "GET", + // "id": "games.scores.listWindow", + // "parameterOrder": [ + // "leaderboardId", + // "collection", + // "timeSpan" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of scores you're requesting.", + // "enum": [ + // "PUBLIC", + // "SOCIAL" + // ], + // "enumDescriptions": [ + // "List all scores in the public leaderboard.", + // "List only social scores." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of leaderboard scores to return in the response. For any response, the actual number of leaderboard scores returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "25", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // }, + // "resultsAbove": { + // "description": "The preferred number of scores to return above the player's score. More scores may be returned if the player is at the bottom of the leaderboard; fewer may be returned if the player is at the top. Must be less than or equal to maxResults.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "returnTopIfAbsent": { + // "description": "True if the top scores should be returned when the player is not in the leaderboard. Defaults to true.", + // "location": "query", + // "type": "boolean" + // }, + // "timeSpan": { + // "description": "The time span for the scores and ranks you're requesting.", + // "enum": [ + // "ALL_TIME", + // "DAILY", + // "WEEKLY" + // ], + // "enumDescriptions": [ + // "List the all-time top scores.", + // "List the top scores for the current day.", + // "List the top scores for the current week." + // ], + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}/window/{collection}", + // "response": { + // "$ref": "LeaderboardScores" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.scores.submit": + +type ScoresSubmitCall struct { + s *Service + leaderboardId string + score int64 + opt_ map[string]interface{} +} + +// Submit: Submits a score to the specified leaderboard. +func (r *ScoresService) Submit(leaderboardId string, score int64) *ScoresSubmitCall { + c := &ScoresSubmitCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + c.score = score + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ScoresSubmitCall) Language(language string) *ScoresSubmitCall { + c.opt_["language"] = language + return c +} + +// ScoreTag sets the optional parameter "scoreTag": Additional +// information about the score you're submitting. Values must contain no +// more than 64 URI-safe characters as defined by section 2.3 of RFC +// 3986. +func (c *ScoresSubmitCall) ScoreTag(scoreTag string) *ScoresSubmitCall { + c.opt_["scoreTag"] = scoreTag + return c +} + +func (c *ScoresSubmitCall) Do() (*PlayerScoreResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("score", fmt.Sprintf("%v", c.score)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["scoreTag"]; ok { + params.Set("scoreTag", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerScoreResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submits a score to the specified leaderboard.", + // "httpMethod": "POST", + // "id": "games.scores.submit", + // "parameterOrder": [ + // "leaderboardId", + // "score" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "score": { + // "description": "The score you're submitting. The submitted score is ignored if it is worse than a previously submitted score, where worse depends on the leaderboard sort order. The meaning of the score value depends on the leaderboard format type. For fixed-point, the score represents the raw value. For time, the score represents elapsed time in milliseconds. For currency, the score represents a value in micro units.", + // "format": "int64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "scoreTag": { + // "description": "Additional information about the score you're submitting. Values must contain no more than 64 URI-safe characters as defined by section 2.3 of RFC 3986.", + // "location": "query", + // "pattern": "[a-zA-Z0-9-._~]{0,64}", + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}/scores", + // "response": { + // "$ref": "PlayerScoreResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.scores.submitMultiple": + +type ScoresSubmitMultipleCall struct { + s *Service + playerscoresubmissionlist *PlayerScoreSubmissionList + opt_ map[string]interface{} +} + +// SubmitMultiple: Submits multiple scores to leaderboards. +func (r *ScoresService) SubmitMultiple(playerscoresubmissionlist *PlayerScoreSubmissionList) *ScoresSubmitMultipleCall { + c := &ScoresSubmitMultipleCall{s: r.s, opt_: make(map[string]interface{})} + c.playerscoresubmissionlist = playerscoresubmissionlist + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *ScoresSubmitMultipleCall) Language(language string) *ScoresSubmitMultipleCall { + c.opt_["language"] = language + return c +} + +func (c *ScoresSubmitMultipleCall) Do() (*PlayerScoreListResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.playerscoresubmissionlist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/scores") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerScoreListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submits multiple scores to leaderboards.", + // "httpMethod": "POST", + // "id": "games.scores.submitMultiple", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "leaderboards/scores", + // "request": { + // "$ref": "PlayerScoreSubmissionList" + // }, + // "response": { + // "$ref": "PlayerScoreListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.cancel": + +type TurnBasedMatchesCancelCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Cancel: Cancel a turn-based match. +func (r *TurnBasedMatchesService) Cancel(matchId string) *TurnBasedMatchesCancelCall { + c := &TurnBasedMatchesCancelCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +func (c *TurnBasedMatchesCancelCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/cancel") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Cancel a turn-based match.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.cancel", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/cancel", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.create": + +type TurnBasedMatchesCreateCall struct { + s *Service + turnbasedmatchcreaterequest *TurnBasedMatchCreateRequest + opt_ map[string]interface{} +} + +// Create: Create a turn-based match. +func (r *TurnBasedMatchesService) Create(turnbasedmatchcreaterequest *TurnBasedMatchCreateRequest) *TurnBasedMatchesCreateCall { + c := &TurnBasedMatchesCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.turnbasedmatchcreaterequest = turnbasedmatchcreaterequest + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesCreateCall) Language(language string) *TurnBasedMatchesCreateCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesCreateCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchcreaterequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/create") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a turn-based match.", + // "httpMethod": "POST", + // "id": "games.turnBasedMatches.create", + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/create", + // "request": { + // "$ref": "TurnBasedMatchCreateRequest" + // }, + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.decline": + +type TurnBasedMatchesDeclineCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Decline: Decline an invitation to play a turn-based match. +func (r *TurnBasedMatchesService) Decline(matchId string) *TurnBasedMatchesDeclineCall { + c := &TurnBasedMatchesDeclineCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesDeclineCall) Language(language string) *TurnBasedMatchesDeclineCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesDeclineCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/decline") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Decline an invitation to play a turn-based match.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.decline", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/decline", + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.dismiss": + +type TurnBasedMatchesDismissCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Dismiss: Dismiss a turn-based match from the match list. The match +// will no longer show up in the list and will not generate +// notifications. +func (r *TurnBasedMatchesService) Dismiss(matchId string) *TurnBasedMatchesDismissCall { + c := &TurnBasedMatchesDismissCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +func (c *TurnBasedMatchesDismissCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/dismiss") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Dismiss a turn-based match from the match list. The match will no longer show up in the list and will not generate notifications.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.dismiss", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/dismiss", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.finish": + +type TurnBasedMatchesFinishCall struct { + s *Service + matchId string + turnbasedmatchresults *TurnBasedMatchResults + opt_ map[string]interface{} +} + +// Finish: Finish a turn-based match. Each player should make this call +// once, after all results are in. Only the player whose turn it is may +// make the first call to Finish, and can pass in the final match state. +func (r *TurnBasedMatchesService) Finish(matchId string, turnbasedmatchresults *TurnBasedMatchResults) *TurnBasedMatchesFinishCall { + c := &TurnBasedMatchesFinishCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + c.turnbasedmatchresults = turnbasedmatchresults + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesFinishCall) Language(language string) *TurnBasedMatchesFinishCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesFinishCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchresults) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/finish") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Finish a turn-based match. Each player should make this call once, after all results are in. Only the player whose turn it is may make the first call to Finish, and can pass in the final match state.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.finish", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/finish", + // "request": { + // "$ref": "TurnBasedMatchResults" + // }, + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.get": + +type TurnBasedMatchesGetCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Get: Get the data for a turn-based match. +func (r *TurnBasedMatchesService) Get(matchId string) *TurnBasedMatchesGetCall { + c := &TurnBasedMatchesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +// IncludeMatchData sets the optional parameter "includeMatchData": Get +// match data along with metadata. +func (c *TurnBasedMatchesGetCall) IncludeMatchData(includeMatchData bool) *TurnBasedMatchesGetCall { + c.opt_["includeMatchData"] = includeMatchData + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesGetCall) Language(language string) *TurnBasedMatchesGetCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesGetCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeMatchData"]; ok { + params.Set("includeMatchData", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the data for a turn-based match.", + // "httpMethod": "GET", + // "id": "games.turnBasedMatches.get", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "includeMatchData": { + // "description": "Get match data along with metadata.", + // "location": "query", + // "type": "boolean" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}", + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.join": + +type TurnBasedMatchesJoinCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Join: Join a turn-based match. +func (r *TurnBasedMatchesService) Join(matchId string) *TurnBasedMatchesJoinCall { + c := &TurnBasedMatchesJoinCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesJoinCall) Language(language string) *TurnBasedMatchesJoinCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesJoinCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/join") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Join a turn-based match.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.join", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/join", + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.leave": + +type TurnBasedMatchesLeaveCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Leave: Leave a turn-based match when it is not the current player's +// turn, without canceling the match. +func (r *TurnBasedMatchesService) Leave(matchId string) *TurnBasedMatchesLeaveCall { + c := &TurnBasedMatchesLeaveCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesLeaveCall) Language(language string) *TurnBasedMatchesLeaveCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesLeaveCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/leave") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Leave a turn-based match when it is not the current player's turn, without canceling the match.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.leave", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/leave", + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.leaveTurn": + +type TurnBasedMatchesLeaveTurnCall struct { + s *Service + matchId string + matchVersion int64 + opt_ map[string]interface{} +} + +// LeaveTurn: Leave a turn-based match during the current player's turn, +// without canceling the match. +func (r *TurnBasedMatchesService) LeaveTurn(matchId string, matchVersion int64) *TurnBasedMatchesLeaveTurnCall { + c := &TurnBasedMatchesLeaveTurnCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + c.matchVersion = matchVersion + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesLeaveTurnCall) Language(language string) *TurnBasedMatchesLeaveTurnCall { + c.opt_["language"] = language + return c +} + +// PendingParticipantId sets the optional parameter +// "pendingParticipantId": The ID of another participant who should take +// their turn next. If not set, the match will wait for other player(s) +// to join via automatching; this is only valid if automatch criteria is +// set on the match with remaining slots for automatched players. +func (c *TurnBasedMatchesLeaveTurnCall) PendingParticipantId(pendingParticipantId string) *TurnBasedMatchesLeaveTurnCall { + c.opt_["pendingParticipantId"] = pendingParticipantId + return c +} + +func (c *TurnBasedMatchesLeaveTurnCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("matchVersion", fmt.Sprintf("%v", c.matchVersion)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pendingParticipantId"]; ok { + params.Set("pendingParticipantId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/leaveTurn") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Leave a turn-based match during the current player's turn, without canceling the match.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.leaveTurn", + // "parameterOrder": [ + // "matchId", + // "matchVersion" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "matchVersion": { + // "description": "The version of the match being updated.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "pendingParticipantId": { + // "description": "The ID of another participant who should take their turn next. If not set, the match will wait for other player(s) to join via automatching; this is only valid if automatch criteria is set on the match with remaining slots for automatched players.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/leaveTurn", + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.list": + +type TurnBasedMatchesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Returns turn-based matches the player is or was involved in. +func (r *TurnBasedMatchesService) List() *TurnBasedMatchesListCall { + c := &TurnBasedMatchesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// IncludeMatchData sets the optional parameter "includeMatchData": True +// if match data should be returned in the response. Note that not all +// data will necessarily be returned if include_match_data is true; the +// server may decide to only return data for some of the matches to +// limit download size for the client. The remainder of the data for +// these matches will be retrievable on request. +func (c *TurnBasedMatchesListCall) IncludeMatchData(includeMatchData bool) *TurnBasedMatchesListCall { + c.opt_["includeMatchData"] = includeMatchData + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesListCall) Language(language string) *TurnBasedMatchesListCall { + c.opt_["language"] = language + return c +} + +// MaxCompletedMatches sets the optional parameter +// "maxCompletedMatches": The maximum number of completed or canceled +// matches to return in the response. If not set, all matches returned +// could be completed or canceled. +func (c *TurnBasedMatchesListCall) MaxCompletedMatches(maxCompletedMatches int64) *TurnBasedMatchesListCall { + c.opt_["maxCompletedMatches"] = maxCompletedMatches + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of matches to return in the response, used for paging. For any +// response, the actual number of matches to return may be less than the +// specified maxResults. +func (c *TurnBasedMatchesListCall) MaxResults(maxResults int64) *TurnBasedMatchesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *TurnBasedMatchesListCall) PageToken(pageToken string) *TurnBasedMatchesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TurnBasedMatchesListCall) Do() (*TurnBasedMatchList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeMatchData"]; ok { + params.Set("includeMatchData", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxCompletedMatches"]; ok { + params.Set("maxCompletedMatches", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatchList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns turn-based matches the player is or was involved in.", + // "httpMethod": "GET", + // "id": "games.turnBasedMatches.list", + // "parameters": { + // "includeMatchData": { + // "description": "True if match data should be returned in the response. Note that not all data will necessarily be returned if include_match_data is true; the server may decide to only return data for some of the matches to limit download size for the client. The remainder of the data for these matches will be retrievable on request.", + // "location": "query", + // "type": "boolean" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxCompletedMatches": { + // "description": "The maximum number of completed or canceled matches to return in the response. If not set, all matches returned could be completed or canceled.", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "maxResults": { + // "description": "The maximum number of matches to return in the response, used for paging. For any response, the actual number of matches to return may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "turnbasedmatches", + // "response": { + // "$ref": "TurnBasedMatchList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.rematch": + +type TurnBasedMatchesRematchCall struct { + s *Service + matchId string + opt_ map[string]interface{} +} + +// Rematch: Create a rematch of a match that was previously completed, +// with the same participants. This can be called by only one player on +// a match still in their list; the player must have called Finish +// first. Returns the newly created match; it will be the caller's turn. +func (r *TurnBasedMatchesService) Rematch(matchId string) *TurnBasedMatchesRematchCall { + c := &TurnBasedMatchesRematchCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesRematchCall) Language(language string) *TurnBasedMatchesRematchCall { + c.opt_["language"] = language + return c +} + +// RequestId sets the optional parameter "requestId": A randomly +// generated numeric ID for each request specified by the caller. This +// number is used at the server to ensure that the request is handled +// correctly across retries. +func (c *TurnBasedMatchesRematchCall) RequestId(requestId int64) *TurnBasedMatchesRematchCall { + c.opt_["requestId"] = requestId + return c +} + +func (c *TurnBasedMatchesRematchCall) Do() (*TurnBasedMatchRematch, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["requestId"]; ok { + params.Set("requestId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/rematch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatchRematch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a rematch of a match that was previously completed, with the same participants. This can be called by only one player on a match still in their list; the player must have called Finish first. Returns the newly created match; it will be the caller's turn.", + // "httpMethod": "POST", + // "id": "games.turnBasedMatches.rematch", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "requestId": { + // "description": "A randomly generated numeric ID for each request specified by the caller. This number is used at the server to ensure that the request is handled correctly across retries.", + // "format": "int64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/rematch", + // "response": { + // "$ref": "TurnBasedMatchRematch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.sync": + +type TurnBasedMatchesSyncCall struct { + s *Service + opt_ map[string]interface{} +} + +// Sync: Returns turn-based matches the player is or was involved in +// that changed since the last sync call, with the least recent changes +// coming first. Matches that should be removed from the local cache +// will have a status of MATCH_DELETED. +func (r *TurnBasedMatchesService) Sync() *TurnBasedMatchesSyncCall { + c := &TurnBasedMatchesSyncCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// IncludeMatchData sets the optional parameter "includeMatchData": True +// if match data should be returned in the response. Note that not all +// data will necessarily be returned if include_match_data is true; the +// server may decide to only return data for some of the matches to +// limit download size for the client. The remainder of the data for +// these matches will be retrievable on request. +func (c *TurnBasedMatchesSyncCall) IncludeMatchData(includeMatchData bool) *TurnBasedMatchesSyncCall { + c.opt_["includeMatchData"] = includeMatchData + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesSyncCall) Language(language string) *TurnBasedMatchesSyncCall { + c.opt_["language"] = language + return c +} + +// MaxCompletedMatches sets the optional parameter +// "maxCompletedMatches": The maximum number of completed or canceled +// matches to return in the response. If not set, all matches returned +// could be completed or canceled. +func (c *TurnBasedMatchesSyncCall) MaxCompletedMatches(maxCompletedMatches int64) *TurnBasedMatchesSyncCall { + c.opt_["maxCompletedMatches"] = maxCompletedMatches + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of matches to return in the response, used for paging. For any +// response, the actual number of matches to return may be less than the +// specified maxResults. +func (c *TurnBasedMatchesSyncCall) MaxResults(maxResults int64) *TurnBasedMatchesSyncCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *TurnBasedMatchesSyncCall) PageToken(pageToken string) *TurnBasedMatchesSyncCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TurnBasedMatchesSyncCall) Do() (*TurnBasedMatchSync, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeMatchData"]; ok { + params.Set("includeMatchData", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxCompletedMatches"]; ok { + params.Set("maxCompletedMatches", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/sync") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatchSync) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns turn-based matches the player is or was involved in that changed since the last sync call, with the least recent changes coming first. Matches that should be removed from the local cache will have a status of MATCH_DELETED.", + // "httpMethod": "GET", + // "id": "games.turnBasedMatches.sync", + // "parameters": { + // "includeMatchData": { + // "description": "True if match data should be returned in the response. Note that not all data will necessarily be returned if include_match_data is true; the server may decide to only return data for some of the matches to limit download size for the client. The remainder of the data for these matches will be retrievable on request.", + // "location": "query", + // "type": "boolean" + // }, + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "maxCompletedMatches": { + // "description": "The maximum number of completed or canceled matches to return in the response. If not set, all matches returned could be completed or canceled.", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "maxResults": { + // "description": "The maximum number of matches to return in the response, used for paging. For any response, the actual number of matches to return may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "500", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/sync", + // "response": { + // "$ref": "TurnBasedMatchSync" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "games.turnBasedMatches.takeTurn": + +type TurnBasedMatchesTakeTurnCall struct { + s *Service + matchId string + turnbasedmatchturn *TurnBasedMatchTurn + opt_ map[string]interface{} +} + +// TakeTurn: Commit the results of a player turn. +func (r *TurnBasedMatchesService) TakeTurn(matchId string, turnbasedmatchturn *TurnBasedMatchTurn) *TurnBasedMatchesTakeTurnCall { + c := &TurnBasedMatchesTakeTurnCall{s: r.s, opt_: make(map[string]interface{})} + c.matchId = matchId + c.turnbasedmatchturn = turnbasedmatchturn + return c +} + +// Language sets the optional parameter "language": The preferred +// language to use for strings returned by this method. +func (c *TurnBasedMatchesTakeTurnCall) Language(language string) *TurnBasedMatchesTakeTurnCall { + c.opt_["language"] = language + return c +} + +func (c *TurnBasedMatchesTakeTurnCall) Do() (*TurnBasedMatch, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.turnbasedmatchturn) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/{matchId}/turn") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{matchId}", url.QueryEscape(c.matchId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TurnBasedMatch) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Commit the results of a player turn.", + // "httpMethod": "PUT", + // "id": "games.turnBasedMatches.takeTurn", + // "parameterOrder": [ + // "matchId" + // ], + // "parameters": { + // "language": { + // "description": "The preferred language to use for strings returned by this method.", + // "location": "query", + // "type": "string" + // }, + // "matchId": { + // "description": "The ID of the match.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "turnbasedmatches/{matchId}/turn", + // "request": { + // "$ref": "TurnBasedMatchTurn" + // }, + // "response": { + // "$ref": "TurnBasedMatch" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-api.json b/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-api.json new file mode 100644 index 0000000000000..fca78fbd16059 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-api.json @@ -0,0 +1,489 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/ezsqeTaysRk0TeNXoa9oSjBpsPM\"", + "discoveryVersion": "v1", + "id": "gamesManagement:v1management", + "name": "gamesManagement", + "canonicalName": "Games Management", + "version": "v1management", + "title": "Google Play Game Services Management API", + "description": "The Management API for Google Play Game Services.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/games/services", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/games/v1management/", + "basePath": "/games/v1management/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "games/v1management/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/games": { + "description": "Share your Google+ profile information and view and manage your game activity" + }, + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + } + } + } + }, + "schemas": { + "AchievementResetAllResponse": { + "id": "AchievementResetAllResponse", + "type": "object", + "description": "This is a JSON template for achievement reset all response.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#achievementResetAllResponse.", + "default": "gamesManagement#achievementResetAllResponse" + }, + "results": { + "type": "array", + "description": "The achievement reset results.", + "items": { + "$ref": "AchievementResetResponse" + } + } + } + }, + "AchievementResetResponse": { + "id": "AchievementResetResponse", + "type": "object", + "description": "This is a JSON template for an achievement reset response.", + "properties": { + "currentState": { + "type": "string", + "description": "The current state of the achievement. This is the same as the initial state of the achievement.\nPossible values are: \n- \"HIDDEN\"- Achievement is hidden. \n- \"REVEALED\" - Achievement is revealed. \n- \"UNLOCKED\" - Achievement is unlocked." + }, + "definitionId": { + "type": "string", + "description": "The ID of an achievement for which player state has been updated." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#achievementResetResponse.", + "default": "gamesManagement#achievementResetResponse" + }, + "updateOccurred": { + "type": "boolean", + "description": "Flag to indicate if the requested update actually occurred." + } + } + }, + "GamesPlayedResource": { + "id": "GamesPlayedResource", + "type": "object", + "description": "This is a JSON template for 3P metadata about a player playing a game.", + "properties": { + "autoMatched": { + "type": "boolean", + "description": "True if the player was auto-matched with the currently authenticated user." + }, + "timeMillis": { + "type": "string", + "description": "The last time the player played the game in milliseconds since the epoch in UTC.", + "format": "int64" + } + } + }, + "HiddenPlayer": { + "id": "HiddenPlayer", + "type": "object", + "description": "This is a JSON template for the HiddenPlayer resource.", + "properties": { + "hiddenTimeMillis": { + "type": "string", + "description": "The time this player was hidden.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#hiddenPlayer.", + "default": "gamesManagement#hiddenPlayer" + }, + "player": { + "$ref": "Player", + "description": "The player information." + } + } + }, + "HiddenPlayerList": { + "id": "HiddenPlayerList", + "type": "object", + "description": "This is a JSON template for a list of hidden players.", + "properties": { + "items": { + "type": "array", + "description": "The players.", + "items": { + "$ref": "HiddenPlayer" + } + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#hiddenPlayerList.", + "default": "gamesManagement#hiddenPlayerList" + }, + "nextPageToken": { + "type": "string", + "description": "The pagination token for the next page of results." + } + } + }, + "Player": { + "id": "Player", + "type": "object", + "description": "This is a JSON template for a Player resource.", + "properties": { + "avatarImageUrl": { + "type": "string", + "description": "The base URL for the image that represents the player." + }, + "displayName": { + "type": "string", + "description": "The name to display for the player." + }, + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#player.", + "default": "gamesManagement#player" + }, + "lastPlayedWith": { + "$ref": "GamesPlayedResource", + "description": "Details about the last time this player played a multiplayer game with the currently authenticated player. Populated for PLAYED_WITH player collection members." + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of the player's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this player." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this player." + } + } + }, + "playerId": { + "type": "string", + "description": "The ID of the player." + } + } + }, + "PlayerScoreResetResponse": { + "id": "PlayerScoreResetResponse", + "type": "object", + "description": "This is a JSON template for a list of reset leaderboard entry resources.", + "properties": { + "kind": { + "type": "string", + "description": "Uniquely identifies the type of this resource. Value is always the fixed string gamesManagement#playerScoreResetResponse.", + "default": "gamesManagement#playerScoreResetResponse" + }, + "resetScoreTimeSpans": { + "type": "array", + "description": "The time spans of the updated score.\nPossible values are: \n- \"ALL_TIME\" - The score is an all-time score. \n- \"WEEKLY\" - The score is a weekly score. \n- \"DAILY\" - The score is a daily score.", + "items": { + "type": "string" + } + } + } + } + }, + "resources": { + "achievements": { + "methods": { + "reset": { + "id": "gamesManagement.achievements.reset", + "path": "achievements/{achievementId}/reset", + "httpMethod": "POST", + "description": "Resets the achievement with the given ID for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "achievementId" + ], + "response": { + "$ref": "AchievementResetResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "resetAll": { + "id": "gamesManagement.achievements.resetAll", + "path": "achievements/reset", + "httpMethod": "POST", + "description": "Resets all achievements for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.", + "response": { + "$ref": "AchievementResetAllResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "resetForAllPlayers": { + "id": "gamesManagement.achievements.resetForAllPlayers", + "path": "achievements/{achievementId}/resetForAllPlayers", + "httpMethod": "POST", + "description": "Resets the achievement with the given ID for the all players. This method is only available to user accounts for your developer console. Only draft achievements can be reset.", + "parameters": { + "achievementId": { + "type": "string", + "description": "The ID of the achievement used by this method.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "achievementId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "applications": { + "methods": { + "listHidden": { + "id": "gamesManagement.applications.listHidden", + "path": "applications/{applicationId}/players/hidden", + "httpMethod": "GET", + "description": "Get the list of players hidden from the given application. This method is only available to user accounts for your developer console.", + "parameters": { + "applicationId": { + "type": "string", + "description": "The application being requested.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of player resources to return in the response, used for paging. For any response, the actual number of player resources returned may be less than the specified maxResults.", + "format": "int32", + "minimum": "1", + "maximum": "15", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The token returned by the previous request.", + "location": "query" + } + }, + "parameterOrder": [ + "applicationId" + ], + "response": { + "$ref": "HiddenPlayerList" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "players": { + "methods": { + "hide": { + "id": "gamesManagement.players.hide", + "path": "applications/{applicationId}/players/hidden/{playerId}", + "httpMethod": "POST", + "description": "Hide the given player's leaderboard scores from the given application. This method is only available to user accounts for your developer console.", + "parameters": { + "applicationId": { + "type": "string", + "description": "The application being requested.", + "required": true, + "location": "path" + }, + "playerId": { + "type": "string", + "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "applicationId", + "playerId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "unhide": { + "id": "gamesManagement.players.unhide", + "path": "applications/{applicationId}/players/hidden/{playerId}", + "httpMethod": "DELETE", + "description": "Unhide the given player's leaderboard scores from the given application. This method is only available to user accounts for your developer console.", + "parameters": { + "applicationId": { + "type": "string", + "description": "The application being requested.", + "required": true, + "location": "path" + }, + "playerId": { + "type": "string", + "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "applicationId", + "playerId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "rooms": { + "methods": { + "reset": { + "id": "gamesManagement.rooms.reset", + "path": "rooms/reset", + "httpMethod": "POST", + "description": "Reset all rooms for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.", + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "scores": { + "methods": { + "reset": { + "id": "gamesManagement.scores.reset", + "path": "leaderboards/{leaderboardId}/scores/reset", + "httpMethod": "POST", + "description": "Reset scores for the specified leaderboard for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.", + "parameters": { + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "leaderboardId" + ], + "response": { + "$ref": "PlayerScoreResetResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "resetForAllPlayers": { + "id": "gamesManagement.scores.resetForAllPlayers", + "path": "leaderboards/{leaderboardId}/scores/resetForAllPlayers", + "httpMethod": "POST", + "description": "Reset scores for the specified leaderboard for all players. This method is only available to user accounts for your developer console. Only draft leaderboards can be reset.", + "parameters": { + "leaderboardId": { + "type": "string", + "description": "The ID of the leaderboard.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "leaderboardId" + ], + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "turnBasedMatches": { + "methods": { + "reset": { + "id": "gamesManagement.turnBasedMatches.reset", + "path": "turnbasedmatches/reset", + "httpMethod": "POST", + "description": "Reset all turn-based match data for a user. This method is only accessible to whitelisted tester accounts for your application.", + "scopes": [ + "https://www.googleapis.com/auth/games", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-gen.go b/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-gen.go new file mode 100644 index 0000000000000..f92b86f5af6a5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/gamesmanagement/v1management/gamesmanagement-gen.go @@ -0,0 +1,891 @@ +// Package gamesmanagement provides access to the Google Play Game Services Management API. +// +// See https://developers.google.com/games/services +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/gamesmanagement/v1management" +// ... +// gamesmanagementService, err := gamesmanagement.New(oauthHttpClient) +package gamesmanagement + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "gamesManagement:v1management" +const apiName = "gamesManagement" +const apiVersion = "v1management" +const basePath = "https://www.googleapis.com/games/v1management/" + +// OAuth2 scopes used by this API. +const ( + // Share your Google+ profile information and view and manage your game + // activity + GamesScope = "https://www.googleapis.com/auth/games" + + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Achievements = NewAchievementsService(s) + s.Applications = NewApplicationsService(s) + s.Players = NewPlayersService(s) + s.Rooms = NewRoomsService(s) + s.Scores = NewScoresService(s) + s.TurnBasedMatches = NewTurnBasedMatchesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Achievements *AchievementsService + + Applications *ApplicationsService + + Players *PlayersService + + Rooms *RoomsService + + Scores *ScoresService + + TurnBasedMatches *TurnBasedMatchesService +} + +func NewAchievementsService(s *Service) *AchievementsService { + rs := &AchievementsService{s: s} + return rs +} + +type AchievementsService struct { + s *Service +} + +func NewApplicationsService(s *Service) *ApplicationsService { + rs := &ApplicationsService{s: s} + return rs +} + +type ApplicationsService struct { + s *Service +} + +func NewPlayersService(s *Service) *PlayersService { + rs := &PlayersService{s: s} + return rs +} + +type PlayersService struct { + s *Service +} + +func NewRoomsService(s *Service) *RoomsService { + rs := &RoomsService{s: s} + return rs +} + +type RoomsService struct { + s *Service +} + +func NewScoresService(s *Service) *ScoresService { + rs := &ScoresService{s: s} + return rs +} + +type ScoresService struct { + s *Service +} + +func NewTurnBasedMatchesService(s *Service) *TurnBasedMatchesService { + rs := &TurnBasedMatchesService{s: s} + return rs +} + +type TurnBasedMatchesService struct { + s *Service +} + +type AchievementResetAllResponse struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#achievementResetAllResponse. + Kind string `json:"kind,omitempty"` + + // Results: The achievement reset results. + Results []*AchievementResetResponse `json:"results,omitempty"` +} + +type AchievementResetResponse struct { + // CurrentState: The current state of the achievement. This is the same + // as the initial state of the achievement. + // Possible values are: + // - + // "HIDDEN"- Achievement is hidden. + // - "REVEALED" - Achievement is + // revealed. + // - "UNLOCKED" - Achievement is unlocked. + CurrentState string `json:"currentState,omitempty"` + + // DefinitionId: The ID of an achievement for which player state has + // been updated. + DefinitionId string `json:"definitionId,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#achievementResetResponse. + Kind string `json:"kind,omitempty"` + + // UpdateOccurred: Flag to indicate if the requested update actually + // occurred. + UpdateOccurred bool `json:"updateOccurred,omitempty"` +} + +type GamesPlayedResource struct { + // AutoMatched: True if the player was auto-matched with the currently + // authenticated user. + AutoMatched bool `json:"autoMatched,omitempty"` + + // TimeMillis: The last time the player played the game in milliseconds + // since the epoch in UTC. + TimeMillis int64 `json:"timeMillis,omitempty,string"` +} + +type HiddenPlayer struct { + // HiddenTimeMillis: The time this player was hidden. + HiddenTimeMillis int64 `json:"hiddenTimeMillis,omitempty,string"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#hiddenPlayer. + Kind string `json:"kind,omitempty"` + + // Player: The player information. + Player *Player `json:"player,omitempty"` +} + +type HiddenPlayerList struct { + // Items: The players. + Items []*HiddenPlayer `json:"items,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#hiddenPlayerList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The pagination token for the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Player struct { + // AvatarImageUrl: The base URL for the image that represents the + // player. + AvatarImageUrl string `json:"avatarImageUrl,omitempty"` + + // DisplayName: The name to display for the player. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#player. + Kind string `json:"kind,omitempty"` + + // LastPlayedWith: Details about the last time this player played a + // multiplayer game with the currently authenticated player. Populated + // for PLAYED_WITH player collection members. + LastPlayedWith *GamesPlayedResource `json:"lastPlayedWith,omitempty"` + + // Name: An object representation of the individual components of the + // player's name. + Name *PlayerName `json:"name,omitempty"` + + // PlayerId: The ID of the player. + PlayerId string `json:"playerId,omitempty"` +} + +type PlayerName struct { + // FamilyName: The family name (last name) of this player. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name (first name) of this player. + GivenName string `json:"givenName,omitempty"` +} + +type PlayerScoreResetResponse struct { + // Kind: Uniquely identifies the type of this resource. Value is always + // the fixed string gamesManagement#playerScoreResetResponse. + Kind string `json:"kind,omitempty"` + + // ResetScoreTimeSpans: The time spans of the updated score. + // Possible + // values are: + // - "ALL_TIME" - The score is an all-time score. + // - + // "WEEKLY" - The score is a weekly score. + // - "DAILY" - The score is a + // daily score. + ResetScoreTimeSpans []string `json:"resetScoreTimeSpans,omitempty"` +} + +// method id "gamesManagement.achievements.reset": + +type AchievementsResetCall struct { + s *Service + achievementId string + opt_ map[string]interface{} +} + +// Reset: Resets the achievement with the given ID for the currently +// authenticated player. This method is only accessible to whitelisted +// tester accounts for your application. +func (r *AchievementsService) Reset(achievementId string) *AchievementsResetCall { + c := &AchievementsResetCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + return c +} + +func (c *AchievementsResetCall) Do() (*AchievementResetResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementResetResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Resets the achievement with the given ID for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.", + // "httpMethod": "POST", + // "id": "gamesManagement.achievements.reset", + // "parameterOrder": [ + // "achievementId" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "achievements/{achievementId}/reset", + // "response": { + // "$ref": "AchievementResetResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.achievements.resetAll": + +type AchievementsResetAllCall struct { + s *Service + opt_ map[string]interface{} +} + +// ResetAll: Resets all achievements for the currently authenticated +// player for your application. This method is only accessible to +// whitelisted tester accounts for your application. +func (r *AchievementsService) ResetAll() *AchievementsResetAllCall { + c := &AchievementsResetAllCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *AchievementsResetAllCall) Do() (*AchievementResetAllResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AchievementResetAllResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Resets all achievements for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.", + // "httpMethod": "POST", + // "id": "gamesManagement.achievements.resetAll", + // "path": "achievements/reset", + // "response": { + // "$ref": "AchievementResetAllResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.achievements.resetForAllPlayers": + +type AchievementsResetForAllPlayersCall struct { + s *Service + achievementId string + opt_ map[string]interface{} +} + +// ResetForAllPlayers: Resets the achievement with the given ID for the +// all players. This method is only available to user accounts for your +// developer console. Only draft achievements can be reset. +func (r *AchievementsService) ResetForAllPlayers(achievementId string) *AchievementsResetForAllPlayersCall { + c := &AchievementsResetForAllPlayersCall{s: r.s, opt_: make(map[string]interface{})} + c.achievementId = achievementId + return c +} + +func (c *AchievementsResetForAllPlayersCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "achievements/{achievementId}/resetForAllPlayers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{achievementId}", url.QueryEscape(c.achievementId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Resets the achievement with the given ID for the all players. This method is only available to user accounts for your developer console. Only draft achievements can be reset.", + // "httpMethod": "POST", + // "id": "gamesManagement.achievements.resetForAllPlayers", + // "parameterOrder": [ + // "achievementId" + // ], + // "parameters": { + // "achievementId": { + // "description": "The ID of the achievement used by this method.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "achievements/{achievementId}/resetForAllPlayers", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.applications.listHidden": + +type ApplicationsListHiddenCall struct { + s *Service + applicationId string + opt_ map[string]interface{} +} + +// ListHidden: Get the list of players hidden from the given +// application. This method is only available to user accounts for your +// developer console. +func (r *ApplicationsService) ListHidden(applicationId string) *ApplicationsListHiddenCall { + c := &ApplicationsListHiddenCall{s: r.s, opt_: make(map[string]interface{})} + c.applicationId = applicationId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of player resources to return in the response, used for +// paging. For any response, the actual number of player resources +// returned may be less than the specified maxResults. +func (c *ApplicationsListHiddenCall) MaxResults(maxResults int64) *ApplicationsListHiddenCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The token returned +// by the previous request. +func (c *ApplicationsListHiddenCall) PageToken(pageToken string) *ApplicationsListHiddenCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ApplicationsListHiddenCall) Do() (*HiddenPlayerList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}/players/hidden") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationId}", url.QueryEscape(c.applicationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(HiddenPlayerList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the list of players hidden from the given application. This method is only available to user accounts for your developer console.", + // "httpMethod": "GET", + // "id": "gamesManagement.applications.listHidden", + // "parameterOrder": [ + // "applicationId" + // ], + // "parameters": { + // "applicationId": { + // "description": "The application being requested.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of player resources to return in the response, used for paging. For any response, the actual number of player resources returned may be less than the specified maxResults.", + // "format": "int32", + // "location": "query", + // "maximum": "15", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The token returned by the previous request.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "applications/{applicationId}/players/hidden", + // "response": { + // "$ref": "HiddenPlayerList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.players.hide": + +type PlayersHideCall struct { + s *Service + applicationId string + playerId string + opt_ map[string]interface{} +} + +// Hide: Hide the given player's leaderboard scores from the given +// application. This method is only available to user accounts for your +// developer console. +func (r *PlayersService) Hide(applicationId string, playerId string) *PlayersHideCall { + c := &PlayersHideCall{s: r.s, opt_: make(map[string]interface{})} + c.applicationId = applicationId + c.playerId = playerId + return c +} + +func (c *PlayersHideCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}/players/hidden/{playerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationId}", url.QueryEscape(c.applicationId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{playerId}", url.QueryEscape(c.playerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Hide the given player's leaderboard scores from the given application. This method is only available to user accounts for your developer console.", + // "httpMethod": "POST", + // "id": "gamesManagement.players.hide", + // "parameterOrder": [ + // "applicationId", + // "playerId" + // ], + // "parameters": { + // "applicationId": { + // "description": "The application being requested.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "playerId": { + // "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "applications/{applicationId}/players/hidden/{playerId}", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.players.unhide": + +type PlayersUnhideCall struct { + s *Service + applicationId string + playerId string + opt_ map[string]interface{} +} + +// Unhide: Unhide the given player's leaderboard scores from the given +// application. This method is only available to user accounts for your +// developer console. +func (r *PlayersService) Unhide(applicationId string, playerId string) *PlayersUnhideCall { + c := &PlayersUnhideCall{s: r.s, opt_: make(map[string]interface{})} + c.applicationId = applicationId + c.playerId = playerId + return c +} + +func (c *PlayersUnhideCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "applications/{applicationId}/players/hidden/{playerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{applicationId}", url.QueryEscape(c.applicationId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{playerId}", url.QueryEscape(c.playerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Unhide the given player's leaderboard scores from the given application. This method is only available to user accounts for your developer console.", + // "httpMethod": "DELETE", + // "id": "gamesManagement.players.unhide", + // "parameterOrder": [ + // "applicationId", + // "playerId" + // ], + // "parameters": { + // "applicationId": { + // "description": "The application being requested.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "playerId": { + // "description": "A player ID. A value of me may be used in place of the authenticated player's ID.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "applications/{applicationId}/players/hidden/{playerId}", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.rooms.reset": + +type RoomsResetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Reset: Reset all rooms for the currently authenticated player for +// your application. This method is only accessible to whitelisted +// tester accounts for your application. +func (r *RoomsService) Reset() *RoomsResetCall { + c := &RoomsResetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *RoomsResetCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rooms/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Reset all rooms for the currently authenticated player for your application. This method is only accessible to whitelisted tester accounts for your application.", + // "httpMethod": "POST", + // "id": "gamesManagement.rooms.reset", + // "path": "rooms/reset", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.scores.reset": + +type ScoresResetCall struct { + s *Service + leaderboardId string + opt_ map[string]interface{} +} + +// Reset: Reset scores for the specified leaderboard for the currently +// authenticated player. This method is only accessible to whitelisted +// tester accounts for your application. +func (r *ScoresService) Reset(leaderboardId string) *ScoresResetCall { + c := &ScoresResetCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + return c +} + +func (c *ScoresResetCall) Do() (*PlayerScoreResetResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PlayerScoreResetResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Reset scores for the specified leaderboard for the currently authenticated player. This method is only accessible to whitelisted tester accounts for your application.", + // "httpMethod": "POST", + // "id": "gamesManagement.scores.reset", + // "parameterOrder": [ + // "leaderboardId" + // ], + // "parameters": { + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}/scores/reset", + // "response": { + // "$ref": "PlayerScoreResetResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.scores.resetForAllPlayers": + +type ScoresResetForAllPlayersCall struct { + s *Service + leaderboardId string + opt_ map[string]interface{} +} + +// ResetForAllPlayers: Reset scores for the specified leaderboard for +// all players. This method is only available to user accounts for your +// developer console. Only draft leaderboards can be reset. +func (r *ScoresService) ResetForAllPlayers(leaderboardId string) *ScoresResetForAllPlayersCall { + c := &ScoresResetForAllPlayersCall{s: r.s, opt_: make(map[string]interface{})} + c.leaderboardId = leaderboardId + return c +} + +func (c *ScoresResetForAllPlayersCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "leaderboards/{leaderboardId}/scores/resetForAllPlayers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{leaderboardId}", url.QueryEscape(c.leaderboardId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Reset scores for the specified leaderboard for all players. This method is only available to user accounts for your developer console. Only draft leaderboards can be reset.", + // "httpMethod": "POST", + // "id": "gamesManagement.scores.resetForAllPlayers", + // "parameterOrder": [ + // "leaderboardId" + // ], + // "parameters": { + // "leaderboardId": { + // "description": "The ID of the leaderboard.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "leaderboards/{leaderboardId}/scores/resetForAllPlayers", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "gamesManagement.turnBasedMatches.reset": + +type TurnBasedMatchesResetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Reset: Reset all turn-based match data for a user. This method is +// only accessible to whitelisted tester accounts for your application. +func (r *TurnBasedMatchesService) Reset() *TurnBasedMatchesResetCall { + c := &TurnBasedMatchesResetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *TurnBasedMatchesResetCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "turnbasedmatches/reset") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Reset all turn-based match data for a user. This method is only accessible to whitelisted tester accounts for your application.", + // "httpMethod": "POST", + // "id": "gamesManagement.turnBasedMatches.reset", + // "path": "turnbasedmatches/reset", + // "scopes": [ + // "https://www.googleapis.com/auth/games", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-api.json b/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-api.json new file mode 100644 index 0000000000000..2772e6a42d6f3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-api.json @@ -0,0 +1,1859 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/0f7uRmJraUnv6U9LmngxWGiEMV0\"", + "discoveryVersion": "v1", + "id": "gan:v1beta1", + "name": "gan", + "version": "v1beta1", + "title": "Google Affiliate Network API", + "description": "Lets you have programmatic access to your Google Affiliate Network data.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/affiliatenetwork-16.png", + "x32": "http://www.google.com/images/icons/product/affiliatenetwork-32.png" + }, + "documentationLink": "https://developers.google.com/affiliate-network/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/gan/v1beta1/", + "basePath": "/gan/v1beta1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "gan/v1beta1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Advertiser": { + "id": "Advertiser", + "type": "object", + "description": "An AdvertiserResource.", + "properties": { + "allowPublisherCreatedLinks": { + "type": "boolean", + "description": "True if the advertiser allows publisher created links, otherwise false." + }, + "category": { + "type": "string", + "description": "Category that this advertiser belongs to. A valid list of categories can be found here: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en&answer=107581" + }, + "commissionDuration": { + "type": "integer", + "description": "The longest possible length of a commission (how long the cookies on the customer's browser last before they expire).", + "format": "int32" + }, + "contactEmail": { + "type": "string", + "description": "Email that this advertiser would like publishers to contact them with." + }, + "contactPhone": { + "type": "string", + "description": "Phone that this advertiser would like publishers to contact them with." + }, + "defaultLinkId": { + "type": "string", + "description": "The default link id for this advertiser.", + "format": "int64" + }, + "description": { + "type": "string", + "description": "Description of the website the advertiser advertises from." + }, + "epcNinetyDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to publishers divided by the total number of clicks over the past three months. This value should be multiplied by 100 at the time of display." + }, + "epcSevenDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to publishers divided by the total number of clicks over the past seven days. This value should be multiplied by 100 at the time of display." + }, + "id": { + "type": "string", + "description": "The ID of this advertiser.", + "format": "int64" + }, + "item": { + "$ref": "Advertiser", + "description": "The requested advertiser." + }, + "joinDate": { + "type": "string", + "description": "Date that this advertiser was approved as a Google Affiliate Network advertiser.", + "format": "date-time" + }, + "kind": { + "type": "string", + "description": "The kind for an advertiser.", + "default": "gan#advertiser" + }, + "logoUrl": { + "type": "string", + "description": "URL to the logo this advertiser uses on the Google Affiliate Network." + }, + "merchantCenterIds": { + "type": "array", + "description": "List of merchant center ids for this advertiser", + "items": { + "type": "string", + "format": "int64" + } + }, + "name": { + "type": "string", + "description": "The name of this advertiser." + }, + "payoutRank": { + "type": "string", + "description": "A rank based on commissions paid to publishers over the past 90 days. A number between 1 and 4 where 4 means the top quartile (most money paid) and 1 means the bottom quartile (least money paid)." + }, + "productFeedsEnabled": { + "type": "boolean", + "description": "Allows advertisers to submit product listings to Google Product Search." + }, + "redirectDomains": { + "type": "array", + "description": "List of redirect URLs for this advertiser", + "items": { + "type": "string" + } + }, + "siteUrl": { + "type": "string", + "description": "URL of the website this advertiser advertises from." + }, + "status": { + "type": "string", + "description": "The status of the requesting publisher's relationship this advertiser." + } + } + }, + "Advertisers": { + "id": "Advertisers", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The advertiser list.", + "items": { + "$ref": "Advertiser" + } + }, + "kind": { + "type": "string", + "description": "The kind for a page of advertisers.", + "default": "gan#advertisers" + }, + "nextPageToken": { + "type": "string", + "description": "The 'pageToken' to pass to the next request to get the next page, if there are more to retrieve." + } + } + }, + "CcOffer": { + "id": "CcOffer", + "type": "object", + "description": "A credit card offer. There are many possible result fields. We provide two different views of the data, or \"projections.\" The \"full\" projection includes every result field. And the \"summary\" projection, which is the default, includes a smaller subset of the fields. The fields included in the summary projection are marked as such in their descriptions.", + "properties": { + "additionalCardBenefits": { + "type": "array", + "description": "More marketing copy about the card's benefits. A summary field.", + "items": { + "type": "string" + } + }, + "additionalCardHolderFee": { + "type": "string", + "description": "Any extra fees levied on card holders." + }, + "ageMinimum": { + "type": "number", + "description": "The youngest a recipient of this card may be.", + "format": "double" + }, + "ageMinimumDetails": { + "type": "string", + "description": "Text describing the details of the age minimum restriction." + }, + "annualFee": { + "type": "number", + "description": "The ongoing annual fee, in dollars.", + "format": "double" + }, + "annualFeeDisplay": { + "type": "string", + "description": "Text describing the annual fee, including any difference for the first year. A summary field." + }, + "annualRewardMaximum": { + "type": "number", + "description": "The largest number of units you may accumulate in a year.", + "format": "double" + }, + "approvedCategories": { + "type": "array", + "description": "Possible categories for this card, eg \"Low Interest\" or \"Good.\" A summary field.", + "items": { + "type": "string" + } + }, + "aprDisplay": { + "type": "string", + "description": "Text describing the purchase APR. A summary field." + }, + "balanceComputationMethod": { + "type": "string", + "description": "Text describing how the balance is computed. A summary field." + }, + "balanceTransferTerms": { + "type": "string", + "description": "Text describing the terms for balance transfers. A summary field." + }, + "bonusRewards": { + "type": "array", + "description": "For cards with rewards programs, extra circumstances whereby additional rewards may be granted.", + "items": { + "type": "object", + "properties": { + "amount": { + "type": "number", + "description": "How many units of reward will be granted.", + "format": "double" + }, + "details": { + "type": "string", + "description": "The circumstances under which this rule applies, for example, booking a flight via Orbitz." + } + } + } + }, + "carRentalInsurance": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "cardBenefits": { + "type": "array", + "description": "A list of what the issuer thinks are the most important benefits of the card. Usually summarizes the rewards program, if there is one. A summary field.", + "items": { + "type": "string" + } + }, + "cardName": { + "type": "string", + "description": "The issuer's name for the card, including any trademark or service mark designators. A summary field." + }, + "cardType": { + "type": "string", + "description": "What kind of credit card this is, for example secured or unsecured." + }, + "cashAdvanceTerms": { + "type": "string", + "description": "Text describing the terms for cash advances. A summary field." + }, + "creditLimitMax": { + "type": "number", + "description": "The high end for credit limits the issuer imposes on recipients of this card.", + "format": "double" + }, + "creditLimitMin": { + "type": "number", + "description": "The low end for credit limits the issuer imposes on recipients of this card.", + "format": "double" + }, + "creditRatingDisplay": { + "type": "string", + "description": "Text describing the credit ratings required for recipients of this card, for example \"Excellent/Good.\" A summary field." + }, + "defaultFees": { + "type": "array", + "description": "Fees for defaulting on your payments.", + "items": { + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "The type of charge, for example Purchases." + }, + "maxRate": { + "type": "number", + "description": "The highest rate the issuer may charge for defaulting on debt in this category. Expressed as an absolute number, not as a percentage.", + "format": "double" + }, + "minRate": { + "type": "number", + "description": "The lowest rate the issuer may charge for defaulting on debt in this category. Expressed as an absolute number, not as a percentage.", + "format": "double" + }, + "rateType": { + "type": "string", + "description": "Fixed or variable." + } + } + } + }, + "disclaimer": { + "type": "string", + "description": "A notice that, if present, is referenced via an asterisk by many of the other summary fields. If this field is present, it will always start with an asterisk (\"*\"), and must be prominently displayed with the offer. A summary field." + }, + "emergencyInsurance": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "existingCustomerOnly": { + "type": "boolean", + "description": "Whether this card is only available to existing customers of the issuer." + }, + "extendedWarranty": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "firstYearAnnualFee": { + "type": "number", + "description": "The annual fee for the first year, if different from the ongoing fee. Optional.", + "format": "double" + }, + "flightAccidentInsurance": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "foreignCurrencyTransactionFee": { + "type": "string", + "description": "Fee for each transaction involving a foreign currency." + }, + "fraudLiability": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "gracePeriodDisplay": { + "type": "string", + "description": "Text describing the grace period before finance charges apply. A summary field." + }, + "imageUrl": { + "type": "string", + "description": "The link to the image of the card that is shown on Connect Commerce. A summary field." + }, + "initialSetupAndProcessingFee": { + "type": "string", + "description": "Fee for setting up the card." + }, + "introBalanceTransferTerms": { + "type": "string", + "description": "Text describing the terms for introductory period balance transfers. A summary field." + }, + "introCashAdvanceTerms": { + "type": "string", + "description": "Text describing the terms for introductory period cash advances. A summary field." + }, + "introPurchaseTerms": { + "type": "string", + "description": "Text describing the terms for introductory period purchases. A summary field." + }, + "issuer": { + "type": "string", + "description": "Name of card issuer. A summary field." + }, + "issuerId": { + "type": "string", + "description": "The Google Affiliate Network ID of the advertiser making this offer." + }, + "issuerWebsite": { + "type": "string", + "description": "The generic link to the issuer's site." + }, + "kind": { + "type": "string", + "description": "The kind for one credit card offer. A summary field.", + "default": "gan#ccOffer" + }, + "landingPageUrl": { + "type": "string", + "description": "The link to the issuer's page for this card. A summary field." + }, + "latePaymentFee": { + "type": "string", + "description": "Text describing how much a late payment will cost, eg \"up to $35.\" A summary field." + }, + "luggageInsurance": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "maxPurchaseRate": { + "type": "number", + "description": "The highest interest rate the issuer charges on this card. Expressed as an absolute number, not as a percentage.", + "format": "double" + }, + "minPurchaseRate": { + "type": "number", + "description": "The lowest interest rate the issuer charges on this card. Expressed as an absolute number, not as a percentage.", + "format": "double" + }, + "minimumFinanceCharge": { + "type": "string", + "description": "Text describing how much missing the grace period will cost." + }, + "network": { + "type": "string", + "description": "Which network (eg Visa) the card belongs to. A summary field." + }, + "offerId": { + "type": "string", + "description": "This offer's ID. A summary field." + }, + "offersImmediateCashReward": { + "type": "boolean", + "description": "Whether a cash reward program lets you get cash back sooner than end of year or other longish period." + }, + "overLimitFee": { + "type": "string", + "description": "Fee for exceeding the card's charge limit." + }, + "prohibitedCategories": { + "type": "array", + "description": "Categories in which the issuer does not wish the card to be displayed. A summary field.", + "items": { + "type": "string" + } + }, + "purchaseRateAdditionalDetails": { + "type": "string", + "description": "Text describing any additional details for the purchase rate. A summary field." + }, + "purchaseRateType": { + "type": "string", + "description": "Fixed or variable." + }, + "returnedPaymentFee": { + "type": "string", + "description": "Text describing the fee for a payment that doesn't clear. A summary field." + }, + "rewardPartner": { + "type": "string", + "description": "The company that redeems the rewards, if different from the issuer." + }, + "rewardUnit": { + "type": "string", + "description": "For cards with rewards programs, the unit of reward. For example, miles, cash back, points." + }, + "rewards": { + "type": "array", + "description": "For cards with rewards programs, detailed rules about how the program works.", + "items": { + "type": "object", + "properties": { + "additionalDetails": { + "type": "string", + "description": "Other limits, for example, if this rule only applies during an introductory period." + }, + "amount": { + "type": "number", + "description": "The number of units rewarded per purchase dollar.", + "format": "double" + }, + "category": { + "type": "string", + "description": "The kind of purchases covered by this rule." + }, + "expirationMonths": { + "type": "number", + "description": "How long rewards granted by this rule last.", + "format": "double" + }, + "maxRewardTier": { + "type": "number", + "description": "The maximum purchase amount in the given category for this rule to apply.", + "format": "double" + }, + "minRewardTier": { + "type": "number", + "description": "The minimum purchase amount in the given category before this rule applies.", + "format": "double" + } + } + } + }, + "rewardsExpire": { + "type": "boolean", + "description": "Whether accumulated rewards ever expire." + }, + "rewardsHaveBlackoutDates": { + "type": "boolean", + "description": "For airline miles rewards, tells whether blackout dates apply to the miles." + }, + "statementCopyFee": { + "type": "string", + "description": "Fee for requesting a copy of your statement." + }, + "trackingUrl": { + "type": "string", + "description": "The link to ping to register a click on this offer. A summary field." + }, + "travelInsurance": { + "type": "string", + "description": "If you get coverage when you use the card for the given activity, this field describes it." + }, + "variableRatesLastUpdated": { + "type": "string", + "description": "When variable rates were last updated." + }, + "variableRatesUpdateFrequency": { + "type": "string", + "description": "How often variable rates are updated." + } + } + }, + "CcOffers": { + "id": "CcOffers", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The credit card offers.", + "items": { + "$ref": "CcOffer" + } + }, + "kind": { + "type": "string", + "description": "The kind for a page of credit card offers.", + "default": "gan#ccOffers" + } + } + }, + "Event": { + "id": "Event", + "type": "object", + "description": "An EventResource.", + "properties": { + "advertiserId": { + "type": "string", + "description": "The ID of advertiser for this event.", + "format": "int64" + }, + "advertiserName": { + "type": "string", + "description": "The name of the advertiser for this event." + }, + "chargeId": { + "type": "string", + "description": "The charge ID for this event. Only returned for charge events." + }, + "chargeType": { + "type": "string", + "description": "Charge type of the event (other|slotting_fee|monthly_minimum|tier_bonus|debit|credit). Only returned for charge events." + }, + "commissionableSales": { + "$ref": "Money", + "description": "Amount of money exchanged during the transaction. Only returned for charge and conversion events." + }, + "earnings": { + "$ref": "Money", + "description": "Earnings by the publisher." + }, + "eventDate": { + "type": "string", + "description": "The date-time this event was initiated as a RFC 3339 date-time value.", + "format": "date-time" + }, + "kind": { + "type": "string", + "description": "The kind for one event.", + "default": "gan#event" + }, + "memberId": { + "type": "string", + "description": "The ID of the member attached to this event. Only returned for conversion events." + }, + "modifyDate": { + "type": "string", + "description": "The date-time this event was last modified as a RFC 3339 date-time value.", + "format": "date-time" + }, + "networkFee": { + "$ref": "Money", + "description": "Fee that the advertiser paid to the Google Affiliate Network." + }, + "orderId": { + "type": "string", + "description": "The order ID for this event. Only returned for conversion events." + }, + "products": { + "type": "array", + "description": "Products associated with the event.", + "items": { + "type": "object", + "properties": { + "categoryId": { + "type": "string", + "description": "Id of the category this product belongs to." + }, + "categoryName": { + "type": "string", + "description": "Name of the category this product belongs to." + }, + "earnings": { + "$ref": "Money", + "description": "Amount earned by the publisher on this product." + }, + "networkFee": { + "$ref": "Money", + "description": "Fee that the advertiser paid to the Google Affiliate Network for this product." + }, + "publisherFee": { + "$ref": "Money", + "description": "Fee that the advertiser paid to the publisehr for this product." + }, + "quantity": { + "type": "string", + "description": "Quantity of this product bought/exchanged.", + "format": "int64" + }, + "sku": { + "type": "string", + "description": "Sku of this product." + }, + "skuName": { + "type": "string", + "description": "Sku name of this product." + }, + "unitPrice": { + "$ref": "Money", + "description": "Price per unit of this product." + } + } + } + }, + "publisherFee": { + "$ref": "Money", + "description": "Fee that the advertiser paid to the publisher." + }, + "publisherId": { + "type": "string", + "description": "The ID of the publisher for this event.", + "format": "int64" + }, + "publisherName": { + "type": "string", + "description": "The name of the publisher for this event." + }, + "status": { + "type": "string", + "description": "Status of the event (active|canceled). Only returned for charge and conversion events." + }, + "type": { + "type": "string", + "description": "Type of the event (action|transaction|charge)." + } + } + }, + "Events": { + "id": "Events", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The event list.", + "items": { + "$ref": "Event" + } + }, + "kind": { + "type": "string", + "description": "The kind for a page of events.", + "default": "gan#events" + }, + "nextPageToken": { + "type": "string", + "description": "The 'pageToken' to pass to the next request to get the next page, if there are more to retrieve." + } + } + }, + "Link": { + "id": "Link", + "type": "object", + "description": "A LinkResource.", + "properties": { + "advertiserId": { + "type": "string", + "description": "The advertiser id for the advertiser who owns this link.", + "format": "int64" + }, + "authorship": { + "type": "string", + "description": "Authorship" + }, + "availability": { + "type": "string", + "description": "Availability." + }, + "clickTrackingUrl": { + "type": "string", + "description": "Tracking url for clicks." + }, + "createDate": { + "type": "string", + "description": "Date that this link was created.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "Description." + }, + "destinationUrl": { + "type": "string", + "description": "The destination URL for the link." + }, + "duration": { + "type": "string", + "description": "Duration" + }, + "endDate": { + "type": "string", + "description": "Date that this link becomes inactive.", + "format": "date-time" + }, + "epcNinetyDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to publishers divided by the total number of clicks over the past three months on this link. This value should be multiplied by 100 at the time of display." + }, + "epcSevenDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to publishers divided by the total number of clicks over the past seven days on this link. This value should be multiplied by 100 at the time of display." + }, + "id": { + "type": "string", + "description": "The ID of this link.", + "format": "int64" + }, + "imageAltText": { + "type": "string", + "description": "image alt text." + }, + "impressionTrackingUrl": { + "type": "string", + "description": "Tracking url for impressions." + }, + "isActive": { + "type": "boolean", + "description": "Flag for if this link is active." + }, + "kind": { + "type": "string", + "description": "The kind for one entity.", + "default": "gan#link" + }, + "linkType": { + "type": "string", + "description": "The link type." + }, + "name": { + "type": "string", + "description": "The logical name for this link." + }, + "promotionType": { + "type": "string", + "description": "Promotion Type" + }, + "specialOffers": { + "type": "object", + "description": "Special offers on the link.", + "properties": { + "freeGift": { + "type": "boolean", + "description": "Whether there is a free gift" + }, + "freeShipping": { + "type": "boolean", + "description": "Whether there is free shipping" + }, + "freeShippingMin": { + "$ref": "Money", + "description": "Minimum purchase amount for free shipping promotion" + }, + "percentOff": { + "type": "number", + "description": "Percent off on the purchase", + "format": "double" + }, + "percentOffMin": { + "$ref": "Money", + "description": "Minimum purchase amount for percent off promotion" + }, + "priceCut": { + "$ref": "Money", + "description": "Price cut on the purchase" + }, + "priceCutMin": { + "$ref": "Money", + "description": "Minimum purchase amount for price cut promotion" + }, + "promotionCodes": { + "type": "array", + "description": "List of promotion code associated with the link", + "items": { + "type": "string" + } + } + } + }, + "startDate": { + "type": "string", + "description": "Date that this link becomes active.", + "format": "date-time" + } + } + }, + "Links": { + "id": "Links", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The links.", + "items": { + "$ref": "Link" + } + }, + "kind": { + "type": "string", + "description": "The kind for a page of links.", + "default": "gan#links" + }, + "nextPageToken": { + "type": "string", + "description": "The next page token." + } + } + }, + "Money": { + "id": "Money", + "type": "object", + "description": "An ApiMoneyProto.", + "properties": { + "amount": { + "type": "number", + "description": "The amount of money.", + "format": "double" + }, + "currencyCode": { + "type": "string", + "description": "The 3-letter code of the currency in question." + } + } + }, + "Publisher": { + "id": "Publisher", + "type": "object", + "description": "A PublisherResource.", + "properties": { + "classification": { + "type": "string", + "description": "Classification that this publisher belongs to. See this link for all publisher classifications: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en&answer=107625&ctx=cb&src=cb&cbid=-k5fihzthfaik&cbrank=4" + }, + "epcNinetyDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to this publisher divided by the total number of clicks over the past three months. Values are multiplied by 100 for display purposes." + }, + "epcSevenDayAverage": { + "$ref": "Money", + "description": "The sum of fees paid to this publisher divided by the total number of clicks over the past seven days. Values are multiplied by 100 for display purposes." + }, + "id": { + "type": "string", + "description": "The ID of this publisher.", + "format": "int64" + }, + "item": { + "$ref": "Publisher", + "description": "The requested publisher." + }, + "joinDate": { + "type": "string", + "description": "Date that this publisher was approved as a Google Affiliate Network publisher.", + "format": "date-time" + }, + "kind": { + "type": "string", + "description": "The kind for a publisher.", + "default": "gan#publisher" + }, + "name": { + "type": "string", + "description": "The name of this publisher." + }, + "payoutRank": { + "type": "string", + "description": "A rank based on commissions paid to this publisher over the past 90 days. A number between 1 and 4 where 4 means the top quartile (most money paid) and 1 means the bottom quartile (least money paid)." + }, + "sites": { + "type": "array", + "description": "Websites that this publisher uses to advertise.", + "items": { + "type": "string" + } + }, + "status": { + "type": "string", + "description": "The status of the requesting advertiser's relationship with this publisher." + } + } + }, + "Publishers": { + "id": "Publishers", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The entity list.", + "items": { + "$ref": "Publisher" + } + }, + "kind": { + "type": "string", + "description": "The kind for a page of entities.", + "default": "gan#publishers" + }, + "nextPageToken": { + "type": "string", + "description": "The 'pageToken' to pass to the next request to get the next page, if there are more to retrieve." + } + } + }, + "Report": { + "id": "Report", + "type": "object", + "description": "A ReportResource representing a report of a certain type either for an advertiser or publisher.", + "properties": { + "column_names": { + "type": "array", + "description": "The column names for the report", + "items": { + "type": "string" + } + }, + "end_date": { + "type": "string", + "description": "The end of the date range for this report, exclusive." + }, + "kind": { + "type": "string", + "description": "The kind for a report.", + "default": "gan#report" + }, + "matching_row_count": { + "type": "string", + "description": "The number of matching rows before paging is applied.", + "format": "int64" + }, + "rows": { + "type": "array", + "description": "The rows of data for the report", + "items": { + "type": "array", + "description": "Loop over each column in the row.", + "items": { + "type": "any" + } + } + }, + "start_date": { + "type": "string", + "description": "The start of the date range for this report, inclusive." + }, + "totals_rows": { + "type": "array", + "description": "The totals rows for the report", + "items": { + "type": "array", + "description": "Loop over each column in the row.", + "items": { + "type": "any" + } + } + }, + "type": { + "type": "string", + "description": "The report type." + } + } + } + }, + "resources": { + "advertisers": { + "methods": { + "get": { + "id": "gan.advertisers.get", + "path": "{role}/{roleId}/advertiser", + "httpMethod": "GET", + "description": "Retrieves data about a single advertiser if that the requesting advertiser/publisher has access to it. Only publishers can lookup advertisers. Advertisers can request information about themselves by omitting the advertiserId query parameter.", + "parameters": { + "advertiserId": { + "type": "string", + "description": "The ID of the advertiser to look up. Optional.", + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Advertiser" + } + }, + "list": { + "id": "gan.advertisers.list", + "path": "{role}/{roleId}/advertisers", + "httpMethod": "GET", + "description": "Retrieves data about all advertisers that the requesting advertiser/publisher has access to.", + "parameters": { + "advertiserCategory": { + "type": "string", + "description": "Caret(^) delimted list of advertiser categories. Valid categories are defined here: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en&answer=107581. Filters out all advertisers not in one of the given advertiser categories. Optional.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Max number of items to return in this page. Optional. Defaults to 20.", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "minNinetyDayEpc": { + "type": "number", + "description": "Filters out all advertisers that have a ninety day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + "format": "double", + "location": "query" + }, + "minPayoutRank": { + "type": "integer", + "description": "A value between 1 and 4, where 1 represents the quartile of advertisers with the lowest ranks and 4 represents the quartile of advertisers with the highest ranks. Filters out all advertisers with a lower rank than the given quartile. For example if a 2 was given only advertisers with a payout rank of 25 or higher would be included. Optional.", + "format": "int32", + "minimum": "1", + "maximum": "4", + "location": "query" + }, + "minSevenDayEpc": { + "type": "number", + "description": "Filters out all advertisers that have a seven day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + "format": "double", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of 'nextPageToken' from the previous page. Optional.", + "location": "query" + }, + "relationshipStatus": { + "type": "string", + "description": "Filters out all advertisers for which do not have the given relationship status with the requesting publisher.", + "enum": [ + "approved", + "available", + "deactivated", + "declined", + "pending" + ], + "enumDescriptions": [ + "An advertiser that has approved your application.", + "An advertiser program that's accepting new publishers.", + "Deactivated means either the advertiser has removed you from their program, or it could also mean that you chose to remove yourself from the advertiser's program.", + "An advertiser that did not approve your application.", + "An advertiser program that you've already applied to, but they haven't yet decided to approve or decline your application." + ], + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Advertisers" + } + } + } + }, + "ccOffers": { + "methods": { + "list": { + "id": "gan.ccOffers.list", + "path": "publishers/{publisher}/ccOffers", + "httpMethod": "GET", + "description": "Retrieves credit card offers for the given publisher.", + "parameters": { + "advertiser": { + "type": "string", + "description": "The advertiser ID of a card issuer whose offers to include. Optional, may be repeated.", + "repeated": true, + "location": "query" + }, + "projection": { + "type": "string", + "description": "The set of fields to return.", + "enum": [ + "full", + "summary" + ], + "enumDescriptions": [ + "Include all offer fields. This is the default.", + "Include only the basic fields needed to display an offer." + ], + "location": "query" + }, + "publisher": { + "type": "string", + "description": "The ID of the publisher in question.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "publisher" + ], + "response": { + "$ref": "CcOffers" + } + } + } + }, + "events": { + "methods": { + "list": { + "id": "gan.events.list", + "path": "{role}/{roleId}/events", + "httpMethod": "GET", + "description": "Retrieves event data for a given advertiser/publisher.", + "parameters": { + "advertiserId": { + "type": "string", + "description": "Caret(^) delimited list of advertiser IDs. Filters out all events that do not reference one of the given advertiser IDs. Only used when under publishers role. Optional.", + "location": "query" + }, + "chargeType": { + "type": "string", + "description": "Filters out all charge events that are not of the given charge type. Valid values: 'other', 'slotting_fee', 'monthly_minimum', 'tier_bonus', 'credit', 'debit'. Optional.", + "enum": [ + "credit", + "debit", + "monthly_minimum", + "other", + "slotting_fee", + "tier_bonus" + ], + "enumDescriptions": [ + "A credit increases the publisher's payout amount and decreases the advertiser's invoice amount.", + "A debit reduces the publisher's payout and increases the advertiser's invoice amount.", + "A payment made to Google by an advertiser as a minimum monthly network fee.", + "Catch all. Default if unset", + "A one time payment made from an advertiser to a publisher.", + "A payment from an advertiser to a publisher for the publisher maintaining a high tier level" + ], + "location": "query" + }, + "eventDateMax": { + "type": "string", + "description": "Filters out all events later than given date. Optional. Defaults to 24 hours after eventMin.", + "location": "query" + }, + "eventDateMin": { + "type": "string", + "description": "Filters out all events earlier than given date. Optional. Defaults to 24 hours from current date/time.", + "location": "query" + }, + "linkId": { + "type": "string", + "description": "Caret(^) delimited list of link IDs. Filters out all events that do not reference one of the given link IDs. Optional.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Max number of offers to return in this page. Optional. Defaults to 20.", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "memberId": { + "type": "string", + "description": "Caret(^) delimited list of member IDs. Filters out all events that do not reference one of the given member IDs. Optional.", + "location": "query" + }, + "modifyDateMax": { + "type": "string", + "description": "Filters out all events modified later than given date. Optional. Defaults to 24 hours after modifyDateMin, if modifyDateMin is explicitly set.", + "location": "query" + }, + "modifyDateMin": { + "type": "string", + "description": "Filters out all events modified earlier than given date. Optional. Defaults to 24 hours before the current modifyDateMax, if modifyDateMax is explicitly set.", + "location": "query" + }, + "orderId": { + "type": "string", + "description": "Caret(^) delimited list of order IDs. Filters out all events that do not reference one of the given order IDs. Optional.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of 'nextPageToken' from the previous page. Optional.", + "location": "query" + }, + "productCategory": { + "type": "string", + "description": "Caret(^) delimited list of product categories. Filters out all events that do not reference a product in one of the given product categories. Optional.", + "location": "query" + }, + "publisherId": { + "type": "string", + "description": "Caret(^) delimited list of publisher IDs. Filters out all events that do not reference one of the given publishers IDs. Only used when under advertiser role. Optional.", + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + }, + "sku": { + "type": "string", + "description": "Caret(^) delimited list of SKUs. Filters out all events that do not reference one of the given SKU. Optional.", + "location": "query" + }, + "status": { + "type": "string", + "description": "Filters out all events that do not have the given status. Valid values: 'active', 'canceled'. Optional.", + "enum": [ + "active", + "canceled" + ], + "enumDescriptions": [ + "Event is currently active.", + "Event is currently canceled." + ], + "location": "query" + }, + "type": { + "type": "string", + "description": "Filters out all events that are not of the given type. Valid values: 'action', 'transaction', 'charge'. Optional.", + "enum": [ + "action", + "charge", + "transaction" + ], + "enumDescriptions": [ + "The completion of an application, sign-up, or other process. For example, an action occurs if a user clicks an ad for a credit card and completes an application for that card.", + "A charge event is typically a payment between an advertiser, publisher or Google.", + "A conversion event, typically an e-commerce transaction. Some advertisers use a transaction to record other types of events, such as magazine subscriptions." + ], + "location": "query" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Events" + } + } + } + }, + "links": { + "methods": { + "get": { + "id": "gan.links.get", + "path": "{role}/{roleId}/link/{linkId}", + "httpMethod": "GET", + "description": "Retrieves data about a single link if the requesting advertiser/publisher has access to it. Advertisers can look up their own links. Publishers can look up visible links or links belonging to advertisers they are in a relationship with.", + "parameters": { + "linkId": { + "type": "string", + "description": "The ID of the link to look up.", + "required": true, + "format": "int64", + "location": "path" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId", + "linkId" + ], + "response": { + "$ref": "Link" + } + }, + "insert": { + "id": "gan.links.insert", + "path": "{role}/{roleId}/link", + "httpMethod": "POST", + "description": "Inserts a new link.", + "parameters": { + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "request": { + "$ref": "Link" + }, + "response": { + "$ref": "Link" + } + }, + "list": { + "id": "gan.links.list", + "path": "{role}/{roleId}/links", + "httpMethod": "GET", + "description": "Retrieves all links that match the query parameters.", + "parameters": { + "advertiserId": { + "type": "string", + "description": "Limits the resulting links to the ones belonging to the listed advertisers.", + "format": "int64", + "repeated": true, + "location": "query" + }, + "assetSize": { + "type": "string", + "description": "The size of the given asset.", + "repeated": true, + "location": "query" + }, + "authorship": { + "type": "string", + "description": "The role of the author of the link.", + "enum": [ + "advertiser", + "publisher" + ], + "enumDescriptions": [ + "", + "" + ], + "location": "query" + }, + "createDateMax": { + "type": "string", + "description": "The end of the create date range.", + "location": "query" + }, + "createDateMin": { + "type": "string", + "description": "The beginning of the create date range.", + "location": "query" + }, + "linkType": { + "type": "string", + "description": "The type of the link.", + "enum": [ + "banner", + "text" + ], + "enumDescriptions": [ + "", + "" + ], + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Max number of items to return in this page. Optional. Defaults to 20.", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of 'nextPageToken' from the previous page. Optional.", + "location": "query" + }, + "promotionType": { + "type": "string", + "description": "The promotion type.", + "enum": [ + "coupon", + "free_gift", + "free_shipping", + "percent_off", + "price_cut" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ], + "repeated": true, + "location": "query" + }, + "relationshipStatus": { + "type": "string", + "description": "The status of the relationship.", + "enum": [ + "approved", + "available" + ], + "enumDescriptions": [ + "", + "" + ], + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + }, + "searchText": { + "type": "string", + "description": "Field for full text search across title and merchandising text, supports link id search.", + "location": "query" + }, + "startDateMax": { + "type": "string", + "description": "The end of the start date range.", + "location": "query" + }, + "startDateMin": { + "type": "string", + "description": "The beginning of the start date range.", + "location": "query" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Links" + } + } + } + }, + "publishers": { + "methods": { + "get": { + "id": "gan.publishers.get", + "path": "{role}/{roleId}/publisher", + "httpMethod": "GET", + "description": "Retrieves data about a single advertiser if that the requesting advertiser/publisher has access to it. Only advertisers can look up publishers. Publishers can request information about themselves by omitting the publisherId query parameter.", + "parameters": { + "publisherId": { + "type": "string", + "description": "The ID of the publisher to look up. Optional.", + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Publisher" + } + }, + "list": { + "id": "gan.publishers.list", + "path": "{role}/{roleId}/publishers", + "httpMethod": "GET", + "description": "Retrieves data about all publishers that the requesting advertiser/publisher has access to.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Max number of items to return in this page. Optional. Defaults to 20.", + "format": "uint32", + "minimum": "0", + "maximum": "100", + "location": "query" + }, + "minNinetyDayEpc": { + "type": "number", + "description": "Filters out all publishers that have a ninety day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + "format": "double", + "location": "query" + }, + "minPayoutRank": { + "type": "integer", + "description": "A value between 1 and 4, where 1 represents the quartile of publishers with the lowest ranks and 4 represents the quartile of publishers with the highest ranks. Filters out all publishers with a lower rank than the given quartile. For example if a 2 was given only publishers with a payout rank of 25 or higher would be included. Optional.", + "format": "int32", + "minimum": "1", + "maximum": "4", + "location": "query" + }, + "minSevenDayEpc": { + "type": "number", + "description": "Filters out all publishers that have a seven day EPC average lower than the given value (inclusive). Min value 0.0. Optional.", + "format": "double", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The value of 'nextPageToken' from the previous page. Optional.", + "location": "query" + }, + "publisherCategory": { + "type": "string", + "description": "Caret(^) delimted list of publisher categories. Valid categories: (unclassified|community_and_content|shopping_and_promotion|loyalty_and_rewards|network|search_specialist|comparison_shopping|email). Filters out all publishers not in one of the given advertiser categories. Optional.", + "location": "query" + }, + "relationshipStatus": { + "type": "string", + "description": "Filters out all publishers for which do not have the given relationship status with the requesting publisher.", + "enum": [ + "approved", + "available", + "deactivated", + "declined", + "pending" + ], + "enumDescriptions": [ + "Publishers you've approved to your program.", + "Publishers available for you to recruit.", + "A publisher that you terminated from your program. Publishers also have the ability to remove themselves from your program.", + "A publisher that you did not approve to your program.", + "Publishers that have applied to your program. We recommend reviewing and deciding on pending publishers on a weekly basis." + ], + "location": "query" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "role", + "roleId" + ], + "response": { + "$ref": "Publishers" + } + } + } + }, + "reports": { + "methods": { + "get": { + "id": "gan.reports.get", + "path": "{role}/{roleId}/report/{reportType}", + "httpMethod": "GET", + "description": "Retrieves a report of the specified type.", + "parameters": { + "advertiserId": { + "type": "string", + "description": "The IDs of the advertisers to look up, if applicable.", + "repeated": true, + "location": "query" + }, + "calculateTotals": { + "type": "boolean", + "description": "Whether or not to calculate totals rows. Optional.", + "location": "query" + }, + "endDate": { + "type": "string", + "description": "The end date (exclusive), in RFC 3339 format, for the report data to be returned. Defaults to one day after startDate, if that is given, or today. Optional.", + "location": "query" + }, + "eventType": { + "type": "string", + "description": "Filters out all events that are not of the given type. Valid values: 'action', 'transaction', or 'charge'. Optional.", + "enum": [ + "action", + "charge", + "transaction" + ], + "enumDescriptions": [ + "Event type is action.", + "Event type is charge.", + "Event type is transaction." + ], + "location": "query" + }, + "linkId": { + "type": "string", + "description": "Filters to capture one of given link IDs. Optional.", + "repeated": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Max number of items to return in this page. Optional. Defaults to return all results.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "orderId": { + "type": "string", + "description": "Filters to capture one of the given order IDs. Optional.", + "repeated": true, + "location": "query" + }, + "publisherId": { + "type": "string", + "description": "The IDs of the publishers to look up, if applicable.", + "repeated": true, + "location": "query" + }, + "reportType": { + "type": "string", + "description": "The type of report being requested. Valid values: 'order_delta'. Required.", + "required": true, + "enum": [ + "order_delta" + ], + "enumDescriptions": [ + "The order delta report type." + ], + "location": "path" + }, + "role": { + "type": "string", + "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + "required": true, + "enum": [ + "advertisers", + "publishers" + ], + "enumDescriptions": [ + "The requester is requesting as an advertiser.", + "The requester is requesting as a publisher." + ], + "location": "path" + }, + "roleId": { + "type": "string", + "description": "The ID of the requesting advertiser or publisher.", + "required": true, + "location": "path" + }, + "startDate": { + "type": "string", + "description": "The start date (inclusive), in RFC 3339 format, for the report data to be returned. Defaults to one day before endDate, if that is given, or yesterday. Optional.", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Offset on which to return results when paging. Optional.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "status": { + "type": "string", + "description": "Filters out all events that do not have the given status. Valid values: 'active', 'canceled', or 'invalid'. Optional.", + "enum": [ + "active", + "canceled", + "invalid" + ], + "enumDescriptions": [ + "Event is currently active.", + "Event is currently canceled.", + "Event is currently invalid." + ], + "location": "query" + } + }, + "parameterOrder": [ + "role", + "roleId", + "reportType" + ], + "response": { + "$ref": "Report" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-gen.go b/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-gen.go new file mode 100644 index 0000000000000..00d0a911846b4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/gan/v1beta1/gan-gen.go @@ -0,0 +1,2731 @@ +// Package gan provides access to the Google Affiliate Network API. +// +// See https://developers.google.com/affiliate-network/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/gan/v1beta1" +// ... +// ganService, err := gan.New(oauthHttpClient) +package gan + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "gan:v1beta1" +const apiName = "gan" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/gan/v1beta1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Advertisers = NewAdvertisersService(s) + s.CcOffers = NewCcOffersService(s) + s.Events = NewEventsService(s) + s.Links = NewLinksService(s) + s.Publishers = NewPublishersService(s) + s.Reports = NewReportsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Advertisers *AdvertisersService + + CcOffers *CcOffersService + + Events *EventsService + + Links *LinksService + + Publishers *PublishersService + + Reports *ReportsService +} + +func NewAdvertisersService(s *Service) *AdvertisersService { + rs := &AdvertisersService{s: s} + return rs +} + +type AdvertisersService struct { + s *Service +} + +func NewCcOffersService(s *Service) *CcOffersService { + rs := &CcOffersService{s: s} + return rs +} + +type CcOffersService struct { + s *Service +} + +func NewEventsService(s *Service) *EventsService { + rs := &EventsService{s: s} + return rs +} + +type EventsService struct { + s *Service +} + +func NewLinksService(s *Service) *LinksService { + rs := &LinksService{s: s} + return rs +} + +type LinksService struct { + s *Service +} + +func NewPublishersService(s *Service) *PublishersService { + rs := &PublishersService{s: s} + return rs +} + +type PublishersService struct { + s *Service +} + +func NewReportsService(s *Service) *ReportsService { + rs := &ReportsService{s: s} + return rs +} + +type ReportsService struct { + s *Service +} + +type Advertiser struct { + // AllowPublisherCreatedLinks: True if the advertiser allows publisher + // created links, otherwise false. + AllowPublisherCreatedLinks bool `json:"allowPublisherCreatedLinks,omitempty"` + + // Category: Category that this advertiser belongs to. A valid list of + // categories can be found here: + // http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.p + // y?hl=en&answer=107581 + Category string `json:"category,omitempty"` + + // CommissionDuration: The longest possible length of a commission (how + // long the cookies on the customer's browser last before they expire). + CommissionDuration int64 `json:"commissionDuration,omitempty"` + + // ContactEmail: Email that this advertiser would like publishers to + // contact them with. + ContactEmail string `json:"contactEmail,omitempty"` + + // ContactPhone: Phone that this advertiser would like publishers to + // contact them with. + ContactPhone string `json:"contactPhone,omitempty"` + + // DefaultLinkId: The default link id for this advertiser. + DefaultLinkId int64 `json:"defaultLinkId,omitempty,string"` + + // Description: Description of the website the advertiser advertises + // from. + Description string `json:"description,omitempty"` + + // EpcNinetyDayAverage: The sum of fees paid to publishers divided by + // the total number of clicks over the past three months. This value + // should be multiplied by 100 at the time of display. + EpcNinetyDayAverage *Money `json:"epcNinetyDayAverage,omitempty"` + + // EpcSevenDayAverage: The sum of fees paid to publishers divided by the + // total number of clicks over the past seven days. This value should be + // multiplied by 100 at the time of display. + EpcSevenDayAverage *Money `json:"epcSevenDayAverage,omitempty"` + + // Id: The ID of this advertiser. + Id int64 `json:"id,omitempty,string"` + + // Item: The requested advertiser. + Item *Advertiser `json:"item,omitempty"` + + // JoinDate: Date that this advertiser was approved as a Google + // Affiliate Network advertiser. + JoinDate string `json:"joinDate,omitempty"` + + // Kind: The kind for an advertiser. + Kind string `json:"kind,omitempty"` + + // LogoUrl: URL to the logo this advertiser uses on the Google Affiliate + // Network. + LogoUrl string `json:"logoUrl,omitempty"` + + // MerchantCenterIds: List of merchant center ids for this advertiser + MerchantCenterIds googleapi.Int64s `json:"merchantCenterIds,omitempty"` + + // Name: The name of this advertiser. + Name string `json:"name,omitempty"` + + // PayoutRank: A rank based on commissions paid to publishers over the + // past 90 days. A number between 1 and 4 where 4 means the top quartile + // (most money paid) and 1 means the bottom quartile (least money paid). + PayoutRank string `json:"payoutRank,omitempty"` + + // ProductFeedsEnabled: Allows advertisers to submit product listings to + // Google Product Search. + ProductFeedsEnabled bool `json:"productFeedsEnabled,omitempty"` + + // RedirectDomains: List of redirect URLs for this advertiser + RedirectDomains []string `json:"redirectDomains,omitempty"` + + // SiteUrl: URL of the website this advertiser advertises from. + SiteUrl string `json:"siteUrl,omitempty"` + + // Status: The status of the requesting publisher's relationship this + // advertiser. + Status string `json:"status,omitempty"` +} + +type Advertisers struct { + // Items: The advertiser list. + Items []*Advertiser `json:"items,omitempty"` + + // Kind: The kind for a page of advertisers. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The 'pageToken' to pass to the next request to get the + // next page, if there are more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type CcOffer struct { + // AdditionalCardBenefits: More marketing copy about the card's + // benefits. A summary field. + AdditionalCardBenefits []string `json:"additionalCardBenefits,omitempty"` + + // AdditionalCardHolderFee: Any extra fees levied on card holders. + AdditionalCardHolderFee string `json:"additionalCardHolderFee,omitempty"` + + // AgeMinimum: The youngest a recipient of this card may be. + AgeMinimum float64 `json:"ageMinimum,omitempty"` + + // AgeMinimumDetails: Text describing the details of the age minimum + // restriction. + AgeMinimumDetails string `json:"ageMinimumDetails,omitempty"` + + // AnnualFee: The ongoing annual fee, in dollars. + AnnualFee float64 `json:"annualFee,omitempty"` + + // AnnualFeeDisplay: Text describing the annual fee, including any + // difference for the first year. A summary field. + AnnualFeeDisplay string `json:"annualFeeDisplay,omitempty"` + + // AnnualRewardMaximum: The largest number of units you may accumulate + // in a year. + AnnualRewardMaximum float64 `json:"annualRewardMaximum,omitempty"` + + // ApprovedCategories: Possible categories for this card, eg "Low + // Interest" or "Good." A summary field. + ApprovedCategories []string `json:"approvedCategories,omitempty"` + + // AprDisplay: Text describing the purchase APR. A summary field. + AprDisplay string `json:"aprDisplay,omitempty"` + + // BalanceComputationMethod: Text describing how the balance is + // computed. A summary field. + BalanceComputationMethod string `json:"balanceComputationMethod,omitempty"` + + // BalanceTransferTerms: Text describing the terms for balance + // transfers. A summary field. + BalanceTransferTerms string `json:"balanceTransferTerms,omitempty"` + + // BonusRewards: For cards with rewards programs, extra circumstances + // whereby additional rewards may be granted. + BonusRewards []*CcOfferBonusRewards `json:"bonusRewards,omitempty"` + + // CarRentalInsurance: If you get coverage when you use the card for the + // given activity, this field describes it. + CarRentalInsurance string `json:"carRentalInsurance,omitempty"` + + // CardBenefits: A list of what the issuer thinks are the most important + // benefits of the card. Usually summarizes the rewards program, if + // there is one. A summary field. + CardBenefits []string `json:"cardBenefits,omitempty"` + + // CardName: The issuer's name for the card, including any trademark or + // service mark designators. A summary field. + CardName string `json:"cardName,omitempty"` + + // CardType: What kind of credit card this is, for example secured or + // unsecured. + CardType string `json:"cardType,omitempty"` + + // CashAdvanceTerms: Text describing the terms for cash advances. A + // summary field. + CashAdvanceTerms string `json:"cashAdvanceTerms,omitempty"` + + // CreditLimitMax: The high end for credit limits the issuer imposes on + // recipients of this card. + CreditLimitMax float64 `json:"creditLimitMax,omitempty"` + + // CreditLimitMin: The low end for credit limits the issuer imposes on + // recipients of this card. + CreditLimitMin float64 `json:"creditLimitMin,omitempty"` + + // CreditRatingDisplay: Text describing the credit ratings required for + // recipients of this card, for example "Excellent/Good." A summary + // field. + CreditRatingDisplay string `json:"creditRatingDisplay,omitempty"` + + // DefaultFees: Fees for defaulting on your payments. + DefaultFees []*CcOfferDefaultFees `json:"defaultFees,omitempty"` + + // Disclaimer: A notice that, if present, is referenced via an asterisk + // by many of the other summary fields. If this field is present, it + // will always start with an asterisk ("*"), and must be prominently + // displayed with the offer. A summary field. + Disclaimer string `json:"disclaimer,omitempty"` + + // EmergencyInsurance: If you get coverage when you use the card for the + // given activity, this field describes it. + EmergencyInsurance string `json:"emergencyInsurance,omitempty"` + + // ExistingCustomerOnly: Whether this card is only available to existing + // customers of the issuer. + ExistingCustomerOnly bool `json:"existingCustomerOnly,omitempty"` + + // ExtendedWarranty: If you get coverage when you use the card for the + // given activity, this field describes it. + ExtendedWarranty string `json:"extendedWarranty,omitempty"` + + // FirstYearAnnualFee: The annual fee for the first year, if different + // from the ongoing fee. Optional. + FirstYearAnnualFee float64 `json:"firstYearAnnualFee,omitempty"` + + // FlightAccidentInsurance: If you get coverage when you use the card + // for the given activity, this field describes it. + FlightAccidentInsurance string `json:"flightAccidentInsurance,omitempty"` + + // ForeignCurrencyTransactionFee: Fee for each transaction involving a + // foreign currency. + ForeignCurrencyTransactionFee string `json:"foreignCurrencyTransactionFee,omitempty"` + + // FraudLiability: If you get coverage when you use the card for the + // given activity, this field describes it. + FraudLiability string `json:"fraudLiability,omitempty"` + + // GracePeriodDisplay: Text describing the grace period before finance + // charges apply. A summary field. + GracePeriodDisplay string `json:"gracePeriodDisplay,omitempty"` + + // ImageUrl: The link to the image of the card that is shown on Connect + // Commerce. A summary field. + ImageUrl string `json:"imageUrl,omitempty"` + + // InitialSetupAndProcessingFee: Fee for setting up the card. + InitialSetupAndProcessingFee string `json:"initialSetupAndProcessingFee,omitempty"` + + // IntroBalanceTransferTerms: Text describing the terms for introductory + // period balance transfers. A summary field. + IntroBalanceTransferTerms string `json:"introBalanceTransferTerms,omitempty"` + + // IntroCashAdvanceTerms: Text describing the terms for introductory + // period cash advances. A summary field. + IntroCashAdvanceTerms string `json:"introCashAdvanceTerms,omitempty"` + + // IntroPurchaseTerms: Text describing the terms for introductory period + // purchases. A summary field. + IntroPurchaseTerms string `json:"introPurchaseTerms,omitempty"` + + // Issuer: Name of card issuer. A summary field. + Issuer string `json:"issuer,omitempty"` + + // IssuerId: The Google Affiliate Network ID of the advertiser making + // this offer. + IssuerId string `json:"issuerId,omitempty"` + + // IssuerWebsite: The generic link to the issuer's site. + IssuerWebsite string `json:"issuerWebsite,omitempty"` + + // Kind: The kind for one credit card offer. A summary field. + Kind string `json:"kind,omitempty"` + + // LandingPageUrl: The link to the issuer's page for this card. A + // summary field. + LandingPageUrl string `json:"landingPageUrl,omitempty"` + + // LatePaymentFee: Text describing how much a late payment will cost, eg + // "up to $35." A summary field. + LatePaymentFee string `json:"latePaymentFee,omitempty"` + + // LuggageInsurance: If you get coverage when you use the card for the + // given activity, this field describes it. + LuggageInsurance string `json:"luggageInsurance,omitempty"` + + // MaxPurchaseRate: The highest interest rate the issuer charges on this + // card. Expressed as an absolute number, not as a percentage. + MaxPurchaseRate float64 `json:"maxPurchaseRate,omitempty"` + + // MinPurchaseRate: The lowest interest rate the issuer charges on this + // card. Expressed as an absolute number, not as a percentage. + MinPurchaseRate float64 `json:"minPurchaseRate,omitempty"` + + // MinimumFinanceCharge: Text describing how much missing the grace + // period will cost. + MinimumFinanceCharge string `json:"minimumFinanceCharge,omitempty"` + + // Network: Which network (eg Visa) the card belongs to. A summary + // field. + Network string `json:"network,omitempty"` + + // OfferId: This offer's ID. A summary field. + OfferId string `json:"offerId,omitempty"` + + // OffersImmediateCashReward: Whether a cash reward program lets you get + // cash back sooner than end of year or other longish period. + OffersImmediateCashReward bool `json:"offersImmediateCashReward,omitempty"` + + // OverLimitFee: Fee for exceeding the card's charge limit. + OverLimitFee string `json:"overLimitFee,omitempty"` + + // ProhibitedCategories: Categories in which the issuer does not wish + // the card to be displayed. A summary field. + ProhibitedCategories []string `json:"prohibitedCategories,omitempty"` + + // PurchaseRateAdditionalDetails: Text describing any additional details + // for the purchase rate. A summary field. + PurchaseRateAdditionalDetails string `json:"purchaseRateAdditionalDetails,omitempty"` + + // PurchaseRateType: Fixed or variable. + PurchaseRateType string `json:"purchaseRateType,omitempty"` + + // ReturnedPaymentFee: Text describing the fee for a payment that + // doesn't clear. A summary field. + ReturnedPaymentFee string `json:"returnedPaymentFee,omitempty"` + + // RewardPartner: The company that redeems the rewards, if different + // from the issuer. + RewardPartner string `json:"rewardPartner,omitempty"` + + // RewardUnit: For cards with rewards programs, the unit of reward. For + // example, miles, cash back, points. + RewardUnit string `json:"rewardUnit,omitempty"` + + // Rewards: For cards with rewards programs, detailed rules about how + // the program works. + Rewards []*CcOfferRewards `json:"rewards,omitempty"` + + // RewardsExpire: Whether accumulated rewards ever expire. + RewardsExpire bool `json:"rewardsExpire,omitempty"` + + // RewardsHaveBlackoutDates: For airline miles rewards, tells whether + // blackout dates apply to the miles. + RewardsHaveBlackoutDates bool `json:"rewardsHaveBlackoutDates,omitempty"` + + // StatementCopyFee: Fee for requesting a copy of your statement. + StatementCopyFee string `json:"statementCopyFee,omitempty"` + + // TrackingUrl: The link to ping to register a click on this offer. A + // summary field. + TrackingUrl string `json:"trackingUrl,omitempty"` + + // TravelInsurance: If you get coverage when you use the card for the + // given activity, this field describes it. + TravelInsurance string `json:"travelInsurance,omitempty"` + + // VariableRatesLastUpdated: When variable rates were last updated. + VariableRatesLastUpdated string `json:"variableRatesLastUpdated,omitempty"` + + // VariableRatesUpdateFrequency: How often variable rates are updated. + VariableRatesUpdateFrequency string `json:"variableRatesUpdateFrequency,omitempty"` +} + +type CcOfferBonusRewards struct { + // Amount: How many units of reward will be granted. + Amount float64 `json:"amount,omitempty"` + + // Details: The circumstances under which this rule applies, for + // example, booking a flight via Orbitz. + Details string `json:"details,omitempty"` +} + +type CcOfferDefaultFees struct { + // Category: The type of charge, for example Purchases. + Category string `json:"category,omitempty"` + + // MaxRate: The highest rate the issuer may charge for defaulting on + // debt in this category. Expressed as an absolute number, not as a + // percentage. + MaxRate float64 `json:"maxRate,omitempty"` + + // MinRate: The lowest rate the issuer may charge for defaulting on debt + // in this category. Expressed as an absolute number, not as a + // percentage. + MinRate float64 `json:"minRate,omitempty"` + + // RateType: Fixed or variable. + RateType string `json:"rateType,omitempty"` +} + +type CcOfferRewards struct { + // AdditionalDetails: Other limits, for example, if this rule only + // applies during an introductory period. + AdditionalDetails string `json:"additionalDetails,omitempty"` + + // Amount: The number of units rewarded per purchase dollar. + Amount float64 `json:"amount,omitempty"` + + // Category: The kind of purchases covered by this rule. + Category string `json:"category,omitempty"` + + // ExpirationMonths: How long rewards granted by this rule last. + ExpirationMonths float64 `json:"expirationMonths,omitempty"` + + // MaxRewardTier: The maximum purchase amount in the given category for + // this rule to apply. + MaxRewardTier float64 `json:"maxRewardTier,omitempty"` + + // MinRewardTier: The minimum purchase amount in the given category + // before this rule applies. + MinRewardTier float64 `json:"minRewardTier,omitempty"` +} + +type CcOffers struct { + // Items: The credit card offers. + Items []*CcOffer `json:"items,omitempty"` + + // Kind: The kind for a page of credit card offers. + Kind string `json:"kind,omitempty"` +} + +type Event struct { + // AdvertiserId: The ID of advertiser for this event. + AdvertiserId int64 `json:"advertiserId,omitempty,string"` + + // AdvertiserName: The name of the advertiser for this event. + AdvertiserName string `json:"advertiserName,omitempty"` + + // ChargeId: The charge ID for this event. Only returned for charge + // events. + ChargeId string `json:"chargeId,omitempty"` + + // ChargeType: Charge type of the event + // (other|slotting_fee|monthly_minimum|tier_bonus|debit|credit). Only + // returned for charge events. + ChargeType string `json:"chargeType,omitempty"` + + // CommissionableSales: Amount of money exchanged during the + // transaction. Only returned for charge and conversion events. + CommissionableSales *Money `json:"commissionableSales,omitempty"` + + // Earnings: Earnings by the publisher. + Earnings *Money `json:"earnings,omitempty"` + + // EventDate: The date-time this event was initiated as a RFC 3339 + // date-time value. + EventDate string `json:"eventDate,omitempty"` + + // Kind: The kind for one event. + Kind string `json:"kind,omitempty"` + + // MemberId: The ID of the member attached to this event. Only returned + // for conversion events. + MemberId string `json:"memberId,omitempty"` + + // ModifyDate: The date-time this event was last modified as a RFC 3339 + // date-time value. + ModifyDate string `json:"modifyDate,omitempty"` + + // NetworkFee: Fee that the advertiser paid to the Google Affiliate + // Network. + NetworkFee *Money `json:"networkFee,omitempty"` + + // OrderId: The order ID for this event. Only returned for conversion + // events. + OrderId string `json:"orderId,omitempty"` + + // Products: Products associated with the event. + Products []*EventProducts `json:"products,omitempty"` + + // PublisherFee: Fee that the advertiser paid to the publisher. + PublisherFee *Money `json:"publisherFee,omitempty"` + + // PublisherId: The ID of the publisher for this event. + PublisherId int64 `json:"publisherId,omitempty,string"` + + // PublisherName: The name of the publisher for this event. + PublisherName string `json:"publisherName,omitempty"` + + // Status: Status of the event (active|canceled). Only returned for + // charge and conversion events. + Status string `json:"status,omitempty"` + + // Type: Type of the event (action|transaction|charge). + Type string `json:"type,omitempty"` +} + +type EventProducts struct { + // CategoryId: Id of the category this product belongs to. + CategoryId string `json:"categoryId,omitempty"` + + // CategoryName: Name of the category this product belongs to. + CategoryName string `json:"categoryName,omitempty"` + + // Earnings: Amount earned by the publisher on this product. + Earnings *Money `json:"earnings,omitempty"` + + // NetworkFee: Fee that the advertiser paid to the Google Affiliate + // Network for this product. + NetworkFee *Money `json:"networkFee,omitempty"` + + // PublisherFee: Fee that the advertiser paid to the publisehr for this + // product. + PublisherFee *Money `json:"publisherFee,omitempty"` + + // Quantity: Quantity of this product bought/exchanged. + Quantity int64 `json:"quantity,omitempty,string"` + + // Sku: Sku of this product. + Sku string `json:"sku,omitempty"` + + // SkuName: Sku name of this product. + SkuName string `json:"skuName,omitempty"` + + // UnitPrice: Price per unit of this product. + UnitPrice *Money `json:"unitPrice,omitempty"` +} + +type Events struct { + // Items: The event list. + Items []*Event `json:"items,omitempty"` + + // Kind: The kind for a page of events. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The 'pageToken' to pass to the next request to get the + // next page, if there are more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Link struct { + // AdvertiserId: The advertiser id for the advertiser who owns this + // link. + AdvertiserId int64 `json:"advertiserId,omitempty,string"` + + // Authorship: Authorship + Authorship string `json:"authorship,omitempty"` + + // Availability: Availability. + Availability string `json:"availability,omitempty"` + + // ClickTrackingUrl: Tracking url for clicks. + ClickTrackingUrl string `json:"clickTrackingUrl,omitempty"` + + // CreateDate: Date that this link was created. + CreateDate string `json:"createDate,omitempty"` + + // Description: Description. + Description string `json:"description,omitempty"` + + // DestinationUrl: The destination URL for the link. + DestinationUrl string `json:"destinationUrl,omitempty"` + + // Duration: Duration + Duration string `json:"duration,omitempty"` + + // EndDate: Date that this link becomes inactive. + EndDate string `json:"endDate,omitempty"` + + // EpcNinetyDayAverage: The sum of fees paid to publishers divided by + // the total number of clicks over the past three months on this link. + // This value should be multiplied by 100 at the time of display. + EpcNinetyDayAverage *Money `json:"epcNinetyDayAverage,omitempty"` + + // EpcSevenDayAverage: The sum of fees paid to publishers divided by the + // total number of clicks over the past seven days on this link. This + // value should be multiplied by 100 at the time of display. + EpcSevenDayAverage *Money `json:"epcSevenDayAverage,omitempty"` + + // Id: The ID of this link. + Id int64 `json:"id,omitempty,string"` + + // ImageAltText: image alt text. + ImageAltText string `json:"imageAltText,omitempty"` + + // ImpressionTrackingUrl: Tracking url for impressions. + ImpressionTrackingUrl string `json:"impressionTrackingUrl,omitempty"` + + // IsActive: Flag for if this link is active. + IsActive bool `json:"isActive,omitempty"` + + // Kind: The kind for one entity. + Kind string `json:"kind,omitempty"` + + // LinkType: The link type. + LinkType string `json:"linkType,omitempty"` + + // Name: The logical name for this link. + Name string `json:"name,omitempty"` + + // PromotionType: Promotion Type + PromotionType string `json:"promotionType,omitempty"` + + // SpecialOffers: Special offers on the link. + SpecialOffers *LinkSpecialOffers `json:"specialOffers,omitempty"` + + // StartDate: Date that this link becomes active. + StartDate string `json:"startDate,omitempty"` +} + +type LinkSpecialOffers struct { + // FreeGift: Whether there is a free gift + FreeGift bool `json:"freeGift,omitempty"` + + // FreeShipping: Whether there is free shipping + FreeShipping bool `json:"freeShipping,omitempty"` + + // FreeShippingMin: Minimum purchase amount for free shipping promotion + FreeShippingMin *Money `json:"freeShippingMin,omitempty"` + + // PercentOff: Percent off on the purchase + PercentOff float64 `json:"percentOff,omitempty"` + + // PercentOffMin: Minimum purchase amount for percent off promotion + PercentOffMin *Money `json:"percentOffMin,omitempty"` + + // PriceCut: Price cut on the purchase + PriceCut *Money `json:"priceCut,omitempty"` + + // PriceCutMin: Minimum purchase amount for price cut promotion + PriceCutMin *Money `json:"priceCutMin,omitempty"` + + // PromotionCodes: List of promotion code associated with the link + PromotionCodes []string `json:"promotionCodes,omitempty"` +} + +type Links struct { + // Items: The links. + Items []*Link `json:"items,omitempty"` + + // Kind: The kind for a page of links. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The next page token. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Money struct { + // Amount: The amount of money. + Amount float64 `json:"amount,omitempty"` + + // CurrencyCode: The 3-letter code of the currency in question. + CurrencyCode string `json:"currencyCode,omitempty"` +} + +type Publisher struct { + // Classification: Classification that this publisher belongs to. See + // this link for all publisher classifications: + // http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.p + // y?hl=en&answer=107625&ctx=cb&src=cb&cbid=-k5fihzthfaik&cbrank=4 + Classification string `json:"classification,omitempty"` + + // EpcNinetyDayAverage: The sum of fees paid to this publisher divided + // by the total number of clicks over the past three months. Values are + // multiplied by 100 for display purposes. + EpcNinetyDayAverage *Money `json:"epcNinetyDayAverage,omitempty"` + + // EpcSevenDayAverage: The sum of fees paid to this publisher divided by + // the total number of clicks over the past seven days. Values are + // multiplied by 100 for display purposes. + EpcSevenDayAverage *Money `json:"epcSevenDayAverage,omitempty"` + + // Id: The ID of this publisher. + Id int64 `json:"id,omitempty,string"` + + // Item: The requested publisher. + Item *Publisher `json:"item,omitempty"` + + // JoinDate: Date that this publisher was approved as a Google Affiliate + // Network publisher. + JoinDate string `json:"joinDate,omitempty"` + + // Kind: The kind for a publisher. + Kind string `json:"kind,omitempty"` + + // Name: The name of this publisher. + Name string `json:"name,omitempty"` + + // PayoutRank: A rank based on commissions paid to this publisher over + // the past 90 days. A number between 1 and 4 where 4 means the top + // quartile (most money paid) and 1 means the bottom quartile (least + // money paid). + PayoutRank string `json:"payoutRank,omitempty"` + + // Sites: Websites that this publisher uses to advertise. + Sites []string `json:"sites,omitempty"` + + // Status: The status of the requesting advertiser's relationship with + // this publisher. + Status string `json:"status,omitempty"` +} + +type Publishers struct { + // Items: The entity list. + Items []*Publisher `json:"items,omitempty"` + + // Kind: The kind for a page of entities. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The 'pageToken' to pass to the next request to get the + // next page, if there are more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Report struct { + // Column_names: The column names for the report + Column_names []string `json:"column_names,omitempty"` + + // End_date: The end of the date range for this report, exclusive. + End_date string `json:"end_date,omitempty"` + + // Kind: The kind for a report. + Kind string `json:"kind,omitempty"` + + // Matching_row_count: The number of matching rows before paging is + // applied. + Matching_row_count int64 `json:"matching_row_count,omitempty,string"` + + // Rows: The rows of data for the report + Rows [][]interface{} `json:"rows,omitempty"` + + // Start_date: The start of the date range for this report, inclusive. + Start_date string `json:"start_date,omitempty"` + + // Totals_rows: The totals rows for the report + Totals_rows [][]interface{} `json:"totals_rows,omitempty"` + + // Type: The report type. + Type string `json:"type,omitempty"` +} + +// method id "gan.advertisers.get": + +type AdvertisersGetCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// Get: Retrieves data about a single advertiser if that the requesting +// advertiser/publisher has access to it. Only publishers can lookup +// advertisers. Advertisers can request information about themselves by +// omitting the advertiserId query parameter. +func (r *AdvertisersService) Get(role string, roleId string) *AdvertisersGetCall { + c := &AdvertisersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// AdvertiserId sets the optional parameter "advertiserId": The ID of +// the advertiser to look up. +func (c *AdvertisersGetCall) AdvertiserId(advertiserId string) *AdvertisersGetCall { + c.opt_["advertiserId"] = advertiserId + return c +} + +func (c *AdvertisersGetCall) Do() (*Advertiser, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiserId"]; ok { + params.Set("advertiserId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/advertiser") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Advertiser) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves data about a single advertiser if that the requesting advertiser/publisher has access to it. Only publishers can lookup advertisers. Advertisers can request information about themselves by omitting the advertiserId query parameter.", + // "httpMethod": "GET", + // "id": "gan.advertisers.get", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "advertiserId": { + // "description": "The ID of the advertiser to look up. Optional.", + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/advertiser", + // "response": { + // "$ref": "Advertiser" + // } + // } + +} + +// method id "gan.advertisers.list": + +type AdvertisersListCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// List: Retrieves data about all advertisers that the requesting +// advertiser/publisher has access to. +func (r *AdvertisersService) List(role string, roleId string) *AdvertisersListCall { + c := &AdvertisersListCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// AdvertiserCategory sets the optional parameter "advertiserCategory": +// Caret(^) delimted list of advertiser categories. Valid categories are +// defined here: +// http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.p +// y?hl=en&answer=107581. Filters out all advertisers not in one of the +// given advertiser categories. +func (c *AdvertisersListCall) AdvertiserCategory(advertiserCategory string) *AdvertisersListCall { + c.opt_["advertiserCategory"] = advertiserCategory + return c +} + +// MaxResults sets the optional parameter "maxResults": Max number of +// items to return in this page. Defaults to 20. +func (c *AdvertisersListCall) MaxResults(maxResults int64) *AdvertisersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MinNinetyDayEpc sets the optional parameter "minNinetyDayEpc": +// Filters out all advertisers that have a ninety day EPC average lower +// than the given value (inclusive). Min value: 0.0. +func (c *AdvertisersListCall) MinNinetyDayEpc(minNinetyDayEpc float64) *AdvertisersListCall { + c.opt_["minNinetyDayEpc"] = minNinetyDayEpc + return c +} + +// MinPayoutRank sets the optional parameter "minPayoutRank": A value +// between 1 and 4, where 1 represents the quartile of advertisers with +// the lowest ranks and 4 represents the quartile of advertisers with +// the highest ranks. Filters out all advertisers with a lower rank than +// the given quartile. For example if a 2 was given only advertisers +// with a payout rank of 25 or higher would be included. +func (c *AdvertisersListCall) MinPayoutRank(minPayoutRank int64) *AdvertisersListCall { + c.opt_["minPayoutRank"] = minPayoutRank + return c +} + +// MinSevenDayEpc sets the optional parameter "minSevenDayEpc": Filters +// out all advertisers that have a seven day EPC average lower than the +// given value (inclusive). Min value: 0.0. +func (c *AdvertisersListCall) MinSevenDayEpc(minSevenDayEpc float64) *AdvertisersListCall { + c.opt_["minSevenDayEpc"] = minSevenDayEpc + return c +} + +// PageToken sets the optional parameter "pageToken": The value of +// 'nextPageToken' from the previous page. +func (c *AdvertisersListCall) PageToken(pageToken string) *AdvertisersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// RelationshipStatus sets the optional parameter "relationshipStatus": +// Filters out all advertisers for which do not have the given +// relationship status with the requesting publisher. +func (c *AdvertisersListCall) RelationshipStatus(relationshipStatus string) *AdvertisersListCall { + c.opt_["relationshipStatus"] = relationshipStatus + return c +} + +func (c *AdvertisersListCall) Do() (*Advertisers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiserCategory"]; ok { + params.Set("advertiserCategory", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minNinetyDayEpc"]; ok { + params.Set("minNinetyDayEpc", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minPayoutRank"]; ok { + params.Set("minPayoutRank", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minSevenDayEpc"]; ok { + params.Set("minSevenDayEpc", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["relationshipStatus"]; ok { + params.Set("relationshipStatus", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/advertisers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Advertisers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves data about all advertisers that the requesting advertiser/publisher has access to.", + // "httpMethod": "GET", + // "id": "gan.advertisers.list", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "advertiserCategory": { + // "description": "Caret(^) delimted list of advertiser categories. Valid categories are defined here: http://www.google.com/support/affiliatenetwork/advertiser/bin/answer.py?hl=en\u0026answer=107581. Filters out all advertisers not in one of the given advertiser categories. Optional.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Max number of items to return in this page. Optional. Defaults to 20.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "minNinetyDayEpc": { + // "description": "Filters out all advertisers that have a ninety day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "minPayoutRank": { + // "description": "A value between 1 and 4, where 1 represents the quartile of advertisers with the lowest ranks and 4 represents the quartile of advertisers with the highest ranks. Filters out all advertisers with a lower rank than the given quartile. For example if a 2 was given only advertisers with a payout rank of 25 or higher would be included. Optional.", + // "format": "int32", + // "location": "query", + // "maximum": "4", + // "minimum": "1", + // "type": "integer" + // }, + // "minSevenDayEpc": { + // "description": "Filters out all advertisers that have a seven day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "pageToken": { + // "description": "The value of 'nextPageToken' from the previous page. Optional.", + // "location": "query", + // "type": "string" + // }, + // "relationshipStatus": { + // "description": "Filters out all advertisers for which do not have the given relationship status with the requesting publisher.", + // "enum": [ + // "approved", + // "available", + // "deactivated", + // "declined", + // "pending" + // ], + // "enumDescriptions": [ + // "An advertiser that has approved your application.", + // "An advertiser program that's accepting new publishers.", + // "Deactivated means either the advertiser has removed you from their program, or it could also mean that you chose to remove yourself from the advertiser's program.", + // "An advertiser that did not approve your application.", + // "An advertiser program that you've already applied to, but they haven't yet decided to approve or decline your application." + // ], + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/advertisers", + // "response": { + // "$ref": "Advertisers" + // } + // } + +} + +// method id "gan.ccOffers.list": + +type CcOffersListCall struct { + s *Service + publisher string + opt_ map[string]interface{} +} + +// List: Retrieves credit card offers for the given publisher. +func (r *CcOffersService) List(publisher string) *CcOffersListCall { + c := &CcOffersListCall{s: r.s, opt_: make(map[string]interface{})} + c.publisher = publisher + return c +} + +// Advertiser sets the optional parameter "advertiser": The advertiser +// ID of a card issuer whose offers to include. Optional, may be +// repeated. +func (c *CcOffersListCall) Advertiser(advertiser string) *CcOffersListCall { + c.opt_["advertiser"] = advertiser + return c +} + +// Projection sets the optional parameter "projection": The set of +// fields to return. +func (c *CcOffersListCall) Projection(projection string) *CcOffersListCall { + c.opt_["projection"] = projection + return c +} + +func (c *CcOffersListCall) Do() (*CcOffers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiser"]; ok { + params.Set("advertiser", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "publishers/{publisher}/ccOffers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{publisher}", url.QueryEscape(c.publisher), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CcOffers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves credit card offers for the given publisher.", + // "httpMethod": "GET", + // "id": "gan.ccOffers.list", + // "parameterOrder": [ + // "publisher" + // ], + // "parameters": { + // "advertiser": { + // "description": "The advertiser ID of a card issuer whose offers to include. Optional, may be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "projection": { + // "description": "The set of fields to return.", + // "enum": [ + // "full", + // "summary" + // ], + // "enumDescriptions": [ + // "Include all offer fields. This is the default.", + // "Include only the basic fields needed to display an offer." + // ], + // "location": "query", + // "type": "string" + // }, + // "publisher": { + // "description": "The ID of the publisher in question.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "publishers/{publisher}/ccOffers", + // "response": { + // "$ref": "CcOffers" + // } + // } + +} + +// method id "gan.events.list": + +type EventsListCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// List: Retrieves event data for a given advertiser/publisher. +func (r *EventsService) List(role string, roleId string) *EventsListCall { + c := &EventsListCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// AdvertiserId sets the optional parameter "advertiserId": Caret(^) +// delimited list of advertiser IDs. Filters out all events that do not +// reference one of the given advertiser IDs. Only used when under +// publishers role. +func (c *EventsListCall) AdvertiserId(advertiserId string) *EventsListCall { + c.opt_["advertiserId"] = advertiserId + return c +} + +// ChargeType sets the optional parameter "chargeType": Filters out all +// charge events that are not of the given charge type. Valid values: +// 'other', 'slotting_fee', 'monthly_minimum', 'tier_bonus', 'credit', +// 'debit'. +func (c *EventsListCall) ChargeType(chargeType string) *EventsListCall { + c.opt_["chargeType"] = chargeType + return c +} + +// EventDateMax sets the optional parameter "eventDateMax": Filters out +// all events later than given date. Defaults to 24 hours after +// eventMin. +func (c *EventsListCall) EventDateMax(eventDateMax string) *EventsListCall { + c.opt_["eventDateMax"] = eventDateMax + return c +} + +// EventDateMin sets the optional parameter "eventDateMin": Filters out +// all events earlier than given date. Defaults to 24 hours from +// current date/time. +func (c *EventsListCall) EventDateMin(eventDateMin string) *EventsListCall { + c.opt_["eventDateMin"] = eventDateMin + return c +} + +// LinkId sets the optional parameter "linkId": Caret(^) delimited list +// of link IDs. Filters out all events that do not reference one of the +// given link IDs. +func (c *EventsListCall) LinkId(linkId string) *EventsListCall { + c.opt_["linkId"] = linkId + return c +} + +// MaxResults sets the optional parameter "maxResults": Max number of +// offers to return in this page. Defaults to 20. +func (c *EventsListCall) MaxResults(maxResults int64) *EventsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MemberId sets the optional parameter "memberId": Caret(^) delimited +// list of member IDs. Filters out all events that do not reference one +// of the given member IDs. +func (c *EventsListCall) MemberId(memberId string) *EventsListCall { + c.opt_["memberId"] = memberId + return c +} + +// ModifyDateMax sets the optional parameter "modifyDateMax": Filters +// out all events modified later than given date. Defaults to 24 hours +// after modifyDateMin, if modifyDateMin is explicitly set. +func (c *EventsListCall) ModifyDateMax(modifyDateMax string) *EventsListCall { + c.opt_["modifyDateMax"] = modifyDateMax + return c +} + +// ModifyDateMin sets the optional parameter "modifyDateMin": Filters +// out all events modified earlier than given date. Defaults to 24 +// hours before the current modifyDateMax, if modifyDateMax is +// explicitly set. +func (c *EventsListCall) ModifyDateMin(modifyDateMin string) *EventsListCall { + c.opt_["modifyDateMin"] = modifyDateMin + return c +} + +// OrderId sets the optional parameter "orderId": Caret(^) delimited +// list of order IDs. Filters out all events that do not reference one +// of the given order IDs. +func (c *EventsListCall) OrderId(orderId string) *EventsListCall { + c.opt_["orderId"] = orderId + return c +} + +// PageToken sets the optional parameter "pageToken": The value of +// 'nextPageToken' from the previous page. +func (c *EventsListCall) PageToken(pageToken string) *EventsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProductCategory sets the optional parameter "productCategory": +// Caret(^) delimited list of product categories. Filters out all events +// that do not reference a product in one of the given product +// categories. +func (c *EventsListCall) ProductCategory(productCategory string) *EventsListCall { + c.opt_["productCategory"] = productCategory + return c +} + +// PublisherId sets the optional parameter "publisherId": Caret(^) +// delimited list of publisher IDs. Filters out all events that do not +// reference one of the given publishers IDs. Only used when under +// advertiser role. +func (c *EventsListCall) PublisherId(publisherId string) *EventsListCall { + c.opt_["publisherId"] = publisherId + return c +} + +// Sku sets the optional parameter "sku": Caret(^) delimited list of +// SKUs. Filters out all events that do not reference one of the given +// SKU. +func (c *EventsListCall) Sku(sku string) *EventsListCall { + c.opt_["sku"] = sku + return c +} + +// Status sets the optional parameter "status": Filters out all events +// that do not have the given status. Valid values: 'active', +// 'canceled'. +func (c *EventsListCall) Status(status string) *EventsListCall { + c.opt_["status"] = status + return c +} + +// Type sets the optional parameter "type": Filters out all events that +// are not of the given type. Valid values: 'action', 'transaction', +// 'charge'. +func (c *EventsListCall) Type(type_ string) *EventsListCall { + c.opt_["type"] = type_ + return c +} + +func (c *EventsListCall) Do() (*Events, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiserId"]; ok { + params.Set("advertiserId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["chargeType"]; ok { + params.Set("chargeType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventDateMax"]; ok { + params.Set("eventDateMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventDateMin"]; ok { + params.Set("eventDateMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["linkId"]; ok { + params.Set("linkId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["memberId"]; ok { + params.Set("memberId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifyDateMax"]; ok { + params.Set("modifyDateMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifyDateMin"]; ok { + params.Set("modifyDateMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderId"]; ok { + params.Set("orderId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["productCategory"]; ok { + params.Set("productCategory", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["publisherId"]; ok { + params.Set("publisherId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sku"]; ok { + params.Set("sku", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/events") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Events) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves event data for a given advertiser/publisher.", + // "httpMethod": "GET", + // "id": "gan.events.list", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "advertiserId": { + // "description": "Caret(^) delimited list of advertiser IDs. Filters out all events that do not reference one of the given advertiser IDs. Only used when under publishers role. Optional.", + // "location": "query", + // "type": "string" + // }, + // "chargeType": { + // "description": "Filters out all charge events that are not of the given charge type. Valid values: 'other', 'slotting_fee', 'monthly_minimum', 'tier_bonus', 'credit', 'debit'. Optional.", + // "enum": [ + // "credit", + // "debit", + // "monthly_minimum", + // "other", + // "slotting_fee", + // "tier_bonus" + // ], + // "enumDescriptions": [ + // "A credit increases the publisher's payout amount and decreases the advertiser's invoice amount.", + // "A debit reduces the publisher's payout and increases the advertiser's invoice amount.", + // "A payment made to Google by an advertiser as a minimum monthly network fee.", + // "Catch all. Default if unset", + // "A one time payment made from an advertiser to a publisher.", + // "A payment from an advertiser to a publisher for the publisher maintaining a high tier level" + // ], + // "location": "query", + // "type": "string" + // }, + // "eventDateMax": { + // "description": "Filters out all events later than given date. Optional. Defaults to 24 hours after eventMin.", + // "location": "query", + // "type": "string" + // }, + // "eventDateMin": { + // "description": "Filters out all events earlier than given date. Optional. Defaults to 24 hours from current date/time.", + // "location": "query", + // "type": "string" + // }, + // "linkId": { + // "description": "Caret(^) delimited list of link IDs. Filters out all events that do not reference one of the given link IDs. Optional.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Max number of offers to return in this page. Optional. Defaults to 20.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "memberId": { + // "description": "Caret(^) delimited list of member IDs. Filters out all events that do not reference one of the given member IDs. Optional.", + // "location": "query", + // "type": "string" + // }, + // "modifyDateMax": { + // "description": "Filters out all events modified later than given date. Optional. Defaults to 24 hours after modifyDateMin, if modifyDateMin is explicitly set.", + // "location": "query", + // "type": "string" + // }, + // "modifyDateMin": { + // "description": "Filters out all events modified earlier than given date. Optional. Defaults to 24 hours before the current modifyDateMax, if modifyDateMax is explicitly set.", + // "location": "query", + // "type": "string" + // }, + // "orderId": { + // "description": "Caret(^) delimited list of order IDs. Filters out all events that do not reference one of the given order IDs. Optional.", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The value of 'nextPageToken' from the previous page. Optional.", + // "location": "query", + // "type": "string" + // }, + // "productCategory": { + // "description": "Caret(^) delimited list of product categories. Filters out all events that do not reference a product in one of the given product categories. Optional.", + // "location": "query", + // "type": "string" + // }, + // "publisherId": { + // "description": "Caret(^) delimited list of publisher IDs. Filters out all events that do not reference one of the given publishers IDs. Only used when under advertiser role. Optional.", + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sku": { + // "description": "Caret(^) delimited list of SKUs. Filters out all events that do not reference one of the given SKU. Optional.", + // "location": "query", + // "type": "string" + // }, + // "status": { + // "description": "Filters out all events that do not have the given status. Valid values: 'active', 'canceled'. Optional.", + // "enum": [ + // "active", + // "canceled" + // ], + // "enumDescriptions": [ + // "Event is currently active.", + // "Event is currently canceled." + // ], + // "location": "query", + // "type": "string" + // }, + // "type": { + // "description": "Filters out all events that are not of the given type. Valid values: 'action', 'transaction', 'charge'. Optional.", + // "enum": [ + // "action", + // "charge", + // "transaction" + // ], + // "enumDescriptions": [ + // "The completion of an application, sign-up, or other process. For example, an action occurs if a user clicks an ad for a credit card and completes an application for that card.", + // "A charge event is typically a payment between an advertiser, publisher or Google.", + // "A conversion event, typically an e-commerce transaction. Some advertisers use a transaction to record other types of events, such as magazine subscriptions." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/events", + // "response": { + // "$ref": "Events" + // } + // } + +} + +// method id "gan.links.get": + +type LinksGetCall struct { + s *Service + role string + roleId string + linkId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves data about a single link if the requesting +// advertiser/publisher has access to it. Advertisers can look up their +// own links. Publishers can look up visible links or links belonging to +// advertisers they are in a relationship with. +func (r *LinksService) Get(role string, roleId string, linkId int64) *LinksGetCall { + c := &LinksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + c.linkId = linkId + return c +} + +func (c *LinksGetCall) Do() (*Link, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/link/{linkId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{linkId}", strconv.FormatInt(c.linkId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Link) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves data about a single link if the requesting advertiser/publisher has access to it. Advertisers can look up their own links. Publishers can look up visible links or links belonging to advertisers they are in a relationship with.", + // "httpMethod": "GET", + // "id": "gan.links.get", + // "parameterOrder": [ + // "role", + // "roleId", + // "linkId" + // ], + // "parameters": { + // "linkId": { + // "description": "The ID of the link to look up.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/link/{linkId}", + // "response": { + // "$ref": "Link" + // } + // } + +} + +// method id "gan.links.insert": + +type LinksInsertCall struct { + s *Service + role string + roleId string + link *Link + opt_ map[string]interface{} +} + +// Insert: Inserts a new link. +func (r *LinksService) Insert(role string, roleId string, link *Link) *LinksInsertCall { + c := &LinksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + c.link = link + return c +} + +func (c *LinksInsertCall) Do() (*Link, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.link) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/link") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Link) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new link.", + // "httpMethod": "POST", + // "id": "gan.links.insert", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/link", + // "request": { + // "$ref": "Link" + // }, + // "response": { + // "$ref": "Link" + // } + // } + +} + +// method id "gan.links.list": + +type LinksListCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// List: Retrieves all links that match the query parameters. +func (r *LinksService) List(role string, roleId string) *LinksListCall { + c := &LinksListCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// AdvertiserId sets the optional parameter "advertiserId": Limits the +// resulting links to the ones belonging to the listed advertisers. +func (c *LinksListCall) AdvertiserId(advertiserId int64) *LinksListCall { + c.opt_["advertiserId"] = advertiserId + return c +} + +// AssetSize sets the optional parameter "assetSize": The size of the +// given asset. +func (c *LinksListCall) AssetSize(assetSize string) *LinksListCall { + c.opt_["assetSize"] = assetSize + return c +} + +// Authorship sets the optional parameter "authorship": The role of the +// author of the link. +func (c *LinksListCall) Authorship(authorship string) *LinksListCall { + c.opt_["authorship"] = authorship + return c +} + +// CreateDateMax sets the optional parameter "createDateMax": The end of +// the create date range. +func (c *LinksListCall) CreateDateMax(createDateMax string) *LinksListCall { + c.opt_["createDateMax"] = createDateMax + return c +} + +// CreateDateMin sets the optional parameter "createDateMin": The +// beginning of the create date range. +func (c *LinksListCall) CreateDateMin(createDateMin string) *LinksListCall { + c.opt_["createDateMin"] = createDateMin + return c +} + +// LinkType sets the optional parameter "linkType": The type of the +// link. +func (c *LinksListCall) LinkType(linkType string) *LinksListCall { + c.opt_["linkType"] = linkType + return c +} + +// MaxResults sets the optional parameter "maxResults": Max number of +// items to return in this page. Defaults to 20. +func (c *LinksListCall) MaxResults(maxResults int64) *LinksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The value of +// 'nextPageToken' from the previous page. +func (c *LinksListCall) PageToken(pageToken string) *LinksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// PromotionType sets the optional parameter "promotionType": The +// promotion type. +func (c *LinksListCall) PromotionType(promotionType string) *LinksListCall { + c.opt_["promotionType"] = promotionType + return c +} + +// RelationshipStatus sets the optional parameter "relationshipStatus": +// The status of the relationship. +func (c *LinksListCall) RelationshipStatus(relationshipStatus string) *LinksListCall { + c.opt_["relationshipStatus"] = relationshipStatus + return c +} + +// SearchText sets the optional parameter "searchText": Field for full +// text search across title and merchandising text, supports link id +// search. +func (c *LinksListCall) SearchText(searchText string) *LinksListCall { + c.opt_["searchText"] = searchText + return c +} + +// StartDateMax sets the optional parameter "startDateMax": The end of +// the start date range. +func (c *LinksListCall) StartDateMax(startDateMax string) *LinksListCall { + c.opt_["startDateMax"] = startDateMax + return c +} + +// StartDateMin sets the optional parameter "startDateMin": The +// beginning of the start date range. +func (c *LinksListCall) StartDateMin(startDateMin string) *LinksListCall { + c.opt_["startDateMin"] = startDateMin + return c +} + +func (c *LinksListCall) Do() (*Links, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiserId"]; ok { + params.Set("advertiserId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["assetSize"]; ok { + params.Set("assetSize", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["authorship"]; ok { + params.Set("authorship", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createDateMax"]; ok { + params.Set("createDateMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createDateMin"]; ok { + params.Set("createDateMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["linkType"]; ok { + params.Set("linkType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["promotionType"]; ok { + params.Set("promotionType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["relationshipStatus"]; ok { + params.Set("relationshipStatus", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["searchText"]; ok { + params.Set("searchText", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDateMax"]; ok { + params.Set("startDateMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDateMin"]; ok { + params.Set("startDateMin", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/links") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Links) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves all links that match the query parameters.", + // "httpMethod": "GET", + // "id": "gan.links.list", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "advertiserId": { + // "description": "Limits the resulting links to the ones belonging to the listed advertisers.", + // "format": "int64", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "assetSize": { + // "description": "The size of the given asset.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "authorship": { + // "description": "The role of the author of the link.", + // "enum": [ + // "advertiser", + // "publisher" + // ], + // "enumDescriptions": [ + // "", + // "" + // ], + // "location": "query", + // "type": "string" + // }, + // "createDateMax": { + // "description": "The end of the create date range.", + // "location": "query", + // "type": "string" + // }, + // "createDateMin": { + // "description": "The beginning of the create date range.", + // "location": "query", + // "type": "string" + // }, + // "linkType": { + // "description": "The type of the link.", + // "enum": [ + // "banner", + // "text" + // ], + // "enumDescriptions": [ + // "", + // "" + // ], + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Max number of items to return in this page. Optional. Defaults to 20.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The value of 'nextPageToken' from the previous page. Optional.", + // "location": "query", + // "type": "string" + // }, + // "promotionType": { + // "description": "The promotion type.", + // "enum": [ + // "coupon", + // "free_gift", + // "free_shipping", + // "percent_off", + // "price_cut" + // ], + // "enumDescriptions": [ + // "", + // "", + // "", + // "", + // "" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "relationshipStatus": { + // "description": "The status of the relationship.", + // "enum": [ + // "approved", + // "available" + // ], + // "enumDescriptions": [ + // "", + // "" + // ], + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "searchText": { + // "description": "Field for full text search across title and merchandising text, supports link id search.", + // "location": "query", + // "type": "string" + // }, + // "startDateMax": { + // "description": "The end of the start date range.", + // "location": "query", + // "type": "string" + // }, + // "startDateMin": { + // "description": "The beginning of the start date range.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/links", + // "response": { + // "$ref": "Links" + // } + // } + +} + +// method id "gan.publishers.get": + +type PublishersGetCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// Get: Retrieves data about a single advertiser if that the requesting +// advertiser/publisher has access to it. Only advertisers can look up +// publishers. Publishers can request information about themselves by +// omitting the publisherId query parameter. +func (r *PublishersService) Get(role string, roleId string) *PublishersGetCall { + c := &PublishersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// PublisherId sets the optional parameter "publisherId": The ID of the +// publisher to look up. +func (c *PublishersGetCall) PublisherId(publisherId string) *PublishersGetCall { + c.opt_["publisherId"] = publisherId + return c +} + +func (c *PublishersGetCall) Do() (*Publisher, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["publisherId"]; ok { + params.Set("publisherId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/publisher") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Publisher) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves data about a single advertiser if that the requesting advertiser/publisher has access to it. Only advertisers can look up publishers. Publishers can request information about themselves by omitting the publisherId query parameter.", + // "httpMethod": "GET", + // "id": "gan.publishers.get", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "publisherId": { + // "description": "The ID of the publisher to look up. Optional.", + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/publisher", + // "response": { + // "$ref": "Publisher" + // } + // } + +} + +// method id "gan.publishers.list": + +type PublishersListCall struct { + s *Service + role string + roleId string + opt_ map[string]interface{} +} + +// List: Retrieves data about all publishers that the requesting +// advertiser/publisher has access to. +func (r *PublishersService) List(role string, roleId string) *PublishersListCall { + c := &PublishersListCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + return c +} + +// MaxResults sets the optional parameter "maxResults": Max number of +// items to return in this page. Defaults to 20. +func (c *PublishersListCall) MaxResults(maxResults int64) *PublishersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MinNinetyDayEpc sets the optional parameter "minNinetyDayEpc": +// Filters out all publishers that have a ninety day EPC average lower +// than the given value (inclusive). Min value: 0.0. +func (c *PublishersListCall) MinNinetyDayEpc(minNinetyDayEpc float64) *PublishersListCall { + c.opt_["minNinetyDayEpc"] = minNinetyDayEpc + return c +} + +// MinPayoutRank sets the optional parameter "minPayoutRank": A value +// between 1 and 4, where 1 represents the quartile of publishers with +// the lowest ranks and 4 represents the quartile of publishers with the +// highest ranks. Filters out all publishers with a lower rank than the +// given quartile. For example if a 2 was given only publishers with a +// payout rank of 25 or higher would be included. +func (c *PublishersListCall) MinPayoutRank(minPayoutRank int64) *PublishersListCall { + c.opt_["minPayoutRank"] = minPayoutRank + return c +} + +// MinSevenDayEpc sets the optional parameter "minSevenDayEpc": Filters +// out all publishers that have a seven day EPC average lower than the +// given value (inclusive). Min value 0.0. +func (c *PublishersListCall) MinSevenDayEpc(minSevenDayEpc float64) *PublishersListCall { + c.opt_["minSevenDayEpc"] = minSevenDayEpc + return c +} + +// PageToken sets the optional parameter "pageToken": The value of +// 'nextPageToken' from the previous page. +func (c *PublishersListCall) PageToken(pageToken string) *PublishersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// PublisherCategory sets the optional parameter "publisherCategory": +// Caret(^) delimted list of publisher categories. Valid categories: +// (unclassified|community_and_content|shopping_and_promotion|loyalty_and +// _rewards|network|search_specialist|comparison_shopping|email). +// Filters out all publishers not in one of the given advertiser +// categories. +func (c *PublishersListCall) PublisherCategory(publisherCategory string) *PublishersListCall { + c.opt_["publisherCategory"] = publisherCategory + return c +} + +// RelationshipStatus sets the optional parameter "relationshipStatus": +// Filters out all publishers for which do not have the given +// relationship status with the requesting publisher. +func (c *PublishersListCall) RelationshipStatus(relationshipStatus string) *PublishersListCall { + c.opt_["relationshipStatus"] = relationshipStatus + return c +} + +func (c *PublishersListCall) Do() (*Publishers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minNinetyDayEpc"]; ok { + params.Set("minNinetyDayEpc", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minPayoutRank"]; ok { + params.Set("minPayoutRank", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["minSevenDayEpc"]; ok { + params.Set("minSevenDayEpc", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["publisherCategory"]; ok { + params.Set("publisherCategory", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["relationshipStatus"]; ok { + params.Set("relationshipStatus", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/publishers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Publishers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves data about all publishers that the requesting advertiser/publisher has access to.", + // "httpMethod": "GET", + // "id": "gan.publishers.list", + // "parameterOrder": [ + // "role", + // "roleId" + // ], + // "parameters": { + // "maxResults": { + // "description": "Max number of items to return in this page. Optional. Defaults to 20.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "0", + // "type": "integer" + // }, + // "minNinetyDayEpc": { + // "description": "Filters out all publishers that have a ninety day EPC average lower than the given value (inclusive). Min value: 0.0. Optional.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "minPayoutRank": { + // "description": "A value between 1 and 4, where 1 represents the quartile of publishers with the lowest ranks and 4 represents the quartile of publishers with the highest ranks. Filters out all publishers with a lower rank than the given quartile. For example if a 2 was given only publishers with a payout rank of 25 or higher would be included. Optional.", + // "format": "int32", + // "location": "query", + // "maximum": "4", + // "minimum": "1", + // "type": "integer" + // }, + // "minSevenDayEpc": { + // "description": "Filters out all publishers that have a seven day EPC average lower than the given value (inclusive). Min value 0.0. Optional.", + // "format": "double", + // "location": "query", + // "type": "number" + // }, + // "pageToken": { + // "description": "The value of 'nextPageToken' from the previous page. Optional.", + // "location": "query", + // "type": "string" + // }, + // "publisherCategory": { + // "description": "Caret(^) delimted list of publisher categories. Valid categories: (unclassified|community_and_content|shopping_and_promotion|loyalty_and_rewards|network|search_specialist|comparison_shopping|email). Filters out all publishers not in one of the given advertiser categories. Optional.", + // "location": "query", + // "type": "string" + // }, + // "relationshipStatus": { + // "description": "Filters out all publishers for which do not have the given relationship status with the requesting publisher.", + // "enum": [ + // "approved", + // "available", + // "deactivated", + // "declined", + // "pending" + // ], + // "enumDescriptions": [ + // "Publishers you've approved to your program.", + // "Publishers available for you to recruit.", + // "A publisher that you terminated from your program. Publishers also have the ability to remove themselves from your program.", + // "A publisher that you did not approve to your program.", + // "Publishers that have applied to your program. We recommend reviewing and deciding on pending publishers on a weekly basis." + // ], + // "location": "query", + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/publishers", + // "response": { + // "$ref": "Publishers" + // } + // } + +} + +// method id "gan.reports.get": + +type ReportsGetCall struct { + s *Service + role string + roleId string + reportType string + opt_ map[string]interface{} +} + +// Get: Retrieves a report of the specified type. +func (r *ReportsService) Get(role string, roleId string, reportType string) *ReportsGetCall { + c := &ReportsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.role = role + c.roleId = roleId + c.reportType = reportType + return c +} + +// AdvertiserId sets the optional parameter "advertiserId": The IDs of +// the advertisers to look up, if applicable. +func (c *ReportsGetCall) AdvertiserId(advertiserId string) *ReportsGetCall { + c.opt_["advertiserId"] = advertiserId + return c +} + +// CalculateTotals sets the optional parameter "calculateTotals": +// Whether or not to calculate totals rows. +func (c *ReportsGetCall) CalculateTotals(calculateTotals bool) *ReportsGetCall { + c.opt_["calculateTotals"] = calculateTotals + return c +} + +// EndDate sets the optional parameter "endDate": The end date +// (exclusive), in RFC 3339 format, for the report data to be returned. +// Defaults to one day after startDate, if that is given, or today. +func (c *ReportsGetCall) EndDate(endDate string) *ReportsGetCall { + c.opt_["endDate"] = endDate + return c +} + +// EventType sets the optional parameter "eventType": Filters out all +// events that are not of the given type. Valid values: 'action', +// 'transaction', or 'charge'. +func (c *ReportsGetCall) EventType(eventType string) *ReportsGetCall { + c.opt_["eventType"] = eventType + return c +} + +// LinkId sets the optional parameter "linkId": Filters to capture one +// of given link IDs. +func (c *ReportsGetCall) LinkId(linkId string) *ReportsGetCall { + c.opt_["linkId"] = linkId + return c +} + +// MaxResults sets the optional parameter "maxResults": Max number of +// items to return in this page. Defaults to return all results. +func (c *ReportsGetCall) MaxResults(maxResults int64) *ReportsGetCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderId sets the optional parameter "orderId": Filters to capture one +// of the given order IDs. +func (c *ReportsGetCall) OrderId(orderId string) *ReportsGetCall { + c.opt_["orderId"] = orderId + return c +} + +// PublisherId sets the optional parameter "publisherId": The IDs of the +// publishers to look up, if applicable. +func (c *ReportsGetCall) PublisherId(publisherId string) *ReportsGetCall { + c.opt_["publisherId"] = publisherId + return c +} + +// StartDate sets the optional parameter "startDate": The start date +// (inclusive), in RFC 3339 format, for the report data to be returned. +// Defaults to one day before endDate, if that is given, or yesterday. +func (c *ReportsGetCall) StartDate(startDate string) *ReportsGetCall { + c.opt_["startDate"] = startDate + return c +} + +// StartIndex sets the optional parameter "startIndex": Offset on which +// to return results when paging. +func (c *ReportsGetCall) StartIndex(startIndex int64) *ReportsGetCall { + c.opt_["startIndex"] = startIndex + return c +} + +// Status sets the optional parameter "status": Filters out all events +// that do not have the given status. Valid values: 'active', +// 'canceled', or 'invalid'. +func (c *ReportsGetCall) Status(status string) *ReportsGetCall { + c.opt_["status"] = status + return c +} + +func (c *ReportsGetCall) Do() (*Report, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["advertiserId"]; ok { + params.Set("advertiserId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["calculateTotals"]; ok { + params.Set("calculateTotals", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["eventType"]; ok { + params.Set("eventType", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["linkId"]; ok { + params.Set("linkId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderId"]; ok { + params.Set("orderId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["publisherId"]; ok { + params.Set("publisherId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["status"]; ok { + params.Set("status", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{role}/{roleId}/report/{reportType}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{role}", url.QueryEscape(c.role), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{roleId}", url.QueryEscape(c.roleId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{reportType}", url.QueryEscape(c.reportType), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Report) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a report of the specified type.", + // "httpMethod": "GET", + // "id": "gan.reports.get", + // "parameterOrder": [ + // "role", + // "roleId", + // "reportType" + // ], + // "parameters": { + // "advertiserId": { + // "description": "The IDs of the advertisers to look up, if applicable.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "calculateTotals": { + // "description": "Whether or not to calculate totals rows. Optional.", + // "location": "query", + // "type": "boolean" + // }, + // "endDate": { + // "description": "The end date (exclusive), in RFC 3339 format, for the report data to be returned. Defaults to one day after startDate, if that is given, or today. Optional.", + // "location": "query", + // "type": "string" + // }, + // "eventType": { + // "description": "Filters out all events that are not of the given type. Valid values: 'action', 'transaction', or 'charge'. Optional.", + // "enum": [ + // "action", + // "charge", + // "transaction" + // ], + // "enumDescriptions": [ + // "Event type is action.", + // "Event type is charge.", + // "Event type is transaction." + // ], + // "location": "query", + // "type": "string" + // }, + // "linkId": { + // "description": "Filters to capture one of given link IDs. Optional.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Max number of items to return in this page. Optional. Defaults to return all results.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "orderId": { + // "description": "Filters to capture one of the given order IDs. Optional.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "publisherId": { + // "description": "The IDs of the publishers to look up, if applicable.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "reportType": { + // "description": "The type of report being requested. Valid values: 'order_delta'. Required.", + // "enum": [ + // "order_delta" + // ], + // "enumDescriptions": [ + // "The order delta report type." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "role": { + // "description": "The role of the requester. Valid values: 'advertisers' or 'publishers'.", + // "enum": [ + // "advertisers", + // "publishers" + // ], + // "enumDescriptions": [ + // "The requester is requesting as an advertiser.", + // "The requester is requesting as a publisher." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "roleId": { + // "description": "The ID of the requesting advertiser or publisher.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startDate": { + // "description": "The start date (inclusive), in RFC 3339 format, for the report data to be returned. Defaults to one day before endDate, if that is given, or yesterday. Optional.", + // "location": "query", + // "type": "string" + // }, + // "startIndex": { + // "description": "Offset on which to return results when paging. Optional.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "status": { + // "description": "Filters out all events that do not have the given status. Valid values: 'active', 'canceled', or 'invalid'. Optional.", + // "enum": [ + // "active", + // "canceled", + // "invalid" + // ], + // "enumDescriptions": [ + // "Event is currently active.", + // "Event is currently canceled.", + // "Event is currently invalid." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{role}/{roleId}/report/{reportType}", + // "response": { + // "$ref": "Report" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen.go b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen.go new file mode 100644 index 0000000000000..576d7959424c5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen.go @@ -0,0 +1,1588 @@ +// Copyright 2011 Google Inc. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package main + +import ( + "bytes" + "encoding/json" + "errors" + "flag" + "fmt" + "go/format" + "io/ioutil" + "log" + "net/http" + "net/url" + "os" + "os/exec" + "path/filepath" + "sort" + "strings" + "unicode" +) + +// goGenVersion is the version of the Go code generator +const goGenVersion = "0.5" + +var ( + apiToGenerate = flag.String("api", "*", "The API ID to generate, like 'tasks:v1'. A value of '*' means all.") + useCache = flag.Bool("cache", true, "Use cache of discovered Google API discovery documents.") + genDir = flag.String("gendir", "", "Directory to use to write out generated Go files") + build = flag.Bool("build", false, "Compile generated packages.") + install = flag.Bool("install", false, "Install generated packages.") + apisURL = flag.String("discoveryurl", "https://www.googleapis.com/discovery/v1/apis", "URL to root discovery document") + + publicOnly = flag.Bool("publiconly", true, "Only build public, released APIs. Only applicable for Google employees.") + + jsonFile = flag.String("api_json_file", "", "If non-empty, the path to a local file on disk containing the API to generate. Exclusive with setting --api.") + output = flag.String("output", "", "(optional) Path to source output file. If not specified, the API name and version are used to construct an output path (e.g. tasks/v1).") + googleAPIPkg = flag.String("googleapi_pkg", "code.google.com/p/google-api-go-client/googleapi", "Go package path of the 'googleapi' support package.") +) + +// API represents an API to generate, as well as its state while it's +// generating. +type API struct { + ID string `json:"id"` + Name string `json:"name"` + Version string `json:"version"` + Title string `json:"title"` + DiscoveryLink string `json:"discoveryLink"` // relative + RootURL string `json:"rootUrl"` + ServicePath string `json:"servicePath"` + Preferred bool `json:"preferred"` + + m map[string]interface{} + + forceJSON []byte // if non-nil, the JSON schema file. else fetched. + usedNames namePool + schemas map[string]*Schema // apiName -> schema + + p func(format string, args ...interface{}) // print raw + pn func(format string, args ...interface{}) // print with indent and newline +} + +func (a *API) sortedSchemaNames() (names []string) { + for name := range a.schemas { + names = append(names, name) + } + sort.Strings(names) + return +} + +type AllAPIs struct { + Items []*API `json:"items"` +} + +type generateError struct { + api *API + error error +} + +func (e *generateError) Error() string { + return fmt.Sprintf("API %s failed to generate code: %v", e.api.ID, e.error) +} + +type compileError struct { + api *API + output string +} + +func (e *compileError) Error() string { + return fmt.Sprintf("API %s failed to compile:\n%v", e.api.ID, e.output) +} + +func main() { + flag.Parse() + + if *install { + *build = true + } + + var ( + apiIds = []string{} + matches = []*API{} + errors = []error{} + ) + for _, api := range getAPIs() { + apiIds = append(apiIds, api.ID) + if !api.want() { + continue + } + matches = append(matches, api) + log.Printf("Generating API %s", api.ID) + err := api.WriteGeneratedCode() + if err != nil { + errors = append(errors, &generateError{api, err}) + continue + } + if *build { + var args []string + if *install { + args = append(args, "install") + } else { + args = append(args, "build") + } + args = append(args, api.Target()) + out, err := exec.Command("go", args...).CombinedOutput() + if err != nil { + errors = append(errors, &compileError{api, string(out)}) + } + } + } + + if len(matches) == 0 { + log.Fatalf("No APIs matched %q; options are %v", *apiToGenerate, apiIds) + } + + if len(errors) > 0 { + log.Printf("%d API(s) failed to generate or compile:", len(errors)) + for _, ce := range errors { + log.Printf(ce.Error()) + } + os.Exit(1) + } +} + +func (a *API) want() bool { + if strings.Contains(a.ID, "buzz") { + // R.I.P. + return false + } + if strings.Contains(a.ID, "fusiontables") { + // TODO(bradfitz): broken codegen. + return false + } + return *apiToGenerate == "*" || *apiToGenerate == a.ID +} + +func getAPIs() []*API { + if *jsonFile != "" { + return getAPIsFromFile() + } + var all AllAPIs + disco := slurpURL(*apisURL) + if err := json.Unmarshal(disco, &all); err != nil { + log.Fatalf("error decoding JSON in %s: %v", apisURL, err) + } + if !*publicOnly && *apiToGenerate != "*" { + parts := strings.SplitN(*apiToGenerate, ":", 2) + apiName := parts[0] + apiVersion := parts[1] + all.Items = append(all.Items, &API{ + ID: *apiToGenerate, + Name: apiName, + Version: apiVersion, + DiscoveryLink: fmt.Sprintf("./apis/%s/%s/rest", apiName, apiVersion), + }) + } + return all.Items +} + +// getAPIsFromFile handles the case of generating exactly one API +// from the flag given in --api_json_file +func getAPIsFromFile() []*API { + if *apiToGenerate != "*" { + log.Fatalf("Can't set --api with --api_json_file.") + } + if !*publicOnly { + log.Fatalf("Can't set --publiconly with --api_json_file.") + } + a, err := apiFromFile(*jsonFile) + if err != nil { + log.Fatal(err) + } + return []*API{a} +} + +func apiFromFile(file string) (*API, error) { + jsonBytes, err := ioutil.ReadFile(file) + if err != nil { + return nil, fmt.Errorf("Error reading %s: %v", file, err) + } + a := &API{ + forceJSON: jsonBytes, + } + if err := json.Unmarshal(jsonBytes, a); err != nil { + return nil, fmt.Errorf("Decoding JSON in %s: %v", file, err) + } + return a, nil +} + +func writeFile(file string, contents []byte) error { + // Don't write it if the contents are identical. + existing, err := ioutil.ReadFile(file) + if err == nil && bytes.Equal(existing, contents) { + return nil + } + return ioutil.WriteFile(file, contents, 0644) +} + +func slurpURL(urlStr string) []byte { + diskFile := filepath.Join(os.TempDir(), "google-api-cache-"+url.QueryEscape(urlStr)) + if *useCache { + bs, err := ioutil.ReadFile(diskFile) + if err == nil && len(bs) > 0 { + return bs + } + } + + req, err := http.NewRequest("GET", urlStr, nil) + if err != nil { + log.Fatal(err) + } + if *publicOnly { + req.Header.Add("X-User-IP", "0.0.0.0") // hack + } + res, err := http.DefaultClient.Do(req) + if err != nil { + log.Fatalf("Error fetching URL %s: %v", urlStr, err) + } + bs, err := ioutil.ReadAll(res.Body) + if err != nil { + log.Fatalf("Error reading body of URL %s: %v", urlStr, err) + } + if *useCache { + if err := ioutil.WriteFile(diskFile, bs, 0666); err != nil { + log.Printf("Warning: failed to write JSON of %s to disk file %s: %v", urlStr, diskFile, err) + } + } + return bs +} + +func panicf(format string, args ...interface{}) { + panic(fmt.Sprintf(format, args...)) +} + +// namePool keeps track of used names and assigns free ones based on a +// preferred name +type namePool struct { + m map[string]bool // lazily initialized +} + +func (p *namePool) Get(preferred string) string { + if p.m == nil { + p.m = make(map[string]bool) + } + name := preferred + tries := 0 + for p.m[name] { + tries++ + name = fmt.Sprintf("%s%d", preferred, tries) + } + p.m[name] = true + return name +} + +func (a *API) SourceDir() string { + if *genDir == "" { + paths := filepath.SplitList(os.Getenv("GOPATH")) + if len(paths) > 0 && paths[0] != "" { + *genDir = filepath.Join(paths[0], "src", "code.google.com", "p", "google-api-go-client") + } + } + return filepath.Join(*genDir, a.Package(), a.Version) +} + +func (a *API) DiscoveryURL() string { + if a.DiscoveryLink == "" { + log.Fatalf("API %s has no DiscoveryLink", a.ID) + } + base, _ := url.Parse(*apisURL) + u, err := base.Parse(a.DiscoveryLink) + if err != nil { + log.Fatalf("API %s has bogus DiscoveryLink %s: %v", a.ID, a.DiscoveryLink, err) + } + return u.String() +} + +func (a *API) Package() string { + return strings.ToLower(a.Name) +} + +func (a *API) Target() string { + return fmt.Sprintf("code.google.com/p/google-api-go-client/%s/%s", a.Package(), a.Version) +} + +// GetName returns a free top-level function/type identifier in the package. +// It tries to return your preferred match if it's free. +func (a *API) GetName(preferred string) string { + return a.usedNames.Get(preferred) +} + +func (a *API) apiBaseURL() string { + if a.RootURL != "" { + return a.RootURL + a.ServicePath + } + return resolveRelative(*apisURL, jstr(a.m, "basePath")) +} + +func (a *API) needsDataWrapper() bool { + for _, feature := range jstrlist(a.m, "features") { + if feature == "dataWrapper" { + return true + } + } + return false +} + +func (a *API) jsonBytes() []byte { + if v := a.forceJSON; v != nil { + return v + } + return slurpURL(a.DiscoveryURL()) +} + +func (a *API) WriteGeneratedCode() error { + outdir := a.SourceDir() + err := os.MkdirAll(outdir, 0755) + if err != nil { + return fmt.Errorf("failed to Mkdir %s: %v", outdir, err) + } + + pkg := a.Package() + writeFile(filepath.Join(outdir, a.Package()+"-api.json"), a.jsonBytes()) + + genfilename := *output + if genfilename == "" { + genfilename = filepath.Join(outdir, pkg+"-gen.go") + } + + code, err := a.GenerateCode() + errw := writeFile(genfilename, code) + if err == nil { + err = errw + } + return err +} + +func (a *API) GenerateCode() ([]byte, error) { + pkg := a.Package() + + a.m = make(map[string]interface{}) + m := a.m + jsonBytes := a.jsonBytes() + err := json.Unmarshal(jsonBytes, &a.m) + if err != nil { + return nil, err + } + + // Buffer the output in memory, for gofmt'ing later in the defer. + var buf bytes.Buffer + a.p = func(format string, args ...interface{}) { + _, err := fmt.Fprintf(&buf, format, args...) + if err != nil { + panic(err) + } + } + a.pn = func(format string, args ...interface{}) { + a.p(format+"\n", args...) + } + + p, pn := a.p, a.pn + reslist := a.Resources(a.m, "") + + p("// Package %s provides access to the %s.\n", pkg, jstr(m, "title")) + if docs := jstr(m, "documentationLink"); docs != "" { + p("//\n") + p("// See %s\n", docs) + } + p("//\n// Usage example:\n") + p("//\n") + p("// import %q\n", a.Target()) + p("// ...\n") + p("// %sService, err := %s.New(oauthHttpClient)\n", pkg, pkg) + + p("package %s\n", pkg) + p("\n") + p("import (\n") + for _, pkg := range []string{ + "bytes", + *googleAPIPkg, + "encoding/json", + "errors", + "fmt", + "io", + "net/http", + "net/url", + "strconv", + "strings", + } { + p("\t%q\n", pkg) + } + p(")\n\n") + pn("// Always reference these packages, just in case the auto-generated code") + pn("// below doesn't.") + pn("var _ = bytes.NewBuffer") + pn("var _ = strconv.Itoa") + pn("var _ = fmt.Sprintf") + pn("var _ = json.NewDecoder") + pn("var _ = io.Copy") + pn("var _ = url.Parse") + pn("var _ = googleapi.Version") + pn("var _ = errors.New") + pn("var _ = strings.Replace") + pn("") + pn("const apiId = %q", jstr(m, "id")) + pn("const apiName = %q", jstr(m, "name")) + pn("const apiVersion = %q", jstr(m, "version")) + p("const basePath = %q\n", a.apiBaseURL()) + p("\n") + + a.generateScopeConstants() + + a.GetName("New") // ignore return value; we're the first caller + pn("func New(client *http.Client) (*Service, error) {") + pn("if client == nil { return nil, errors.New(\"client is nil\") }") + pn("s := &Service{client: client, BasePath: basePath}") + for _, res := range reslist { // add top level resources. + pn("s.%s = New%s(s)", res.GoField(), res.GoType()) + } + pn("return s, nil") + pn("}") + + a.GetName("Service") // ignore return value; no user-defined names yet + p("\ntype Service struct {\n") + p("\tclient *http.Client\n") + p("\tBasePath string // API endpoint base URL\n") + + for _, res := range reslist { + p("\n\t%s\t*%s\n", res.GoField(), res.GoType()) + } + p("}\n") + + for _, res := range reslist { + res.generateType() + } + + a.PopulateSchemas() + + for _, name := range a.sortedSchemaNames() { + a.schemas[name].writeSchemaCode() + } + + for _, meth := range a.APIMethods() { + meth.generateCode() + } + + for _, res := range reslist { + res.generateMethods() + } + + clean, err := format.Source(buf.Bytes()) + if err != nil { + return buf.Bytes(), err + } + return clean, nil +} + +func (a *API) generateScopeConstants() { + auth := jobj(a.m, "auth") + if auth == nil { + return + } + oauth2 := jobj(auth, "oauth2") + if oauth2 == nil { + return + } + scopes := jobj(oauth2, "scopes") + if scopes == nil || len(scopes) == 0 { + return + } + + a.p("// OAuth2 scopes used by this API.\n") + a.p("const (\n") + n := 0 + for _, scopeName := range sortedKeys(scopes) { + mi := scopes[scopeName] + if n > 0 { + a.p("\n") + } + n++ + ident := scopeIdentifierFromURL(scopeName) + if des := jstr(mi.(map[string]interface{}), "description"); des != "" { + a.p("%s", asComment("\t", des)) + } + a.p("\t%s = %q\n", ident, scopeName) + } + a.p(")\n\n") +} + +func scopeIdentifierFromURL(urlStr string) string { + const prefix = "https://www.googleapis.com/auth/" + if !strings.HasPrefix(urlStr, prefix) { + log.Fatalf("Unexpected oauth2 scope %q doesn't start with %q", urlStr, prefix) + } + ident := validGoIdentifer(initialCap(urlStr[len(prefix):])) + "Scope" + return ident +} + +type Schema struct { + api *API + m map[string]interface{} // original JSON map + + typ *Type // lazily populated by Type + + apiName string // the native API-defined name of this type + goName string // lazily populated by GoName +} + +type Property struct { + s *Schema // property of which schema + apiName string // the native API-defined name of this property + m map[string]interface{} // original JSON map + + typ *Type // lazily populated by Type +} + +func (p *Property) Type() *Type { + if p.typ == nil { + p.typ = &Type{api: p.s.api, m: p.m} + } + return p.typ +} + +func (p *Property) GoName() string { + return initialCap(p.apiName) +} + +func (p *Property) APIName() string { + return p.apiName +} + +func (p *Property) Description() string { + return jstr(p.m, "description") +} + +type Type struct { + m map[string]interface{} // JSON map containing key "type" and maybe "items", "properties" + api *API +} + +func (t *Type) apiType() string { + // Note: returns "" on reference types + if t, ok := t.m["type"].(string); ok { + return t + } + return "" +} + +func (t *Type) apiTypeFormat() string { + if f, ok := t.m["format"].(string); ok { + return f + } + return "" +} + +func (t *Type) isIntAsString() bool { + return t.apiType() == "string" && strings.Contains(t.apiTypeFormat(), "int") +} + +func (t *Type) asSimpleGoType() (goType string, ok bool) { + return simpleTypeConvert(t.apiType(), t.apiTypeFormat()) +} + +func (t *Type) String() string { + return fmt.Sprintf("[type=%q, map=%s]", t.apiType(), prettyJSON(t.m)) +} + +func (t *Type) AsGo() string { + if t, ok := t.asSimpleGoType(); ok { + return t + } + if at, ok := t.ArrayType(); ok { + if at.apiType() == "string" { + switch at.apiTypeFormat() { + case "int64": + return "googleapi.Int64s" + case "uint64": + return "googleapi.Uint64s" + case "int32": + return "googleapi.Int32s" + case "uint32": + return "googleapi.Uint32s" + case "float64": + return "googleapi.Float64s" + default: + return "[]" + at.AsGo() + } + } + return "[]" + at.AsGo() + } + if ref, ok := t.Reference(); ok { + s := t.api.schemas[ref] + if s == nil { + panic(fmt.Sprintf("in Type.AsGo(), failed to find referenced type %q for %s", + ref, prettyJSON(t.m))) + } + return s.Type().AsGo() + } + if t.IsMap() { + // TODO(gmlewis): support maps to any type. + return fmt.Sprintf("map[string]string") + } + if t.IsStruct() { + if apiName, ok := t.m["_apiName"].(string); ok { + s := t.api.schemas[apiName] + if s == nil { + panic(fmt.Sprintf("in Type.AsGo, _apiName of %q didn't point to a valid schema; json: %s", + apiName, prettyJSON(t.m))) + } + return "*" + s.GoName() + } + panic("in Type.AsGo, no _apiName found for struct type " + prettyJSON(t.m)) + } + panic("unhandled Type.AsGo for " + prettyJSON(t.m)) +} + +func (t *Type) IsSimple() bool { + _, ok := simpleTypeConvert(t.apiType(), t.apiTypeFormat()) + return ok +} + +func (t *Type) IsStruct() bool { + return t.apiType() == "object" +} + +func (t *Type) Reference() (apiName string, ok bool) { + apiName = jstr(t.m, "$ref") + ok = apiName != "" + return +} + +func (t *Type) IsMap() bool { + props := jobj(t.m, "additionalProperties") + if props == nil { + return false + } + s := jstr(props, "type") + b := s == "string" + if !b { + log.Printf("Warning: found map to type %q which is not implemented yet.", s) + } + return b +} + +func (t *Type) IsReference() bool { + return jstr(t.m, "$ref") != "" +} + +func (t *Type) ReferenceSchema() (s *Schema, ok bool) { + apiName, ok := t.Reference() + if !ok { + return + } + + s = t.api.schemas[apiName] + if s == nil { + panicf("failed to find t.api.schemas[%q] while resolving reference", + apiName) + } + return s, true +} + +func (t *Type) ArrayType() (elementType *Type, ok bool) { + if t.apiType() != "array" { + return + } + items := jobj(t.m, "items") + if items == nil { + panicf("can't handle array type missing its 'items' key. map is %#v", t.m) + } + return &Type{api: t.api, m: items}, true +} + +func (s *Schema) Type() *Type { + if s.typ == nil { + s.typ = &Type{api: s.api, m: s.m} + } + return s.typ +} + +func (s *Schema) properties() []*Property { + if !s.Type().IsStruct() { + panic("called properties on non-object schema") + } + pl := []*Property{} + propMap := jobj(s.m, "properties") + for _, name := range sortedKeys(propMap) { + m := propMap[name].(map[string]interface{}) + pl = append(pl, &Property{ + s: s, + m: m, + apiName: name, + }) + } + return pl +} + +func (s *Schema) populateSubSchemas() (outerr error) { + defer func() { + r := recover() + if r == nil { + return + } + outerr = fmt.Errorf("%v", r) + }() + + addSubStruct := func(subApiName string, t *Type) { + if s.api.schemas[subApiName] != nil { + panic("dup schema apiName: " + subApiName) + } + subm := t.m + subm["_apiName"] = subApiName + subs := &Schema{ + api: s.api, + m: subm, + typ: t, + apiName: subApiName, + } + s.api.schemas[subApiName] = subs + err := subs.populateSubSchemas() + if err != nil { + panicf("in sub-struct %q: %v", subApiName, err) + } + } + + if s.Type().IsStruct() { + for _, p := range s.properties() { + if p.Type().IsSimple() || p.Type().IsMap() { + continue + } + if at, ok := p.Type().ArrayType(); ok { + if at.IsSimple() || at.IsReference() { + continue + } + subApiName := fmt.Sprintf("%s.%s", s.apiName, p.apiName) + if at.IsStruct() { + addSubStruct(subApiName, at) // was p.Type()? + continue + } + if _, ok := at.ArrayType(); ok { + addSubStruct(subApiName, at) + continue + } + panicf("Unknown property array type for %q: %s", subApiName, at) + continue + } + subApiName := fmt.Sprintf("%s.%s", s.apiName, p.apiName) + if p.Type().IsStruct() { + addSubStruct(subApiName, p.Type()) + continue + } + if p.Type().IsReference() { + continue + } + panicf("Unknown type for %q: %s", subApiName, p.Type()) + } + return + } + + if at, ok := s.Type().ArrayType(); ok { + if at.IsSimple() || at.IsReference() { + return + } + subApiName := fmt.Sprintf("%s.Item", s.apiName) + + if at.IsStruct() { + addSubStruct(subApiName, at) + return + } + if at, ok := at.ArrayType(); ok { + if at.IsSimple() || at.IsReference() { + return + } + addSubStruct(subApiName, at) + return + } + panicf("Unknown array type for %q: %s", subApiName, at) + return + } + + if s.Type().IsSimple() || s.Type().IsReference() { + return + } + + fmt.Fprintf(os.Stderr, "in populateSubSchemas, schema is: %s", prettyJSON(s.m)) + panicf("populateSubSchemas: unsupported type for schema %q", s.apiName) + panic("unreachable") +} + +// GoName returns (or creates and returns) the bare Go name +// of the apiName, making sure that it's a proper Go identifier +// and doesn't conflict with an existing name. +func (s *Schema) GoName() string { + if s.goName == "" { + s.goName = s.api.GetName(initialCap(s.apiName)) + } + return s.goName +} + +func (s *Schema) writeSchemaCode() { + if s.Type().IsStruct() && !s.Type().IsMap() { + s.writeSchemaStruct() + return + } + + if _, ok := s.Type().ArrayType(); ok { + log.Printf("TODO writeSchemaCode for arrays for %s", s.GoName()) + return + } + + if destSchema, ok := s.Type().ReferenceSchema(); ok { + // Convert it to a struct using embedding. + s.api.p("\ntype %s struct {\n", s.GoName()) + s.api.p("\t%s\n", destSchema.GoName()) + s.api.p("}\n") + return + } + + if s.Type().IsSimple() || s.Type().IsMap() { + return + } + + fmt.Fprintf(os.Stderr, "in writeSchemaCode, schema is: %s", prettyJSON(s.m)) + panicf("writeSchemaCode: unsupported type for schema %q", s.apiName) +} + +func (s *Schema) writeSchemaStruct() { + // TODO: description + s.api.p("\ntype %s struct {\n", s.GoName()) + for i, p := range s.properties() { + if i > 0 { + s.api.p("\n") + } + pname := p.GoName() + if des := p.Description(); des != "" { + s.api.p("%s", asComment("\t", fmt.Sprintf("%s: %s", pname, des))) + } + var extraOpt string + if p.Type().isIntAsString() { + extraOpt += ",string" + } + s.api.p("\t%s %s `json:\"%s,omitempty%s\"`\n", pname, p.Type().AsGo(), p.APIName(), extraOpt) + } + s.api.p("}\n") +} + +// PopulateSchemas reads all the API types ("schemas") from the JSON file +// and converts them to *Schema instances, returning an identically +// keyed map, additionally containing subresources. For instance, +// +// A resource "Foo" of type "object" with a property "bar", also of type +// "object" (an anonymous sub-resource), will get a synthetic API name +// of "Foo.bar". +// +// A resource "Foo" of type "array" with an "items" of type "object" +// will get a synthetic API name of "Foo.Item". +func (a *API) PopulateSchemas() { + m := jobj(a.m, "schemas") + if a.schemas != nil { + panic("") + } + a.schemas = make(map[string]*Schema) + for name, mi := range m { + s := &Schema{ + api: a, + apiName: name, + m: mi.(map[string]interface{}), + } + + // And a little gross hack, so a map alone is good + // enough to get its apiName: + s.m["_apiName"] = name + + a.schemas[name] = s + err := s.populateSubSchemas() + if err != nil { + panicf("Error populating schema with API name %q: %v", name, err) + } + } +} + +type Resource struct { + api *API + name string + parent string + m map[string]interface{} + resources []*Resource +} + +func (r *Resource) generateType() { + p, pn := r.api.p, r.api.pn + t := r.GoType() + pn(fmt.Sprintf("func New%s(s *Service) *%s {", t, t)) + pn("rs := &%s{s : s}", t) + for _, res := range r.resources { + pn("rs.%s = New%s(s)", res.GoField(), res.GoType()) + } + pn("return rs") + pn("}") + + p("\ntype %s struct {\n", t) + p("\ts *Service\n") + for _, res := range r.resources { + p("\n\t%s\t*%s\n", res.GoField(), res.GoType()) + } + p("}\n") + + for _, res := range r.resources { + res.generateType() + } +} + +func (r *Resource) generateMethods() { + for _, meth := range r.Methods() { + meth.generateCode() + } + for _, res := range r.resources { + res.generateMethods() + } +} + +func (r *Resource) GoField() string { + return initialCap(r.name) +} + +func (r *Resource) GoType() string { + return initialCap(fmt.Sprintf("%s.%s", r.parent, r.name)) + "Service" +} + +func (r *Resource) Methods() []*Method { + ms := []*Method{} + + methMap := jobj(r.m, "methods") + for _, mname := range sortedKeys(methMap) { + mi := methMap[mname] + ms = append(ms, &Method{ + api: r.api, + r: r, + name: mname, + m: mi.(map[string]interface{}), + }) + } + return ms +} + +type Method struct { + api *API + r *Resource // or nil if a API-level (top-level) method + name string + m map[string]interface{} // original JSON + + params []*Param // all Params, of each type, lazily set by first access to Parameters +} + +func (m *Method) Id() string { + return jstr(m.m, "id") +} + +func (m *Method) supportsMedia() bool { + return jobj(m.m, "mediaUpload") != nil +} + +func (m *Method) mediaPath() string { + return jstr(jobj(jobj(jobj(m.m, "mediaUpload"), "protocols"), "simple"), "path") +} + +func (m *Method) Params() []*Param { + if m.params == nil { + paramMap := jobj(m.m, "parameters") + for _, name := range sortedKeys(paramMap) { + mi := paramMap[name] + pm := mi.(map[string]interface{}) + m.params = append(m.params, &Param{ + name: name, + m: pm, + method: m, + }) + } + } + return m.params +} + +func (m *Method) grepParams(f func(*Param) bool) []*Param { + matches := make([]*Param, 0) + for _, param := range m.Params() { + if f(param) { + matches = append(matches, param) + } + } + return matches +} + +func (m *Method) NamedParam(name string) *Param { + matches := m.grepParams(func(p *Param) bool { + return p.name == name + }) + if len(matches) < 1 { + log.Panicf("failed to find named parameter %q", name) + } + if len(matches) > 1 { + log.Panicf("found multiple parameters for parameter name %q", name) + } + return matches[0] +} + +func (m *Method) OptParams() []*Param { + return m.grepParams(func(p *Param) bool { + return !p.IsRequired() + }) +} + +func (m *Method) RequiredRepeatedQueryParams() []*Param { + return m.grepParams(func(p *Param) bool { + return p.IsRequired() && p.IsRepeated() && p.Location() == "query" + }) +} + +func (m *Method) RequiredQueryParams() []*Param { + return m.grepParams(func(p *Param) bool { + return p.IsRequired() && !p.IsRepeated() && p.Location() == "query" + }) +} + +func (meth *Method) generateCode() { + res := meth.r // may be nil if a top-level method + a := meth.api + p, pn := a.p, a.pn + + pn("\n// method id %q:", meth.Id()) + + retTypeComma := responseType(a, meth.m) + if retTypeComma != "" { + retTypeComma += ", " + } + + args := meth.NewArguments() + methodName := initialCap(meth.name) + + prefix := "" + if res != nil { + prefix = initialCap(fmt.Sprintf("%s.%s", res.parent, res.name)) + } + callName := a.GetName(prefix + methodName + "Call") + + p("\ntype %s struct {\n", callName) + p("\ts *Service\n") + for _, arg := range args.l { + p("\t%s %s\n", arg.goname, arg.gotype) + } + p("\topt_ map[string]interface{}\n") + if meth.supportsMedia() { + p("\tmedia_ io.Reader\n") + } + p("}\n") + + p("\n%s", asComment("", methodName+": "+jstr(meth.m, "description"))) + + var servicePtr string + if res == nil { + p("func (s *Service) %s(%s) *%s {\n", methodName, args, callName) + servicePtr = "s" + } else { + p("func (r *%s) %s(%s) *%s {\n", res.GoType(), methodName, args, callName) + servicePtr = "r.s" + } + + p("\tc := &%s{s: %s, opt_: make(map[string]interface{})}\n", callName, servicePtr) + for _, arg := range args.l { + p("\tc.%s = %s\n", arg.goname, arg.goname) + } + p("\treturn c\n") + p("}\n") + + for _, opt := range meth.OptParams() { + setter := initialCap(opt.name) + des := jstr(opt.m, "description") + des = strings.Replace(des, "Optional.", "", 1) + des = strings.TrimSpace(des) + p("\n%s", asComment("", fmt.Sprintf("%s sets the optional parameter %q: %s", setter, opt.name, des))) + np := new(namePool) + np.Get("c") // take the receiver's name + paramName := np.Get(validGoIdentifer(opt.name)) + p("func (c *%s) %s(%s %s) *%s {\n", callName, setter, paramName, opt.GoType(), callName) + p("c.opt_[%q] = %s\n", opt.name, paramName) + p("return c\n") + p("}\n") + } + + if meth.supportsMedia() { + p("func (c *%s) Media(r io.Reader) *%s {\n", callName, callName) + p("c.media_ = r\n") + p("return c\n") + p("}\n") + } + + pn("\nfunc (c *%s) Do() (%serror) {", callName, retTypeComma) + + nilRet := "" + if retTypeComma != "" { + nilRet = "nil, " + } + pn("var body io.Reader = nil") + hasContentType := false + httpMethod := jstr(meth.m, "httpMethod") + if ba := args.bodyArg(); ba != nil && httpMethod != "GET" { + style := "WithoutDataWrapper" + if a.needsDataWrapper() { + style = "WithDataWrapper" + } + pn("body, err := googleapi.%s.JSONReader(c.%s)", style, ba.goname) + pn("if err != nil { return %serr }", nilRet) + pn(`ctype := "application/json"`) + hasContentType = true + } + pn("params := make(url.Values)") + // Set this first. if they override it, though, might be gross. We don't expect + // XML replies elsewhere. TODO(bradfitz): hide this option in the generated code? + pn(`params.Set("alt", "json")`) + for _, p := range meth.RequiredQueryParams() { + pn("params.Set(%q, fmt.Sprintf(\"%%v\", c.%s))", p.name, p.goCallFieldName()) + } + for _, p := range meth.RequiredRepeatedQueryParams() { + pn("for _, v := range c.%s { params.Add(%q, fmt.Sprintf(\"%%v\", v)) }", + p.name, p.name) + } + for _, p := range meth.OptParams() { + pn("if v, ok := c.opt_[%q]; ok { params.Set(%q, fmt.Sprintf(\"%%v\", v)) }", + p.name, p.name) + } + + p("urls := googleapi.ResolveRelative(c.s.BasePath, %q)\n", jstr(meth.m, "path")) + if meth.supportsMedia() { + pn("if c.media_ != nil {") + // Hack guess, since we get a 404 otherwise: + //pn("urls = googleapi.ResolveRelative(%q, %q)", a.apiBaseURL(), meth.mediaPath()) + // Further hack. Discovery doc is wrong? + pn("urls = strings.Replace(urls, %q, %q, 1)", "https://www.googleapis.com/", "https://www.googleapis.com/upload/") + pn(`params.Set("uploadType", "multipart")`) + pn("}") + } + pn("urls += \"?\" + params.Encode()") + if meth.supportsMedia() && httpMethod != "GET" { + if !hasContentType { // Support mediaUpload but no ctype set. + pn("body = new(bytes.Buffer)") + pn(`ctype := "application/json"`) + hasContentType = true + } + pn("contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype)") + } + pn("req, _ := http.NewRequest(%q, urls, body)", httpMethod) + // Replace param values after NewRequest to avoid reencoding them. + // E.g. Cloud Storage API requires '%2F' in entity param to be kept, but url.Parse replaces it with '/'. + for _, arg := range args.forLocation("path") { + pn(`req.URL.Path = strings.Replace(req.URL.Path, "{%s}", %s, 1)`, arg.apiname, arg.cleanExpr("c.")) + } + // Set opaque to avoid encoding of the parameters in the URL path. + pn("googleapi.SetOpaque(req.URL)") + + if meth.supportsMedia() { + pn("if hasMedia_ { req.ContentLength = contentLength_ }") + } + if hasContentType { + pn(`req.Header.Set("Content-Type", ctype)`) + } + pn(`req.Header.Set("User-Agent", "google-api-go-client/` + goGenVersion + `")`) + pn("res, err := c.s.client.Do(req);") + pn("if err != nil { return %serr }", nilRet) + pn("defer googleapi.CloseBody(res)") + pn("if err := googleapi.CheckResponse(res); err != nil { return %serr }", nilRet) + if retTypeComma == "" { + pn("return nil") + } else { + pn("ret := new(%s)", responseType(a, meth.m)[1:]) + pn("if err := json.NewDecoder(res.Body).Decode(ret); err != nil { return nil, err }") + pn("return ret, nil") + } + + bs, _ := json.MarshalIndent(meth.m, "\t// ", " ") + pn("// %s\n", string(bs)) + pn("}") +} + +type Param struct { + method *Method + name string + m map[string]interface{} + callFieldName string // empty means to use the default +} + +func (p *Param) IsRequired() bool { + v, _ := p.m["required"].(bool) + return v +} + +func (p *Param) IsRepeated() bool { + v, _ := p.m["repeated"].(bool) + return v +} + +func (p *Param) Location() string { + return p.m["location"].(string) +} + +func (p *Param) GoType() string { + typ, format := jstr(p.m, "type"), jstr(p.m, "format") + if typ == "string" && strings.Contains(format, "int") && p.Location() != "query" { + panic("unexpected int parameter encoded as string, not in query: " + p.name) + } + t, ok := simpleTypeConvert(typ, format) + if !ok { + panic("failed to convert parameter type " + fmt.Sprintf("type=%q, format=%q", typ, format)) + } + return t +} + +// goCallFieldName returns the name of this parameter's field in a +// method's "Call" struct. +func (p *Param) goCallFieldName() string { + if p.callFieldName != "" { + return p.callFieldName + } + return validGoIdentifer(p.name) +} + +// APIMethods returns top-level ("API-level") methods. They don't have an associated resource. +func (a *API) APIMethods() []*Method { + meths := []*Method{} + methMap := jobj(a.m, "methods") + for _, name := range sortedKeys(methMap) { + mi := methMap[name] + meths = append(meths, &Method{ + api: a, + r: nil, // to be explicit + name: name, + m: mi.(map[string]interface{}), + }) + } + return meths +} + +func (a *API) Resources(m map[string]interface{}, p string) []*Resource { + res := []*Resource{} + resMap := jobj(m, "resources") + for _, rname := range sortedKeys(resMap) { + rmi := resMap[rname] + rm := rmi.(map[string]interface{}) + res = append(res, &Resource{a, rname, p, rm, a.Resources(rm, fmt.Sprintf("%s.%s", p, rname))}) + } + return res +} + +func resolveRelative(basestr, relstr string) string { + u, err := url.Parse(basestr) + if err != nil { + panicf("Error parsing base URL %q: %v", basestr, err) + } + rel, err := url.Parse(relstr) + if err != nil { + panicf("Error parsing relative URL %q: %v", relstr, err) + } + u = u.ResolveReference(rel) + return u.String() +} + +func (meth *Method) NewArguments() (args *arguments) { + args = &arguments{ + method: meth, + m: make(map[string]*argument), + } + po, ok := meth.m["parameterOrder"].([]interface{}) + if ok { + for _, poi := range po { + pname := poi.(string) + arg := meth.NewArg(pname, meth.NamedParam(pname)) + args.AddArg(arg) + } + } + if ro := jobj(meth.m, "request"); ro != nil { + args.AddArg(meth.NewBodyArg(ro)) + } + return +} + +func (meth *Method) NewBodyArg(m map[string]interface{}) *argument { + reftype := jstr(m, "$ref") + return &argument{ + goname: validGoIdentifer(strings.ToLower(reftype)), + apiname: "REQUEST", + gotype: "*" + reftype, + apitype: reftype, + location: "body", + } +} + +func (meth *Method) NewArg(apiname string, p *Param) *argument { + m := p.m + apitype := jstr(m, "type") + des := jstr(m, "description") + goname := validGoIdentifer(apiname) // but might be changed later, if conflicts + if strings.Contains(des, "identifier") && !strings.HasSuffix(strings.ToLower(goname), "id") { + goname += "id" // yay + p.callFieldName = goname + } + gotype := mustSimpleTypeConvert(apitype, jstr(m, "format")) + if p.IsRepeated() { + gotype = "[]" + gotype + } + return &argument{ + apiname: apiname, + apitype: apitype, + goname: goname, + gotype: gotype, + location: jstr(m, "location"), + } +} + +type argument struct { + method *Method + apiname, apitype string + goname, gotype string + location string // "path", "query", "body" +} + +func (a *argument) String() string { + return a.goname + " " + a.gotype +} + +func (a *argument) cleanExpr(prefix string) string { + switch a.gotype { + case "[]string": + log.Printf("TODO(bradfitz): only including the first parameter in path query.") + return "url.QueryEscape(" + prefix + a.goname + "[0])" + case "string": + return "url.QueryEscape(" + prefix + a.goname + ")" + case "integer", "int64": + return "strconv.FormatInt(" + prefix + a.goname + ", 10)" + case "uint64": + return "strconv.FormatUint(" + prefix + a.goname + ", 10)" + } + log.Panicf("unknown type: apitype=%q, gotype=%q", a.apitype, a.gotype) + return "" +} + +// arguments are the arguments that a method takes +type arguments struct { + l []*argument + m map[string]*argument + method *Method +} + +func (args *arguments) forLocation(loc string) []*argument { + matches := make([]*argument, 0) + for _, arg := range args.l { + if arg.location == loc { + matches = append(matches, arg) + } + } + return matches +} + +func (args *arguments) bodyArg() *argument { + for _, arg := range args.l { + if arg.location == "body" { + return arg + } + } + return nil +} + +func (args *arguments) AddArg(arg *argument) { + n := 1 + oname := arg.goname + for { + _, present := args.m[arg.goname] + if !present { + args.m[arg.goname] = arg + args.l = append(args.l, arg) + return + } + n++ + arg.goname = fmt.Sprintf("%s%d", oname, n) + } +} + +func (a *arguments) String() string { + var buf bytes.Buffer + for i, arg := range a.l { + if i != 0 { + buf.Write([]byte(", ")) + } + buf.Write([]byte(arg.String())) + } + return buf.String() +} + +func asComment(pfx, c string) string { + var buf bytes.Buffer + const maxLen = 70 + removeNewlines := func(s string) string { + return strings.Replace(s, "\n", "\n"+pfx+"// ", -1) + } + for len(c) > 0 { + line := c + if len(line) < maxLen { + fmt.Fprintf(&buf, "%s// %s\n", pfx, removeNewlines(line)) + break + } + line = line[:maxLen] + si := strings.LastIndex(line, " ") + if si != -1 { + line = line[:si] + } + fmt.Fprintf(&buf, "%s// %s\n", pfx, removeNewlines(line)) + c = c[len(line):] + if si != -1 { + c = c[1:] + } + } + return buf.String() +} + +func simpleTypeConvert(apiType, format string) (gotype string, ok bool) { + // From http://tools.ietf.org/html/draft-zyp-json-schema-03#section-5.1 + switch apiType { + case "boolean": + gotype = "bool" + case "string": + gotype = "string" + switch format { + case "int64", "uint64", "int32", "uint32": + gotype = format + } + case "number": + gotype = "float64" + case "integer": + gotype = "int64" + case "any": + gotype = "interface{}" + } + return gotype, gotype != "" +} + +func mustSimpleTypeConvert(apiType, format string) string { + if gotype, ok := simpleTypeConvert(apiType, format); ok { + return gotype + } + panic(fmt.Sprintf("failed to simpleTypeConvert(%q, %q)", apiType, format)) +} + +func (a *API) goTypeOfJsonObject(outerName, memberName string, m map[string]interface{}) (string, error) { + apitype := jstr(m, "type") + switch apitype { + case "array": + items := jobj(m, "items") + if items == nil { + return "", errors.New("no items but type was array") + } + if ref := jstr(items, "$ref"); ref != "" { + return "[]*" + ref, nil // TODO: wrong; delete this whole function + } + if atype := jstr(items, "type"); atype != "" { + return "[]" + mustSimpleTypeConvert(atype, jstr(items, "format")), nil + } + return "", errors.New("unsupported 'array' type") + case "object": + return "*" + outerName + "_" + memberName, nil + //return "", os.NewError("unsupported 'object' type") + } + return mustSimpleTypeConvert(apitype, jstr(m, "format")), nil +} + +func responseType(api *API, m map[string]interface{}) string { + ro := jobj(m, "response") + if ro != nil { + if ref := jstr(ro, "$ref"); ref != "" { + if s := api.schemas[ref]; s != nil { + return "*" + s.GoName() + } + return "*" + ref + } + } + return "" +} + +// initialCap returns the identifier with a leading capital letter. +// it also maps "foo-bar" to "FooBar". +func initialCap(ident string) string { + if ident == "" { + panic("blank identifier") + } + return depunct(ident, true) +} + +func validGoIdentifer(ident string) string { + id := depunct(ident, false) + switch id { + case "break", "default", "func", "interface", "select", + "case", "defer", "go", "map", "struct", + "chan", "else", "goto", "package", "switch", + "const", "fallthrough", "if", "range", "type", + "continue", "for", "import", "return", "var": + return id + "_" + } + return id +} + +// depunct removes '-', '.', '$', '/' from identifers, making the +// following character uppercase +func depunct(ident string, needCap bool) string { + var buf bytes.Buffer + for _, c := range ident { + if c == '-' || c == '.' || c == '$' || c == '/' { + needCap = true + continue + } + if needCap { + c = unicode.ToUpper(c) + needCap = false + } + buf.WriteByte(byte(c)) + } + return buf.String() + +} + +func prettyJSON(m map[string]interface{}) string { + bs, err := json.MarshalIndent(m, "", " ") + if err != nil { + return fmt.Sprintf("[JSON error %v on %#v]", err, m) + } + return string(bs) +} + +func jstr(m map[string]interface{}, key string) string { + if s, ok := m[key].(string); ok { + return s + } + return "" +} + +func sortedKeys(m map[string]interface{}) (keys []string) { + for key := range m { + keys = append(keys, key) + } + sort.Strings(keys) + return +} + +func jobj(m map[string]interface{}, key string) map[string]interface{} { + if m, ok := m[key].(map[string]interface{}); ok { + return m + } + return nil +} + +func jstrlist(m map[string]interface{}, key string) []string { + si, ok := m[key].([]interface{}) + if !ok { + return nil + } + sl := make([]string, 0) + for _, si := range si { + sl = append(sl, si.(string)) + } + return sl +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen_test.go b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen_test.go new file mode 100644 index 0000000000000..fee0ead9a2c4d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/gen_test.go @@ -0,0 +1,52 @@ +package main + +import ( + "bytes" + "flag" + "io/ioutil" + "path/filepath" + "testing" +) + +var updateGolden = flag.Bool("update_golden", false, "If true, causes TestAPIs to update golden files") + +func TestAPIs(t *testing.T) { + names := []string{ + "arrayofarray-1", + "arrayofmapofstrings", + "blogger-3", + "getwithoutbody", + "mapofstrings-1", + "quotednum", + "resource-named-service", // blogger/v3/blogger-api.json + s/BlogUserInfo/Service/ + } + for _, name := range names { + api, err := apiFromFile(filepath.Join("testdata", name+".json")) + if err != nil { + t.Errorf("Error loading API testdata/%s.json: %v", name, err) + continue + } + clean, err := api.GenerateCode() + if err != nil { + t.Errorf("Error generating code for %s: %v", name, err) + continue + } + goldenFile := filepath.Join("testdata", name+".want") + if *updateGolden { + if err := ioutil.WriteFile(goldenFile, clean, 0644); err != nil { + t.Fatal(err) + } + } + want, err := ioutil.ReadFile(goldenFile) + if err != nil { + t.Error(err) + continue + } + if !bytes.Equal(want, clean) { + tf, _ := ioutil.TempFile("", "api-"+name+"-got-json.") + tf.Write(clean) + tf.Close() + t.Errorf("Output for API %s differs: diff -u %s %s", name, goldenFile, tf.Name()) + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.json new file mode 100644 index 0000000000000..81cefae3efe5d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.json @@ -0,0 +1,49 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/3m5rB86FE5KuW1K3jAl88AxCreg\"", + "discoveryVersion": "v1", + "id": "arrayofarray:v1", + "name": "arrayofarray", + "version": "v1", + "title": "Example API", + "description": "The Example API demonstrates an array of arrays.", + "ownerDomain": "google.com", + "ownerName": "Google", + "protocol": "rest", + "schemas": { + "GeoJsonMultiPolygon": { + "id": "GeoJsonMultiPolygon", + "type": "object", + "description": "Multi Polygon", + "properties": { + "coordinates": { + "type": "array", + "description": "Coordinate arrays.", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a multi-polygon.", + "enum": [ + "MultiPolygon" + ], + "enumDescriptions": [ + "" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.want new file mode 100644 index 0000000000000..cbe75a22df700 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofarray-1.want @@ -0,0 +1,59 @@ +// Package arrayofarray provides access to the Example API. +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/arrayofarray/v1" +// ... +// arrayofarrayService, err := arrayofarray.New(oauthHttpClient) +package arrayofarray + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "arrayofarray:v1" +const apiName = "arrayofarray" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/discovery/v1/apis" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type GeoJsonMultiPolygon struct { + // Coordinates: Coordinate arrays. + Coordinates [][][][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a multi-polygon. + Type string `json:"type,omitempty"` +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.json new file mode 100644 index 0000000000000..65b338b11f3bc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.json @@ -0,0 +1,32 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/3m5rB86FE5KuW1K3jAl88AxCreg\"", + "discoveryVersion": "v1", + "id": "arrayofmapofstrings:v1", + "name": "arrayofmapofstrings", + "version": "v1", + "title": "Example API", + "description": "The Example API demonstrates an array of arrays.", + "ownerDomain": "google.com", + "ownerName": "Google", + "protocol": "rest", + "schemas": { + "Analyze": { + "id": "Analyze", + "type": "object", + "properties": { + "errors": { + "type": "array", + "description": "List of errors with the data.", + "items": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Error level followed by a detailed error message." + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.want new file mode 100644 index 0000000000000..762e171e4e1cc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/arrayofmapofstrings.want @@ -0,0 +1,56 @@ +// Package arrayofmapofstrings provides access to the Example API. +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/arrayofmapofstrings/v1" +// ... +// arrayofmapofstringsService, err := arrayofmapofstrings.New(oauthHttpClient) +package arrayofmapofstrings + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "arrayofmapofstrings:v1" +const apiName = "arrayofmapofstrings" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/discovery/v1/apis" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type Analyze struct { + // Errors: List of errors with the data. + Errors []map[string]string `json:"errors,omitempty"` +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.json new file mode 100644 index 0000000000000..53caa836470f5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.json @@ -0,0 +1,2199 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/HqXrvEeuZV7fVbX7lTgVYLdSy_g\"", + "discoveryVersion": "v1", + "id": "blogger:v3", + "name": "blogger", + "version": "v3", + "title": "Blogger API", + "description": "API for access to the data within Blogger.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/blogger-16.png", + "x32": "http://www.google.com/images/icons/product/blogger-32.png" + }, + "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/blogger/v3/", + "basePath": "/blogger/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "blogger/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/blogger": { + "description": "Manage your Blogger account" + }, + "https://www.googleapis.com/auth/blogger.readonly": { + "description": "View your Blogger account" + } + } + } + }, + "schemas": { + "Blog": { + "id": "Blog", + "type": "object", + "properties": { + "customMetaData": { + "type": "string", + "description": "The JSON custom meta-data for the Blog" + }, + "description": { + "type": "string", + "description": "The description of this blog. This is displayed underneath the title." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#blog", + "default": "blogger#blog" + }, + "locale": { + "type": "object", + "description": "The locale this Blog is set to.", + "properties": { + "country": { + "type": "string", + "description": "The country this blog's locale is set to." + }, + "language": { + "type": "string", + "description": "The language this blog is authored in." + }, + "variant": { + "type": "string", + "description": "The language variant this blog is authored in." + } + } + }, + "name": { + "type": "string", + "description": "The name of this blog. This is displayed as the title." + }, + "pages": { + "type": "object", + "description": "The container of pages in this blog.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the container for pages in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of pages in this blog.", + "format": "int32" + } + } + }, + "posts": { + "type": "object", + "description": "The container of posts in this blog.", + "properties": { + "items": { + "type": "array", + "description": "The List of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the container for posts in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of posts in this blog.", + "format": "int32" + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this blog was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this blog was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this blog is published." + } + } + }, + "BlogList": { + "id": "BlogList", + "type": "object", + "properties": { + "blogUserInfos": { + "type": "array", + "description": "Admin level list of blog per-user information", + "items": { + "$ref": "BlogUserInfo" + } + }, + "items": { + "type": "array", + "description": "The list of Blogs this user has Authorship or Admin rights over.", + "items": { + "$ref": "Blog" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogList", + "default": "blogger#blogList" + } + } + }, + "BlogPerUserInfo": { + "id": "BlogPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog resource" + }, + "hasAdminAccess": { + "type": "boolean", + "description": "True if the user has Admin level access to the blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogPerUserInfo", + "default": "blogger#blogPerUserInfo" + }, + "photosAlbumKey": { + "type": "string", + "description": "The Photo Album Key for the user when adding photos to the blog" + }, + "userId": { + "type": "string", + "description": "ID of the User" + } + } + }, + "BlogUserInfo": { + "id": "BlogUserInfo", + "type": "object", + "properties": { + "blog": { + "$ref": "Blog", + "description": "The Blog resource." + }, + "blog_user_info": { + "$ref": "BlogPerUserInfo", + "description": "Information about a User for the Blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogUserInfo", + "default": "blogger#blogUserInfo" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Comment creator." + }, + "image": { + "type": "object", + "description": "The comment creator's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The comment creator's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Comment creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this comment." + } + } + }, + "content": { + "type": "string", + "description": "The actual content of the comment. May include HTML markup." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "inReplyTo": { + "type": "object", + "description": "Data about the comment this is in reply to.", + "properties": { + "id": { + "type": "string", + "description": "The identified of the parent of this comment." + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#comment", + "default": "blogger#comment" + }, + "post": { + "type": "object", + "description": "Data about the post containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the post containing this comment." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this comment was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the comment (only populated for admin users)" + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this comment was last updated.", + "format": "date-time" + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for a Post.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#commentList", + "default": "blogger#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "prevPageToken": { + "type": "string", + "description": "Pagination token to fetch the previous page, if one exists." + } + } + }, + "Page": { + "id": "Page", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Page.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Page creator." + }, + "image": { + "type": "object", + "description": "The page author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The page author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Page creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Page.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this page." + } + } + }, + "content": { + "type": "string", + "description": "The body content of this Page, in HTML." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#page", + "default": "blogger#page" + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Page was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the page for admin resources (either LIVE or DRAFT)." + }, + "title": { + "type": "string", + "description": "The title of this entity. This is the name displayed in the Admin user interface." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Page was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL that this Page is displayed at." + } + } + }, + "PageList": { + "id": "PageList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Pages for a Blog.", + "items": { + "$ref": "Page" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#pageList", + "default": "blogger#pageList" + } + } + }, + "Pageviews": { + "id": "Pageviews", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "Blog Id", + "format": "int64" + }, + "counts": { + "type": "array", + "description": "The container of posts in this blog.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Count of page views for the given time range", + "format": "int64" + }, + "timeRange": { + "type": "string", + "description": "Time range the given count applies to" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#page_views", + "default": "blogger#page_views" + } + } + }, + "Post": { + "id": "Post", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Post.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Post creator." + }, + "image": { + "type": "object", + "description": "The Post author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The Post author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Post creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Post.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the Blog that contains this Post." + } + } + }, + "content": { + "type": "string", + "description": "The content of the Post. May contain HTML markup." + }, + "customMetaData": { + "type": "string", + "description": "The JSON meta-data for the Post." + }, + "id": { + "type": "string", + "description": "The identifier of this Post." + }, + "images": { + "type": "array", + "description": "Display image for the Post.", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#post", + "default": "blogger#post" + }, + "labels": { + "type": "array", + "description": "The list of labels this Post was tagged with.", + "items": { + "type": "string" + } + }, + "location": { + "type": "object", + "description": "The location for geotagged posts.", + "properties": { + "lat": { + "type": "number", + "description": "Location's latitude.", + "format": "double" + }, + "lng": { + "type": "number", + "description": "Location's longitude.", + "format": "double" + }, + "name": { + "type": "string", + "description": "Location name." + }, + "span": { + "type": "string", + "description": "Location's viewport span. Can be used when rendering a map preview." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Post was published.", + "format": "date-time" + }, + "replies": { + "type": "object", + "description": "The container of comments on this Post.", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for this Post.", + "items": { + "$ref": "Comment" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the comments on this post." + }, + "totalItems": { + "type": "string", + "description": "The count of comments on this post.", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "Status of the post. Only set for admin-level requests" + }, + "title": { + "type": "string", + "description": "The title of the Post." + }, + "titleLink": { + "type": "string", + "description": "The title link URL, similar to atom's related link." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Post was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this Post is displayed." + } + } + }, + "PostList": { + "id": "PostList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "PostPerUserInfo": { + "id": "PostPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog that the post resource belongs to." + }, + "hasEditAccess": { + "type": "boolean", + "description": "True if the user has Author level access to the post." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postPerUserInfo", + "default": "blogger#postPerUserInfo" + }, + "postId": { + "type": "string", + "description": "ID of the Post resource." + }, + "userId": { + "type": "string", + "description": "ID of the User." + } + } + }, + "PostUserInfo": { + "id": "PostUserInfo", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postUserInfo", + "default": "blogger#postUserInfo" + }, + "post": { + "$ref": "Post", + "description": "The Post resource." + }, + "post_user_info": { + "$ref": "PostPerUserInfo", + "description": "Information about a User for the Post." + } + } + }, + "PostUserInfosList": { + "id": "PostUserInfosList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts with User information for the post, for this Blog.", + "items": { + "$ref": "PostUserInfo" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postUserInfosList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "User": { + "id": "User", + "type": "object", + "properties": { + "about": { + "type": "string", + "description": "Profile summary information." + }, + "blogs": { + "type": "object", + "description": "The container of blogs for this user.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the Blogs for this user." + } + } + }, + "created": { + "type": "string", + "description": "The timestamp of when this profile was created, in seconds since epoch.", + "format": "date-time" + }, + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier for this User." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#user", + "default": "blogger#user" + }, + "locale": { + "type": "object", + "description": "This user's locale", + "properties": { + "country": { + "type": "string", + "description": "The user's country setting." + }, + "language": { + "type": "string", + "description": "The user's language setting." + }, + "variant": { + "type": "string", + "description": "The user's language variant setting." + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "url": { + "type": "string", + "description": "The user's profile page." + } + } + } + }, + "resources": { + "blogUserInfos": { + "methods": { + "get": { + "id": "blogger.blogUserInfos.get", + "path": "users/{userId}/blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog and user info pair by blogId and userId.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "BlogUserInfo" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "blogs": { + "methods": { + "get": { + "id": "blogger.blogs.get", + "path": "blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByUrl": { + "id": "blogger.blogs.getByUrl", + "path": "blogs/byurl", + "httpMethod": "GET", + "description": "Retrieve a Blog by URL.", + "parameters": { + "url": { + "type": "string", + "description": "The URL of the blog to retrieve.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "url" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByUser": { + "id": "blogger.blogs.listByUser", + "path": "users/{userId}/blogs", + "httpMethod": "GET", + "description": "Retrieves a list of blogs, possibly filtered.", + "parameters": { + "fetchUserInfo": { + "type": "boolean", + "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "BlogList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "comments": { + "methods": { + "approve": { + "id": "blogger.comments.approve", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + "httpMethod": "POST", + "description": "Marks a comment as not spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as not spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "delete": { + "id": "blogger.comments.delete", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Delete a comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.comments.get", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets one comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to containing the comment.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.comments.list", + "path": "blogs/{blogId}/posts/{postId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a post, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "emptied", + "live", + "pending", + "spam" + ], + "enumDescriptions": [ + "Comments that have had their content removed", + "Comments that are publicly visible", + "Comments that are awaiting administrator approval", + "Comments marked as spam by the administrator" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByBlog": { + "id": "blogger.comments.listByBlog", + "path": "blogs/{blogId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "markAsSpam": { + "id": "blogger.comments.markAsSpam", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + "httpMethod": "POST", + "description": "Marks a comment as spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "removeContent": { + "id": "blogger.comments.removeContent", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + "httpMethod": "POST", + "description": "Removes the content of a comment.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete content from.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pageViews": { + "methods": { + "get": { + "id": "blogger.pageViews.get", + "path": "blogs/{blogId}/pageviews", + "httpMethod": "GET", + "description": "Retrieve pageview stats for a Blog.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "range": { + "type": "string", + "enum": [ + "30DAYS", + "7DAYS", + "all" + ], + "enumDescriptions": [ + "Page view counts from the last thirty days.", + "Page view counts from the last seven days.", + "Total page view counts from all time." + ], + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Pageviews" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pages": { + "methods": { + "delete": { + "id": "blogger.pages.delete", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "DELETE", + "description": "Delete a page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.pages.get", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "GET", + "description": "Gets one blog page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog containing the page.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the page to get.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.pages.insert", + "path": "blogs/{blogId}/pages", + "httpMethod": "POST", + "description": "Add a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the page to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.pages.list", + "path": "blogs/{blogId}/pages", + "httpMethod": "GET", + "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch pages from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether to retrieve the Page bodies.", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "imported", + "live" + ], + "enumDescriptions": [ + "Draft (unpublished) Pages", + "Pages that have had their content removed", + "Pages that are publicly visible" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.pages.patch", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PATCH", + "description": "Update a page. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "update": { + "id": "blogger.pages.update", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PUT", + "description": "Update a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "postUserInfos": { + "methods": { + "get": { + "id": "blogger.postUserInfos.get", + "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Gets one post and user info pair by postId and userId.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post to get.", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId", + "postId" + ], + "response": { + "$ref": "PostUserInfo" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.postUserInfos.list", + "path": "users/{userId}/blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of post and user info pairs, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included.", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft posts", + "Published posts", + "Posts that are scheduled to publish in future." + ], + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "PostUserInfosList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "posts": { + "methods": { + "delete": { + "id": "blogger.posts.delete", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "DELETE", + "description": "Delete a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.posts.get", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Get a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByPath": { + "id": "blogger.posts.getByPath", + "path": "blogs/{blogId}/posts/bypath", + "httpMethod": "GET", + "description": "Retrieve a Post by Path.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "path": { + "type": "string", + "description": "Path of the Post to retrieve.", + "required": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "path" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.posts.insert", + "path": "blogs/{blogId}/posts", + "httpMethod": "POST", + "description": "Add a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the post to.", + "required": true, + "location": "path" + }, + "isDraft": { + "type": "boolean", + "description": "Whether to create the post as a draft", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.posts.list", + "path": "blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included.", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft posts", + "Published posts", + "Posts that are scheduled to publish in future." + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.posts.patch", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PATCH", + "description": "Update a post. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "publish": { + "id": "blogger.posts.publish", + "path": "blogs/{blogId}/posts/{postId}/publish", + "httpMethod": "POST", + "description": "Publish a draft post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + }, + "publishDate": { + "type": "string", + "description": "The date and time to schedule the publishing of the Blog.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "revert": { + "id": "blogger.posts.revert", + "path": "blogs/{blogId}/posts/{postId}/revert", + "httpMethod": "POST", + "description": "Revert a published or scheduled post to draft state.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "search": { + "id": "blogger.posts.search", + "path": "blogs/{blogId}/posts/search", + "httpMethod": "GET", + "description": "Search for a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query terms to search this blog for matching posts.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "q" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "update": { + "id": "blogger.posts.update", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PUT", + "description": "Update a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "users": { + "methods": { + "get": { + "id": "blogger.users.get", + "path": "users/{userId}", + "httpMethod": "GET", + "description": "Gets one user by id.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.want new file mode 100644 index 0000000000000..5936bf97dc4bc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/blogger-3.want @@ -0,0 +1,3860 @@ +// Package blogger provides access to the Blogger API. +// +// See https://developers.google.com/blogger/docs/3.0/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/blogger/v3" +// ... +// bloggerService, err := blogger.New(oauthHttpClient) +package blogger + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "blogger:v3" +const apiName = "blogger" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/blogger/v3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Blogger account + BloggerScope = "https://www.googleapis.com/auth/blogger" + + // View your Blogger account + BloggerReadonlyScope = "https://www.googleapis.com/auth/blogger.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BlogUserInfos = NewBlogUserInfosService(s) + s.Blogs = NewBlogsService(s) + s.Comments = NewCommentsService(s) + s.PageViews = NewPageViewsService(s) + s.Pages = NewPagesService(s) + s.PostUserInfos = NewPostUserInfosService(s) + s.Posts = NewPostsService(s) + s.Users = NewUsersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BlogUserInfos *BlogUserInfosService + + Blogs *BlogsService + + Comments *CommentsService + + PageViews *PageViewsService + + Pages *PagesService + + PostUserInfos *PostUserInfosService + + Posts *PostsService + + Users *UsersService +} + +func NewBlogUserInfosService(s *Service) *BlogUserInfosService { + rs := &BlogUserInfosService{s: s} + return rs +} + +type BlogUserInfosService struct { + s *Service +} + +func NewBlogsService(s *Service) *BlogsService { + rs := &BlogsService{s: s} + return rs +} + +type BlogsService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewPageViewsService(s *Service) *PageViewsService { + rs := &PageViewsService{s: s} + return rs +} + +type PageViewsService struct { + s *Service +} + +func NewPagesService(s *Service) *PagesService { + rs := &PagesService{s: s} + return rs +} + +type PagesService struct { + s *Service +} + +func NewPostUserInfosService(s *Service) *PostUserInfosService { + rs := &PostUserInfosService{s: s} + return rs +} + +type PostUserInfosService struct { + s *Service +} + +func NewPostsService(s *Service) *PostsService { + rs := &PostsService{s: s} + return rs +} + +type PostsService struct { + s *Service +} + +func NewUsersService(s *Service) *UsersService { + rs := &UsersService{s: s} + return rs +} + +type UsersService struct { + s *Service +} + +type Blog struct { + // CustomMetaData: The JSON custom meta-data for the Blog + CustomMetaData string `json:"customMetaData,omitempty"` + + // Description: The description of this blog. This is displayed + // underneath the title. + Description string `json:"description,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entry. Always blogger#blog + Kind string `json:"kind,omitempty"` + + // Locale: The locale this Blog is set to. + Locale *BlogLocale `json:"locale,omitempty"` + + // Name: The name of this blog. This is displayed as the title. + Name string `json:"name,omitempty"` + + // Pages: The container of pages in this blog. + Pages *BlogPages `json:"pages,omitempty"` + + // Posts: The container of posts in this blog. + Posts *BlogPosts `json:"posts,omitempty"` + + // Published: RFC 3339 date-time when this blog was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: RFC 3339 date-time when this blog was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this blog is published. + Url string `json:"url,omitempty"` +} + +type BlogLocale struct { + // Country: The country this blog's locale is set to. + Country string `json:"country,omitempty"` + + // Language: The language this blog is authored in. + Language string `json:"language,omitempty"` + + // Variant: The language variant this blog is authored in. + Variant string `json:"variant,omitempty"` +} + +type BlogPages struct { + // SelfLink: The URL of the container for pages in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of pages in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogPosts struct { + // Items: The List of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // SelfLink: The URL of the container for posts in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of posts in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogList struct { + // BlogUserInfos: Admin level list of blog per-user information + BlogUserInfos []*BlogUserInfo `json:"blogUserInfos,omitempty"` + + // Items: The list of Blogs this user has Authorship or Admin rights + // over. + Items []*Blog `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogList + Kind string `json:"kind,omitempty"` +} + +type BlogPerUserInfo struct { + // BlogId: ID of the Blog resource + BlogId string `json:"blogId,omitempty"` + + // HasAdminAccess: True if the user has Admin level access to the blog. + HasAdminAccess bool `json:"hasAdminAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogPerUserInfo + Kind string `json:"kind,omitempty"` + + // PhotosAlbumKey: The Photo Album Key for the user when adding photos + // to the blog + PhotosAlbumKey string `json:"photosAlbumKey,omitempty"` + + // UserId: ID of the User + UserId string `json:"userId,omitempty"` +} + +type BlogUserInfo struct { + // Blog: The Blog resource. + Blog *Blog `json:"blog,omitempty"` + + // Blog_user_info: Information about a User for the Blog. + Blog_user_info *BlogPerUserInfo `json:"blog_user_info,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogUserInfo + Kind string `json:"kind,omitempty"` +} + +type Comment struct { + // Author: The author of this Comment. + Author *CommentAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this comment. + Blog *CommentBlog `json:"blog,omitempty"` + + // Content: The actual content of the comment. May include HTML markup. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // InReplyTo: Data about the comment this is in reply to. + InReplyTo *CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: The kind of this entry. Always blogger#comment + Kind string `json:"kind,omitempty"` + + // Post: Data about the post containing this comment. + Post *CommentPost `json:"post,omitempty"` + + // Published: RFC 3339 date-time when this comment was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the comment (only populated for admin users) + Status string `json:"status,omitempty"` + + // Updated: RFC 3339 date-time when this comment was last updated. + Updated string `json:"updated,omitempty"` +} + +type CommentAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Comment creator. + Id string `json:"id,omitempty"` + + // Image: The comment creator's avatar. + Image *CommentAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Comment creator's Profile page. + Url string `json:"url,omitempty"` +} + +type CommentAuthorImage struct { + // Url: The comment creator's avatar URL. + Url string `json:"url,omitempty"` +} + +type CommentBlog struct { + // Id: The identifier of the blog containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The identified of the parent of this comment. + Id string `json:"id,omitempty"` +} + +type CommentPost struct { + // Id: The identifier of the post containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentList struct { + // Items: The List of Comments for a Post. + Items []*Comment `json:"items,omitempty"` + + // Kind: The kind of this entry. Always blogger#commentList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: Pagination token to fetch the previous page, if one + // exists. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type Page struct { + // Author: The author of this Page. + Author *PageAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Page. + Blog *PageBlog `json:"blog,omitempty"` + + // Content: The body content of this Page, in HTML. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#page + Kind string `json:"kind,omitempty"` + + // Published: RFC 3339 date-time when this Page was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the page for admin resources (either LIVE or + // DRAFT). + Status string `json:"status,omitempty"` + + // Title: The title of this entity. This is the name displayed in the + // Admin user interface. + Title string `json:"title,omitempty"` + + // Updated: RFC 3339 date-time when this Page was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL that this Page is displayed at. + Url string `json:"url,omitempty"` +} + +type PageAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Page creator. + Id string `json:"id,omitempty"` + + // Image: The page author's avatar. + Image *PageAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Page creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PageAuthorImage struct { + // Url: The page author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PageBlog struct { + // Id: The identifier of the blog containing this page. + Id string `json:"id,omitempty"` +} + +type PageList struct { + // Items: The list of Pages for a Blog. + Items []*Page `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#pageList + Kind string `json:"kind,omitempty"` +} + +type Pageviews struct { + // BlogId: Blog Id + BlogId int64 `json:"blogId,omitempty,string"` + + // Counts: The container of posts in this blog. + Counts []*PageviewsCounts `json:"counts,omitempty"` + + // Kind: The kind of this entry. Always blogger#page_views + Kind string `json:"kind,omitempty"` +} + +type PageviewsCounts struct { + // Count: Count of page views for the given time range + Count int64 `json:"count,omitempty,string"` + + // TimeRange: Time range the given count applies to + TimeRange string `json:"timeRange,omitempty"` +} + +type Post struct { + // Author: The author of this Post. + Author *PostAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Post. + Blog *PostBlog `json:"blog,omitempty"` + + // Content: The content of the Post. May contain HTML markup. + Content string `json:"content,omitempty"` + + // CustomMetaData: The JSON meta-data for the Post. + CustomMetaData string `json:"customMetaData,omitempty"` + + // Id: The identifier of this Post. + Id string `json:"id,omitempty"` + + // Images: Display image for the Post. + Images []*PostImages `json:"images,omitempty"` + + // Kind: The kind of this entity. Always blogger#post + Kind string `json:"kind,omitempty"` + + // Labels: The list of labels this Post was tagged with. + Labels []string `json:"labels,omitempty"` + + // Location: The location for geotagged posts. + Location *PostLocation `json:"location,omitempty"` + + // Published: RFC 3339 date-time when this Post was published. + Published string `json:"published,omitempty"` + + // Replies: The container of comments on this Post. + Replies *PostReplies `json:"replies,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the post. Only set for admin-level requests + Status string `json:"status,omitempty"` + + // Title: The title of the Post. + Title string `json:"title,omitempty"` + + // TitleLink: The title link URL, similar to atom's related link. + TitleLink string `json:"titleLink,omitempty"` + + // Updated: RFC 3339 date-time when this Post was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this Post is displayed. + Url string `json:"url,omitempty"` +} + +type PostAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Post creator. + Id string `json:"id,omitempty"` + + // Image: The Post author's avatar. + Image *PostAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Post creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PostAuthorImage struct { + // Url: The Post author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PostBlog struct { + // Id: The identifier of the Blog that contains this Post. + Id string `json:"id,omitempty"` +} + +type PostImages struct { + Url string `json:"url,omitempty"` +} + +type PostLocation struct { + // Lat: Location's latitude. + Lat float64 `json:"lat,omitempty"` + + // Lng: Location's longitude. + Lng float64 `json:"lng,omitempty"` + + // Name: Location name. + Name string `json:"name,omitempty"` + + // Span: Location's viewport span. Can be used when rendering a map + // preview. + Span string `json:"span,omitempty"` +} + +type PostReplies struct { + // Items: The List of Comments for this Post. + Items []*Comment `json:"items,omitempty"` + + // SelfLink: The URL of the comments on this post. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of comments on this post. + TotalItems int64 `json:"totalItems,omitempty,string"` +} + +type PostList struct { + // Items: The list of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type PostPerUserInfo struct { + // BlogId: ID of the Blog that the post resource belongs to. + BlogId string `json:"blogId,omitempty"` + + // HasEditAccess: True if the user has Author level access to the post. + HasEditAccess bool `json:"hasEditAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#postPerUserInfo + Kind string `json:"kind,omitempty"` + + // PostId: ID of the Post resource. + PostId string `json:"postId,omitempty"` + + // UserId: ID of the User. + UserId string `json:"userId,omitempty"` +} + +type PostUserInfo struct { + // Kind: The kind of this entity. Always blogger#postUserInfo + Kind string `json:"kind,omitempty"` + + // Post: The Post resource. + Post *Post `json:"post,omitempty"` + + // Post_user_info: Information about a User for the Post. + Post_user_info *PostPerUserInfo `json:"post_user_info,omitempty"` +} + +type PostUserInfosList struct { + // Items: The list of Posts with User information for the post, for this + // Blog. + Items []*PostUserInfo `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type User struct { + // About: Profile summary information. + About string `json:"about,omitempty"` + + // Blogs: The container of blogs for this user. + Blogs *UserBlogs `json:"blogs,omitempty"` + + // Created: The timestamp of when this profile was created, in seconds + // since epoch. + Created string `json:"created,omitempty"` + + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier for this User. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#user + Kind string `json:"kind,omitempty"` + + // Locale: This user's locale + Locale *UserLocale `json:"locale,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Url: The user's profile page. + Url string `json:"url,omitempty"` +} + +type UserBlogs struct { + // SelfLink: The URL of the Blogs for this user. + SelfLink string `json:"selfLink,omitempty"` +} + +type UserLocale struct { + // Country: The user's country setting. + Country string `json:"country,omitempty"` + + // Language: The user's language setting. + Language string `json:"language,omitempty"` + + // Variant: The user's language variant setting. + Variant string `json:"variant,omitempty"` +} + +// method id "blogger.blogUserInfos.get": + +type BlogUserInfosGetCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog and user info pair by blogId and userId. +func (r *BlogUserInfosService) Get(userId string, blogId string) *BlogUserInfosGetCall { + c := &BlogUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogUserInfosGetCall) MaxPosts(maxPosts int64) *BlogUserInfosGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +func (c *BlogUserInfosGetCall) Do() (*BlogUserInfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogUserInfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog and user info pair by blogId and userId.", + // "httpMethod": "GET", + // "id": "blogger.blogUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}", + // "response": { + // "$ref": "BlogUserInfo" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.get": + +type BlogsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog by id. +func (r *BlogsService) Get(blogId string) *BlogsGetCall { + c := &BlogsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogsGetCall) MaxPosts(maxPosts int64) *BlogsGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +func (c *BlogsGetCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog by id.", + // "httpMethod": "GET", + // "id": "blogger.blogs.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "blogs/{blogId}", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.getByUrl": + +type BlogsGetByUrlCall struct { + s *Service + url string + opt_ map[string]interface{} +} + +// GetByUrl: Retrieve a Blog by URL. +func (r *BlogsService) GetByUrl(url string) *BlogsGetByUrlCall { + c := &BlogsGetByUrlCall{s: r.s, opt_: make(map[string]interface{})} + c.url = url + return c +} + +func (c *BlogsGetByUrlCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("url", fmt.Sprintf("%v", c.url)) + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/byurl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Blog by URL.", + // "httpMethod": "GET", + // "id": "blogger.blogs.getByUrl", + // "parameterOrder": [ + // "url" + // ], + // "parameters": { + // "url": { + // "description": "The URL of the blog to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/byurl", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.listByUser": + +type BlogsListByUserCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// ListByUser: Retrieves a list of blogs, possibly filtered. +func (r *BlogsService) ListByUser(userId string) *BlogsListByUserCall { + c := &BlogsListByUserCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// FetchUserInfo sets the optional parameter "fetchUserInfo": Whether +// the response is a list of blogs with per-user information instead of +// just blogs. +func (c *BlogsListByUserCall) FetchUserInfo(fetchUserInfo bool) *BlogsListByUserCall { + c.opt_["fetchUserInfo"] = fetchUserInfo + return c +} + +// View sets the optional parameter "view": +func (c *BlogsListByUserCall) View(view string) *BlogsListByUserCall { + c.opt_["view"] = view + return c +} + +func (c *BlogsListByUserCall) Do() (*BlogList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchUserInfo"]; ok { + params.Set("fetchUserInfo", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of blogs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.blogs.listByUser", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "fetchUserInfo": { + // "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs", + // "response": { + // "$ref": "BlogList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.approve": + +type CommentsApproveCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Approve: Marks a comment as not spam. +func (r *CommentsService) Approve(blogId string, postId string, commentId string) *CommentsApproveCall { + c := &CommentsApproveCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsApproveCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as not spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.approve", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as not spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.delete": + +type CommentsDeleteCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Delete: Delete a comment by id. +func (r *CommentsService) Delete(blogId string, postId string, commentId string) *CommentsDeleteCall { + c := &CommentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a comment by id.", + // "httpMethod": "DELETE", + // "id": "blogger.comments.delete", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.get": + +type CommentsGetCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Get: Gets one comment by id. +func (r *CommentsService) Get(blogId string, postId string, commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one comment by id.", + // "httpMethod": "GET", + // "id": "blogger.comments.get", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to containing the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.list": + +type CommentsListCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// List: Retrieves the comments for a post, possibly filtered. +func (r *CommentsService) List(blogId string, postId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) EndDate(endDate string) *CommentsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListCall) FetchBodies(fetchBodies bool) *CommentsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) StartDate(startDate string) *CommentsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *CommentsListCall) Statuses(statuses string) *CommentsListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *CommentsListCall) View(view string) *CommentsListCall { + c.opt_["view"] = view + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a post, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.list", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "emptied", + // "live", + // "pending", + // "spam" + // ], + // "enumDescriptions": [ + // "Comments that have had their content removed", + // "Comments that are publicly visible", + // "Comments that are awaiting administrator approval", + // "Comments marked as spam by the administrator" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.listByBlog": + +type CommentsListByBlogCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// ListByBlog: Retrieves the comments for a blog, across all posts, +// possibly filtered. +func (r *CommentsService) ListByBlog(blogId string) *CommentsListByBlogCall { + c := &CommentsListByBlogCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) EndDate(endDate string) *CommentsListByBlogCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListByBlogCall) FetchBodies(fetchBodies bool) *CommentsListByBlogCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListByBlogCall) MaxResults(maxResults int64) *CommentsListByBlogCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListByBlogCall) PageToken(pageToken string) *CommentsListByBlogCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) StartDate(startDate string) *CommentsListByBlogCall { + c.opt_["startDate"] = startDate + return c +} + +func (c *CommentsListByBlogCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.listByBlog", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.markAsSpam": + +type CommentsMarkAsSpamCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// MarkAsSpam: Marks a comment as spam. +func (r *CommentsService) MarkAsSpam(blogId string, postId string, commentId string) *CommentsMarkAsSpamCall { + c := &CommentsMarkAsSpamCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsMarkAsSpamCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.markAsSpam", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.removeContent": + +type CommentsRemoveContentCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// RemoveContent: Removes the content of a comment. +func (r *CommentsService) RemoveContent(blogId string, postId string, commentId string) *CommentsRemoveContentCall { + c := &CommentsRemoveContentCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsRemoveContentCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes the content of a comment.", + // "httpMethod": "POST", + // "id": "blogger.comments.removeContent", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete content from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pageViews.get": + +type PageViewsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Retrieve pageview stats for a Blog. +func (r *PageViewsService) Get(blogId string) *PageViewsGetCall { + c := &PageViewsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// Range sets the optional parameter "range": +func (c *PageViewsGetCall) Range(range_ string) *PageViewsGetCall { + c.opt_["range"] = range_ + return c +} + +func (c *PageViewsGetCall) Do() (*Pageviews, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["range"]; ok { + params.Set("range", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pageviews") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Pageviews) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve pageview stats for a Blog.", + // "httpMethod": "GET", + // "id": "blogger.pageViews.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "range": { + // "enum": [ + // "30DAYS", + // "7DAYS", + // "all" + // ], + // "enumDescriptions": [ + // "Page view counts from the last thirty days.", + // "Page view counts from the last seven days.", + // "Total page view counts from all time." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pageviews", + // "response": { + // "$ref": "Pageviews" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.delete": + +type PagesDeleteCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Delete: Delete a page by id. +func (r *PagesService) Delete(blogId string, pageId string) *PagesDeleteCall { + c := &PagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +func (c *PagesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a page by id.", + // "httpMethod": "DELETE", + // "id": "blogger.pages.delete", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.get": + +type PagesGetCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Get: Gets one blog page by id. +func (r *PagesService) Get(blogId string, pageId string) *PagesGetCall { + c := &PagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +// View sets the optional parameter "view": +func (c *PagesGetCall) View(view string) *PagesGetCall { + c.opt_["view"] = view + return c +} + +func (c *PagesGetCall) Do() (*Page, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog page by id.", + // "httpMethod": "GET", + // "id": "blogger.pages.get", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog containing the page.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the page to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.insert": + +type PagesInsertCall struct { + s *Service + blogId string + page *Page + opt_ map[string]interface{} +} + +// Insert: Add a page. +func (r *PagesService) Insert(blogId string, page *Page) *PagesInsertCall { + c := &PagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.page = page + return c +} + +func (c *PagesInsertCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a page.", + // "httpMethod": "POST", + // "id": "blogger.pages.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the page to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.list": + +type PagesListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves the pages for a blog, optionally including non-LIVE +// statuses. +func (r *PagesService) List(blogId string) *PagesListCall { + c := &PagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether to +// retrieve the Page bodies. +func (c *PagesListCall) FetchBodies(fetchBodies bool) *PagesListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PagesListCall) Statuses(statuses string) *PagesListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PagesListCall) View(view string) *PagesListCall { + c.opt_["view"] = view + return c +} + +func (c *PagesListCall) Do() (*PageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + // "httpMethod": "GET", + // "id": "blogger.pages.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch pages from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether to retrieve the Page bodies.", + // "location": "query", + // "type": "boolean" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "imported", + // "live" + // ], + // "enumDescriptions": [ + // "Draft (unpublished) Pages", + // "Pages that have had their content removed", + // "Pages that are publicly visible" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "response": { + // "$ref": "PageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.patch": + +type PagesPatchCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Patch: Update a page. This method supports patch semantics. +func (r *PagesService) Patch(blogId string, pageId string, page *Page) *PagesPatchCall { + c := &PagesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesPatchCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.pages.patch", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.update": + +type PagesUpdateCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Update: Update a page. +func (r *PagesService) Update(blogId string, pageId string, page *Page) *PagesUpdateCall { + c := &PagesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesUpdateCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page.", + // "httpMethod": "PUT", + // "id": "blogger.pages.update", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.postUserInfos.get": + +type PostUserInfosGetCall struct { + s *Service + userId string + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Gets one post and user info pair by postId and userId. +func (r *PostUserInfosService) Get(userId string, blogId string, postId string) *PostUserInfosGetCall { + c := &PostUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + c.postId = postId + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostUserInfosGetCall) MaxComments(maxComments int64) *PostUserInfosGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +func (c *PostUserInfosGetCall) Do() (*PostUserInfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one post and user info pair by postId and userId.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "PostUserInfo" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.postUserInfos.list": + +type PostUserInfosListCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of post and user info pairs, possibly +// filtered. +func (r *PostUserInfosService) List(userId string, blogId string) *PostUserInfosListCall { + c := &PostUserInfosListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) EndDate(endDate string) *PostUserInfosListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included. +func (c *PostUserInfosListCall) FetchBodies(fetchBodies bool) *PostUserInfosListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostUserInfosListCall) Labels(labels string) *PostUserInfosListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostUserInfosListCall) MaxResults(maxResults int64) *PostUserInfosListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostUserInfosListCall) OrderBy(orderBy string) *PostUserInfosListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostUserInfosListCall) PageToken(pageToken string) *PostUserInfosListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) StartDate(startDate string) *PostUserInfosListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PostUserInfosListCall) Statuses(statuses string) *PostUserInfosListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PostUserInfosListCall) View(view string) *PostUserInfosListCall { + c.opt_["view"] = view + return c +} + +func (c *PostUserInfosListCall) Do() (*PostUserInfosList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfosList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of post and user info pairs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.list", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of posts is included.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft posts", + // "Published posts", + // "Posts that are scheduled to publish in future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts", + // "response": { + // "$ref": "PostUserInfosList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.delete": + +type PostsDeleteCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Delete: Delete a post by id. +func (r *PostsService) Delete(blogId string, postId string) *PostsDeleteCall { + c := &PostsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a post by id.", + // "httpMethod": "DELETE", + // "id": "blogger.posts.delete", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.get": + +type PostsGetCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Get a post by id. +func (r *PostsService) Get(blogId string, postId string) *PostsGetCall { + c := &PostsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetCall) MaxComments(maxComments int64) *PostsGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": +func (c *PostsGetCall) View(view string) *PostsGetCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a post by id.", + // "httpMethod": "GET", + // "id": "blogger.posts.get", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.getByPath": + +type PostsGetByPathCall struct { + s *Service + blogId string + path string + opt_ map[string]interface{} +} + +// GetByPath: Retrieve a Post by Path. +func (r *PostsService) GetByPath(blogId string, path string) *PostsGetByPathCall { + c := &PostsGetByPathCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.path = path + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetByPathCall) MaxComments(maxComments int64) *PostsGetByPathCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": +func (c *PostsGetByPathCall) View(view string) *PostsGetByPathCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetByPathCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("path", fmt.Sprintf("%v", c.path)) + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/bypath") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Post by Path.", + // "httpMethod": "GET", + // "id": "blogger.posts.getByPath", + // "parameterOrder": [ + // "blogId", + // "path" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "path": { + // "description": "Path of the Post to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/bypath", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.insert": + +type PostsInsertCall struct { + s *Service + blogId string + post *Post + opt_ map[string]interface{} +} + +// Insert: Add a post. +func (r *PostsService) Insert(blogId string, post *Post) *PostsInsertCall { + c := &PostsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.post = post + return c +} + +// IsDraft sets the optional parameter "isDraft": Whether to create the +// post as a draft +func (c *PostsInsertCall) IsDraft(isDraft bool) *PostsInsertCall { + c.opt_["isDraft"] = isDraft + return c +} + +func (c *PostsInsertCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["isDraft"]; ok { + params.Set("isDraft", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a post.", + // "httpMethod": "POST", + // "id": "blogger.posts.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the post to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "isDraft": { + // "description": "Whether to create the post as a draft", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.list": + +type PostsListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of posts, possibly filtered. +func (r *PostsService) List(blogId string) *PostsListCall { + c := &PostsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) EndDate(endDate string) *PostsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsListCall) FetchBodies(fetchBodies bool) *PostsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included. +func (c *PostsListCall) FetchImages(fetchImages bool) *PostsListCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostsListCall) Labels(labels string) *PostsListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostsListCall) MaxResults(maxResults int64) *PostsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsListCall) OrderBy(orderBy string) *PostsListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostsListCall) PageToken(pageToken string) *PostsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) StartDate(startDate string) *PostsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PostsListCall) Statuses(statuses string) *PostsListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PostsListCall) View(view string) *PostsListCall { + c.opt_["view"] = view + return c +} + +func (c *PostsListCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.posts.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft posts", + // "Published posts", + // "Posts that are scheduled to publish in future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.patch": + +type PostsPatchCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Patch: Update a post. This method supports patch semantics. +func (r *PostsService) Patch(blogId string, postId string, post *Post) *PostsPatchCall { + c := &PostsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +func (c *PostsPatchCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.posts.patch", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.publish": + +type PostsPublishCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Publish: Publish a draft post. +func (r *PostsService) Publish(blogId string, postId string) *PostsPublishCall { + c := &PostsPublishCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// PublishDate sets the optional parameter "publishDate": The date and +// time to schedule the publishing of the Blog. +func (c *PostsPublishCall) PublishDate(publishDate string) *PostsPublishCall { + c.opt_["publishDate"] = publishDate + return c +} + +func (c *PostsPublishCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["publishDate"]; ok { + params.Set("publishDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/publish") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Publish a draft post.", + // "httpMethod": "POST", + // "id": "blogger.posts.publish", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "publishDate": { + // "description": "The date and time to schedule the publishing of the Blog.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/publish", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.revert": + +type PostsRevertCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Revert: Revert a published or scheduled post to draft state. +func (r *PostsService) Revert(blogId string, postId string) *PostsRevertCall { + c := &PostsRevertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsRevertCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/revert") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Revert a published or scheduled post to draft state.", + // "httpMethod": "POST", + // "id": "blogger.posts.revert", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/revert", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.search": + +type PostsSearchCall struct { + s *Service + blogId string + q string + opt_ map[string]interface{} +} + +// Search: Search for a post. +func (r *PostsService) Search(blogId string, q string) *PostsSearchCall { + c := &PostsSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.q = q + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsSearchCall) FetchBodies(fetchBodies bool) *PostsSearchCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsSearchCall) OrderBy(orderBy string) *PostsSearchCall { + c.opt_["orderBy"] = orderBy + return c +} + +func (c *PostsSearchCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("q", fmt.Sprintf("%v", c.q)) + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Search for a post.", + // "httpMethod": "GET", + // "id": "blogger.posts.search", + // "parameterOrder": [ + // "blogId", + // "q" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query terms to search this blog for matching posts.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/search", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.update": + +type PostsUpdateCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Update: Update a post. +func (r *PostsService) Update(blogId string, postId string, post *Post) *PostsUpdateCall { + c := &PostsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +func (c *PostsUpdateCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post.", + // "httpMethod": "PUT", + // "id": "blogger.posts.update", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.users.get": + +type UsersGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Gets one user by id. +func (r *UsersService) Get(userId string) *UsersGetCall { + c := &UsersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *UsersGetCall) Do() (*User, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user by id.", + // "httpMethod": "GET", + // "id": "blogger.users.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}", + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.json new file mode 100644 index 0000000000000..b23b25741dbc3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.json @@ -0,0 +1,89 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/3m5rB86FE5KuW1K3jAl88AxCreg\"", + "discoveryVersion": "v1", + "id": "getwithoutbody:v1", + "name": "getwithoutbody", + "version": "v1", + "title": "Example API", + "description": "The Example API demonstrates a GET with a request.", + "ownerDomain": "google.com", + "ownerName": "Google", + "protocol": "rest", + "schemas": { + "ListMetricRequest": { + "id": "ListMetricRequest", + "type": "object", + "description": "The request of getwithoutbody.metricDescriptors.list.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"getwithoutbody#listMetricRequest\".", + "default": "getwithoutbody#listMetricRequest" + } + } + }, + "ListMetricResponse": { + "id": "ListMetricResponse", + "type": "object", + "description": "The response of getwithoutbody.metricDescriptors.list.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"getwithoutbody#listMetricResponse\".", + "default": "getwithoutbody#listMetricResponse" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token. If present, indicates that additional results are available for retrieval. To access the results past the pagination limit, set this value to the pageToken query parameter." + } + } + } + }, + "resources": { + "metricDescriptors": { + "methods": { + "list": { + "id": "getwithoutbody.metricDescriptors.list", + "path": "{project}/metricDescriptors", + "httpMethod": "GET", + "description": "List all of the available metric descriptors. Large number of metric descriptors will be paginated, use the nextPageToken returned in the response to request subsequent pages of results by setting the pageToken query parameter to the value of the nextPageToken.", + "parameters": { + "count": { + "type": "integer", + "description": "Maximum number of metric descriptors per page. Used for pagination. If not specified, count = 100.", + "default": "100", + "format": "int32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pagination token, which is used to page through large result sets. Set this value to the value of the nextPageToken to retrieve the next page of results.", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project id. The value can be the numeric project ID or string-based project name.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "ListMetricRequest" + }, + "response": { + "$ref": "ListMetricResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/getwithoutbody.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.want new file mode 100644 index 0000000000000..423aae8267953 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/getwithoutbody.want @@ -0,0 +1,190 @@ +// Package getwithoutbody provides access to the Example API. +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/getwithoutbody/v1" +// ... +// getwithoutbodyService, err := getwithoutbody.New(oauthHttpClient) +package getwithoutbody + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "getwithoutbody:v1" +const apiName = "getwithoutbody" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/discovery/v1/apis" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.MetricDescriptors = NewMetricDescriptorsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + MetricDescriptors *MetricDescriptorsService +} + +func NewMetricDescriptorsService(s *Service) *MetricDescriptorsService { + rs := &MetricDescriptorsService{s: s} + return rs +} + +type MetricDescriptorsService struct { + s *Service +} + +type ListMetricRequest struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "getwithoutbody#listMetricRequest". + Kind string `json:"kind,omitempty"` +} + +type ListMetricResponse struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "getwithoutbody#listMetricResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token. If present, indicates that + // additional results are available for retrieval. To access the results + // past the pagination limit, set this value to the pageToken query + // parameter. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "getwithoutbody.metricDescriptors.list": + +type MetricDescriptorsListCall struct { + s *Service + project string + listmetricrequest *ListMetricRequest + opt_ map[string]interface{} +} + +// List: List all of the available metric descriptors. Large number of +// metric descriptors will be paginated, use the nextPageToken returned +// in the response to request subsequent pages of results by setting the +// pageToken query parameter to the value of the nextPageToken. +func (r *MetricDescriptorsService) List(project string, listmetricrequest *ListMetricRequest) *MetricDescriptorsListCall { + c := &MetricDescriptorsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.listmetricrequest = listmetricrequest + return c +} + +// Count sets the optional parameter "count": Maximum number of metric +// descriptors per page. Used for pagination. If not specified, count = +// 100. +func (c *MetricDescriptorsListCall) Count(count int64) *MetricDescriptorsListCall { + c.opt_["count"] = count + return c +} + +// PageToken sets the optional parameter "pageToken": The pagination +// token, which is used to page through large result sets. Set this +// value to the value of the nextPageToken to retrieve the next page of +// results. +func (c *MetricDescriptorsListCall) PageToken(pageToken string) *MetricDescriptorsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *MetricDescriptorsListCall) Do() (*ListMetricResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["count"]; ok { + params.Set("count", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/metricDescriptors") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ListMetricResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the available metric descriptors. Large number of metric descriptors will be paginated, use the nextPageToken returned in the response to request subsequent pages of results by setting the pageToken query parameter to the value of the nextPageToken.", + // "httpMethod": "GET", + // "id": "getwithoutbody.metricDescriptors.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "count": { + // "default": "100", + // "description": "Maximum number of metric descriptors per page. Used for pagination. If not specified, count = 100.", + // "format": "int32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The pagination token, which is used to page through large result sets. Set this value to the value of the nextPageToken to retrieve the next page of results.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "The project id. The value can be the numeric project ID or string-based project name.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/metricDescriptors", + // "request": { + // "$ref": "ListMetricRequest" + // }, + // "response": { + // "$ref": "ListMetricResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/getwithoutbody.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.json new file mode 100644 index 0000000000000..435aa857aaaaf --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.json @@ -0,0 +1,38 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/3m5rB86FE5KuW1K3jAl88AxCreg\"", + "discoveryVersion": "v1", + "id": "additionalprops:v1", + "name": "additionalprops", + "version": "v1", + "title": "Example API", + "description": "The Example API demonstrates an associative array.", + "ownerDomain": "google.com", + "ownerName": "Google", + "protocol": "rest", + "schemas": { + "TimeseriesDescriptor": { + "id": "TimeseriesDescriptor", + "type": "object", + "description": "The descriptions of a time series.", + "properties": { + "labels": { + "type": "object", + "description": "The set of key-value pairs that describe this time series, including target-specific labels and metric-specific labels.", + "additionalProperties": { + "type": "string", + "description": "The label's name." + } + }, + "metric": { + "type": "string", + "description": "The name of the metric." + }, + "project": { + "type": "string", + "description": "The project ID to which this time series belongs." + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.want new file mode 100644 index 0000000000000..107be8c14c894 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/mapofstrings-1.want @@ -0,0 +1,63 @@ +// Package additionalprops provides access to the Example API. +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/additionalprops/v1" +// ... +// additionalpropsService, err := additionalprops.New(oauthHttpClient) +package additionalprops + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "additionalprops:v1" +const apiName = "additionalprops" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/discovery/v1/apis" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type TimeseriesDescriptor struct { + // Labels: The set of key-value pairs that describe this time series, + // including target-specific labels and metric-specific labels. + Labels map[string]string `json:"labels,omitempty"` + + // Metric: The name of the metric. + Metric string `json:"metric,omitempty"` + + // Project: The project ID to which this time series belongs. + Project string `json:"project,omitempty"` +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.json new file mode 100644 index 0000000000000..738555e65ffb4 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.json @@ -0,0 +1,94 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/1UCG4CqfTBrxPN0MRjUm7GaLJ7Y\"", + "discoveryVersion": "v1", + "id": "adexchangebuyer:v1.1", + "name": "adexchangebuyer", + "version": "v1.1", + "title": "Ad Exchange Buyer API", + "description": "Lets you manage your Ad Exchange Buyer account.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/doubleclick-16.gif", + "x32": "http://www.google.com/images/icons/product/doubleclick-32.gif" + }, + "documentationLink": "https://developers.google.com/ad-exchange/buyer-rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/adexchangebuyer/v1.1/", + "basePath": "/adexchangebuyer/v1.1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "adexchangebuyer/v1.1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/adexchange.buyer": { + "description": "Manage your Ad Exchange buyer account configuration" + } + } + } + }, + "schemas": { + "Creative": { + "id": "Creative", + "type": "object", + "description": "A creative and its classification data.", + "properties": { + "advertiserId": { + "type": "array", + "description": "Detected advertiser id, if any. Read-only. This field should not be set in requests.", + "items": { + "type": "string", + "format": "int64" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.want new file mode 100644 index 0000000000000..16f7c130a9ee7 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/quotednum.want @@ -0,0 +1,65 @@ +// Package adexchangebuyer provides access to the Ad Exchange Buyer API. +// +// See https://developers.google.com/ad-exchange/buyer-rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/adexchangebuyer/v1.1" +// ... +// adexchangebuyerService, err := adexchangebuyer.New(oauthHttpClient) +package adexchangebuyer + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "adexchangebuyer:v1.1" +const apiName = "adexchangebuyer" +const apiVersion = "v1.1" +const basePath = "https://www.googleapis.com/adexchangebuyer/v1.1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Ad Exchange buyer account configuration + AdexchangeBuyerScope = "https://www.googleapis.com/auth/adexchange.buyer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL +} + +type Creative struct { + // AdvertiserId: Detected advertiser id, if any. Read-only. This field + // should not be set in requests. + AdvertiserId googleapi.Int64s `json:"advertiserId,omitempty"` +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.json b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.json new file mode 100644 index 0000000000000..53b7b164838af --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.json @@ -0,0 +1,2199 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"DGgqtFnjgu83tuwvvVNNUhOiHWk/HqXrvEeuZV7fVbX7lTgVYLdSy_g\"", + "discoveryVersion": "v1", + "id": "blogger:v3", + "name": "blogger", + "version": "v3", + "title": "Blogger API", + "description": "API for access to the data within Blogger.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/blogger-16.png", + "x32": "http://www.google.com/images/icons/product/blogger-32.png" + }, + "documentationLink": "https://developers.google.com/blogger/docs/3.0/getting_started", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/blogger/v3/", + "basePath": "/blogger/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "blogger/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/blogger": { + "description": "Manage your Blogger account" + }, + "https://www.googleapis.com/auth/blogger.readonly": { + "description": "View your Blogger account" + } + } + } + }, + "schemas": { + "Blog": { + "id": "Blog", + "type": "object", + "properties": { + "customMetaData": { + "type": "string", + "description": "The JSON custom meta-data for the Blog" + }, + "description": { + "type": "string", + "description": "The description of this blog. This is displayed underneath the title." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#blog", + "default": "blogger#blog" + }, + "locale": { + "type": "object", + "description": "The locale this Blog is set to.", + "properties": { + "country": { + "type": "string", + "description": "The country this blog's locale is set to." + }, + "language": { + "type": "string", + "description": "The language this blog is authored in." + }, + "variant": { + "type": "string", + "description": "The language variant this blog is authored in." + } + } + }, + "name": { + "type": "string", + "description": "The name of this blog. This is displayed as the title." + }, + "pages": { + "type": "object", + "description": "The container of pages in this blog.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the container for pages in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of pages in this blog.", + "format": "int32" + } + } + }, + "posts": { + "type": "object", + "description": "The container of posts in this blog.", + "properties": { + "items": { + "type": "array", + "description": "The List of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the container for posts in this blog." + }, + "totalItems": { + "type": "integer", + "description": "The count of posts in this blog.", + "format": "int32" + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this blog was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this blog was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this blog is published." + } + } + }, + "BlogList": { + "id": "BlogList", + "type": "object", + "properties": { + "blogUserInfos": { + "type": "array", + "description": "Admin level list of blog per-user information", + "items": { + "$ref": "Service" + } + }, + "items": { + "type": "array", + "description": "The list of Blogs this user has Authorship or Admin rights over.", + "items": { + "$ref": "Blog" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogList", + "default": "blogger#blogList" + } + } + }, + "BlogPerUserInfo": { + "id": "BlogPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog resource" + }, + "hasAdminAccess": { + "type": "boolean", + "description": "True if the user has Admin level access to the blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogPerUserInfo", + "default": "blogger#blogPerUserInfo" + }, + "photosAlbumKey": { + "type": "string", + "description": "The Photo Album Key for the user when adding photos to the blog" + }, + "userId": { + "type": "string", + "description": "ID of the User" + } + } + }, + "Service": { + "id": "Service", + "type": "object", + "properties": { + "blog": { + "$ref": "Blog", + "description": "The Blog resource." + }, + "blog_user_info": { + "$ref": "BlogPerUserInfo", + "description": "Information about a User for the Blog." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#blogUserInfo", + "default": "blogger#blogUserInfo" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Comment creator." + }, + "image": { + "type": "object", + "description": "The comment creator's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The comment creator's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Comment creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this comment." + } + } + }, + "content": { + "type": "string", + "description": "The actual content of the comment. May include HTML markup." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "inReplyTo": { + "type": "object", + "description": "Data about the comment this is in reply to.", + "properties": { + "id": { + "type": "string", + "description": "The identified of the parent of this comment." + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#comment", + "default": "blogger#comment" + }, + "post": { + "type": "object", + "description": "Data about the post containing this comment.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the post containing this comment." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this comment was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the comment (only populated for admin users)" + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this comment was last updated.", + "format": "date-time" + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for a Post.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#commentList", + "default": "blogger#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "prevPageToken": { + "type": "string", + "description": "Pagination token to fetch the previous page, if one exists." + } + } + }, + "Page": { + "id": "Page", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Page.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Page creator." + }, + "image": { + "type": "object", + "description": "The page author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The page author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Page creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Page.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the blog containing this page." + } + } + }, + "content": { + "type": "string", + "description": "The body content of this Page, in HTML." + }, + "id": { + "type": "string", + "description": "The identifier for this resource." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#page", + "default": "blogger#page" + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Page was published.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "The status of the page for admin resources (either LIVE or DRAFT)." + }, + "title": { + "type": "string", + "description": "The title of this entity. This is the name displayed in the Admin user interface." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Page was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL that this Page is displayed at." + } + } + }, + "PageList": { + "id": "PageList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Pages for a Blog.", + "items": { + "$ref": "Page" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#pageList", + "default": "blogger#pageList" + } + } + }, + "Pageviews": { + "id": "Pageviews", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "Blog Id", + "format": "int64" + }, + "counts": { + "type": "array", + "description": "The container of posts in this blog.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Count of page views for the given time range", + "format": "int64" + }, + "timeRange": { + "type": "string", + "description": "Time range the given count applies to" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entry. Always blogger#page_views", + "default": "blogger#page_views" + } + } + }, + "Post": { + "id": "Post", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The author of this Post.", + "properties": { + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier of the Post creator." + }, + "image": { + "type": "object", + "description": "The Post author's avatar.", + "properties": { + "url": { + "type": "string", + "description": "The Post author's avatar URL." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the Post creator's Profile page." + } + } + }, + "blog": { + "type": "object", + "description": "Data about the blog containing this Post.", + "properties": { + "id": { + "type": "string", + "description": "The identifier of the Blog that contains this Post." + } + } + }, + "content": { + "type": "string", + "description": "The content of the Post. May contain HTML markup." + }, + "customMetaData": { + "type": "string", + "description": "The JSON meta-data for the Post." + }, + "id": { + "type": "string", + "description": "The identifier of this Post." + }, + "images": { + "type": "array", + "description": "Display image for the Post.", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string" + } + } + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#post", + "default": "blogger#post" + }, + "labels": { + "type": "array", + "description": "The list of labels this Post was tagged with.", + "items": { + "type": "string" + } + }, + "location": { + "type": "object", + "description": "The location for geotagged posts.", + "properties": { + "lat": { + "type": "number", + "description": "Location's latitude.", + "format": "double" + }, + "lng": { + "type": "number", + "description": "Location's longitude.", + "format": "double" + }, + "name": { + "type": "string", + "description": "Location name." + }, + "span": { + "type": "string", + "description": "Location's viewport span. Can be used when rendering a map preview." + } + } + }, + "published": { + "type": "string", + "description": "RFC 3339 date-time when this Post was published.", + "format": "date-time" + }, + "replies": { + "type": "object", + "description": "The container of comments on this Post.", + "properties": { + "items": { + "type": "array", + "description": "The List of Comments for this Post.", + "items": { + "$ref": "Comment" + } + }, + "selfLink": { + "type": "string", + "description": "The URL of the comments on this post." + }, + "totalItems": { + "type": "string", + "description": "The count of comments on this post.", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "status": { + "type": "string", + "description": "Status of the post. Only set for admin-level requests" + }, + "title": { + "type": "string", + "description": "The title of the Post." + }, + "titleLink": { + "type": "string", + "description": "The title link URL, similar to atom's related link." + }, + "updated": { + "type": "string", + "description": "RFC 3339 date-time when this Post was last updated.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL where this Post is displayed." + } + } + }, + "PostList": { + "id": "PostList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts for this Blog.", + "items": { + "$ref": "Post" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "PostPerUserInfo": { + "id": "PostPerUserInfo", + "type": "object", + "properties": { + "blogId": { + "type": "string", + "description": "ID of the Blog that the post resource belongs to." + }, + "hasEditAccess": { + "type": "boolean", + "description": "True if the user has Author level access to the post." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postPerUserInfo", + "default": "blogger#postPerUserInfo" + }, + "postId": { + "type": "string", + "description": "ID of the Post resource." + }, + "userId": { + "type": "string", + "description": "ID of the User." + } + } + }, + "PostUserInfo": { + "id": "PostUserInfo", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postUserInfo", + "default": "blogger#postUserInfo" + }, + "post": { + "$ref": "Post", + "description": "The Post resource." + }, + "post_user_info": { + "$ref": "PostPerUserInfo", + "description": "Information about a User for the Post." + } + } + }, + "PostUserInfosList": { + "id": "PostUserInfosList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of Posts with User information for the post, for this Blog.", + "items": { + "$ref": "PostUserInfo" + } + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#postList", + "default": "blogger#postUserInfosList" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + } + } + }, + "User": { + "id": "User", + "type": "object", + "properties": { + "about": { + "type": "string", + "description": "Profile summary information." + }, + "blogs": { + "type": "object", + "description": "The container of blogs for this user.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL of the Blogs for this user." + } + } + }, + "created": { + "type": "string", + "description": "The timestamp of when this profile was created, in seconds since epoch.", + "format": "date-time" + }, + "displayName": { + "type": "string", + "description": "The display name." + }, + "id": { + "type": "string", + "description": "The identifier for this User." + }, + "kind": { + "type": "string", + "description": "The kind of this entity. Always blogger#user", + "default": "blogger#user" + }, + "locale": { + "type": "object", + "description": "This user's locale", + "properties": { + "country": { + "type": "string", + "description": "The user's country setting." + }, + "language": { + "type": "string", + "description": "The user's language setting." + }, + "variant": { + "type": "string", + "description": "The user's language variant setting." + } + } + }, + "selfLink": { + "type": "string", + "description": "The API REST URL to fetch this resource from." + }, + "url": { + "type": "string", + "description": "The user's profile page." + } + } + } + }, + "resources": { + "blogUserInfos": { + "methods": { + "get": { + "id": "blogger.blogUserInfos.get", + "path": "users/{userId}/blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog and user info pair by blogId and userId.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "Service" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "blogs": { + "methods": { + "get": { + "id": "blogger.blogs.get", + "path": "blogs/{blogId}", + "httpMethod": "GET", + "description": "Gets one blog by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "maxPosts": { + "type": "integer", + "description": "Maximum number of posts to pull back with the blog.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByUrl": { + "id": "blogger.blogs.getByUrl", + "path": "blogs/byurl", + "httpMethod": "GET", + "description": "Retrieve a Blog by URL.", + "parameters": { + "url": { + "type": "string", + "description": "The URL of the blog to retrieve.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "url" + ], + "response": { + "$ref": "Blog" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByUser": { + "id": "blogger.blogs.listByUser", + "path": "users/{userId}/blogs", + "httpMethod": "GET", + "description": "Retrieves a list of blogs, possibly filtered.", + "parameters": { + "fetchUserInfo": { + "type": "boolean", + "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "BlogList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "comments": { + "methods": { + "approve": { + "id": "blogger.comments.approve", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + "httpMethod": "POST", + "description": "Marks a comment as not spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as not spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "delete": { + "id": "blogger.comments.delete", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "DELETE", + "description": "Delete a comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.comments.get", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + "httpMethod": "GET", + "description": "Gets one comment by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to containing the comment.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.comments.list", + "path": "blogs/{blogId}/posts/{postId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a post, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "postId": { + "type": "string", + "description": "ID of the post to fetch posts from.", + "required": true, + "location": "path" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "emptied", + "live", + "pending", + "spam" + ], + "enumDescriptions": [ + "Comments that have had their content removed", + "Comments that are publicly visible", + "Comments that are awaiting administrator approval", + "Comments marked as spam by the administrator" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "listByBlog": { + "id": "blogger.comments.listByBlog", + "path": "blogs/{blogId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch comments from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of the comments is included.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of comments to include in the result.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "markAsSpam": { + "id": "blogger.comments.markAsSpam", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + "httpMethod": "POST", + "description": "Marks a comment as spam.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to mark as spam.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "removeContent": { + "id": "blogger.comments.removeContent", + "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + "httpMethod": "POST", + "description": "Removes the content of a comment.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "commentId": { + "type": "string", + "description": "The ID of the comment to delete content from.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId", + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pageViews": { + "methods": { + "get": { + "id": "blogger.pageViews.get", + "path": "blogs/{blogId}/pageviews", + "httpMethod": "GET", + "description": "Retrieve pageview stats for a Blog.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog to get.", + "required": true, + "location": "path" + }, + "range": { + "type": "string", + "enum": [ + "30DAYS", + "7DAYS", + "all" + ], + "enumDescriptions": [ + "Page view counts from the last thirty days.", + "Page view counts from the last seven days.", + "Total page view counts from all time." + ], + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "Pageviews" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "pages": { + "methods": { + "delete": { + "id": "blogger.pages.delete", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "DELETE", + "description": "Delete a page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.pages.get", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "GET", + "description": "Gets one blog page by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog containing the page.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the page to get.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.pages.insert", + "path": "blogs/{blogId}/pages", + "httpMethod": "POST", + "description": "Add a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the page to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.pages.list", + "path": "blogs/{blogId}/pages", + "httpMethod": "GET", + "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch pages from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether to retrieve the Page bodies.", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "imported", + "live" + ], + "enumDescriptions": [ + "Draft (unpublished) Pages", + "Pages that have had their content removed", + "Pages that are publicly visible" + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.pages.patch", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PATCH", + "description": "Update a page. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "update": { + "id": "blogger.pages.update", + "path": "blogs/{blogId}/pages/{pageId}", + "httpMethod": "PUT", + "description": "Update a page.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "pageId": { + "type": "string", + "description": "The ID of the Page.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "pageId" + ], + "request": { + "$ref": "Page" + }, + "response": { + "$ref": "Page" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "postUserInfos": { + "methods": { + "get": { + "id": "blogger.postUserInfos.get", + "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Gets one post and user info pair by postId and userId.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the blog.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post to get.", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "blogId", + "postId" + ], + "response": { + "$ref": "PostUserInfo" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "list": { + "id": "blogger.postUserInfos.list", + "path": "users/{userId}/blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of post and user info pairs, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included.", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft posts", + "Published posts", + "Posts that are scheduled to publish in future." + ], + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "userId", + "blogId" + ], + "response": { + "$ref": "PostUserInfosList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + }, + "posts": { + "methods": { + "delete": { + "id": "blogger.posts.delete", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "DELETE", + "description": "Delete a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "The Id of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "get": { + "id": "blogger.posts.get", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "GET", + "description": "Get a post by id.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "postId": { + "type": "string", + "description": "The ID of the post", + "required": true, + "location": "path" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "getByPath": { + "id": "blogger.posts.getByPath", + "path": "blogs/{blogId}/posts/bypath", + "httpMethod": "GET", + "description": "Retrieve a Post by Path.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "maxComments": { + "type": "integer", + "description": "Maximum number of comments to pull back on a post.", + "format": "uint32", + "location": "query" + }, + "path": { + "type": "string", + "description": "Path of the Post to retrieve.", + "required": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Admin level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "path" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "insert": { + "id": "blogger.posts.insert", + "path": "blogs/{blogId}/posts", + "httpMethod": "POST", + "description": "Add a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to add the post to.", + "required": true, + "location": "path" + }, + "isDraft": { + "type": "boolean", + "description": "Whether to create the post as a draft", + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "list": { + "id": "blogger.posts.list", + "path": "blogs/{blogId}/posts", + "httpMethod": "GET", + "description": "Retrieves a list of posts, possibly filtered.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch posts from.", + "required": true, + "location": "path" + }, + "endDate": { + "type": "string", + "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "fetchImages": { + "type": "boolean", + "description": "Whether image URL metadata for each post is included.", + "location": "query" + }, + "labels": { + "type": "string", + "description": "Comma-separated list of labels to search for.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of posts to fetch.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Continuation token if the request is paged.", + "location": "query" + }, + "startDate": { + "type": "string", + "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + "format": "date-time", + "location": "query" + }, + "statuses": { + "type": "string", + "enum": [ + "draft", + "live", + "scheduled" + ], + "enumDescriptions": [ + "Draft posts", + "Published posts", + "Posts that are scheduled to publish in future." + ], + "repeated": true, + "location": "query" + }, + "view": { + "type": "string", + "enum": [ + "ADMIN", + "AUTHOR", + "READER" + ], + "enumDescriptions": [ + "Admin level detail", + "Author level detail", + "Reader level detail" + ], + "location": "query" + } + }, + "parameterOrder": [ + "blogId" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "patch": { + "id": "blogger.posts.patch", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PATCH", + "description": "Update a post. This method supports patch semantics.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "publish": { + "id": "blogger.posts.publish", + "path": "blogs/{blogId}/posts/{postId}/publish", + "httpMethod": "POST", + "description": "Publish a draft post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + }, + "publishDate": { + "type": "string", + "description": "The date and time to schedule the publishing of the Blog.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "revert": { + "id": "blogger.posts.revert", + "path": "blogs/{blogId}/posts/{postId}/revert", + "httpMethod": "POST", + "description": "Revert a published or scheduled post to draft state.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + }, + "search": { + "id": "blogger.posts.search", + "path": "blogs/{blogId}/posts/search", + "httpMethod": "GET", + "description": "Search for a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "ID of the blog to fetch the post from.", + "required": true, + "location": "path" + }, + "fetchBodies": { + "type": "boolean", + "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + "default": "true", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results", + "default": "PUBLISHED", + "enum": [ + "published", + "updated" + ], + "enumDescriptions": [ + "Order by the date the post was published", + "Order by the date the post was last updated" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "Query terms to search this blog for matching posts.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "blogId", + "q" + ], + "response": { + "$ref": "PostList" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + }, + "update": { + "id": "blogger.posts.update", + "path": "blogs/{blogId}/posts/{postId}", + "httpMethod": "PUT", + "description": "Update a post.", + "parameters": { + "blogId": { + "type": "string", + "description": "The ID of the Blog.", + "required": true, + "location": "path" + }, + "postId": { + "type": "string", + "description": "The ID of the Post.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "blogId", + "postId" + ], + "request": { + "$ref": "Post" + }, + "response": { + "$ref": "Post" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger" + ] + } + } + }, + "users": { + "methods": { + "get": { + "id": "blogger.users.get", + "path": "users/{userId}", + "httpMethod": "GET", + "description": "Gets one user by id.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "User" + }, + "scopes": [ + "https://www.googleapis.com/auth/blogger", + "https://www.googleapis.com/auth/blogger.readonly" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.want b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.want new file mode 100644 index 0000000000000..ec32d8efb3d6a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/google-api-go-generator/testdata/resource-named-service.want @@ -0,0 +1,3860 @@ +// Package blogger provides access to the Blogger API. +// +// See https://developers.google.com/blogger/docs/3.0/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/blogger/v3" +// ... +// bloggerService, err := blogger.New(oauthHttpClient) +package blogger + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "blogger:v3" +const apiName = "blogger" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/blogger/v3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Blogger account + BloggerScope = "https://www.googleapis.com/auth/blogger" + + // View your Blogger account + BloggerReadonlyScope = "https://www.googleapis.com/auth/blogger.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BlogUserInfos = NewBlogUserInfosService(s) + s.Blogs = NewBlogsService(s) + s.Comments = NewCommentsService(s) + s.PageViews = NewPageViewsService(s) + s.Pages = NewPagesService(s) + s.PostUserInfos = NewPostUserInfosService(s) + s.Posts = NewPostsService(s) + s.Users = NewUsersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BlogUserInfos *BlogUserInfosService + + Blogs *BlogsService + + Comments *CommentsService + + PageViews *PageViewsService + + Pages *PagesService + + PostUserInfos *PostUserInfosService + + Posts *PostsService + + Users *UsersService +} + +func NewBlogUserInfosService(s *Service) *BlogUserInfosService { + rs := &BlogUserInfosService{s: s} + return rs +} + +type BlogUserInfosService struct { + s *Service +} + +func NewBlogsService(s *Service) *BlogsService { + rs := &BlogsService{s: s} + return rs +} + +type BlogsService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewPageViewsService(s *Service) *PageViewsService { + rs := &PageViewsService{s: s} + return rs +} + +type PageViewsService struct { + s *Service +} + +func NewPagesService(s *Service) *PagesService { + rs := &PagesService{s: s} + return rs +} + +type PagesService struct { + s *Service +} + +func NewPostUserInfosService(s *Service) *PostUserInfosService { + rs := &PostUserInfosService{s: s} + return rs +} + +type PostUserInfosService struct { + s *Service +} + +func NewPostsService(s *Service) *PostsService { + rs := &PostsService{s: s} + return rs +} + +type PostsService struct { + s *Service +} + +func NewUsersService(s *Service) *UsersService { + rs := &UsersService{s: s} + return rs +} + +type UsersService struct { + s *Service +} + +type Blog struct { + // CustomMetaData: The JSON custom meta-data for the Blog + CustomMetaData string `json:"customMetaData,omitempty"` + + // Description: The description of this blog. This is displayed + // underneath the title. + Description string `json:"description,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entry. Always blogger#blog + Kind string `json:"kind,omitempty"` + + // Locale: The locale this Blog is set to. + Locale *BlogLocale `json:"locale,omitempty"` + + // Name: The name of this blog. This is displayed as the title. + Name string `json:"name,omitempty"` + + // Pages: The container of pages in this blog. + Pages *BlogPages `json:"pages,omitempty"` + + // Posts: The container of posts in this blog. + Posts *BlogPosts `json:"posts,omitempty"` + + // Published: RFC 3339 date-time when this blog was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: RFC 3339 date-time when this blog was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this blog is published. + Url string `json:"url,omitempty"` +} + +type BlogLocale struct { + // Country: The country this blog's locale is set to. + Country string `json:"country,omitempty"` + + // Language: The language this blog is authored in. + Language string `json:"language,omitempty"` + + // Variant: The language variant this blog is authored in. + Variant string `json:"variant,omitempty"` +} + +type BlogPages struct { + // SelfLink: The URL of the container for pages in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of pages in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogPosts struct { + // Items: The List of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // SelfLink: The URL of the container for posts in this blog. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of posts in this blog. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type BlogList struct { + // BlogUserInfos: Admin level list of blog per-user information + BlogUserInfos []*Service1 `json:"blogUserInfos,omitempty"` + + // Items: The list of Blogs this user has Authorship or Admin rights + // over. + Items []*Blog `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogList + Kind string `json:"kind,omitempty"` +} + +type BlogPerUserInfo struct { + // BlogId: ID of the Blog resource + BlogId string `json:"blogId,omitempty"` + + // HasAdminAccess: True if the user has Admin level access to the blog. + HasAdminAccess bool `json:"hasAdminAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogPerUserInfo + Kind string `json:"kind,omitempty"` + + // PhotosAlbumKey: The Photo Album Key for the user when adding photos + // to the blog + PhotosAlbumKey string `json:"photosAlbumKey,omitempty"` + + // UserId: ID of the User + UserId string `json:"userId,omitempty"` +} + +type Comment struct { + // Author: The author of this Comment. + Author *CommentAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this comment. + Blog *CommentBlog `json:"blog,omitempty"` + + // Content: The actual content of the comment. May include HTML markup. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // InReplyTo: Data about the comment this is in reply to. + InReplyTo *CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: The kind of this entry. Always blogger#comment + Kind string `json:"kind,omitempty"` + + // Post: Data about the post containing this comment. + Post *CommentPost `json:"post,omitempty"` + + // Published: RFC 3339 date-time when this comment was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the comment (only populated for admin users) + Status string `json:"status,omitempty"` + + // Updated: RFC 3339 date-time when this comment was last updated. + Updated string `json:"updated,omitempty"` +} + +type CommentAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Comment creator. + Id string `json:"id,omitempty"` + + // Image: The comment creator's avatar. + Image *CommentAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Comment creator's Profile page. + Url string `json:"url,omitempty"` +} + +type CommentAuthorImage struct { + // Url: The comment creator's avatar URL. + Url string `json:"url,omitempty"` +} + +type CommentBlog struct { + // Id: The identifier of the blog containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The identified of the parent of this comment. + Id string `json:"id,omitempty"` +} + +type CommentPost struct { + // Id: The identifier of the post containing this comment. + Id string `json:"id,omitempty"` +} + +type CommentList struct { + // Items: The List of Comments for a Post. + Items []*Comment `json:"items,omitempty"` + + // Kind: The kind of this entry. Always blogger#commentList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: Pagination token to fetch the previous page, if one + // exists. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type Page struct { + // Author: The author of this Page. + Author *PageAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Page. + Blog *PageBlog `json:"blog,omitempty"` + + // Content: The body content of this Page, in HTML. + Content string `json:"content,omitempty"` + + // Id: The identifier for this resource. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#page + Kind string `json:"kind,omitempty"` + + // Published: RFC 3339 date-time when this Page was published. + Published string `json:"published,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: The status of the page for admin resources (either LIVE or + // DRAFT). + Status string `json:"status,omitempty"` + + // Title: The title of this entity. This is the name displayed in the + // Admin user interface. + Title string `json:"title,omitempty"` + + // Updated: RFC 3339 date-time when this Page was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL that this Page is displayed at. + Url string `json:"url,omitempty"` +} + +type PageAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Page creator. + Id string `json:"id,omitempty"` + + // Image: The page author's avatar. + Image *PageAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Page creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PageAuthorImage struct { + // Url: The page author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PageBlog struct { + // Id: The identifier of the blog containing this page. + Id string `json:"id,omitempty"` +} + +type PageList struct { + // Items: The list of Pages for a Blog. + Items []*Page `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#pageList + Kind string `json:"kind,omitempty"` +} + +type Pageviews struct { + // BlogId: Blog Id + BlogId int64 `json:"blogId,omitempty,string"` + + // Counts: The container of posts in this blog. + Counts []*PageviewsCounts `json:"counts,omitempty"` + + // Kind: The kind of this entry. Always blogger#page_views + Kind string `json:"kind,omitempty"` +} + +type PageviewsCounts struct { + // Count: Count of page views for the given time range + Count int64 `json:"count,omitempty,string"` + + // TimeRange: Time range the given count applies to + TimeRange string `json:"timeRange,omitempty"` +} + +type Post struct { + // Author: The author of this Post. + Author *PostAuthor `json:"author,omitempty"` + + // Blog: Data about the blog containing this Post. + Blog *PostBlog `json:"blog,omitempty"` + + // Content: The content of the Post. May contain HTML markup. + Content string `json:"content,omitempty"` + + // CustomMetaData: The JSON meta-data for the Post. + CustomMetaData string `json:"customMetaData,omitempty"` + + // Id: The identifier of this Post. + Id string `json:"id,omitempty"` + + // Images: Display image for the Post. + Images []*PostImages `json:"images,omitempty"` + + // Kind: The kind of this entity. Always blogger#post + Kind string `json:"kind,omitempty"` + + // Labels: The list of labels this Post was tagged with. + Labels []string `json:"labels,omitempty"` + + // Location: The location for geotagged posts. + Location *PostLocation `json:"location,omitempty"` + + // Published: RFC 3339 date-time when this Post was published. + Published string `json:"published,omitempty"` + + // Replies: The container of comments on this Post. + Replies *PostReplies `json:"replies,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the post. Only set for admin-level requests + Status string `json:"status,omitempty"` + + // Title: The title of the Post. + Title string `json:"title,omitempty"` + + // TitleLink: The title link URL, similar to atom's related link. + TitleLink string `json:"titleLink,omitempty"` + + // Updated: RFC 3339 date-time when this Post was last updated. + Updated string `json:"updated,omitempty"` + + // Url: The URL where this Post is displayed. + Url string `json:"url,omitempty"` +} + +type PostAuthor struct { + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier of the Post creator. + Id string `json:"id,omitempty"` + + // Image: The Post author's avatar. + Image *PostAuthorImage `json:"image,omitempty"` + + // Url: The URL of the Post creator's Profile page. + Url string `json:"url,omitempty"` +} + +type PostAuthorImage struct { + // Url: The Post author's avatar URL. + Url string `json:"url,omitempty"` +} + +type PostBlog struct { + // Id: The identifier of the Blog that contains this Post. + Id string `json:"id,omitempty"` +} + +type PostImages struct { + Url string `json:"url,omitempty"` +} + +type PostLocation struct { + // Lat: Location's latitude. + Lat float64 `json:"lat,omitempty"` + + // Lng: Location's longitude. + Lng float64 `json:"lng,omitempty"` + + // Name: Location name. + Name string `json:"name,omitempty"` + + // Span: Location's viewport span. Can be used when rendering a map + // preview. + Span string `json:"span,omitempty"` +} + +type PostReplies struct { + // Items: The List of Comments for this Post. + Items []*Comment `json:"items,omitempty"` + + // SelfLink: The URL of the comments on this post. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: The count of comments on this post. + TotalItems int64 `json:"totalItems,omitempty,string"` +} + +type PostList struct { + // Items: The list of Posts for this Blog. + Items []*Post `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type PostPerUserInfo struct { + // BlogId: ID of the Blog that the post resource belongs to. + BlogId string `json:"blogId,omitempty"` + + // HasEditAccess: True if the user has Author level access to the post. + HasEditAccess bool `json:"hasEditAccess,omitempty"` + + // Kind: The kind of this entity. Always blogger#postPerUserInfo + Kind string `json:"kind,omitempty"` + + // PostId: ID of the Post resource. + PostId string `json:"postId,omitempty"` + + // UserId: ID of the User. + UserId string `json:"userId,omitempty"` +} + +type PostUserInfo struct { + // Kind: The kind of this entity. Always blogger#postUserInfo + Kind string `json:"kind,omitempty"` + + // Post: The Post resource. + Post *Post `json:"post,omitempty"` + + // Post_user_info: Information about a User for the Post. + Post_user_info *PostPerUserInfo `json:"post_user_info,omitempty"` +} + +type PostUserInfosList struct { + // Items: The list of Posts with User information for the post, for this + // Blog. + Items []*PostUserInfo `json:"items,omitempty"` + + // Kind: The kind of this entity. Always blogger#postList + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Service1 struct { + // Blog: The Blog resource. + Blog *Blog `json:"blog,omitempty"` + + // Blog_user_info: Information about a User for the Blog. + Blog_user_info *BlogPerUserInfo `json:"blog_user_info,omitempty"` + + // Kind: The kind of this entity. Always blogger#blogUserInfo + Kind string `json:"kind,omitempty"` +} + +type User struct { + // About: Profile summary information. + About string `json:"about,omitempty"` + + // Blogs: The container of blogs for this user. + Blogs *UserBlogs `json:"blogs,omitempty"` + + // Created: The timestamp of when this profile was created, in seconds + // since epoch. + Created string `json:"created,omitempty"` + + // DisplayName: The display name. + DisplayName string `json:"displayName,omitempty"` + + // Id: The identifier for this User. + Id string `json:"id,omitempty"` + + // Kind: The kind of this entity. Always blogger#user + Kind string `json:"kind,omitempty"` + + // Locale: This user's locale + Locale *UserLocale `json:"locale,omitempty"` + + // SelfLink: The API REST URL to fetch this resource from. + SelfLink string `json:"selfLink,omitempty"` + + // Url: The user's profile page. + Url string `json:"url,omitempty"` +} + +type UserBlogs struct { + // SelfLink: The URL of the Blogs for this user. + SelfLink string `json:"selfLink,omitempty"` +} + +type UserLocale struct { + // Country: The user's country setting. + Country string `json:"country,omitempty"` + + // Language: The user's language setting. + Language string `json:"language,omitempty"` + + // Variant: The user's language variant setting. + Variant string `json:"variant,omitempty"` +} + +// method id "blogger.blogUserInfos.get": + +type BlogUserInfosGetCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog and user info pair by blogId and userId. +func (r *BlogUserInfosService) Get(userId string, blogId string) *BlogUserInfosGetCall { + c := &BlogUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogUserInfosGetCall) MaxPosts(maxPosts int64) *BlogUserInfosGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +func (c *BlogUserInfosGetCall) Do() (*Service1, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Service1) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog and user info pair by blogId and userId.", + // "httpMethod": "GET", + // "id": "blogger.blogUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}", + // "response": { + // "$ref": "Service" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.get": + +type BlogsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Gets one blog by id. +func (r *BlogsService) Get(blogId string) *BlogsGetCall { + c := &BlogsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// MaxPosts sets the optional parameter "maxPosts": Maximum number of +// posts to pull back with the blog. +func (c *BlogsGetCall) MaxPosts(maxPosts int64) *BlogsGetCall { + c.opt_["maxPosts"] = maxPosts + return c +} + +func (c *BlogsGetCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxPosts"]; ok { + params.Set("maxPosts", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog by id.", + // "httpMethod": "GET", + // "id": "blogger.blogs.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxPosts": { + // "description": "Maximum number of posts to pull back with the blog.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "blogs/{blogId}", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.getByUrl": + +type BlogsGetByUrlCall struct { + s *Service + url string + opt_ map[string]interface{} +} + +// GetByUrl: Retrieve a Blog by URL. +func (r *BlogsService) GetByUrl(url string) *BlogsGetByUrlCall { + c := &BlogsGetByUrlCall{s: r.s, opt_: make(map[string]interface{})} + c.url = url + return c +} + +func (c *BlogsGetByUrlCall) Do() (*Blog, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("url", fmt.Sprintf("%v", c.url)) + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/byurl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Blog) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Blog by URL.", + // "httpMethod": "GET", + // "id": "blogger.blogs.getByUrl", + // "parameterOrder": [ + // "url" + // ], + // "parameters": { + // "url": { + // "description": "The URL of the blog to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/byurl", + // "response": { + // "$ref": "Blog" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.blogs.listByUser": + +type BlogsListByUserCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// ListByUser: Retrieves a list of blogs, possibly filtered. +func (r *BlogsService) ListByUser(userId string) *BlogsListByUserCall { + c := &BlogsListByUserCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// FetchUserInfo sets the optional parameter "fetchUserInfo": Whether +// the response is a list of blogs with per-user information instead of +// just blogs. +func (c *BlogsListByUserCall) FetchUserInfo(fetchUserInfo bool) *BlogsListByUserCall { + c.opt_["fetchUserInfo"] = fetchUserInfo + return c +} + +// View sets the optional parameter "view": +func (c *BlogsListByUserCall) View(view string) *BlogsListByUserCall { + c.opt_["view"] = view + return c +} + +func (c *BlogsListByUserCall) Do() (*BlogList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchUserInfo"]; ok { + params.Set("fetchUserInfo", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BlogList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of blogs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.blogs.listByUser", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "fetchUserInfo": { + // "description": "Whether the response is a list of blogs with per-user information instead of just blogs.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "ID of the user whose blogs are to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs", + // "response": { + // "$ref": "BlogList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.approve": + +type CommentsApproveCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Approve: Marks a comment as not spam. +func (r *CommentsService) Approve(blogId string, postId string, commentId string) *CommentsApproveCall { + c := &CommentsApproveCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsApproveCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as not spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.approve", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as not spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/approve", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.delete": + +type CommentsDeleteCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Delete: Delete a comment by id. +func (r *CommentsService) Delete(blogId string, postId string, commentId string) *CommentsDeleteCall { + c := &CommentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a comment by id.", + // "httpMethod": "DELETE", + // "id": "blogger.comments.delete", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.get": + +type CommentsGetCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// Get: Gets one comment by id. +func (r *CommentsService) Get(blogId string, postId string, commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one comment by id.", + // "httpMethod": "GET", + // "id": "blogger.comments.get", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to containing the comment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.list": + +type CommentsListCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// List: Retrieves the comments for a post, possibly filtered. +func (r *CommentsService) List(blogId string, postId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) EndDate(endDate string) *CommentsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListCall) FetchBodies(fetchBodies bool) *CommentsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListCall) StartDate(startDate string) *CommentsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *CommentsListCall) Statuses(statuses string) *CommentsListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *CommentsListCall) View(view string) *CommentsListCall { + c.opt_["view"] = view + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a post, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.list", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "postId": { + // "description": "ID of the post to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "emptied", + // "live", + // "pending", + // "spam" + // ], + // "enumDescriptions": [ + // "Comments that have had their content removed", + // "Comments that are publicly visible", + // "Comments that are awaiting administrator approval", + // "Comments marked as spam by the administrator" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.listByBlog": + +type CommentsListByBlogCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// ListByBlog: Retrieves the comments for a blog, across all posts, +// possibly filtered. +func (r *CommentsService) ListByBlog(blogId string) *CommentsListByBlogCall { + c := &CommentsListByBlogCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest date of comment +// to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) EndDate(endDate string) *CommentsListByBlogCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of the comments is included. +func (c *CommentsListByBlogCall) FetchBodies(fetchBodies bool) *CommentsListByBlogCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of comments to include in the result. +func (c *CommentsListByBlogCall) MaxResults(maxResults int64) *CommentsListByBlogCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if request is paged. +func (c *CommentsListByBlogCall) PageToken(pageToken string) *CommentsListByBlogCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest date of +// comment to fetch, a date-time with RFC 3339 formatting. +func (c *CommentsListByBlogCall) StartDate(startDate string) *CommentsListByBlogCall { + c.opt_["startDate"] = startDate + return c +} + +func (c *CommentsListByBlogCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments for a blog, across all posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.comments.listByBlog", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch comments from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of the comments is included.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "Maximum number of comments to include in the result.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Continuation token if request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest date of comment to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.comments.markAsSpam": + +type CommentsMarkAsSpamCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// MarkAsSpam: Marks a comment as spam. +func (r *CommentsService) MarkAsSpam(blogId string, postId string, commentId string) *CommentsMarkAsSpamCall { + c := &CommentsMarkAsSpamCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsMarkAsSpamCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Marks a comment as spam.", + // "httpMethod": "POST", + // "id": "blogger.comments.markAsSpam", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to mark as spam.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/spam", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.comments.removeContent": + +type CommentsRemoveContentCall struct { + s *Service + blogId string + postId string + commentId string + opt_ map[string]interface{} +} + +// RemoveContent: Removes the content of a comment. +func (r *CommentsService) RemoveContent(blogId string, postId string, commentId string) *CommentsRemoveContentCall { + c := &CommentsRemoveContentCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.commentId = commentId + return c +} + +func (c *CommentsRemoveContentCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Removes the content of a comment.", + // "httpMethod": "POST", + // "id": "blogger.comments.removeContent", + // "parameterOrder": [ + // "blogId", + // "postId", + // "commentId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "commentId": { + // "description": "The ID of the comment to delete content from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/comments/{commentId}/removecontent", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pageViews.get": + +type PageViewsGetCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// Get: Retrieve pageview stats for a Blog. +func (r *PageViewsService) Get(blogId string) *PageViewsGetCall { + c := &PageViewsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// Range sets the optional parameter "range": +func (c *PageViewsGetCall) Range(range_ string) *PageViewsGetCall { + c.opt_["range"] = range_ + return c +} + +func (c *PageViewsGetCall) Do() (*Pageviews, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["range"]; ok { + params.Set("range", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pageviews") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Pageviews) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve pageview stats for a Blog.", + // "httpMethod": "GET", + // "id": "blogger.pageViews.get", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "range": { + // "enum": [ + // "30DAYS", + // "7DAYS", + // "all" + // ], + // "enumDescriptions": [ + // "Page view counts from the last thirty days.", + // "Page view counts from the last seven days.", + // "Total page view counts from all time." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pageviews", + // "response": { + // "$ref": "Pageviews" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.delete": + +type PagesDeleteCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Delete: Delete a page by id. +func (r *PagesService) Delete(blogId string, pageId string) *PagesDeleteCall { + c := &PagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +func (c *PagesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a page by id.", + // "httpMethod": "DELETE", + // "id": "blogger.pages.delete", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.get": + +type PagesGetCall struct { + s *Service + blogId string + pageId string + opt_ map[string]interface{} +} + +// Get: Gets one blog page by id. +func (r *PagesService) Get(blogId string, pageId string) *PagesGetCall { + c := &PagesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + return c +} + +// View sets the optional parameter "view": +func (c *PagesGetCall) View(view string) *PagesGetCall { + c.opt_["view"] = view + return c +} + +func (c *PagesGetCall) Do() (*Page, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one blog page by id.", + // "httpMethod": "GET", + // "id": "blogger.pages.get", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog containing the page.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the page to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.insert": + +type PagesInsertCall struct { + s *Service + blogId string + page *Page + opt_ map[string]interface{} +} + +// Insert: Add a page. +func (r *PagesService) Insert(blogId string, page *Page) *PagesInsertCall { + c := &PagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.page = page + return c +} + +func (c *PagesInsertCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a page.", + // "httpMethod": "POST", + // "id": "blogger.pages.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the page to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.list": + +type PagesListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves the pages for a blog, optionally including non-LIVE +// statuses. +func (r *PagesService) List(blogId string) *PagesListCall { + c := &PagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether to +// retrieve the Page bodies. +func (c *PagesListCall) FetchBodies(fetchBodies bool) *PagesListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PagesListCall) Statuses(statuses string) *PagesListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PagesListCall) View(view string) *PagesListCall { + c.opt_["view"] = view + return c +} + +func (c *PagesListCall) Do() (*PageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the pages for a blog, optionally including non-LIVE statuses.", + // "httpMethod": "GET", + // "id": "blogger.pages.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch pages from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether to retrieve the Page bodies.", + // "location": "query", + // "type": "boolean" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "imported", + // "live" + // ], + // "enumDescriptions": [ + // "Draft (unpublished) Pages", + // "Pages that have had their content removed", + // "Pages that are publicly visible" + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages", + // "response": { + // "$ref": "PageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.pages.patch": + +type PagesPatchCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Patch: Update a page. This method supports patch semantics. +func (r *PagesService) Patch(blogId string, pageId string, page *Page) *PagesPatchCall { + c := &PagesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesPatchCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.pages.patch", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.pages.update": + +type PagesUpdateCall struct { + s *Service + blogId string + pageId string + page *Page + opt_ map[string]interface{} +} + +// Update: Update a page. +func (r *PagesService) Update(blogId string, pageId string, page *Page) *PagesUpdateCall { + c := &PagesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.pageId = pageId + c.page = page + return c +} + +func (c *PagesUpdateCall) Do() (*Page, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.page) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/pages/{pageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pageId}", url.QueryEscape(c.pageId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Page) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a page.", + // "httpMethod": "PUT", + // "id": "blogger.pages.update", + // "parameterOrder": [ + // "blogId", + // "pageId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "pageId": { + // "description": "The ID of the Page.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/pages/{pageId}", + // "request": { + // "$ref": "Page" + // }, + // "response": { + // "$ref": "Page" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.postUserInfos.get": + +type PostUserInfosGetCall struct { + s *Service + userId string + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Gets one post and user info pair by postId and userId. +func (r *PostUserInfosService) Get(userId string, blogId string, postId string) *PostUserInfosGetCall { + c := &PostUserInfosGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + c.postId = postId + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostUserInfosGetCall) MaxComments(maxComments int64) *PostUserInfosGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +func (c *PostUserInfosGetCall) Do() (*PostUserInfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one post and user info pair by postId and userId.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.get", + // "parameterOrder": [ + // "userId", + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "PostUserInfo" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.postUserInfos.list": + +type PostUserInfosListCall struct { + s *Service + userId string + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of post and user info pairs, possibly +// filtered. +func (r *PostUserInfosService) List(userId string, blogId string) *PostUserInfosListCall { + c := &PostUserInfosListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) EndDate(endDate string) *PostUserInfosListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included. +func (c *PostUserInfosListCall) FetchBodies(fetchBodies bool) *PostUserInfosListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostUserInfosListCall) Labels(labels string) *PostUserInfosListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostUserInfosListCall) MaxResults(maxResults int64) *PostUserInfosListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostUserInfosListCall) OrderBy(orderBy string) *PostUserInfosListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostUserInfosListCall) PageToken(pageToken string) *PostUserInfosListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostUserInfosListCall) StartDate(startDate string) *PostUserInfosListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PostUserInfosListCall) Statuses(statuses string) *PostUserInfosListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PostUserInfosListCall) View(view string) *PostUserInfosListCall { + c.opt_["view"] = view + return c +} + +func (c *PostUserInfosListCall) Do() (*PostUserInfosList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}/blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostUserInfosList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of post and user info pairs, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.postUserInfos.list", + // "parameterOrder": [ + // "userId", + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "description": "Whether the body content of posts is included.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft posts", + // "Published posts", + // "Posts that are scheduled to publish in future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user for the per-user information to be fetched. Either the word 'self' (sans quote marks) or the user's profile identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/{userId}/blogs/{blogId}/posts", + // "response": { + // "$ref": "PostUserInfosList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.delete": + +type PostsDeleteCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Delete: Delete a post by id. +func (r *PostsService) Delete(blogId string, postId string) *PostsDeleteCall { + c := &PostsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a post by id.", + // "httpMethod": "DELETE", + // "id": "blogger.posts.delete", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The Id of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.get": + +type PostsGetCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Get: Get a post by id. +func (r *PostsService) Get(blogId string, postId string) *PostsGetCall { + c := &PostsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetCall) MaxComments(maxComments int64) *PostsGetCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": +func (c *PostsGetCall) View(view string) *PostsGetCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a post by id.", + // "httpMethod": "GET", + // "id": "blogger.posts.get", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "postId": { + // "description": "The ID of the post", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.getByPath": + +type PostsGetByPathCall struct { + s *Service + blogId string + path string + opt_ map[string]interface{} +} + +// GetByPath: Retrieve a Post by Path. +func (r *PostsService) GetByPath(blogId string, path string) *PostsGetByPathCall { + c := &PostsGetByPathCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.path = path + return c +} + +// MaxComments sets the optional parameter "maxComments": Maximum number +// of comments to pull back on a post. +func (c *PostsGetByPathCall) MaxComments(maxComments int64) *PostsGetByPathCall { + c.opt_["maxComments"] = maxComments + return c +} + +// View sets the optional parameter "view": +func (c *PostsGetByPathCall) View(view string) *PostsGetByPathCall { + c.opt_["view"] = view + return c +} + +func (c *PostsGetByPathCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("path", fmt.Sprintf("%v", c.path)) + if v, ok := c.opt_["maxComments"]; ok { + params.Set("maxComments", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/bypath") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieve a Post by Path.", + // "httpMethod": "GET", + // "id": "blogger.posts.getByPath", + // "parameterOrder": [ + // "blogId", + // "path" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxComments": { + // "description": "Maximum number of comments to pull back on a post.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "path": { + // "description": "Path of the Post to retrieve.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Admin level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/bypath", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.insert": + +type PostsInsertCall struct { + s *Service + blogId string + post *Post + opt_ map[string]interface{} +} + +// Insert: Add a post. +func (r *PostsService) Insert(blogId string, post *Post) *PostsInsertCall { + c := &PostsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.post = post + return c +} + +// IsDraft sets the optional parameter "isDraft": Whether to create the +// post as a draft +func (c *PostsInsertCall) IsDraft(isDraft bool) *PostsInsertCall { + c.opt_["isDraft"] = isDraft + return c +} + +func (c *PostsInsertCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["isDraft"]; ok { + params.Set("isDraft", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a post.", + // "httpMethod": "POST", + // "id": "blogger.posts.insert", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to add the post to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "isDraft": { + // "description": "Whether to create the post as a draft", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.list": + +type PostsListCall struct { + s *Service + blogId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of posts, possibly filtered. +func (r *PostsService) List(blogId string) *PostsListCall { + c := &PostsListCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + return c +} + +// EndDate sets the optional parameter "endDate": Latest post date to +// fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) EndDate(endDate string) *PostsListCall { + c.opt_["endDate"] = endDate + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsListCall) FetchBodies(fetchBodies bool) *PostsListCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// FetchImages sets the optional parameter "fetchImages": Whether image +// URL metadata for each post is included. +func (c *PostsListCall) FetchImages(fetchImages bool) *PostsListCall { + c.opt_["fetchImages"] = fetchImages + return c +} + +// Labels sets the optional parameter "labels": Comma-separated list of +// labels to search for. +func (c *PostsListCall) Labels(labels string) *PostsListCall { + c.opt_["labels"] = labels + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of posts to fetch. +func (c *PostsListCall) MaxResults(maxResults int64) *PostsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsListCall) OrderBy(orderBy string) *PostsListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Continuation token +// if the request is paged. +func (c *PostsListCall) PageToken(pageToken string) *PostsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// StartDate sets the optional parameter "startDate": Earliest post date +// to fetch, a date-time with RFC 3339 formatting. +func (c *PostsListCall) StartDate(startDate string) *PostsListCall { + c.opt_["startDate"] = startDate + return c +} + +// Statuses sets the optional parameter "statuses": +func (c *PostsListCall) Statuses(statuses string) *PostsListCall { + c.opt_["statuses"] = statuses + return c +} + +// View sets the optional parameter "view": +func (c *PostsListCall) View(view string) *PostsListCall { + c.opt_["view"] = view + return c +} + +func (c *PostsListCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["endDate"]; ok { + params.Set("endDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["fetchImages"]; ok { + params.Set("fetchImages", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["labels"]; ok { + params.Set("labels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startDate"]; ok { + params.Set("startDate", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["statuses"]; ok { + params.Set("statuses", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["view"]; ok { + params.Set("view", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of posts, possibly filtered.", + // "httpMethod": "GET", + // "id": "blogger.posts.list", + // "parameterOrder": [ + // "blogId" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch posts from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "endDate": { + // "description": "Latest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "fetchImages": { + // "description": "Whether image URL metadata for each post is included.", + // "location": "query", + // "type": "boolean" + // }, + // "labels": { + // "description": "Comma-separated list of labels to search for.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of posts to fetch.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Continuation token if the request is paged.", + // "location": "query", + // "type": "string" + // }, + // "startDate": { + // "description": "Earliest post date to fetch, a date-time with RFC 3339 formatting.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "statuses": { + // "enum": [ + // "draft", + // "live", + // "scheduled" + // ], + // "enumDescriptions": [ + // "Draft posts", + // "Published posts", + // "Posts that are scheduled to publish in future." + // ], + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "view": { + // "enum": [ + // "ADMIN", + // "AUTHOR", + // "READER" + // ], + // "enumDescriptions": [ + // "Admin level detail", + // "Author level detail", + // "Reader level detail" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.patch": + +type PostsPatchCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Patch: Update a post. This method supports patch semantics. +func (r *PostsService) Patch(blogId string, postId string, post *Post) *PostsPatchCall { + c := &PostsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +func (c *PostsPatchCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "blogger.posts.patch", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.publish": + +type PostsPublishCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Publish: Publish a draft post. +func (r *PostsService) Publish(blogId string, postId string) *PostsPublishCall { + c := &PostsPublishCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +// PublishDate sets the optional parameter "publishDate": The date and +// time to schedule the publishing of the Blog. +func (c *PostsPublishCall) PublishDate(publishDate string) *PostsPublishCall { + c.opt_["publishDate"] = publishDate + return c +} + +func (c *PostsPublishCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["publishDate"]; ok { + params.Set("publishDate", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/publish") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Publish a draft post.", + // "httpMethod": "POST", + // "id": "blogger.posts.publish", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "publishDate": { + // "description": "The date and time to schedule the publishing of the Blog.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/publish", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.revert": + +type PostsRevertCall struct { + s *Service + blogId string + postId string + opt_ map[string]interface{} +} + +// Revert: Revert a published or scheduled post to draft state. +func (r *PostsService) Revert(blogId string, postId string) *PostsRevertCall { + c := &PostsRevertCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + return c +} + +func (c *PostsRevertCall) Do() (*Post, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}/revert") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Revert a published or scheduled post to draft state.", + // "httpMethod": "POST", + // "id": "blogger.posts.revert", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}/revert", + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.posts.search": + +type PostsSearchCall struct { + s *Service + blogId string + q string + opt_ map[string]interface{} +} + +// Search: Search for a post. +func (r *PostsService) Search(blogId string, q string) *PostsSearchCall { + c := &PostsSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.q = q + return c +} + +// FetchBodies sets the optional parameter "fetchBodies": Whether the +// body content of posts is included (default: true). This should be set +// to false when the post bodies are not required, to help minimize +// traffic. +func (c *PostsSearchCall) FetchBodies(fetchBodies bool) *PostsSearchCall { + c.opt_["fetchBodies"] = fetchBodies + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results +func (c *PostsSearchCall) OrderBy(orderBy string) *PostsSearchCall { + c.opt_["orderBy"] = orderBy + return c +} + +func (c *PostsSearchCall) Do() (*PostList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("q", fmt.Sprintf("%v", c.q)) + if v, ok := c.opt_["fetchBodies"]; ok { + params.Set("fetchBodies", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PostList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Search for a post.", + // "httpMethod": "GET", + // "id": "blogger.posts.search", + // "parameterOrder": [ + // "blogId", + // "q" + // ], + // "parameters": { + // "blogId": { + // "description": "ID of the blog to fetch the post from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "fetchBodies": { + // "default": "true", + // "description": "Whether the body content of posts is included (default: true). This should be set to false when the post bodies are not required, to help minimize traffic.", + // "location": "query", + // "type": "boolean" + // }, + // "orderBy": { + // "default": "PUBLISHED", + // "description": "Sort search results", + // "enum": [ + // "published", + // "updated" + // ], + // "enumDescriptions": [ + // "Order by the date the post was published", + // "Order by the date the post was last updated" + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Query terms to search this blog for matching posts.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/search", + // "response": { + // "$ref": "PostList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} + +// method id "blogger.posts.update": + +type PostsUpdateCall struct { + s *Service + blogId string + postId string + post *Post + opt_ map[string]interface{} +} + +// Update: Update a post. +func (r *PostsService) Update(blogId string, postId string, post *Post) *PostsUpdateCall { + c := &PostsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.blogId = blogId + c.postId = postId + c.post = post + return c +} + +func (c *PostsUpdateCall) Do() (*Post, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.post) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "blogs/{blogId}/posts/{postId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{blogId}", url.QueryEscape(c.blogId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{postId}", url.QueryEscape(c.postId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Post) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a post.", + // "httpMethod": "PUT", + // "id": "blogger.posts.update", + // "parameterOrder": [ + // "blogId", + // "postId" + // ], + // "parameters": { + // "blogId": { + // "description": "The ID of the Blog.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "postId": { + // "description": "The ID of the Post.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "blogs/{blogId}/posts/{postId}", + // "request": { + // "$ref": "Post" + // }, + // "response": { + // "$ref": "Post" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger" + // ] + // } + +} + +// method id "blogger.users.get": + +type UsersGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Gets one user by id. +func (r *UsersService) Get(userId string) *UsersGetCall { + c := &UsersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *UsersGetCall) Do() (*User, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(User) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one user by id.", + // "httpMethod": "GET", + // "id": "blogger.users.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/{userId}", + // "response": { + // "$ref": "User" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/blogger", + // "https://www.googleapis.com/auth/blogger.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-api.json b/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-api.json new file mode 100644 index 0000000000000..6afdc32562f50 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-api.json @@ -0,0 +1,130 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/BJXZBhUL6VndsB8q_Dgu-kIvzFE\"", + "discoveryVersion": "v1", + "id": "groupsmigration:v1", + "name": "groupsmigration", + "canonicalName": "Groups Migration", + "version": "v1", + "title": "Groups Migration API", + "description": "Groups Migration Api.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/discussions-16.gif", + "x32": "http://www.google.com/images/icons/product/discussions-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/groups-migration/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/groups/v1/groups/", + "basePath": "/groups/v1/groups/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "groups/v1/groups/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Groups": { + "id": "Groups", + "type": "object", + "description": "JSON response template for groups migration API.", + "properties": { + "kind": { + "type": "string", + "description": "The kind of insert resource this is.", + "default": "groupsmigration#groups" + }, + "responseCode": { + "type": "string", + "description": "The status of the insert request." + } + } + } + }, + "resources": { + "archive": { + "methods": { + "insert": { + "id": "groupsmigration.archive.insert", + "path": "{groupId}/archive", + "httpMethod": "POST", + "description": "Inserts a new mail into the archive of the Google group.", + "parameters": { + "groupId": { + "type": "string", + "description": "The group ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupId" + ], + "response": { + "$ref": "Groups" + }, + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "message/rfc822" + ], + "maxSize": "16MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/groups/v1/groups/{groupId}/archive" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/groups/v1/groups/{groupId}/archive" + } + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-gen.go b/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-gen.go new file mode 100644 index 0000000000000..2d8f5d73bd726 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/groupsmigration/v1/groupsmigration-gen.go @@ -0,0 +1,167 @@ +// Package groupsmigration provides access to the Groups Migration API. +// +// See https://developers.google.com/google-apps/groups-migration/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/groupsmigration/v1" +// ... +// groupsmigrationService, err := groupsmigration.New(oauthHttpClient) +package groupsmigration + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "groupsmigration:v1" +const apiName = "groupsmigration" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/groups/v1/groups/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Archive = NewArchiveService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Archive *ArchiveService +} + +func NewArchiveService(s *Service) *ArchiveService { + rs := &ArchiveService{s: s} + return rs +} + +type ArchiveService struct { + s *Service +} + +type Groups struct { + // Kind: The kind of insert resource this is. + Kind string `json:"kind,omitempty"` + + // ResponseCode: The status of the insert request. + ResponseCode string `json:"responseCode,omitempty"` +} + +// method id "groupsmigration.archive.insert": + +type ArchiveInsertCall struct { + s *Service + groupId string + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Inserts a new mail into the archive of the Google group. +func (r *ArchiveService) Insert(groupId string) *ArchiveInsertCall { + c := &ArchiveInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.groupId = groupId + return c +} +func (c *ArchiveInsertCall) Media(r io.Reader) *ArchiveInsertCall { + c.media_ = r + return c +} + +func (c *ArchiveInsertCall) Do() (*Groups, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{groupId}/archive") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupId}", url.QueryEscape(c.groupId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Groups) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new mail into the archive of the Google group.", + // "httpMethod": "POST", + // "id": "groupsmigration.archive.insert", + // "mediaUpload": { + // "accept": [ + // "message/rfc822" + // ], + // "maxSize": "16MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/groups/v1/groups/{groupId}/archive" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/groups/v1/groups/{groupId}/archive" + // } + // } + // }, + // "parameterOrder": [ + // "groupId" + // ], + // "parameters": { + // "groupId": { + // "description": "The group ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{groupId}/archive", + // "response": { + // "$ref": "Groups" + // }, + // "supportsMediaUpload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-api.json b/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-api.json new file mode 100644 index 0000000000000..0bf2245d060e6 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-api.json @@ -0,0 +1,283 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/jwIJIppaaUqSDha_itkGyYVYL5s\"", + "discoveryVersion": "v1", + "id": "groupssettings:v1", + "name": "groupssettings", + "version": "v1", + "title": "Groups Settings API", + "description": "Lets you manage permission levels and related settings of a group.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/groups-settings/get_started", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/groups/v1/groups/", + "basePath": "/groups/v1/groups/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "groups/v1/groups/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "atom", + "enum": [ + "atom", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/apps.groups.settings": { + "description": "View and manage the settings of a Google Apps Group" + } + } + } + }, + "schemas": { + "Groups": { + "id": "Groups", + "type": "object", + "description": "JSON template for Group resource", + "properties": { + "allowExternalMembers": { + "type": "string", + "description": "Are external members allowed to join the group." + }, + "allowGoogleCommunication": { + "type": "string", + "description": "Is google allowed to contact admins." + }, + "allowWebPosting": { + "type": "string", + "description": "If posting from web is allowed." + }, + "archiveOnly": { + "type": "string", + "description": "If the group is archive only" + }, + "customReplyTo": { + "type": "string", + "description": "Default email to which reply to any message should go." + }, + "defaultMessageDenyNotificationText": { + "type": "string", + "description": "Default message deny notification message" + }, + "description": { + "type": "string", + "description": "Description of the group" + }, + "email": { + "type": "string", + "description": "Email id of the group" + }, + "includeInGlobalAddressList": { + "type": "string", + "description": "If this groups should be included in global address list or not." + }, + "isArchived": { + "type": "string", + "description": "If the contents of the group are archived." + }, + "kind": { + "type": "string", + "description": "The type of the resource.", + "default": "groupsSettings#groups" + }, + "maxMessageBytes": { + "type": "integer", + "description": "Maximum message size allowed.", + "format": "int32" + }, + "membersCanPostAsTheGroup": { + "type": "string", + "description": "Can members post using the group email address." + }, + "messageDisplayFont": { + "type": "string", + "description": "Default message display font. Possible values are: DEFAULT_FONT FIXED_WIDTH_FONT" + }, + "messageModerationLevel": { + "type": "string", + "description": "Moderation level for messages. Possible values are: MODERATE_ALL_MESSAGES MODERATE_NON_MEMBERS MODERATE_NEW_MEMBERS MODERATE_NONE" + }, + "name": { + "type": "string", + "description": "Name of the Group" + }, + "primaryLanguage": { + "type": "string", + "description": "Primary language for the group." + }, + "replyTo": { + "type": "string", + "description": "Whome should the default reply to a message go to. Possible values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS" + }, + "sendMessageDenyNotification": { + "type": "string", + "description": "Should the member be notified if his message is denied by owner." + }, + "showInGroupDirectory": { + "type": "string", + "description": "Is the group listed in groups directory" + }, + "spamModerationLevel": { + "type": "string", + "description": "Moderation level for messages detected as spam. Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT" + }, + "whoCanContactOwner": { + "type": "string", + "description": "Permission to contact owner of the group via web UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT" + }, + "whoCanInvite": { + "type": "string", + "description": "Permissions to invite members. Possbile values are: ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE" + }, + "whoCanJoin": { + "type": "string", + "description": "Permissions to join the group. Possible values are: ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN CAN_REQUEST_TO_JOIN" + }, + "whoCanLeaveGroup": { + "type": "string", + "description": "Permission to leave the group. Possible values are: ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE" + }, + "whoCanPostMessage": { + "type": "string", + "description": "Permissions to post messages to the group. Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST" + }, + "whoCanViewGroup": { + "type": "string", + "description": "Permissions to view group. Possbile values are: ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW" + }, + "whoCanViewMembership": { + "type": "string", + "description": "Permissions to view membership. Possbile values are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW ALL_MANAGERS_CAN_VIEW" + } + } + } + }, + "resources": { + "groups": { + "methods": { + "get": { + "id": "groupsSettings.groups.get", + "path": "{groupUniqueId}", + "httpMethod": "GET", + "description": "Gets one resource by id.", + "parameters": { + "groupUniqueId": { + "type": "string", + "description": "The resource ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupUniqueId" + ], + "response": { + "$ref": "Groups" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.groups.settings" + ] + }, + "patch": { + "id": "groupsSettings.groups.patch", + "path": "{groupUniqueId}", + "httpMethod": "PATCH", + "description": "Updates an existing resource. This method supports patch semantics.", + "parameters": { + "groupUniqueId": { + "type": "string", + "description": "The resource ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupUniqueId" + ], + "request": { + "$ref": "Groups" + }, + "response": { + "$ref": "Groups" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.groups.settings" + ] + }, + "update": { + "id": "groupsSettings.groups.update", + "path": "{groupUniqueId}", + "httpMethod": "PUT", + "description": "Updates an existing resource.", + "parameters": { + "groupUniqueId": { + "type": "string", + "description": "The resource ID", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "groupUniqueId" + ], + "request": { + "$ref": "Groups" + }, + "response": { + "$ref": "Groups" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.groups.settings" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-gen.go b/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-gen.go new file mode 100644 index 0000000000000..717060c2b9c01 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/groupssettings/v1/groupssettings-gen.go @@ -0,0 +1,394 @@ +// Package groupssettings provides access to the Groups Settings API. +// +// See https://developers.google.com/google-apps/groups-settings/get_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/groupssettings/v1" +// ... +// groupssettingsService, err := groupssettings.New(oauthHttpClient) +package groupssettings + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "groupssettings:v1" +const apiName = "groupssettings" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/groups/v1/groups/" + +// OAuth2 scopes used by this API. +const ( + // View and manage the settings of a Google Apps Group + AppsGroupsSettingsScope = "https://www.googleapis.com/auth/apps.groups.settings" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Groups = NewGroupsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Groups *GroupsService +} + +func NewGroupsService(s *Service) *GroupsService { + rs := &GroupsService{s: s} + return rs +} + +type GroupsService struct { + s *Service +} + +type Groups struct { + // AllowExternalMembers: Are external members allowed to join the group. + AllowExternalMembers string `json:"allowExternalMembers,omitempty"` + + // AllowGoogleCommunication: Is google allowed to contact admins. + AllowGoogleCommunication string `json:"allowGoogleCommunication,omitempty"` + + // AllowWebPosting: If posting from web is allowed. + AllowWebPosting string `json:"allowWebPosting,omitempty"` + + // ArchiveOnly: If the group is archive only + ArchiveOnly string `json:"archiveOnly,omitempty"` + + // CustomReplyTo: Default email to which reply to any message should go. + CustomReplyTo string `json:"customReplyTo,omitempty"` + + // DefaultMessageDenyNotificationText: Default message deny notification + // message + DefaultMessageDenyNotificationText string `json:"defaultMessageDenyNotificationText,omitempty"` + + // Description: Description of the group + Description string `json:"description,omitempty"` + + // Email: Email id of the group + Email string `json:"email,omitempty"` + + // IncludeInGlobalAddressList: If this groups should be included in + // global address list or not. + IncludeInGlobalAddressList string `json:"includeInGlobalAddressList,omitempty"` + + // IsArchived: If the contents of the group are archived. + IsArchived string `json:"isArchived,omitempty"` + + // Kind: The type of the resource. + Kind string `json:"kind,omitempty"` + + // MaxMessageBytes: Maximum message size allowed. + MaxMessageBytes int64 `json:"maxMessageBytes,omitempty"` + + // MembersCanPostAsTheGroup: Can members post using the group email + // address. + MembersCanPostAsTheGroup string `json:"membersCanPostAsTheGroup,omitempty"` + + // MessageDisplayFont: Default message display font. Possible values + // are: DEFAULT_FONT FIXED_WIDTH_FONT + MessageDisplayFont string `json:"messageDisplayFont,omitempty"` + + // MessageModerationLevel: Moderation level for messages. Possible + // values are: MODERATE_ALL_MESSAGES MODERATE_NON_MEMBERS + // MODERATE_NEW_MEMBERS MODERATE_NONE + MessageModerationLevel string `json:"messageModerationLevel,omitempty"` + + // Name: Name of the Group + Name string `json:"name,omitempty"` + + // PrimaryLanguage: Primary language for the group. + PrimaryLanguage string `json:"primaryLanguage,omitempty"` + + // ReplyTo: Whome should the default reply to a message go to. Possible + // values are: REPLY_TO_CUSTOM REPLY_TO_SENDER REPLY_TO_LIST + // REPLY_TO_OWNER REPLY_TO_IGNORE REPLY_TO_MANAGERS + ReplyTo string `json:"replyTo,omitempty"` + + // SendMessageDenyNotification: Should the member be notified if his + // message is denied by owner. + SendMessageDenyNotification string `json:"sendMessageDenyNotification,omitempty"` + + // ShowInGroupDirectory: Is the group listed in groups directory + ShowInGroupDirectory string `json:"showInGroupDirectory,omitempty"` + + // SpamModerationLevel: Moderation level for messages detected as spam. + // Possible values are: ALLOW MODERATE SILENTLY_MODERATE REJECT + SpamModerationLevel string `json:"spamModerationLevel,omitempty"` + + // WhoCanContactOwner: Permission to contact owner of the group via web + // UI. Possbile values are: ANYONE_CAN_CONTACT ALL_IN_DOMAIN_CAN_CONTACT + // ALL_MEMBERS_CAN_CONTACT ALL_MANAGERS_CAN_CONTACT + WhoCanContactOwner string `json:"whoCanContactOwner,omitempty"` + + // WhoCanInvite: Permissions to invite members. Possbile values are: + // ALL_MEMBERS_CAN_INVITE ALL_MANAGERS_CAN_INVITE + WhoCanInvite string `json:"whoCanInvite,omitempty"` + + // WhoCanJoin: Permissions to join the group. Possible values are: + // ANYONE_CAN_JOIN ALL_IN_DOMAIN_CAN_JOIN INVITED_CAN_JOIN + // CAN_REQUEST_TO_JOIN + WhoCanJoin string `json:"whoCanJoin,omitempty"` + + // WhoCanLeaveGroup: Permission to leave the group. Possible values are: + // ALL_MANAGERS_CAN_LEAVE ALL_MEMBERS_CAN_LEAVE + WhoCanLeaveGroup string `json:"whoCanLeaveGroup,omitempty"` + + // WhoCanPostMessage: Permissions to post messages to the group. + // Possible values are: NONE_CAN_POST ALL_MANAGERS_CAN_POST + // ALL_MEMBERS_CAN_POST ALL_IN_DOMAIN_CAN_POST ANYONE_CAN_POST + WhoCanPostMessage string `json:"whoCanPostMessage,omitempty"` + + // WhoCanViewGroup: Permissions to view group. Possbile values are: + // ANYONE_CAN_VIEW ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW + // ALL_MANAGERS_CAN_VIEW + WhoCanViewGroup string `json:"whoCanViewGroup,omitempty"` + + // WhoCanViewMembership: Permissions to view membership. Possbile values + // are: ALL_IN_DOMAIN_CAN_VIEW ALL_MEMBERS_CAN_VIEW + // ALL_MANAGERS_CAN_VIEW + WhoCanViewMembership string `json:"whoCanViewMembership,omitempty"` +} + +// method id "groupsSettings.groups.get": + +type GroupsGetCall struct { + s *Service + groupUniqueId string + opt_ map[string]interface{} +} + +// Get: Gets one resource by id. +func (r *GroupsService) Get(groupUniqueId string) *GroupsGetCall { + c := &GroupsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.groupUniqueId = groupUniqueId + return c +} + +func (c *GroupsGetCall) Do() (*Groups, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{groupUniqueId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupUniqueId}", url.QueryEscape(c.groupUniqueId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Groups) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets one resource by id.", + // "httpMethod": "GET", + // "id": "groupsSettings.groups.get", + // "parameterOrder": [ + // "groupUniqueId" + // ], + // "parameters": { + // "groupUniqueId": { + // "description": "The resource ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{groupUniqueId}", + // "response": { + // "$ref": "Groups" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.groups.settings" + // ] + // } + +} + +// method id "groupsSettings.groups.patch": + +type GroupsPatchCall struct { + s *Service + groupUniqueId string + groups *Groups + opt_ map[string]interface{} +} + +// Patch: Updates an existing resource. This method supports patch +// semantics. +func (r *GroupsService) Patch(groupUniqueId string, groups *Groups) *GroupsPatchCall { + c := &GroupsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.groupUniqueId = groupUniqueId + c.groups = groups + return c +} + +func (c *GroupsPatchCall) Do() (*Groups, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.groups) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{groupUniqueId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupUniqueId}", url.QueryEscape(c.groupUniqueId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Groups) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing resource. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "groupsSettings.groups.patch", + // "parameterOrder": [ + // "groupUniqueId" + // ], + // "parameters": { + // "groupUniqueId": { + // "description": "The resource ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{groupUniqueId}", + // "request": { + // "$ref": "Groups" + // }, + // "response": { + // "$ref": "Groups" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.groups.settings" + // ] + // } + +} + +// method id "groupsSettings.groups.update": + +type GroupsUpdateCall struct { + s *Service + groupUniqueId string + groups *Groups + opt_ map[string]interface{} +} + +// Update: Updates an existing resource. +func (r *GroupsService) Update(groupUniqueId string, groups *Groups) *GroupsUpdateCall { + c := &GroupsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.groupUniqueId = groupUniqueId + c.groups = groups + return c +} + +func (c *GroupsUpdateCall) Do() (*Groups, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.groups) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{groupUniqueId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{groupUniqueId}", url.QueryEscape(c.groupUniqueId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Groups) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing resource.", + // "httpMethod": "PUT", + // "id": "groupsSettings.groups.update", + // "parameterOrder": [ + // "groupUniqueId" + // ], + // "parameters": { + // "groupUniqueId": { + // "description": "The resource ID", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{groupUniqueId}", + // "request": { + // "$ref": "Groups" + // }, + // "response": { + // "$ref": "Groups" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.groups.settings" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-api.json b/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-api.json new file mode 100644 index 0000000000000..7f1cea67dcacb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-api.json @@ -0,0 +1,903 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/KRARk1zfvD1Ng7hyNLY5ZbidGLY\"", + "discoveryVersion": "v1", + "id": "identitytoolkit:v3", + "name": "identitytoolkit", + "canonicalName": "Identity Toolkit", + "version": "v3", + "title": "Google Identity Toolkit API", + "description": "Help the third party sites to implement federated login.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/identity-toolkit/v3/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/identitytoolkit/v3/relyingparty/", + "basePath": "/identitytoolkit/v3/relyingparty/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "identitytoolkit/v3/relyingparty/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "CreateAuthUriResponse": { + "id": "CreateAuthUriResponse", + "type": "object", + "description": "Response of creating the IDP authentication URL.", + "properties": { + "authUri": { + "type": "string", + "description": "The URI used by the IDP to authenticate the user." + }, + "kind": { + "type": "string", + "description": "The fixed string identitytoolkit#CreateAuthUriResponse\".", + "default": "identitytoolkit#CreateAuthUriResponse" + }, + "providerId": { + "type": "string", + "description": "The provider ID of the auth URI." + }, + "providers": { + "type": "array", + "description": "Existing IDP's for the user.", + "items": { + "type": "string" + } + }, + "registered": { + "type": "boolean", + "description": "Whether the user is registered if the identifier is an email." + } + } + }, + "DeleteAccountResponse": { + "id": "DeleteAccountResponse", + "type": "object", + "description": "Respone of deleting account.", + "properties": { + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#DeleteAccountResponse\".", + "default": "identitytoolkit#DeleteAccountResponse" + } + } + }, + "DownloadAccountResponse": { + "id": "DownloadAccountResponse", + "type": "object", + "description": "Respone of downloading accounts in batch.", + "properties": { + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#DownloadAccountResponse\".", + "default": "identitytoolkit#DownloadAccountResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The next page token. To be used in a subsequent request to return the next page of results." + }, + "users": { + "type": "array", + "description": "The user accounts data.", + "items": { + "$ref": "UserInfo" + } + } + } + }, + "GetAccountInfoResponse": { + "id": "GetAccountInfoResponse", + "type": "object", + "description": "Response of getting account information.", + "properties": { + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#GetAccountInfoResponse\".", + "default": "identitytoolkit#GetAccountInfoResponse" + }, + "users": { + "type": "array", + "description": "The info of the users.", + "items": { + "$ref": "UserInfo" + } + } + } + }, + "GetOobConfirmationCodeResponse": { + "id": "GetOobConfirmationCodeResponse", + "type": "object", + "description": "Response of getting a code for user confirmation (reset password, change email etc.).", + "properties": { + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#GetOobConfirmationCodeResponse\".", + "default": "identitytoolkit#GetOobConfirmationCodeResponse" + }, + "oobCode": { + "type": "string", + "description": "The code to be send to the user." + } + } + }, + "IdentitytoolkitRelyingpartyCreateAuthUriRequest": { + "id": "IdentitytoolkitRelyingpartyCreateAuthUriRequest", + "type": "object", + "description": "Request to get the IDP authentication URL.", + "properties": { + "appId": { + "type": "string", + "description": "The app ID of the mobile app, base64(CERT_SHA1):PACKAGE_NAME for Android, BUNDLE_ID for iOS." + }, + "clientId": { + "type": "string", + "description": "The relying party OAuth client ID." + }, + "context": { + "type": "string", + "description": "The opaque value used by the client to maintain context info between the authentication request and the IDP callback." + }, + "continueUri": { + "type": "string", + "description": "The URI to which the IDP redirects the user after the federated login flow." + }, + "identifier": { + "type": "string", + "description": "The email or federated ID of the user." + }, + "openidRealm": { + "type": "string", + "description": "Optional realm for OpenID protocol. The sub string \"scheme://domain:port\" of the param \"continueUri\" is used if this is not set." + }, + "otaApp": { + "type": "string", + "description": "The native app package for OTA installation." + }, + "providerId": { + "type": "string", + "description": "The IdP ID. For white listed IdPs it's a short domain name e.g. google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier." + } + } + }, + "IdentitytoolkitRelyingpartyDeleteAccountRequest": { + "id": "IdentitytoolkitRelyingpartyDeleteAccountRequest", + "type": "object", + "description": "Request to delete account.", + "properties": { + "localId": { + "type": "string", + "description": "The local ID of the user." + } + } + }, + "IdentitytoolkitRelyingpartyDownloadAccountRequest": { + "id": "IdentitytoolkitRelyingpartyDownloadAccountRequest", + "type": "object", + "description": "Request to download user account in batch.", + "properties": { + "maxResults": { + "type": "integer", + "description": "The max number of results to return in the response.", + "format": "uint32" + }, + "nextPageToken": { + "type": "string", + "description": "The token for the next page. This should be taken from the previous response." + } + } + }, + "IdentitytoolkitRelyingpartyGetAccountInfoRequest": { + "id": "IdentitytoolkitRelyingpartyGetAccountInfoRequest", + "type": "object", + "description": "Request to get the account information.", + "properties": { + "email": { + "type": "array", + "description": "The list of emails of the users to inquiry.", + "items": { + "type": "string" + } + }, + "idToken": { + "type": "string", + "description": "The GITKit token of the authenticated user." + }, + "localId": { + "type": "array", + "description": "The list of local ID's of the users to inquiry.", + "items": { + "type": "string" + } + } + } + }, + "IdentitytoolkitRelyingpartyResetPasswordRequest": { + "id": "IdentitytoolkitRelyingpartyResetPasswordRequest", + "type": "object", + "description": "Request to reset the password.", + "properties": { + "email": { + "type": "string", + "description": "The email address of the user." + }, + "newPassword": { + "type": "string", + "description": "The new password inputted by the user." + }, + "oldPassword": { + "type": "string", + "description": "The old password inputted by the user." + }, + "oobCode": { + "type": "string", + "description": "The confirmation code." + } + } + }, + "IdentitytoolkitRelyingpartySetAccountInfoRequest": { + "id": "IdentitytoolkitRelyingpartySetAccountInfoRequest", + "type": "object", + "description": "Request to set the account information.", + "properties": { + "captchaChallenge": { + "type": "string", + "description": "The captcha challenge." + }, + "captchaResponse": { + "type": "string", + "description": "Response to the captcha." + }, + "displayName": { + "type": "string", + "description": "The name of the user." + }, + "email": { + "type": "string", + "description": "The email of the user." + }, + "emailVerified": { + "type": "boolean", + "description": "Mark the email as verified or not." + }, + "idToken": { + "type": "string", + "description": "The GITKit token of the authenticated user." + }, + "localId": { + "type": "string", + "description": "The local ID of the user." + }, + "oobCode": { + "type": "string", + "description": "The out-of-band code of the change email request." + }, + "password": { + "type": "string", + "description": "The new password of the user." + }, + "provider": { + "type": "array", + "description": "The associated IDPs of the user.", + "items": { + "type": "string" + } + }, + "upgradeToFederatedLogin": { + "type": "boolean", + "description": "Mark the user to upgrade to federated login." + } + } + }, + "IdentitytoolkitRelyingpartyUploadAccountRequest": { + "id": "IdentitytoolkitRelyingpartyUploadAccountRequest", + "type": "object", + "description": "Request to upload user account in batch.", + "properties": { + "hashAlgorithm": { + "type": "string" + }, + "memoryCost": { + "type": "integer", + "format": "int32" + }, + "rounds": { + "type": "integer", + "format": "int32" + }, + "saltSeparator": { + "type": "string", + "format": "byte" + }, + "signerKey": { + "type": "string", + "format": "byte" + }, + "users": { + "type": "array", + "description": "The account info to be stored.", + "items": { + "$ref": "UserInfo" + } + } + } + }, + "IdentitytoolkitRelyingpartyVerifyAssertionRequest": { + "id": "IdentitytoolkitRelyingpartyVerifyAssertionRequest", + "type": "object", + "description": "Request to verify the IDP assertion.", + "properties": { + "pendingIdToken": { + "type": "string", + "description": "The GITKit token for the non-trusted IDP pending to be confirmed by the user." + }, + "postBody": { + "type": "string", + "description": "The post body if the request is a HTTP POST." + }, + "requestUri": { + "type": "string", + "description": "The URI to which the IDP redirects the user back. It may contain federated login result params added by the IDP." + } + } + }, + "IdentitytoolkitRelyingpartyVerifyPasswordRequest": { + "id": "IdentitytoolkitRelyingpartyVerifyPasswordRequest", + "type": "object", + "description": "Request to verify the password.", + "properties": { + "captchaChallenge": { + "type": "string", + "description": "The captcha challenge." + }, + "captchaResponse": { + "type": "string", + "description": "Response to the captcha." + }, + "email": { + "type": "string", + "description": "The email of the user." + }, + "password": { + "type": "string", + "description": "The password inputed by the user." + }, + "pendingIdToken": { + "type": "string", + "description": "The GITKit token for the non-trusted IDP, which is to be confirmed by the user." + } + } + }, + "Relyingparty": { + "id": "Relyingparty", + "type": "object", + "description": "Request of getting a code for user confirmation (reset password, change email etc.)", + "properties": { + "captchaResp": { + "type": "string", + "description": "The recaptcha response from the user." + }, + "challenge": { + "type": "string", + "description": "The recaptcha challenge presented to the user." + }, + "email": { + "type": "string", + "description": "The email of the user." + }, + "idToken": { + "type": "string", + "description": "The user's Gitkit login token for email change." + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#relyingparty\".", + "default": "identitytoolkit#relyingparty" + }, + "newEmail": { + "type": "string", + "description": "The new email if the code is for email change." + }, + "requestType": { + "type": "string", + "description": "The request type." + }, + "userIp": { + "type": "string", + "description": "The IP address of the user." + } + } + }, + "ResetPasswordResponse": { + "id": "ResetPasswordResponse", + "type": "object", + "description": "Response of resetting the password.", + "properties": { + "email": { + "type": "string", + "description": "The user's email." + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#ResetPasswordResponse\".", + "default": "identitytoolkit#ResetPasswordResponse" + } + } + }, + "SetAccountInfoResponse": { + "id": "SetAccountInfoResponse", + "type": "object", + "description": "Respone of setting the account information.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the user." + }, + "email": { + "type": "string", + "description": "The email of the user." + }, + "idToken": { + "type": "string", + "description": "The Gitkit id token to login the newly sign up user." + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#SetAccountInfoResponse\".", + "default": "identitytoolkit#SetAccountInfoResponse" + }, + "providerUserInfo": { + "type": "array", + "description": "The user's profiles at the associated IdPs.", + "items": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "The user's display name at the IDP." + }, + "photoUrl": { + "type": "string", + "description": "The user's photo url at the IDP." + }, + "providerId": { + "type": "string", + "description": "The IdP ID. For whitelisted IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier." + } + } + } + } + } + }, + "UploadAccountResponse": { + "id": "UploadAccountResponse", + "type": "object", + "description": "Respone of uploading accounts in batch.", + "properties": { + "error": { + "type": "array", + "description": "The error encountered while processing the account info.", + "items": { + "type": "object", + "properties": { + "index": { + "type": "integer", + "description": "The index of the malformed account, starting from 0.", + "format": "int32" + }, + "message": { + "type": "string", + "description": "Detailed error message for the account info." + } + } + } + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#UploadAccountResponse\".", + "default": "identitytoolkit#UploadAccountResponse" + } + } + }, + "UserInfo": { + "id": "UserInfo", + "type": "object", + "description": "Template for an individual account info.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the user." + }, + "email": { + "type": "string", + "description": "The email of the user." + }, + "emailVerified": { + "type": "boolean", + "description": "Whether the email has been verified." + }, + "localId": { + "type": "string", + "description": "The local ID of the user." + }, + "passwordHash": { + "type": "string", + "description": "The user's hashed password.", + "format": "byte" + }, + "passwordUpdatedAt": { + "type": "number", + "description": "The timestamp when the password was last updated.", + "format": "double" + }, + "photoUrl": { + "type": "string", + "description": "The URL of the user profile photo." + }, + "providerUserInfo": { + "type": "array", + "description": "The IDP of the user.", + "items": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "The user's display name at the IDP." + }, + "federatedId": { + "type": "string", + "description": "User's identifier at IDP." + }, + "photoUrl": { + "type": "string", + "description": "The user's photo url at the IDP." + }, + "providerId": { + "type": "string", + "description": "The IdP ID. For white listed IdPs it's a short domain name, e.g., google.com, aol.com, live.net and yahoo.com. For other OpenID IdPs it's the OP identifier." + } + } + } + }, + "salt": { + "type": "string", + "description": "The user's password salt.", + "format": "byte" + }, + "version": { + "type": "integer", + "description": "Version of the user's password.", + "format": "int32" + } + } + }, + "VerifyAssertionResponse": { + "id": "VerifyAssertionResponse", + "type": "object", + "description": "Response of verifying the IDP assertion.", + "properties": { + "action": { + "type": "string", + "description": "The action code." + }, + "appInstallationUrl": { + "type": "string", + "description": "URL for OTA app installation." + }, + "appScheme": { + "type": "string", + "description": "The custom scheme used by mobile app." + }, + "context": { + "type": "string", + "description": "The opaque value used by the client to maintain context info between the authentication request and the IDP callback." + }, + "dateOfBirth": { + "type": "string", + "description": "The birth date of the IdP account." + }, + "displayName": { + "type": "string", + "description": "The display name of the user." + }, + "email": { + "type": "string", + "description": "The email returned by the IdP. NOTE: The federated login user may not own the email." + }, + "emailRecycled": { + "type": "boolean", + "description": "It's true if the email is recycled." + }, + "emailVerified": { + "type": "boolean", + "description": "The value is true if the IDP is also the email provider. It means the user owns the email." + }, + "federatedId": { + "type": "string", + "description": "The unique ID identifies the IdP account." + }, + "firstName": { + "type": "string", + "description": "The first name of the user." + }, + "fullName": { + "type": "string", + "description": "The full name of the user." + }, + "idToken": { + "type": "string", + "description": "The ID token." + }, + "inputEmail": { + "type": "string", + "description": "It's the identifier param in the createAuthUri request if the identifier is an email. It can be used to check whether the user input email is different from the asserted email." + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#VerifyAssertionResponse\".", + "default": "identitytoolkit#VerifyAssertionResponse" + }, + "language": { + "type": "string", + "description": "The language preference of the user." + }, + "lastName": { + "type": "string", + "description": "The last name of the user." + }, + "localId": { + "type": "string", + "description": "The RP local ID if it's already been mapped to the IdP account identified by the federated ID." + }, + "needConfirmation": { + "type": "boolean", + "description": "Whether the assertion is from a non-trusted IDP and need account linking confirmation." + }, + "nickName": { + "type": "string", + "description": "The nick name of the user." + }, + "oauthRequestToken": { + "type": "string", + "description": "The user approved request token for the OpenID OAuth extension." + }, + "oauthScope": { + "type": "string", + "description": "The scope for the OpenID OAuth extension." + }, + "originalEmail": { + "type": "string", + "description": "The original email stored in the mapping storage. It's returned when the federated ID is associated to a different email." + }, + "photoUrl": { + "type": "string", + "description": "The URI of the public accessible profiel picture." + }, + "providerId": { + "type": "string", + "description": "The IdP ID. For white listed IdPs it's a short domain name e.g. google.com, aol.com, live.net and yahoo.com. If the \"providerId\" param is set to OpenID OP identifer other than the whilte listed IdPs the OP identifier is returned. If the \"identifier\" param is federated ID in the createAuthUri request. The domain part of the federated ID is returned." + }, + "timeZone": { + "type": "string", + "description": "The timezone of the user." + }, + "verifiedProvider": { + "type": "array", + "description": "When action is 'map', contains the idps which can be used for confirmation.", + "items": { + "type": "string" + } + } + } + }, + "VerifyPasswordResponse": { + "id": "VerifyPasswordResponse", + "type": "object", + "description": "Request of verifying the password.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the user." + }, + "email": { + "type": "string", + "description": "The email returned by the IdP. NOTE: The federated login user may not own the email." + }, + "idToken": { + "type": "string", + "description": "The GITKit token for authenticated user." + }, + "kind": { + "type": "string", + "description": "The fixed string \"identitytoolkit#VerifyPasswordResponse\".", + "default": "identitytoolkit#VerifyPasswordResponse" + }, + "localId": { + "type": "string", + "description": "The RP local ID if it's already been mapped to the IdP account identified by the federated ID." + }, + "photoUrl": { + "type": "string", + "description": "The URI of the user's photo at IdP" + }, + "registered": { + "type": "boolean", + "description": "Whether the email is registered." + } + } + } + }, + "resources": { + "relyingparty": { + "methods": { + "createAuthUri": { + "id": "identitytoolkit.relyingparty.createAuthUri", + "path": "createAuthUri", + "httpMethod": "POST", + "description": "Creates the URI used by the IdP to authenticate the user.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyCreateAuthUriRequest" + }, + "response": { + "$ref": "CreateAuthUriResponse" + } + }, + "deleteAccount": { + "id": "identitytoolkit.relyingparty.deleteAccount", + "path": "deleteAccount", + "httpMethod": "POST", + "description": "Delete user account.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyDeleteAccountRequest" + }, + "response": { + "$ref": "DeleteAccountResponse" + } + }, + "downloadAccount": { + "id": "identitytoolkit.relyingparty.downloadAccount", + "path": "downloadAccount", + "httpMethod": "POST", + "description": "Batch download user accounts.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyDownloadAccountRequest" + }, + "response": { + "$ref": "DownloadAccountResponse" + } + }, + "getAccountInfo": { + "id": "identitytoolkit.relyingparty.getAccountInfo", + "path": "getAccountInfo", + "httpMethod": "POST", + "description": "Returns the account info.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyGetAccountInfoRequest" + }, + "response": { + "$ref": "GetAccountInfoResponse" + } + }, + "getOobConfirmationCode": { + "id": "identitytoolkit.relyingparty.getOobConfirmationCode", + "path": "getOobConfirmationCode", + "httpMethod": "POST", + "description": "Get a code for user action confirmation.", + "request": { + "$ref": "Relyingparty" + }, + "response": { + "$ref": "GetOobConfirmationCodeResponse" + } + }, + "resetPassword": { + "id": "identitytoolkit.relyingparty.resetPassword", + "path": "resetPassword", + "httpMethod": "POST", + "description": "Set account info for a user.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyResetPasswordRequest" + }, + "response": { + "$ref": "ResetPasswordResponse" + } + }, + "setAccountInfo": { + "id": "identitytoolkit.relyingparty.setAccountInfo", + "path": "setAccountInfo", + "httpMethod": "POST", + "description": "Set account info for a user.", + "request": { + "$ref": "IdentitytoolkitRelyingpartySetAccountInfoRequest" + }, + "response": { + "$ref": "SetAccountInfoResponse" + } + }, + "uploadAccount": { + "id": "identitytoolkit.relyingparty.uploadAccount", + "path": "uploadAccount", + "httpMethod": "POST", + "description": "Batch upload existing user accounts.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyUploadAccountRequest" + }, + "response": { + "$ref": "UploadAccountResponse" + } + }, + "verifyAssertion": { + "id": "identitytoolkit.relyingparty.verifyAssertion", + "path": "verifyAssertion", + "httpMethod": "POST", + "description": "Verifies the assertion returned by the IdP.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyVerifyAssertionRequest" + }, + "response": { + "$ref": "VerifyAssertionResponse" + } + }, + "verifyPassword": { + "id": "identitytoolkit.relyingparty.verifyPassword", + "path": "verifyPassword", + "httpMethod": "POST", + "description": "Verifies the user entered password.", + "request": { + "$ref": "IdentitytoolkitRelyingpartyVerifyPasswordRequest" + }, + "response": { + "$ref": "VerifyPasswordResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-gen.go b/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-gen.go new file mode 100644 index 0000000000000..467b16416c00b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/identitytoolkit/v3/identitytoolkit-gen.go @@ -0,0 +1,1102 @@ +// Package identitytoolkit provides access to the Google Identity Toolkit API. +// +// See https://developers.google.com/identity-toolkit/v3/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/identitytoolkit/v3" +// ... +// identitytoolkitService, err := identitytoolkit.New(oauthHttpClient) +package identitytoolkit + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "identitytoolkit:v3" +const apiName = "identitytoolkit" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/identitytoolkit/v3/relyingparty/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Relyingparty = NewRelyingpartyService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Relyingparty *RelyingpartyService +} + +func NewRelyingpartyService(s *Service) *RelyingpartyService { + rs := &RelyingpartyService{s: s} + return rs +} + +type RelyingpartyService struct { + s *Service +} + +type CreateAuthUriResponse struct { + // AuthUri: The URI used by the IDP to authenticate the user. + AuthUri string `json:"authUri,omitempty"` + + // Kind: The fixed string identitytoolkit#CreateAuthUriResponse". + Kind string `json:"kind,omitempty"` + + // ProviderId: The provider ID of the auth URI. + ProviderId string `json:"providerId,omitempty"` + + // Providers: Existing IDP's for the user. + Providers []string `json:"providers,omitempty"` + + // Registered: Whether the user is registered if the identifier is an + // email. + Registered bool `json:"registered,omitempty"` +} + +type DeleteAccountResponse struct { + // Kind: The fixed string "identitytoolkit#DeleteAccountResponse". + Kind string `json:"kind,omitempty"` +} + +type DownloadAccountResponse struct { + // Kind: The fixed string "identitytoolkit#DownloadAccountResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The next page token. To be used in a subsequent + // request to return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Users: The user accounts data. + Users []*UserInfo `json:"users,omitempty"` +} + +type GetAccountInfoResponse struct { + // Kind: The fixed string "identitytoolkit#GetAccountInfoResponse". + Kind string `json:"kind,omitempty"` + + // Users: The info of the users. + Users []*UserInfo `json:"users,omitempty"` +} + +type GetOobConfirmationCodeResponse struct { + // Kind: The fixed string + // "identitytoolkit#GetOobConfirmationCodeResponse". + Kind string `json:"kind,omitempty"` + + // OobCode: The code to be send to the user. + OobCode string `json:"oobCode,omitempty"` +} + +type IdentitytoolkitRelyingpartyCreateAuthUriRequest struct { + // AppId: The app ID of the mobile app, base64(CERT_SHA1):PACKAGE_NAME + // for Android, BUNDLE_ID for iOS. + AppId string `json:"appId,omitempty"` + + // ClientId: The relying party OAuth client ID. + ClientId string `json:"clientId,omitempty"` + + // Context: The opaque value used by the client to maintain context info + // between the authentication request and the IDP callback. + Context string `json:"context,omitempty"` + + // ContinueUri: The URI to which the IDP redirects the user after the + // federated login flow. + ContinueUri string `json:"continueUri,omitempty"` + + // Identifier: The email or federated ID of the user. + Identifier string `json:"identifier,omitempty"` + + // OpenidRealm: Optional realm for OpenID protocol. The sub string + // "scheme://domain:port" of the param "continueUri" is used if this is + // not set. + OpenidRealm string `json:"openidRealm,omitempty"` + + // OtaApp: The native app package for OTA installation. + OtaApp string `json:"otaApp,omitempty"` + + // ProviderId: The IdP ID. For white listed IdPs it's a short domain + // name e.g. google.com, aol.com, live.net and yahoo.com. For other + // OpenID IdPs it's the OP identifier. + ProviderId string `json:"providerId,omitempty"` +} + +type IdentitytoolkitRelyingpartyDeleteAccountRequest struct { + // LocalId: The local ID of the user. + LocalId string `json:"localId,omitempty"` +} + +type IdentitytoolkitRelyingpartyDownloadAccountRequest struct { + // MaxResults: The max number of results to return in the response. + MaxResults int64 `json:"maxResults,omitempty"` + + // NextPageToken: The token for the next page. This should be taken from + // the previous response. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type IdentitytoolkitRelyingpartyGetAccountInfoRequest struct { + // Email: The list of emails of the users to inquiry. + Email []string `json:"email,omitempty"` + + // IdToken: The GITKit token of the authenticated user. + IdToken string `json:"idToken,omitempty"` + + // LocalId: The list of local ID's of the users to inquiry. + LocalId []string `json:"localId,omitempty"` +} + +type IdentitytoolkitRelyingpartyResetPasswordRequest struct { + // Email: The email address of the user. + Email string `json:"email,omitempty"` + + // NewPassword: The new password inputted by the user. + NewPassword string `json:"newPassword,omitempty"` + + // OldPassword: The old password inputted by the user. + OldPassword string `json:"oldPassword,omitempty"` + + // OobCode: The confirmation code. + OobCode string `json:"oobCode,omitempty"` +} + +type IdentitytoolkitRelyingpartySetAccountInfoRequest struct { + // CaptchaChallenge: The captcha challenge. + CaptchaChallenge string `json:"captchaChallenge,omitempty"` + + // CaptchaResponse: Response to the captcha. + CaptchaResponse string `json:"captchaResponse,omitempty"` + + // DisplayName: The name of the user. + DisplayName string `json:"displayName,omitempty"` + + // Email: The email of the user. + Email string `json:"email,omitempty"` + + // EmailVerified: Mark the email as verified or not. + EmailVerified bool `json:"emailVerified,omitempty"` + + // IdToken: The GITKit token of the authenticated user. + IdToken string `json:"idToken,omitempty"` + + // LocalId: The local ID of the user. + LocalId string `json:"localId,omitempty"` + + // OobCode: The out-of-band code of the change email request. + OobCode string `json:"oobCode,omitempty"` + + // Password: The new password of the user. + Password string `json:"password,omitempty"` + + // Provider: The associated IDPs of the user. + Provider []string `json:"provider,omitempty"` + + // UpgradeToFederatedLogin: Mark the user to upgrade to federated login. + UpgradeToFederatedLogin bool `json:"upgradeToFederatedLogin,omitempty"` +} + +type IdentitytoolkitRelyingpartyUploadAccountRequest struct { + HashAlgorithm string `json:"hashAlgorithm,omitempty"` + + MemoryCost int64 `json:"memoryCost,omitempty"` + + Rounds int64 `json:"rounds,omitempty"` + + SaltSeparator string `json:"saltSeparator,omitempty"` + + SignerKey string `json:"signerKey,omitempty"` + + // Users: The account info to be stored. + Users []*UserInfo `json:"users,omitempty"` +} + +type IdentitytoolkitRelyingpartyVerifyAssertionRequest struct { + // PendingIdToken: The GITKit token for the non-trusted IDP pending to + // be confirmed by the user. + PendingIdToken string `json:"pendingIdToken,omitempty"` + + // PostBody: The post body if the request is a HTTP POST. + PostBody string `json:"postBody,omitempty"` + + // RequestUri: The URI to which the IDP redirects the user back. It may + // contain federated login result params added by the IDP. + RequestUri string `json:"requestUri,omitempty"` +} + +type IdentitytoolkitRelyingpartyVerifyPasswordRequest struct { + // CaptchaChallenge: The captcha challenge. + CaptchaChallenge string `json:"captchaChallenge,omitempty"` + + // CaptchaResponse: Response to the captcha. + CaptchaResponse string `json:"captchaResponse,omitempty"` + + // Email: The email of the user. + Email string `json:"email,omitempty"` + + // Password: The password inputed by the user. + Password string `json:"password,omitempty"` + + // PendingIdToken: The GITKit token for the non-trusted IDP, which is to + // be confirmed by the user. + PendingIdToken string `json:"pendingIdToken,omitempty"` +} + +type Relyingparty struct { + // CaptchaResp: The recaptcha response from the user. + CaptchaResp string `json:"captchaResp,omitempty"` + + // Challenge: The recaptcha challenge presented to the user. + Challenge string `json:"challenge,omitempty"` + + // Email: The email of the user. + Email string `json:"email,omitempty"` + + // IdToken: The user's Gitkit login token for email change. + IdToken string `json:"idToken,omitempty"` + + // Kind: The fixed string "identitytoolkit#relyingparty". + Kind string `json:"kind,omitempty"` + + // NewEmail: The new email if the code is for email change. + NewEmail string `json:"newEmail,omitempty"` + + // RequestType: The request type. + RequestType string `json:"requestType,omitempty"` + + // UserIp: The IP address of the user. + UserIp string `json:"userIp,omitempty"` +} + +type ResetPasswordResponse struct { + // Email: The user's email. + Email string `json:"email,omitempty"` + + // Kind: The fixed string "identitytoolkit#ResetPasswordResponse". + Kind string `json:"kind,omitempty"` +} + +type SetAccountInfoResponse struct { + // DisplayName: The name of the user. + DisplayName string `json:"displayName,omitempty"` + + // Email: The email of the user. + Email string `json:"email,omitempty"` + + // IdToken: The Gitkit id token to login the newly sign up user. + IdToken string `json:"idToken,omitempty"` + + // Kind: The fixed string "identitytoolkit#SetAccountInfoResponse". + Kind string `json:"kind,omitempty"` + + // ProviderUserInfo: The user's profiles at the associated IdPs. + ProviderUserInfo []*SetAccountInfoResponseProviderUserInfo `json:"providerUserInfo,omitempty"` +} + +type SetAccountInfoResponseProviderUserInfo struct { + // DisplayName: The user's display name at the IDP. + DisplayName string `json:"displayName,omitempty"` + + // PhotoUrl: The user's photo url at the IDP. + PhotoUrl string `json:"photoUrl,omitempty"` + + // ProviderId: The IdP ID. For whitelisted IdPs it's a short domain + // name, e.g., google.com, aol.com, live.net and yahoo.com. For other + // OpenID IdPs it's the OP identifier. + ProviderId string `json:"providerId,omitempty"` +} + +type UploadAccountResponse struct { + // Error: The error encountered while processing the account info. + Error []*UploadAccountResponseError `json:"error,omitempty"` + + // Kind: The fixed string "identitytoolkit#UploadAccountResponse". + Kind string `json:"kind,omitempty"` +} + +type UploadAccountResponseError struct { + // Index: The index of the malformed account, starting from 0. + Index int64 `json:"index,omitempty"` + + // Message: Detailed error message for the account info. + Message string `json:"message,omitempty"` +} + +type UserInfo struct { + // DisplayName: The name of the user. + DisplayName string `json:"displayName,omitempty"` + + // Email: The email of the user. + Email string `json:"email,omitempty"` + + // EmailVerified: Whether the email has been verified. + EmailVerified bool `json:"emailVerified,omitempty"` + + // LocalId: The local ID of the user. + LocalId string `json:"localId,omitempty"` + + // PasswordHash: The user's hashed password. + PasswordHash string `json:"passwordHash,omitempty"` + + // PasswordUpdatedAt: The timestamp when the password was last updated. + PasswordUpdatedAt float64 `json:"passwordUpdatedAt,omitempty"` + + // PhotoUrl: The URL of the user profile photo. + PhotoUrl string `json:"photoUrl,omitempty"` + + // ProviderUserInfo: The IDP of the user. + ProviderUserInfo []*UserInfoProviderUserInfo `json:"providerUserInfo,omitempty"` + + // Salt: The user's password salt. + Salt string `json:"salt,omitempty"` + + // Version: Version of the user's password. + Version int64 `json:"version,omitempty"` +} + +type UserInfoProviderUserInfo struct { + // DisplayName: The user's display name at the IDP. + DisplayName string `json:"displayName,omitempty"` + + // FederatedId: User's identifier at IDP. + FederatedId string `json:"federatedId,omitempty"` + + // PhotoUrl: The user's photo url at the IDP. + PhotoUrl string `json:"photoUrl,omitempty"` + + // ProviderId: The IdP ID. For white listed IdPs it's a short domain + // name, e.g., google.com, aol.com, live.net and yahoo.com. For other + // OpenID IdPs it's the OP identifier. + ProviderId string `json:"providerId,omitempty"` +} + +type VerifyAssertionResponse struct { + // Action: The action code. + Action string `json:"action,omitempty"` + + // AppInstallationUrl: URL for OTA app installation. + AppInstallationUrl string `json:"appInstallationUrl,omitempty"` + + // AppScheme: The custom scheme used by mobile app. + AppScheme string `json:"appScheme,omitempty"` + + // Context: The opaque value used by the client to maintain context info + // between the authentication request and the IDP callback. + Context string `json:"context,omitempty"` + + // DateOfBirth: The birth date of the IdP account. + DateOfBirth string `json:"dateOfBirth,omitempty"` + + // DisplayName: The display name of the user. + DisplayName string `json:"displayName,omitempty"` + + // Email: The email returned by the IdP. NOTE: The federated login user + // may not own the email. + Email string `json:"email,omitempty"` + + // EmailRecycled: It's true if the email is recycled. + EmailRecycled bool `json:"emailRecycled,omitempty"` + + // EmailVerified: The value is true if the IDP is also the email + // provider. It means the user owns the email. + EmailVerified bool `json:"emailVerified,omitempty"` + + // FederatedId: The unique ID identifies the IdP account. + FederatedId string `json:"federatedId,omitempty"` + + // FirstName: The first name of the user. + FirstName string `json:"firstName,omitempty"` + + // FullName: The full name of the user. + FullName string `json:"fullName,omitempty"` + + // IdToken: The ID token. + IdToken string `json:"idToken,omitempty"` + + // InputEmail: It's the identifier param in the createAuthUri request if + // the identifier is an email. It can be used to check whether the user + // input email is different from the asserted email. + InputEmail string `json:"inputEmail,omitempty"` + + // Kind: The fixed string "identitytoolkit#VerifyAssertionResponse". + Kind string `json:"kind,omitempty"` + + // Language: The language preference of the user. + Language string `json:"language,omitempty"` + + // LastName: The last name of the user. + LastName string `json:"lastName,omitempty"` + + // LocalId: The RP local ID if it's already been mapped to the IdP + // account identified by the federated ID. + LocalId string `json:"localId,omitempty"` + + // NeedConfirmation: Whether the assertion is from a non-trusted IDP and + // need account linking confirmation. + NeedConfirmation bool `json:"needConfirmation,omitempty"` + + // NickName: The nick name of the user. + NickName string `json:"nickName,omitempty"` + + // OauthRequestToken: The user approved request token for the OpenID + // OAuth extension. + OauthRequestToken string `json:"oauthRequestToken,omitempty"` + + // OauthScope: The scope for the OpenID OAuth extension. + OauthScope string `json:"oauthScope,omitempty"` + + // OriginalEmail: The original email stored in the mapping storage. It's + // returned when the federated ID is associated to a different email. + OriginalEmail string `json:"originalEmail,omitempty"` + + // PhotoUrl: The URI of the public accessible profiel picture. + PhotoUrl string `json:"photoUrl,omitempty"` + + // ProviderId: The IdP ID. For white listed IdPs it's a short domain + // name e.g. google.com, aol.com, live.net and yahoo.com. If the + // "providerId" param is set to OpenID OP identifer other than the + // whilte listed IdPs the OP identifier is returned. If the "identifier" + // param is federated ID in the createAuthUri request. The domain part + // of the federated ID is returned. + ProviderId string `json:"providerId,omitempty"` + + // TimeZone: The timezone of the user. + TimeZone string `json:"timeZone,omitempty"` + + // VerifiedProvider: When action is 'map', contains the idps which can + // be used for confirmation. + VerifiedProvider []string `json:"verifiedProvider,omitempty"` +} + +type VerifyPasswordResponse struct { + // DisplayName: The name of the user. + DisplayName string `json:"displayName,omitempty"` + + // Email: The email returned by the IdP. NOTE: The federated login user + // may not own the email. + Email string `json:"email,omitempty"` + + // IdToken: The GITKit token for authenticated user. + IdToken string `json:"idToken,omitempty"` + + // Kind: The fixed string "identitytoolkit#VerifyPasswordResponse". + Kind string `json:"kind,omitempty"` + + // LocalId: The RP local ID if it's already been mapped to the IdP + // account identified by the federated ID. + LocalId string `json:"localId,omitempty"` + + // PhotoUrl: The URI of the user's photo at IdP + PhotoUrl string `json:"photoUrl,omitempty"` + + // Registered: Whether the email is registered. + Registered bool `json:"registered,omitempty"` +} + +// method id "identitytoolkit.relyingparty.createAuthUri": + +type RelyingpartyCreateAuthUriCall struct { + s *Service + identitytoolkitrelyingpartycreateauthurirequest *IdentitytoolkitRelyingpartyCreateAuthUriRequest + opt_ map[string]interface{} +} + +// CreateAuthUri: Creates the URI used by the IdP to authenticate the +// user. +func (r *RelyingpartyService) CreateAuthUri(identitytoolkitrelyingpartycreateauthurirequest *IdentitytoolkitRelyingpartyCreateAuthUriRequest) *RelyingpartyCreateAuthUriCall { + c := &RelyingpartyCreateAuthUriCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartycreateauthurirequest = identitytoolkitrelyingpartycreateauthurirequest + return c +} + +func (c *RelyingpartyCreateAuthUriCall) Do() (*CreateAuthUriResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartycreateauthurirequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "createAuthUri") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CreateAuthUriResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates the URI used by the IdP to authenticate the user.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.createAuthUri", + // "path": "createAuthUri", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyCreateAuthUriRequest" + // }, + // "response": { + // "$ref": "CreateAuthUriResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.deleteAccount": + +type RelyingpartyDeleteAccountCall struct { + s *Service + identitytoolkitrelyingpartydeleteaccountrequest *IdentitytoolkitRelyingpartyDeleteAccountRequest + opt_ map[string]interface{} +} + +// DeleteAccount: Delete user account. +func (r *RelyingpartyService) DeleteAccount(identitytoolkitrelyingpartydeleteaccountrequest *IdentitytoolkitRelyingpartyDeleteAccountRequest) *RelyingpartyDeleteAccountCall { + c := &RelyingpartyDeleteAccountCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartydeleteaccountrequest = identitytoolkitrelyingpartydeleteaccountrequest + return c +} + +func (c *RelyingpartyDeleteAccountCall) Do() (*DeleteAccountResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartydeleteaccountrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "deleteAccount") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DeleteAccountResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Delete user account.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.deleteAccount", + // "path": "deleteAccount", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyDeleteAccountRequest" + // }, + // "response": { + // "$ref": "DeleteAccountResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.downloadAccount": + +type RelyingpartyDownloadAccountCall struct { + s *Service + identitytoolkitrelyingpartydownloadaccountrequest *IdentitytoolkitRelyingpartyDownloadAccountRequest + opt_ map[string]interface{} +} + +// DownloadAccount: Batch download user accounts. +func (r *RelyingpartyService) DownloadAccount(identitytoolkitrelyingpartydownloadaccountrequest *IdentitytoolkitRelyingpartyDownloadAccountRequest) *RelyingpartyDownloadAccountCall { + c := &RelyingpartyDownloadAccountCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartydownloadaccountrequest = identitytoolkitrelyingpartydownloadaccountrequest + return c +} + +func (c *RelyingpartyDownloadAccountCall) Do() (*DownloadAccountResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartydownloadaccountrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "downloadAccount") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DownloadAccountResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Batch download user accounts.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.downloadAccount", + // "path": "downloadAccount", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyDownloadAccountRequest" + // }, + // "response": { + // "$ref": "DownloadAccountResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.getAccountInfo": + +type RelyingpartyGetAccountInfoCall struct { + s *Service + identitytoolkitrelyingpartygetaccountinforequest *IdentitytoolkitRelyingpartyGetAccountInfoRequest + opt_ map[string]interface{} +} + +// GetAccountInfo: Returns the account info. +func (r *RelyingpartyService) GetAccountInfo(identitytoolkitrelyingpartygetaccountinforequest *IdentitytoolkitRelyingpartyGetAccountInfoRequest) *RelyingpartyGetAccountInfoCall { + c := &RelyingpartyGetAccountInfoCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartygetaccountinforequest = identitytoolkitrelyingpartygetaccountinforequest + return c +} + +func (c *RelyingpartyGetAccountInfoCall) Do() (*GetAccountInfoResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartygetaccountinforequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "getAccountInfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(GetAccountInfoResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the account info.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.getAccountInfo", + // "path": "getAccountInfo", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyGetAccountInfoRequest" + // }, + // "response": { + // "$ref": "GetAccountInfoResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.getOobConfirmationCode": + +type RelyingpartyGetOobConfirmationCodeCall struct { + s *Service + relyingparty *Relyingparty + opt_ map[string]interface{} +} + +// GetOobConfirmationCode: Get a code for user action confirmation. +func (r *RelyingpartyService) GetOobConfirmationCode(relyingparty *Relyingparty) *RelyingpartyGetOobConfirmationCodeCall { + c := &RelyingpartyGetOobConfirmationCodeCall{s: r.s, opt_: make(map[string]interface{})} + c.relyingparty = relyingparty + return c +} + +func (c *RelyingpartyGetOobConfirmationCodeCall) Do() (*GetOobConfirmationCodeResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.relyingparty) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "getOobConfirmationCode") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(GetOobConfirmationCodeResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a code for user action confirmation.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.getOobConfirmationCode", + // "path": "getOobConfirmationCode", + // "request": { + // "$ref": "Relyingparty" + // }, + // "response": { + // "$ref": "GetOobConfirmationCodeResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.resetPassword": + +type RelyingpartyResetPasswordCall struct { + s *Service + identitytoolkitrelyingpartyresetpasswordrequest *IdentitytoolkitRelyingpartyResetPasswordRequest + opt_ map[string]interface{} +} + +// ResetPassword: Set account info for a user. +func (r *RelyingpartyService) ResetPassword(identitytoolkitrelyingpartyresetpasswordrequest *IdentitytoolkitRelyingpartyResetPasswordRequest) *RelyingpartyResetPasswordCall { + c := &RelyingpartyResetPasswordCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartyresetpasswordrequest = identitytoolkitrelyingpartyresetpasswordrequest + return c +} + +func (c *RelyingpartyResetPasswordCall) Do() (*ResetPasswordResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyresetpasswordrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "resetPassword") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ResetPasswordResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Set account info for a user.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.resetPassword", + // "path": "resetPassword", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyResetPasswordRequest" + // }, + // "response": { + // "$ref": "ResetPasswordResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.setAccountInfo": + +type RelyingpartySetAccountInfoCall struct { + s *Service + identitytoolkitrelyingpartysetaccountinforequest *IdentitytoolkitRelyingpartySetAccountInfoRequest + opt_ map[string]interface{} +} + +// SetAccountInfo: Set account info for a user. +func (r *RelyingpartyService) SetAccountInfo(identitytoolkitrelyingpartysetaccountinforequest *IdentitytoolkitRelyingpartySetAccountInfoRequest) *RelyingpartySetAccountInfoCall { + c := &RelyingpartySetAccountInfoCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartysetaccountinforequest = identitytoolkitrelyingpartysetaccountinforequest + return c +} + +func (c *RelyingpartySetAccountInfoCall) Do() (*SetAccountInfoResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartysetaccountinforequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "setAccountInfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SetAccountInfoResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Set account info for a user.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.setAccountInfo", + // "path": "setAccountInfo", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartySetAccountInfoRequest" + // }, + // "response": { + // "$ref": "SetAccountInfoResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.uploadAccount": + +type RelyingpartyUploadAccountCall struct { + s *Service + identitytoolkitrelyingpartyuploadaccountrequest *IdentitytoolkitRelyingpartyUploadAccountRequest + opt_ map[string]interface{} +} + +// UploadAccount: Batch upload existing user accounts. +func (r *RelyingpartyService) UploadAccount(identitytoolkitrelyingpartyuploadaccountrequest *IdentitytoolkitRelyingpartyUploadAccountRequest) *RelyingpartyUploadAccountCall { + c := &RelyingpartyUploadAccountCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartyuploadaccountrequest = identitytoolkitrelyingpartyuploadaccountrequest + return c +} + +func (c *RelyingpartyUploadAccountCall) Do() (*UploadAccountResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyuploadaccountrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "uploadAccount") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UploadAccountResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Batch upload existing user accounts.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.uploadAccount", + // "path": "uploadAccount", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyUploadAccountRequest" + // }, + // "response": { + // "$ref": "UploadAccountResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.verifyAssertion": + +type RelyingpartyVerifyAssertionCall struct { + s *Service + identitytoolkitrelyingpartyverifyassertionrequest *IdentitytoolkitRelyingpartyVerifyAssertionRequest + opt_ map[string]interface{} +} + +// VerifyAssertion: Verifies the assertion returned by the IdP. +func (r *RelyingpartyService) VerifyAssertion(identitytoolkitrelyingpartyverifyassertionrequest *IdentitytoolkitRelyingpartyVerifyAssertionRequest) *RelyingpartyVerifyAssertionCall { + c := &RelyingpartyVerifyAssertionCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartyverifyassertionrequest = identitytoolkitrelyingpartyverifyassertionrequest + return c +} + +func (c *RelyingpartyVerifyAssertionCall) Do() (*VerifyAssertionResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyverifyassertionrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "verifyAssertion") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(VerifyAssertionResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Verifies the assertion returned by the IdP.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.verifyAssertion", + // "path": "verifyAssertion", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyVerifyAssertionRequest" + // }, + // "response": { + // "$ref": "VerifyAssertionResponse" + // } + // } + +} + +// method id "identitytoolkit.relyingparty.verifyPassword": + +type RelyingpartyVerifyPasswordCall struct { + s *Service + identitytoolkitrelyingpartyverifypasswordrequest *IdentitytoolkitRelyingpartyVerifyPasswordRequest + opt_ map[string]interface{} +} + +// VerifyPassword: Verifies the user entered password. +func (r *RelyingpartyService) VerifyPassword(identitytoolkitrelyingpartyverifypasswordrequest *IdentitytoolkitRelyingpartyVerifyPasswordRequest) *RelyingpartyVerifyPasswordCall { + c := &RelyingpartyVerifyPasswordCall{s: r.s, opt_: make(map[string]interface{})} + c.identitytoolkitrelyingpartyverifypasswordrequest = identitytoolkitrelyingpartyverifypasswordrequest + return c +} + +func (c *RelyingpartyVerifyPasswordCall) Do() (*VerifyPasswordResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.identitytoolkitrelyingpartyverifypasswordrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "verifyPassword") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(VerifyPasswordResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Verifies the user entered password.", + // "httpMethod": "POST", + // "id": "identitytoolkit.relyingparty.verifyPassword", + // "path": "verifyPassword", + // "request": { + // "$ref": "IdentitytoolkitRelyingpartyVerifyPasswordRequest" + // }, + // "response": { + // "$ref": "VerifyPasswordResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-api.json b/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-api.json new file mode 100644 index 0000000000000..8d48768c7dd52 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-api.json @@ -0,0 +1,351 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"BgGnx7p-6wsAbOn4St99QhtBGbA/TKLTAqrqg3ZwD--yrgL0HXd_jYw\"", + "discoveryVersion": "v1", + "id": "latitude:v1", + "name": "latitude", + "version": "v1", + "revision": "20120710", + "title": "Google Latitude API", + "description": "Lets you read and update your current location and work with your location history", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/latitude/v1/using", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/latitude/v1/", + "basePath": "/latitude/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "latitude/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "atom", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "false", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/latitude.all.best": { + "description": "Manage your best-available location and location history" + }, + "https://www.googleapis.com/auth/latitude.all.city": { + "description": "Manage your city-level location and location history" + }, + "https://www.googleapis.com/auth/latitude.current.best": { + "description": "Manage your best-available location" + }, + "https://www.googleapis.com/auth/latitude.current.city": { + "description": "Manage your city-level location" + } + } + } + }, + "features": [ + "dataWrapper" + ], + "schemas": { + "LatitudeCurrentlocationResourceJson": { + "$ref": "Location" + }, + "Location": { + "id": "Location", + "type": "object", + "description": "A Location resource identifies a user's position at a particular time. It may include metadata about the user's position, such as a venue if the location was recorded at the time of a check-in.", + "properties": { + "accuracy": { + "type": "any", + "description": "Accuracy of the latitude and longitude coordinates, in non-negative meters. Optional." + }, + "activityId": { + "type": "any", + "description": "Unique ID of the Buzz message that corresponds to the check-in associated with this location. Available only for check-in locations. Optional." + }, + "altitude": { + "type": "any", + "description": "Altitude of the location, in meters. Optional." + }, + "altitudeAccuracy": { + "type": "any", + "description": "Accuracy of the altitude value, in meters. Optional." + }, + "heading": { + "type": "any", + "description": "Direction of travel of the user when this location was recorded. In degrees, clockwise relative to true north. Optional." + }, + "kind": { + "type": "string", + "description": "Kind of this item.", + "default": "latitude#location" + }, + "latitude": { + "type": "any", + "description": "Latitude of the location, in decimal degrees." + }, + "longitude": { + "type": "any", + "description": "Longitude of the location, in decimal degrees." + }, + "speed": { + "type": "any", + "description": "Ground speed of the user at the time this location was recorded, in meters per second. Non-negative. Optional." + }, + "timestampMs": { + "type": "any", + "description": "Timestamp of the Location Resource, in milliseconds since the epoch (UTC). This is also the Location Resource's unique id." + } + } + }, + "LocationFeed": { + "id": "LocationFeed", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Location" + } + }, + "kind": { + "type": "string", + "default": "latitude#locationFeed" + } + } + } + }, + "resources": { + "currentLocation": { + "methods": { + "delete": { + "id": "latitude.currentLocation.delete", + "path": "currentLocation", + "httpMethod": "DELETE", + "description": "Deletes the authenticated user's current location.", + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city", + "https://www.googleapis.com/auth/latitude.current.best", + "https://www.googleapis.com/auth/latitude.current.city" + ] + }, + "get": { + "id": "latitude.currentLocation.get", + "path": "currentLocation", + "httpMethod": "GET", + "description": "Returns the authenticated user's current location.", + "parameters": { + "granularity": { + "type": "string", + "description": "Granularity of the requested location.", + "default": "city", + "enum": [ + "best", + "city" + ], + "enumDescriptions": [ + "Request best available granularity.", + "Request city-level granularty." + ], + "location": "query" + } + }, + "response": { + "$ref": "LatitudeCurrentlocationResourceJson" + }, + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city", + "https://www.googleapis.com/auth/latitude.current.best", + "https://www.googleapis.com/auth/latitude.current.city" + ] + }, + "insert": { + "id": "latitude.currentLocation.insert", + "path": "currentLocation", + "httpMethod": "POST", + "description": "Updates or creates the user's current location.", + "request": { + "$ref": "LatitudeCurrentlocationResourceJson" + }, + "response": { + "$ref": "LatitudeCurrentlocationResourceJson" + }, + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city", + "https://www.googleapis.com/auth/latitude.current.best", + "https://www.googleapis.com/auth/latitude.current.city" + ] + } + } + }, + "location": { + "methods": { + "delete": { + "id": "latitude.location.delete", + "path": "location/{locationId}", + "httpMethod": "DELETE", + "description": "Deletes a location from the user's location history.", + "parameters": { + "locationId": { + "type": "string", + "description": "Timestamp of the location to delete (ms since epoch).", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "locationId" + ], + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city" + ] + }, + "get": { + "id": "latitude.location.get", + "path": "location/{locationId}", + "httpMethod": "GET", + "description": "Reads a location from the user's location history.", + "parameters": { + "granularity": { + "type": "string", + "description": "Granularity of the location to return.", + "default": "city", + "enum": [ + "best", + "city" + ], + "enumDescriptions": [ + "Request best available granularity.", + "Request city-level granularty." + ], + "location": "query" + }, + "locationId": { + "type": "string", + "description": "Timestamp of the location to read (ms since epoch).", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "locationId" + ], + "response": { + "$ref": "Location" + }, + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city" + ] + }, + "insert": { + "id": "latitude.location.insert", + "path": "location", + "httpMethod": "POST", + "description": "Inserts or updates a location in the user's location history.", + "request": { + "$ref": "Location" + }, + "response": { + "$ref": "Location" + }, + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city" + ] + }, + "list": { + "id": "latitude.location.list", + "path": "location", + "httpMethod": "GET", + "description": "Lists the user's location history.", + "parameters": { + "granularity": { + "type": "string", + "description": "Granularity of the requested locations.", + "default": "city", + "enum": [ + "best", + "city" + ], + "enumDescriptions": [ + "Request best available granularity.", + "Request city-level granularty." + ], + "location": "query" + }, + "max-results": { + "type": "string", + "description": "Maximum number of locations to return.", + "location": "query" + }, + "max-time": { + "type": "string", + "description": "Maximum timestamp of locations to return (ms since epoch).", + "location": "query" + }, + "min-time": { + "type": "string", + "description": "Minimum timestamp of locations to return (ms since epoch).", + "location": "query" + } + }, + "response": { + "$ref": "LocationFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/latitude.all.best", + "https://www.googleapis.com/auth/latitude.all.city" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-gen.go b/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-gen.go new file mode 100644 index 0000000000000..c118846d47bb0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/latitude/v1/latitude-gen.go @@ -0,0 +1,661 @@ +// Package latitude provides access to the Google Latitude API. +// +// See https://developers.google.com/latitude/v1/using +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/latitude/v1" +// ... +// latitudeService, err := latitude.New(oauthHttpClient) +package latitude + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "latitude:v1" +const apiName = "latitude" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/latitude/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your best-available location and location history + LatitudeAllBestScope = "https://www.googleapis.com/auth/latitude.all.best" + + // Manage your city-level location and location history + LatitudeAllCityScope = "https://www.googleapis.com/auth/latitude.all.city" + + // Manage your best-available location + LatitudeCurrentBestScope = "https://www.googleapis.com/auth/latitude.current.best" + + // Manage your city-level location + LatitudeCurrentCityScope = "https://www.googleapis.com/auth/latitude.current.city" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.CurrentLocation = NewCurrentLocationService(s) + s.Location = NewLocationService(s) + return s, nil +} + +type Service struct { + client *http.Client + + CurrentLocation *CurrentLocationService + + Location *LocationService +} + +func NewCurrentLocationService(s *Service) *CurrentLocationService { + rs := &CurrentLocationService{s: s} + return rs +} + +type CurrentLocationService struct { + s *Service +} + +func NewLocationService(s *Service) *LocationService { + rs := &LocationService{s: s} + return rs +} + +type LocationService struct { + s *Service +} + +type LatitudeCurrentlocationResourceJson struct { + Location +} + +type Location struct { + // Accuracy: Accuracy of the latitude and longitude coordinates, in + // non-negative meters. Optional. + Accuracy interface{} `json:"accuracy,omitempty"` + + // ActivityId: Unique ID of the Buzz message that corresponds to the + // check-in associated with this location. Available only for check-in + // locations. Optional. + ActivityId interface{} `json:"activityId,omitempty"` + + // Altitude: Altitude of the location, in meters. Optional. + Altitude interface{} `json:"altitude,omitempty"` + + // AltitudeAccuracy: Accuracy of the altitude value, in meters. + // Optional. + AltitudeAccuracy interface{} `json:"altitudeAccuracy,omitempty"` + + // Heading: Direction of travel of the user when this location was + // recorded. In degrees, clockwise relative to true north. Optional. + Heading interface{} `json:"heading,omitempty"` + + // Kind: Kind of this item. + Kind string `json:"kind,omitempty"` + + // Latitude: Latitude of the location, in decimal degrees. + Latitude interface{} `json:"latitude,omitempty"` + + // Longitude: Longitude of the location, in decimal degrees. + Longitude interface{} `json:"longitude,omitempty"` + + // Speed: Ground speed of the user at the time this location was + // recorded, in meters per second. Non-negative. Optional. + Speed interface{} `json:"speed,omitempty"` + + // TimestampMs: Timestamp of the Location Resource, in milliseconds + // since the epoch (UTC). This is also the Location Resource's unique + // id. + TimestampMs interface{} `json:"timestampMs,omitempty"` +} + +type LocationFeed struct { + Items []*Location `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +// method id "latitude.currentLocation.delete": + +type CurrentLocationDeleteCall struct { + s *Service + opt_ map[string]interface{} +} + +// Delete: Deletes the authenticated user's current location. +func (r *CurrentLocationService) Delete() *CurrentLocationDeleteCall { + c := &CurrentLocationDeleteCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *CurrentLocationDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "currentLocation") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the authenticated user's current location.", + // "httpMethod": "DELETE", + // "id": "latitude.currentLocation.delete", + // "path": "currentLocation", + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city", + // "https://www.googleapis.com/auth/latitude.current.best", + // "https://www.googleapis.com/auth/latitude.current.city" + // ] + // } + +} + +// method id "latitude.currentLocation.get": + +type CurrentLocationGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Returns the authenticated user's current location. +func (r *CurrentLocationService) Get() *CurrentLocationGetCall { + c := &CurrentLocationGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Granularity sets the optional parameter "granularity": Granularity of +// the requested location. +func (c *CurrentLocationGetCall) Granularity(granularity string) *CurrentLocationGetCall { + c.opt_["granularity"] = granularity + return c +} + +func (c *CurrentLocationGetCall) Do() (*LatitudeCurrentlocationResourceJson, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["granularity"]; ok { + params.Set("granularity", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "currentLocation") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LatitudeCurrentlocationResourceJson) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the authenticated user's current location.", + // "httpMethod": "GET", + // "id": "latitude.currentLocation.get", + // "parameters": { + // "granularity": { + // "default": "city", + // "description": "Granularity of the requested location.", + // "enum": [ + // "best", + // "city" + // ], + // "enumDescriptions": [ + // "Request best available granularity.", + // "Request city-level granularty." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "currentLocation", + // "response": { + // "$ref": "LatitudeCurrentlocationResourceJson" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city", + // "https://www.googleapis.com/auth/latitude.current.best", + // "https://www.googleapis.com/auth/latitude.current.city" + // ] + // } + +} + +// method id "latitude.currentLocation.insert": + +type CurrentLocationInsertCall struct { + s *Service + latitudecurrentlocationresourcejson *LatitudeCurrentlocationResourceJson + opt_ map[string]interface{} +} + +// Insert: Updates or creates the user's current location. +func (r *CurrentLocationService) Insert(latitudecurrentlocationresourcejson *LatitudeCurrentlocationResourceJson) *CurrentLocationInsertCall { + c := &CurrentLocationInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.latitudecurrentlocationresourcejson = latitudecurrentlocationresourcejson + return c +} + +func (c *CurrentLocationInsertCall) Do() (*LatitudeCurrentlocationResourceJson, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.latitudecurrentlocationresourcejson) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "currentLocation") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LatitudeCurrentlocationResourceJson) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates or creates the user's current location.", + // "httpMethod": "POST", + // "id": "latitude.currentLocation.insert", + // "path": "currentLocation", + // "request": { + // "$ref": "LatitudeCurrentlocationResourceJson" + // }, + // "response": { + // "$ref": "LatitudeCurrentlocationResourceJson" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city", + // "https://www.googleapis.com/auth/latitude.current.best", + // "https://www.googleapis.com/auth/latitude.current.city" + // ] + // } + +} + +// method id "latitude.location.delete": + +type LocationDeleteCall struct { + s *Service + locationId string + opt_ map[string]interface{} +} + +// Delete: Deletes a location from the user's location history. +func (r *LocationService) Delete(locationId string) *LocationDeleteCall { + c := &LocationDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.locationId = locationId + return c +} + +func (c *LocationDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "location/{locationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{locationId}", url.QueryEscape(c.locationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a location from the user's location history.", + // "httpMethod": "DELETE", + // "id": "latitude.location.delete", + // "parameterOrder": [ + // "locationId" + // ], + // "parameters": { + // "locationId": { + // "description": "Timestamp of the location to delete (ms since epoch).", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "location/{locationId}", + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city" + // ] + // } + +} + +// method id "latitude.location.get": + +type LocationGetCall struct { + s *Service + locationId string + opt_ map[string]interface{} +} + +// Get: Reads a location from the user's location history. +func (r *LocationService) Get(locationId string) *LocationGetCall { + c := &LocationGetCall{s: r.s, opt_: make(map[string]interface{})} + c.locationId = locationId + return c +} + +// Granularity sets the optional parameter "granularity": Granularity of +// the location to return. +func (c *LocationGetCall) Granularity(granularity string) *LocationGetCall { + c.opt_["granularity"] = granularity + return c +} + +func (c *LocationGetCall) Do() (*Location, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["granularity"]; ok { + params.Set("granularity", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "location/{locationId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{locationId}", url.QueryEscape(c.locationId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Location) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Reads a location from the user's location history.", + // "httpMethod": "GET", + // "id": "latitude.location.get", + // "parameterOrder": [ + // "locationId" + // ], + // "parameters": { + // "granularity": { + // "default": "city", + // "description": "Granularity of the location to return.", + // "enum": [ + // "best", + // "city" + // ], + // "enumDescriptions": [ + // "Request best available granularity.", + // "Request city-level granularty." + // ], + // "location": "query", + // "type": "string" + // }, + // "locationId": { + // "description": "Timestamp of the location to read (ms since epoch).", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "location/{locationId}", + // "response": { + // "$ref": "Location" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city" + // ] + // } + +} + +// method id "latitude.location.insert": + +type LocationInsertCall struct { + s *Service + location *Location + opt_ map[string]interface{} +} + +// Insert: Inserts or updates a location in the user's location history. +func (r *LocationService) Insert(location *Location) *LocationInsertCall { + c := &LocationInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.location = location + return c +} + +func (c *LocationInsertCall) Do() (*Location, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.location) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "location") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Location) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts or updates a location in the user's location history.", + // "httpMethod": "POST", + // "id": "latitude.location.insert", + // "path": "location", + // "request": { + // "$ref": "Location" + // }, + // "response": { + // "$ref": "Location" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city" + // ] + // } + +} + +// method id "latitude.location.list": + +type LocationListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists the user's location history. +func (r *LocationService) List() *LocationListCall { + c := &LocationListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Granularity sets the optional parameter "granularity": Granularity of +// the requested locations. +func (c *LocationListCall) Granularity(granularity string) *LocationListCall { + c.opt_["granularity"] = granularity + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of locations to return. +func (c *LocationListCall) MaxResults(maxResults string) *LocationListCall { + c.opt_["max-results"] = maxResults + return c +} + +// MaxTime sets the optional parameter "max-time": Maximum timestamp of +// locations to return (ms since epoch). +func (c *LocationListCall) MaxTime(maxTime string) *LocationListCall { + c.opt_["max-time"] = maxTime + return c +} + +// MinTime sets the optional parameter "min-time": Minimum timestamp of +// locations to return (ms since epoch). +func (c *LocationListCall) MinTime(minTime string) *LocationListCall { + c.opt_["min-time"] = minTime + return c +} + +func (c *LocationListCall) Do() (*LocationFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["granularity"]; ok { + params.Set("granularity", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-time"]; ok { + params.Set("max-time", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["min-time"]; ok { + params.Set("min-time", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/latitude/v1/", "location") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LocationFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the user's location history.", + // "httpMethod": "GET", + // "id": "latitude.location.list", + // "parameters": { + // "granularity": { + // "default": "city", + // "description": "Granularity of the requested locations.", + // "enum": [ + // "best", + // "city" + // ], + // "enumDescriptions": [ + // "Request best available granularity.", + // "Request city-level granularty." + // ], + // "location": "query", + // "type": "string" + // }, + // "max-results": { + // "description": "Maximum number of locations to return.", + // "location": "query", + // "type": "string" + // }, + // "max-time": { + // "description": "Maximum timestamp of locations to return (ms since epoch).", + // "location": "query", + // "type": "string" + // }, + // "min-time": { + // "description": "Minimum timestamp of locations to return (ms since epoch).", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "location", + // "response": { + // "$ref": "LocationFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/latitude.all.best", + // "https://www.googleapis.com/auth/latitude.all.city" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/lib/codereview/codereview.cfg b/third_party/src/code.google.com/p/google-api-go-client/lib/codereview/codereview.cfg new file mode 100644 index 0000000000000..2801ebf8d6ea0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/lib/codereview/codereview.cfg @@ -0,0 +1 @@ +defaultcc: golang-codereviews@googlegroups.com diff --git a/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-api.json b/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-api.json new file mode 100644 index 0000000000000..f79b03b35b0ed --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-api.json @@ -0,0 +1,426 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/i7ROTyL5fTp9c4DP_LXJg5raK-k\"", + "discoveryVersion": "v1", + "id": "licensing:v1", + "name": "licensing", + "version": "v1", + "title": "Enterprise License Manager API", + "description": "Licensing API to view and manage license for your domain.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/licensing/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/apps/licensing/v1/product/", + "basePath": "/apps/licensing/v1/product/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "apps/licensing/v1/product/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "LicenseAssignment": { + "id": "LicenseAssignment", + "type": "object", + "description": "Template for LiscenseAssignment Resource", + "properties": { + "etags": { + "type": "string", + "description": "ETag of the resource." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a LicenseAssignment.", + "default": "licensing#licenseAssignment" + }, + "productId": { + "type": "string", + "description": "Name of the product.", + "annotations": { + "required": [ + "licensing.licenseAssignments.update" + ] + } + }, + "selfLink": { + "type": "string", + "description": "Link to this page." + }, + "skuId": { + "type": "string", + "description": "Name of the sku of the product.", + "annotations": { + "required": [ + "licensing.licenseAssignments.update" + ] + } + }, + "userId": { + "type": "string", + "description": "Email id of the user.", + "annotations": { + "required": [ + "licensing.licenseAssignments.update" + ] + } + } + } + }, + "LicenseAssignmentInsert": { + "id": "LicenseAssignmentInsert", + "type": "object", + "description": "Template for LicenseAssignment Insert request", + "properties": { + "userId": { + "type": "string", + "description": "Email id of the user", + "annotations": { + "required": [ + "licensing.licenseAssignments.insert" + ] + } + } + } + }, + "LicenseAssignmentList": { + "id": "LicenseAssignmentList", + "type": "object", + "description": "LicesnseAssignment List for a given product/sku for a customer.", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "The LicenseAssignments in this page of results.", + "items": { + "$ref": "LicenseAssignment" + } + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a collection of LicenseAssignments.", + "default": "licensing#licenseAssignmentList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + } + }, + "resources": { + "licenseAssignments": { + "methods": { + "delete": { + "id": "licensing.licenseAssignments.delete", + "path": "{productId}/sku/{skuId}/user/{userId}", + "httpMethod": "DELETE", + "description": "Revoke License.", + "parameters": { + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "email id or unique Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId", + "userId" + ] + }, + "get": { + "id": "licensing.licenseAssignments.get", + "path": "{productId}/sku/{skuId}/user/{userId}", + "httpMethod": "GET", + "description": "Get license assignment of a particular product and sku for a user", + "parameters": { + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "email id or unique Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId", + "userId" + ], + "response": { + "$ref": "LicenseAssignment" + } + }, + "insert": { + "id": "licensing.licenseAssignments.insert", + "path": "{productId}/sku/{skuId}/user", + "httpMethod": "POST", + "description": "Assign License.", + "parameters": { + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId" + ], + "request": { + "$ref": "LicenseAssignmentInsert" + }, + "response": { + "$ref": "LicenseAssignment" + } + }, + "listForProduct": { + "id": "licensing.licenseAssignments.listForProduct", + "path": "{productId}/users", + "httpMethod": "GET", + "description": "List license assignments for given product of the customer.", + "parameters": { + "customerId": { + "type": "string", + "description": "CustomerId represents the customer for whom licenseassignments are queried", + "required": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to fetch the next page.Optional. By default server will return first page", + "default": "", + "location": "query" + }, + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "customerId" + ], + "response": { + "$ref": "LicenseAssignmentList" + } + }, + "listForProductAndSku": { + "id": "licensing.licenseAssignments.listForProductAndSku", + "path": "{productId}/sku/{skuId}/users", + "httpMethod": "GET", + "description": "List license assignments for given product and sku of the customer.", + "parameters": { + "customerId": { + "type": "string", + "description": "CustomerId represents the customer for whom licenseassignments are queried", + "required": true, + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.", + "default": "100", + "format": "uint32", + "minimum": "1", + "maximum": "1000", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to fetch the next page.Optional. By default server will return first page", + "default": "", + "location": "query" + }, + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId", + "customerId" + ], + "response": { + "$ref": "LicenseAssignmentList" + } + }, + "patch": { + "id": "licensing.licenseAssignments.patch", + "path": "{productId}/sku/{skuId}/user/{userId}", + "httpMethod": "PATCH", + "description": "Assign License. This method supports patch semantics.", + "parameters": { + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku for which license would be revoked", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "email id or unique Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId", + "userId" + ], + "request": { + "$ref": "LicenseAssignment" + }, + "response": { + "$ref": "LicenseAssignment" + } + }, + "update": { + "id": "licensing.licenseAssignments.update", + "path": "{productId}/sku/{skuId}/user/{userId}", + "httpMethod": "PUT", + "description": "Assign License.", + "parameters": { + "productId": { + "type": "string", + "description": "Name for product", + "required": true, + "location": "path" + }, + "skuId": { + "type": "string", + "description": "Name for sku for which license would be revoked", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "email id or unique Id of the user", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "productId", + "skuId", + "userId" + ], + "request": { + "$ref": "LicenseAssignment" + }, + "response": { + "$ref": "LicenseAssignment" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-gen.go b/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-gen.go new file mode 100644 index 0000000000000..2117c27f252d5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/licensing/v1/licensing-gen.go @@ -0,0 +1,754 @@ +// Package licensing provides access to the Enterprise License Manager API. +// +// See https://developers.google.com/google-apps/licensing/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/licensing/v1" +// ... +// licensingService, err := licensing.New(oauthHttpClient) +package licensing + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "licensing:v1" +const apiName = "licensing" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/apps/licensing/v1/product/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.LicenseAssignments = NewLicenseAssignmentsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + LicenseAssignments *LicenseAssignmentsService +} + +func NewLicenseAssignmentsService(s *Service) *LicenseAssignmentsService { + rs := &LicenseAssignmentsService{s: s} + return rs +} + +type LicenseAssignmentsService struct { + s *Service +} + +type LicenseAssignment struct { + // Etags: ETag of the resource. + Etags string `json:"etags,omitempty"` + + // Kind: Identifies the resource as a LicenseAssignment. + Kind string `json:"kind,omitempty"` + + // ProductId: Name of the product. + ProductId string `json:"productId,omitempty"` + + // SelfLink: Link to this page. + SelfLink string `json:"selfLink,omitempty"` + + // SkuId: Name of the sku of the product. + SkuId string `json:"skuId,omitempty"` + + // UserId: Email id of the user. + UserId string `json:"userId,omitempty"` +} + +type LicenseAssignmentInsert struct { + // UserId: Email id of the user + UserId string `json:"userId,omitempty"` +} + +type LicenseAssignmentList struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: The LicenseAssignments in this page of results. + Items []*LicenseAssignment `json:"items,omitempty"` + + // Kind: Identifies the resource as a collection of LicenseAssignments. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "licensing.licenseAssignments.delete": + +type LicenseAssignmentsDeleteCall struct { + s *Service + productId string + skuId string + userId string + opt_ map[string]interface{} +} + +// Delete: Revoke License. +func (r *LicenseAssignmentsService) Delete(productId string, skuId string, userId string) *LicenseAssignmentsDeleteCall { + c := &LicenseAssignmentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.userId = userId + return c +} + +func (c *LicenseAssignmentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Revoke License.", + // "httpMethod": "DELETE", + // "id": "licensing.licenseAssignments.delete", + // "parameterOrder": [ + // "productId", + // "skuId", + // "userId" + // ], + // "parameters": { + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "email id or unique Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/user/{userId}" + // } + +} + +// method id "licensing.licenseAssignments.get": + +type LicenseAssignmentsGetCall struct { + s *Service + productId string + skuId string + userId string + opt_ map[string]interface{} +} + +// Get: Get license assignment of a particular product and sku for a +// user +func (r *LicenseAssignmentsService) Get(productId string, skuId string, userId string) *LicenseAssignmentsGetCall { + c := &LicenseAssignmentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.userId = userId + return c +} + +func (c *LicenseAssignmentsGetCall) Do() (*LicenseAssignment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get license assignment of a particular product and sku for a user", + // "httpMethod": "GET", + // "id": "licensing.licenseAssignments.get", + // "parameterOrder": [ + // "productId", + // "skuId", + // "userId" + // ], + // "parameters": { + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "email id or unique Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/user/{userId}", + // "response": { + // "$ref": "LicenseAssignment" + // } + // } + +} + +// method id "licensing.licenseAssignments.insert": + +type LicenseAssignmentsInsertCall struct { + s *Service + productId string + skuId string + licenseassignmentinsert *LicenseAssignmentInsert + opt_ map[string]interface{} +} + +// Insert: Assign License. +func (r *LicenseAssignmentsService) Insert(productId string, skuId string, licenseassignmentinsert *LicenseAssignmentInsert) *LicenseAssignmentsInsertCall { + c := &LicenseAssignmentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.licenseassignmentinsert = licenseassignmentinsert + return c +} + +func (c *LicenseAssignmentsInsertCall) Do() (*LicenseAssignment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignmentinsert) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Assign License.", + // "httpMethod": "POST", + // "id": "licensing.licenseAssignments.insert", + // "parameterOrder": [ + // "productId", + // "skuId" + // ], + // "parameters": { + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/user", + // "request": { + // "$ref": "LicenseAssignmentInsert" + // }, + // "response": { + // "$ref": "LicenseAssignment" + // } + // } + +} + +// method id "licensing.licenseAssignments.listForProduct": + +type LicenseAssignmentsListForProductCall struct { + s *Service + productId string + customerId string + opt_ map[string]interface{} +} + +// ListForProduct: List license assignments for given product of the +// customer. +func (r *LicenseAssignmentsService) ListForProduct(productId string, customerId string) *LicenseAssignmentsListForProductCall { + c := &LicenseAssignmentsListForProductCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.customerId = customerId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of campaigns to return at one time. Must be positive. Default value +// is 100. +func (c *LicenseAssignmentsListForProductCall) MaxResults(maxResults int64) *LicenseAssignmentsListForProductCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to fetch the +// next page. By default server will return first page +func (c *LicenseAssignmentsListForProductCall) PageToken(pageToken string) *LicenseAssignmentsListForProductCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *LicenseAssignmentsListForProductCall) Do() (*LicenseAssignmentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("customerId", fmt.Sprintf("%v", c.customerId)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/users") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignmentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List license assignments for given product of the customer.", + // "httpMethod": "GET", + // "id": "licensing.licenseAssignments.listForProduct", + // "parameterOrder": [ + // "productId", + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "CustomerId represents the customer for whom licenseassignments are queried", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "default": "", + // "description": "Token to fetch the next page.Optional. By default server will return first page", + // "location": "query", + // "type": "string" + // }, + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/users", + // "response": { + // "$ref": "LicenseAssignmentList" + // } + // } + +} + +// method id "licensing.licenseAssignments.listForProductAndSku": + +type LicenseAssignmentsListForProductAndSkuCall struct { + s *Service + productId string + skuId string + customerId string + opt_ map[string]interface{} +} + +// ListForProductAndSku: List license assignments for given product and +// sku of the customer. +func (r *LicenseAssignmentsService) ListForProductAndSku(productId string, skuId string, customerId string) *LicenseAssignmentsListForProductAndSkuCall { + c := &LicenseAssignmentsListForProductAndSkuCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.customerId = customerId + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of campaigns to return at one time. Must be positive. Default value +// is 100. +func (c *LicenseAssignmentsListForProductAndSkuCall) MaxResults(maxResults int64) *LicenseAssignmentsListForProductAndSkuCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to fetch the +// next page. By default server will return first page +func (c *LicenseAssignmentsListForProductAndSkuCall) PageToken(pageToken string) *LicenseAssignmentsListForProductAndSkuCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *LicenseAssignmentsListForProductAndSkuCall) Do() (*LicenseAssignmentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("customerId", fmt.Sprintf("%v", c.customerId)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/users") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignmentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List license assignments for given product and sku of the customer.", + // "httpMethod": "GET", + // "id": "licensing.licenseAssignments.listForProductAndSku", + // "parameterOrder": [ + // "productId", + // "skuId", + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "CustomerId represents the customer for whom licenseassignments are queried", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "Maximum number of campaigns to return at one time. Must be positive. Optional. Default value is 100.", + // "format": "uint32", + // "location": "query", + // "maximum": "1000", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "default": "", + // "description": "Token to fetch the next page.Optional. By default server will return first page", + // "location": "query", + // "type": "string" + // }, + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/users", + // "response": { + // "$ref": "LicenseAssignmentList" + // } + // } + +} + +// method id "licensing.licenseAssignments.patch": + +type LicenseAssignmentsPatchCall struct { + s *Service + productId string + skuId string + userId string + licenseassignment *LicenseAssignment + opt_ map[string]interface{} +} + +// Patch: Assign License. This method supports patch semantics. +func (r *LicenseAssignmentsService) Patch(productId string, skuId string, userId string, licenseassignment *LicenseAssignment) *LicenseAssignmentsPatchCall { + c := &LicenseAssignmentsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.userId = userId + c.licenseassignment = licenseassignment + return c +} + +func (c *LicenseAssignmentsPatchCall) Do() (*LicenseAssignment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Assign License. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "licensing.licenseAssignments.patch", + // "parameterOrder": [ + // "productId", + // "skuId", + // "userId" + // ], + // "parameters": { + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku for which license would be revoked", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "email id or unique Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/user/{userId}", + // "request": { + // "$ref": "LicenseAssignment" + // }, + // "response": { + // "$ref": "LicenseAssignment" + // } + // } + +} + +// method id "licensing.licenseAssignments.update": + +type LicenseAssignmentsUpdateCall struct { + s *Service + productId string + skuId string + userId string + licenseassignment *LicenseAssignment + opt_ map[string]interface{} +} + +// Update: Assign License. +func (r *LicenseAssignmentsService) Update(productId string, skuId string, userId string, licenseassignment *LicenseAssignment) *LicenseAssignmentsUpdateCall { + c := &LicenseAssignmentsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.productId = productId + c.skuId = skuId + c.userId = userId + c.licenseassignment = licenseassignment + return c +} + +func (c *LicenseAssignmentsUpdateCall) Do() (*LicenseAssignment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.licenseassignment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{productId}/sku/{skuId}/user/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{skuId}", url.QueryEscape(c.skuId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LicenseAssignment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Assign License.", + // "httpMethod": "PUT", + // "id": "licensing.licenseAssignments.update", + // "parameterOrder": [ + // "productId", + // "skuId", + // "userId" + // ], + // "parameters": { + // "productId": { + // "description": "Name for product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "skuId": { + // "description": "Name for sku for which license would be revoked", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "email id or unique Id of the user", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{productId}/sku/{skuId}/user/{userId}", + // "request": { + // "$ref": "LicenseAssignment" + // }, + // "response": { + // "$ref": "LicenseAssignment" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-api.json b/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-api.json new file mode 100644 index 0000000000000..c29b5f9fc4913 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-api.json @@ -0,0 +1,3167 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/3m5rB86FE5KuW1K3jAl88AxCreg\"", + "discoveryVersion": "v1", + "id": "mapsengine:v1", + "name": "mapsengine", + "canonicalName": "Maps Engine", + "version": "v1", + "title": "Google Maps Engine API", + "description": "The Google Maps Engine API allows developers to store and query geospatial vector and raster data.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/maps_engine-16.png", + "x32": "http://www.google.com/images/icons/product/maps_engine-32.png" + }, + "documentationLink": "https://developers.google.com/maps-engine/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/mapsengine/v1/", + "basePath": "/mapsengine/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "mapsengine/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/mapsengine": { + "description": "View and manage your Google Maps Engine data" + }, + "https://www.googleapis.com/auth/mapsengine.readonly": { + "description": "View your Google Maps Engine data" + } + } + } + }, + "schemas": { + "AcquisitionTime": { + "id": "AcquisitionTime", + "type": "object", + "description": "Acquisition time represents acquired time of a raster.", + "properties": { + "end": { + "type": "string", + "description": "The end time if acquisition time is a range. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "precision": { + "type": "string", + "description": "The precision of acquisition time. Valid values include: 'year', 'month', 'day', 'hour', 'minute' and 'second'.", + "enum": [ + "day", + "hour", + "minute", + "month", + "second", + "year" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "start": { + "type": "string", + "description": "The acquisition time, or start time if acquisition time is a range. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).", + "format": "date-time" + } + } + }, + "Border": { + "id": "Border", + "type": "object", + "description": "Border in line style. Both color and width are required.", + "properties": { + "color": { + "type": "string", + "description": "Color of the border.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "opacity": { + "type": "number", + "description": "Opacity of the border.", + "format": "double" + }, + "width": { + "type": "number", + "description": "Width of the border, in pixels.", + "format": "double", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + }, + "Color": { + "id": "Color", + "type": "object", + "description": "Basic color used in styling.", + "properties": { + "color": { + "type": "string", + "description": "The CSS style color, can be in format of \"red\" or \"#7733EE\".", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "opacity": { + "type": "number", + "description": "Opacity ranges from 0 to 1, inclusive. If not provided, default to 1.", + "format": "double" + } + } + }, + "Datasource": { + "id": "Datasource", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of a datasource." + } + } + }, + "DisplayRule": { + "id": "DisplayRule", + "type": "object", + "description": "A display rule of the vector style.", + "properties": { + "filters": { + "type": "array", + "description": "This display rule will only be applied to features that match all of the filters here. If filters is empty, then the rule applies to all features.", + "items": { + "$ref": "Filter" + } + }, + "lineOptions": { + "$ref": "LineStyle", + "description": "Style applied to lines. Required for LineString Geometry." + }, + "name": { + "type": "string", + "description": "Display rule name. Name is not unique and cannot be used for identification purpose." + }, + "pointOptions": { + "$ref": "PointStyle", + "description": "Style applied to points. Required for Point Geometry." + }, + "polygonOptions": { + "$ref": "PolygonStyle", + "description": "Style applied to polygons. Required for Polygon Geometry." + }, + "zoomLevels": { + "$ref": "ZoomLevels", + "description": "The zoom levels that this display rule apply.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + }, + "Feature": { + "id": "Feature", + "type": "object", + "description": "A feature within a table.", + "properties": { + "geometry": { + "$ref": "GeoJsonGeometry", + "description": "The geometry member of this Feature." + }, + "properties": { + "$ref": "GeoJsonProperties", + "description": "Key/value pairs of this Feature." + }, + "type": { + "type": "string", + "description": "Identifies this object as a feature.", + "default": "Feature" + } + } + }, + "FeatureInfo": { + "id": "FeatureInfo", + "type": "object", + "description": "A feature info contains information about individual feature.", + "properties": { + "content": { + "type": "string", + "description": "HTML template of the info window. If not provided, a default template with all attributes will be generated." + } + } + }, + "FeaturesBatchDeleteRequest": { + "id": "FeaturesBatchDeleteRequest", + "type": "object", + "description": "The request sent to features.BatchDelete.", + "properties": { + "gx_ids": { + "type": "array", + "items": { + "type": "string" + } + }, + "primaryKeys": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "FeaturesBatchInsertRequest": { + "id": "FeaturesBatchInsertRequest", + "type": "object", + "description": "The request sent to features.Insert.", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "Feature" + } + } + } + }, + "FeaturesBatchPatchRequest": { + "id": "FeaturesBatchPatchRequest", + "type": "object", + "description": "The request sent to features.BatchPatch.", + "properties": { + "features": { + "type": "array", + "items": { + "$ref": "Feature" + } + } + } + }, + "FeaturesListResponse": { + "id": "FeaturesListResponse", + "type": "object", + "description": "The response returned by a call to features.List.", + "properties": { + "allowedQueriesPerSecond": { + "type": "number", + "description": "An indicator of the maximum rate at which queries may be made, if all queries were as expensive as this query.", + "format": "double" + }, + "features": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Feature" + } + }, + "nextPageToken": { + "type": "string", + "description": "Next page token." + }, + "schema": { + "$ref": "Schema", + "description": "The feature schema." + }, + "type": { + "type": "string", + "default": "FeatureCollection" + } + } + }, + "File": { + "id": "File", + "type": "object", + "description": "A single File, which is a component of an Asset.", + "properties": { + "filename": { + "type": "string", + "description": "The name of the file.", + "annotations": { + "required": [ + "mapsengine.rasters.upload", + "mapsengine.tables.upload" + ] + } + }, + "size": { + "type": "string", + "description": "The size of the file in bytes.", + "format": "int64" + }, + "uploadStatus": { + "type": "string", + "description": "The upload status of the file.", + "enum": [ + "canceled", + "complete", + "failed", + "inProgress" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + } + } + }, + "Filter": { + "id": "Filter", + "type": "object", + "description": "Conditions for filtering features.", + "properties": { + "column": { + "type": "string", + "description": "The column name to filter on.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "operator": { + "type": "string", + "description": "Operation used to evaluate the filter.", + "enum": [ + "!=", + "\u003c", + "\u003c=", + "==", + "\u003e", + "\u003e=", + "contains", + "endsWith", + "startsWith" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "value": { + "type": "any", + "description": "Value to be evaluated against attribute.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + }, + "GeoJsonGeometry": { + "id": "GeoJsonGeometry", + "description": "A geometry object", + "type": "object", + "variant": { + "discriminant": "type", + "map": [ + { + "type_value": "GeometryCollection", + "$ref": "GeoJsonGeometryCollection" + }, + { + "type_value": "LineString", + "$ref": "GeoJsonLineString" + }, + { + "type_value": "MultiLineString", + "$ref": "GeoJsonMultiLineString" + }, + { + "type_value": "MultiPoint", + "$ref": "GeoJsonMultiPoint" + }, + { + "type_value": "MultiPolygon", + "$ref": "GeoJsonMultiPolygon" + }, + { + "type_value": "Point", + "$ref": "GeoJsonPoint" + }, + { + "type_value": "Polygon", + "$ref": "GeoJsonPolygon" + } + ] + } + }, + "GeoJsonGeometryCollection": { + "id": "GeoJsonGeometryCollection", + "type": "object", + "description": "Geometry Collection", + "properties": { + "geometries": { + "type": "array", + "description": "The geometry objects that are contained within this geometry collection.", + "items": { + "$ref": "GeoJsonGeometry" + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a geometry collection.", + "enum": [ + "GeometryCollection" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonLineString": { + "id": "GeoJsonLineString", + "type": "object", + "description": "Line String", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this line string as an array of two or more positions.", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a line string.", + "enum": [ + "LineString" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonMultiLineString": { + "id": "GeoJsonMultiLineString", + "type": "object", + "description": "Multi Line String", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this multi-line string as an array of line string coordinate arrays.", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a multi-line string.", + "enum": [ + "MultiLineString" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonMultiPoint": { + "id": "GeoJsonMultiPoint", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this multi-point as an array of positions.", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a multi-point.", + "enum": [ + "MultiPoint" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonMultiPolygon": { + "id": "GeoJsonMultiPolygon", + "type": "object", + "description": "Multi Polygon", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this multi-polygon as an array of polygon coordinate arrays.", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a multi-polygon.", + "enum": [ + "MultiPolygon" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonPoint": { + "id": "GeoJsonPoint", + "type": "object", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this point as a position in [longitude, latitude] or [longitude, latitude, altitude] form.", + "items": { + "type": "number", + "format": "double" + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a point.", + "enum": [ + "Point" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonPolygon": { + "id": "GeoJsonPolygon", + "type": "object", + "description": "Polygon", + "properties": { + "coordinates": { + "type": "array", + "description": "The coordinates of this polygon as an array of linear ring coordinate arrays. A linear ring is a closed line string with 4 or more positions. The first and last positions are equivalent. For polygons with multiple rings, the first must be the exterior ring and any others must be interior rings or holes.", + "items": { + "type": "array", + "items": { + "type": "array", + "items": { + "type": "number", + "format": "double" + } + } + } + }, + "type": { + "type": "string", + "description": "Identifies this object as a polygon.", + "enum": [ + "Polygon" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoJsonProperties": { + "id": "GeoJsonProperties", + "type": "object", + "description": "The properties associated with a feature.", + "additionalProperties": { + "type": "any" + } + }, + "IconStyle": { + "id": "IconStyle", + "type": "object", + "description": "Style for icon, this is part of point style.", + "properties": { + "id": { + "type": "string", + "description": "Custom icon id." + }, + "name": { + "type": "string", + "description": "Stock icon name. To use a stock icon, prefix it with 'gx_'. See Stock icon names for valid icon names. For example, to specify small_red, set name to 'gx_small_red'." + } + } + }, + "Image": { + "id": "Image", + "type": "object", + "description": "A geo-referenced raster.", + "properties": { + "acquisitionTime": { + "$ref": "AcquisitionTime", + "description": "The acquisition time of this Raster." + }, + "attribution": { + "type": "string", + "description": "The name of the attribution to be used for this Raster.", + "annotations": { + "required": [ + "mapsengine.rasters.upload" + ] + } + }, + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this Raster. The numbers represent latitudes and longitudes in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description of this Raster, supplied by the author." + }, + "draftAccessList": { + "type": "string", + "description": "The Map Editors access list to share this Raster with.", + "annotations": { + "required": [ + "mapsengine.rasters.upload" + ] + } + }, + "files": { + "type": "array", + "description": "The files associated with this Raster.", + "items": { + "$ref": "File" + } + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this Raster." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "maskType": { + "type": "string", + "description": "The mask processing type of this Raster. Valid values include \"autoMask\", \"alphaChannelMask\", \"noMask\", \"imageMask\".", + "default": "autoMask", + "enum": [ + "alphaChannelMask", + "autoMask", + "imageMask", + "noMask" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "name": { + "type": "string", + "description": "The name of this Raster, supplied by the author.", + "annotations": { + "required": [ + "mapsengine.rasters.upload" + ] + } + }, + "processingStatus": { + "type": "string", + "description": "The processing status of this Raster. The raster processing status values can be:\n\n'notReady': The raster is not ready to be processed - some files have not been uploaded.\n'ready': The raster is queued for processing.\n'processing': The raster is currently processing.\n'complete': Processing has completed successfully.\n'failed': Processing failed to complete.", + "enum": [ + "complete", + "failed", + "notReady", + "processing", + "ready" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "projectId": { + "type": "string", + "description": "The ID of the project that this Raster is in.", + "annotations": { + "required": [ + "mapsengine.rasters.upload" + ] + } + }, + "rasterType": { + "type": "string", + "description": "The type of this Raster. Always \"image\" today.", + "default": "image" + }, + "tags": { + "type": "array", + "description": "Tags of this Raster.", + "items": { + "type": "string" + } + } + } + }, + "LabelStyle": { + "id": "LabelStyle", + "type": "object", + "description": "Text label style.", + "properties": { + "color": { + "type": "string", + "description": "Color of the text. If not provided, default to black." + }, + "column": { + "type": "string", + "description": "The column value of the feature to be displayed.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "fontStyle": { + "type": "string", + "description": "Font style of the label, defaults to 'normal'.", + "enum": [ + "italic", + "normal" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "fontWeight": { + "type": "string", + "description": "Font weight of the label, defaults to 'normal'.", + "enum": [ + "bold", + "normal" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "opacity": { + "type": "number", + "description": "Opacity of the text.", + "format": "double" + }, + "outline": { + "$ref": "Color", + "description": "Outline color of the text." + }, + "size": { + "type": "number", + "description": "Font size of the label, in pixels. 8 \u003c= size \u003c= 15. If not provided, a default size will be provided.", + "format": "double" + } + } + }, + "LatLngBox": { + "id": "LatLngBox", + "type": "array", + "description": "A rectangular geographic bounds.", + "items": { + "type": "number", + "format": "double" + } + }, + "Layer": { + "id": "Layer", + "type": "object", + "description": "A Layer combines multiple datasources, with styling information, for presentation on a map.", + "properties": { + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this Layer. The numbers represent latitudes and longitudes in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this layer. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "datasourceType": { + "type": "string", + "description": "The type of the datasources used to build this Layer. One of either \"table\" or \"image\".", + "enum": [ + "image", + "table" + ], + "enumDescriptions": [ + "", + "" + ], + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "datasources": { + "type": "array", + "description": "An array of datasources used to build this Layer. If datasourceType is \"image\", then each element in this array is a reference to an Image or RasterCollection. If datasourceType is \"table\" then each element in this array is a reference to a Vector Table.", + "items": { + "$ref": "Datasource" + } + }, + "description": { + "type": "string", + "description": "The description of this Layer, supplied by the author." + }, + "draftAccessList": { + "type": "string", + "description": "The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this Layer." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this layer. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "The name of this Layer, supplied by the author.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "processingStatus": { + "type": "string", + "description": "The processing status of this layer.", + "enum": [ + "complete", + "failed", + "notReady", + "processing", + "ready" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "projectId": { + "type": "string", + "description": "The ID of the project that this Layer is in.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "publishedAccessList": { + "type": "string", + "description": "The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information." + }, + "style": { + "$ref": "VectorStyle", + "description": "The Styling information for a vector layer." + }, + "tags": { + "type": "array", + "description": "Tags of this Layer.", + "items": { + "type": "string" + } + } + } + }, + "LayersListResponse": { + "id": "LayersListResponse", + "type": "object", + "description": "The response returned by a call to layers.List.", + "properties": { + "layers": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Layer" + } + }, + "nextPageToken": { + "type": "string", + "description": "Next page token." + } + } + }, + "LineStyle": { + "id": "LineStyle", + "type": "object", + "description": "Style for lines.", + "properties": { + "border": { + "$ref": "Border", + "description": "Border of the line. 0 \u003c border.width \u003c= 5." + }, + "dash": { + "type": "array", + "description": "Dash defines the pattern of the line, the values are pixel lengths of alternating dash and gap. If dash is not provided, then it means a solid line. Dash can contain up to 10 values and must contain even number of values.", + "items": { + "type": "number", + "format": "double" + } + }, + "label": { + "$ref": "LabelStyle", + "description": "Label style for the line." + }, + "stroke": { + "type": "object", + "description": "Stroke of the line.", + "properties": { + "color": { + "type": "string", + "description": "Color of the line.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "opacity": { + "type": "number", + "description": "Opacity of the line.", + "format": "double" + }, + "width": { + "type": "number", + "description": "Width of the line, in pixels. 0 \u003c= width \u003c= 10. If width is set to 0, the line will be invisible.", + "format": "double", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + } + } + }, + "Map": { + "id": "Map", + "type": "object", + "description": "A Map is a collection of Layers, optionally contained within folders.", + "properties": { + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this Map. The numbers represent latitude and longitude in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "contents": { + "type": "array", + "description": "The contents of this Map.", + "items": { + "$ref": "MapItem" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this map. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "defaultViewport": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "description": { + "type": "string", + "description": "The description of this Map, supplied by the author." + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this Map." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this map. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "The name of this Map, supplied by the author." + }, + "projectId": { + "type": "string", + "description": "The ID of the project that this Map is in." + }, + "tags": { + "type": "array", + "description": "Tags of this Map.", + "items": { + "type": "string" + } + }, + "versions": { + "type": "array", + "description": "An array containing the available versions of this Map. Currently may only contain \"published\".", + "items": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + } + }, + "MapFolder": { + "id": "MapFolder", + "type": "object", + "properties": { + "contents": { + "type": "array", + "description": "The contents of this Folder.", + "items": { + "$ref": "MapItem" + } + }, + "defaultViewport": { + "$ref": "LatLngBox", + "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees." + }, + "key": { + "type": "string", + "description": "A user defined alias for this Folder, specific to this Map." + }, + "name": { + "type": "string", + "description": "The name of this Folder." + }, + "type": { + "type": "string", + "description": "Identifies this object as a Folder. (( constant \"folder\" ))", + "default": "folder" + }, + "visibility": { + "type": "string", + "description": "The visibility setting of this Folder. One of \"defaultOn\" or \"defaultOff\"." + } + } + }, + "MapItem": { + "id": "MapItem", + "description": "A map item.", + "type": "object", + "variant": { + "discriminant": "type", + "map": [ + { + "type_value": "folder", + "$ref": "MapFolder" + }, + { + "type_value": "kmlLink", + "$ref": "MapKmlLink" + }, + { + "type_value": "layer", + "$ref": "MapLayer" + } + ] + } + }, + "MapKmlLink": { + "id": "MapKmlLink", + "type": "object", + "properties": { + "defaultViewport": { + "$ref": "LatLngBox", + "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees." + }, + "kmlUrl": { + "type": "string", + "description": "The URL to the KML file represented by this KmlLink." + }, + "name": { + "type": "string", + "description": "The name of this KmlLink." + }, + "type": { + "type": "string", + "description": "Identifies this object as a KmlLink. (( constant \"kmlLink\" ))", + "default": "kmlLink" + }, + "visibility": { + "type": "string", + "description": "The visibility setting of this KmlLink. One of \"defaultOn\" or \"defaultOff\"." + } + } + }, + "MapLayer": { + "id": "MapLayer", + "type": "object", + "properties": { + "defaultViewport": { + "$ref": "LatLngBox", + "description": "An array of four numbers (west, south, east, north) which defines the rectangular bounding box of the default viewport. The numbers represent latitude and longitude in decimal degrees." + }, + "id": { + "type": "string", + "description": "The ID of this Layer. This ID can be used to request more details about this Layer." + }, + "key": { + "type": "string", + "description": "A user defined alias for this Layer, specific to this Map." + }, + "name": { + "type": "string", + "description": "The name of this Layer." + }, + "type": { + "type": "string", + "description": "Identifies this object as a Layer. (( constant \"layer\" ))", + "default": "layer" + }, + "visibility": { + "type": "string", + "description": "The visibility setting of this Layer. One of \"defaultOn\" or \"defaultOff\"." + } + } + }, + "MapsListResponse": { + "id": "MapsListResponse", + "type": "object", + "description": "The response returned by a call to maps.List.", + "properties": { + "maps": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Map" + } + }, + "nextPageToken": { + "type": "string", + "description": "Next page token." + } + } + }, + "Parent": { + "id": "Parent", + "type": "object", + "description": "A list of the parents of an asset.", + "properties": { + "id": { + "type": "string", + "description": "The ID of this parent." + } + } + }, + "ParentsListResponse": { + "id": "ParentsListResponse", + "type": "object", + "description": "The response returned by a call to parents.List.", + "properties": { + "nextPageToken": { + "type": "string", + "description": "Next page token." + }, + "parents": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Parent" + } + } + } + }, + "PointStyle": { + "id": "PointStyle", + "type": "object", + "description": "Style for points.", + "properties": { + "icon": { + "$ref": "IconStyle", + "description": "Icon for the point; exactly one field in 'icon' must be set.", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "label": { + "$ref": "LabelStyle", + "description": "Label style for the point." + } + } + }, + "PolygonStyle": { + "id": "PolygonStyle", + "type": "object", + "description": "Style for polygons.", + "properties": { + "fill": { + "$ref": "Color", + "description": "Fill color of the polygon. If not provided, the polygon will be transparent and not visible if there is no border." + }, + "stroke": { + "$ref": "Border", + "description": "Border of the polygon. 0 \u003c border.width \u003c= 10." + } + } + }, + "ProcessResponse": { + "id": "ProcessResponse", + "type": "object", + "description": "The response returned by a call to any asset's Process method." + }, + "Project": { + "id": "Project", + "type": "object", + "description": "A project groups a collection of resources.", + "properties": { + "id": { + "type": "string", + "description": "An ID used to refer to this project." + }, + "name": { + "type": "string", + "description": "A user provided name for this project." + } + } + }, + "ProjectsListResponse": { + "id": "ProjectsListResponse", + "type": "object", + "description": "The response returned by a call to projects.List.", + "properties": { + "projects": { + "type": "array", + "description": "Projects returned.", + "items": { + "$ref": "Project" + } + } + } + }, + "PublishResponse": { + "id": "PublishResponse", + "type": "object", + "description": "The response returned by a call to any asset's Publish method." + }, + "Raster": { + "id": "Raster", + "type": "object", + "description": "A raster resource.", + "properties": { + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this Raster. The numbers represent latitudes and longitudes in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description of this Raster, supplied by the author." + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this Raster." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this raster. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "The name of this Raster, supplied by the author." + }, + "projectId": { + "type": "string", + "description": "The ID of the project that this Raster is in." + }, + "rasterType": { + "type": "string", + "description": "The type of this Raster. Always \"image\" today.", + "default": "image" + }, + "tags": { + "type": "array", + "description": "Tags of this Raster.", + "items": { + "type": "string" + } + } + } + }, + "RasterCollection": { + "id": "RasterCollection", + "type": "object", + "description": "A raster collection groups multiple Raster resources for inclusion in a Layer.", + "properties": { + "attribution": { + "type": "string", + "description": "The name of the attribution to be used for this RasterCollection.", + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this RasterCollection. The numbers represent latitudes and longitudes in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this rasterCollection. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description of this RasterCollection, supplied by the author." + }, + "draftAccessList": { + "type": "string", + "description": "The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.", + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this RasterCollection." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this rasterCollection. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "mosaic": { + "type": "boolean", + "description": "True if this RasterCollection is a mosaic.", + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "name": { + "type": "string", + "description": "The name of this RasterCollection, supplied by the author.", + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "projectId": { + "type": "string", + "description": "The ID of the project that this RasterCollection is in.", + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "rasterType": { + "type": "string", + "description": "The type of rasters contained within this RasterCollection.", + "enum": [ + "image" + ], + "enumDescriptions": [ + "" + ], + "annotations": { + "required": [ + "mapsengine.rasterCollections.create" + ] + } + }, + "tags": { + "type": "array", + "description": "Tags of this RasterCollection.", + "items": { + "type": "string" + } + } + } + }, + "RastercollectionsListResponse": { + "id": "RastercollectionsListResponse", + "type": "object", + "description": "The response returned by a call to raster_collections.List.", + "properties": { + "nextPageToken": { + "type": "string", + "description": "Next page token." + }, + "rasterCollections": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "RasterCollection" + } + } + } + }, + "RastersListResponse": { + "id": "RastersListResponse", + "type": "object", + "description": "The response returned by a call to rasterCollections.rasters.List.", + "properties": { + "nextPageToken": { + "type": "string", + "description": "Next page token." + }, + "rasters": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Raster" + } + } + } + }, + "Resource": { + "id": "Resource", + "type": "object", + "description": "An asset is any Google Maps Engine resource that has a globally unique ID. Assets include maps, layers, vector tables, raster collections, and rasters. Projects and features are not considered assets.\n\nMore detailed information about an asset can be obtained by querying the asset's particular endpoint.", + "properties": { + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this asset. The numbers represent latitude and longitude in decimal degrees.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this asset. The value is an RFC 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The asset's description." + }, + "id": { + "type": "string", + "description": "The asset's globally unique ID." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this asset. The value is an RFC 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "The asset's name." + }, + "projectId": { + "type": "string", + "description": "The ID of the project to which the asset belongs." + }, + "resource": { + "type": "string", + "description": "The URL to query to retrieve the asset's complete object. The assets endpoint only returns high-level information about a resource." + }, + "tags": { + "type": "array", + "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center.", + "items": { + "type": "string" + } + }, + "type": { + "type": "string", + "description": "The type of asset. One of raster, rasterCollection, table, map, or layer.", + "enum": [ + "layer", + "map", + "raster", + "rasterCollection", + "table" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + } + } + }, + "ResourcesListResponse": { + "id": "ResourcesListResponse", + "type": "object", + "description": "The response returned by a call to resources.List.", + "properties": { + "assets": { + "type": "array", + "description": "Assets returned.", + "items": { + "$ref": "Resource" + } + }, + "nextPageToken": { + "type": "string", + "description": "Next page token." + } + } + }, + "Schema": { + "id": "Schema", + "type": "object", + "description": "A schema indicating the properties which may be associated with features within a Table, and the types of those properties.", + "properties": { + "columns": { + "type": "array", + "description": "An array of column objects. The first object in the array must be named geometry and be of type points, lineStrings, polygons, or mixedGeometry.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The column name." + }, + "type": { + "type": "string", + "description": "The type of data stored in this column. Accepted values are:\n \n- integer \n- double \n- boolean \n- string \n- mixedGeometry \n- points \n- lineStrings \n- polygons", + "enum": [ + "boolean", + "datetime", + "double", + "integer", + "lineStrings", + "mixedGeometry", + "points", + "polygons", + "string" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + } + }, + "annotations": { + "required": [ + "mapsengine.tables.create" + ] + } + }, + "primaryGeometry": { + "type": "string", + "description": "The name of the column that contains a feature's geometry. This field can be omitted during table create; Google Maps Engine supports only a single geometry column, which must be named geometry and be the first object in the columns array." + }, + "primaryKey": { + "type": "string", + "description": "The name of the column that contains the unique identifier of a Feature." + } + } + }, + "Table": { + "id": "Table", + "type": "object", + "description": "A collection of geographic features, and associated metadata.", + "properties": { + "bbox": { + "type": "array", + "description": "An array of four numbers (west, south, east, north) which define the rectangular bounding box which contains all of the data in this table.", + "items": { + "type": "number", + "format": "double" + } + }, + "creationTime": { + "type": "string", + "description": "The creation time of this table. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description of this table, supplied by the author." + }, + "draftAccessList": { + "type": "string", + "description": "The name of an access list of the Map Editor type. The user on whose behalf the request is being sent must be an editor on that access list. Read About access lists in the Google Maps Engine help center for more information.", + "annotations": { + "required": [ + "mapsengine.tables.create", + "mapsengine.tables.upload" + ] + } + }, + "files": { + "type": "array", + "description": "The files associated with this table.", + "items": { + "$ref": "File" + } + }, + "id": { + "type": "string", + "description": "A globally unique ID, used to refer to this table." + }, + "lastModifiedTime": { + "type": "string", + "description": "The last modified time of this table. The value is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z).", + "format": "date-time" + }, + "name": { + "type": "string", + "description": "The name of this table, supplied by the author.", + "annotations": { + "required": [ + "mapsengine.tables.create", + "mapsengine.tables.upload" + ] + } + }, + "processingStatus": { + "type": "string", + "description": "The processing status of this table. The supported processing status values are:\n \n- notReady: The table is not ready to be processed - some files have not been uploaded. \n- ready: The table is queued for processing. \n- processing: The table is currently processing. \n- complete: Processing has completed successfully. \n- failed: Processing failed to complete.", + "enum": [ + "complete", + "failed", + "notReady", + "processing", + "ready" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "projectId": { + "type": "string", + "description": "The ID of the project to which the table belongs.", + "annotations": { + "required": [ + "mapsengine.tables.create", + "mapsengine.tables.upload" + ] + } + }, + "publishedAccessList": { + "type": "string", + "description": "The access list to whom view permissions are granted. The value must be the name of a Maps Engine access list of the Map Viewer type, and the user must be a viewer on that list. Read About access lists in the Google Maps Engine help center for more information." + }, + "schema": { + "$ref": "Schema", + "description": "The schema for this table." + }, + "sourceEncoding": { + "type": "string", + "description": "Encoding of the uploaded files. Valid values include UTF-8, CP1251, ISO 8859-1, and Shift_JIS.", + "default": "UTF-8" + }, + "tags": { + "type": "array", + "description": "An array of text strings, with each string representing a tag. More information about tags can be found in the Tagging data article of the Maps Engine help center.", + "items": { + "type": "string" + } + } + } + }, + "TablesListResponse": { + "id": "TablesListResponse", + "type": "object", + "description": "The response returned by a call to tables.List.", + "properties": { + "nextPageToken": { + "type": "string", + "description": "Next page token." + }, + "tables": { + "type": "array", + "description": "Resources returned.", + "items": { + "$ref": "Table" + } + } + } + }, + "VectorStyle": { + "id": "VectorStyle", + "type": "object", + "description": "A vector style contains styling information for vector layer.", + "properties": { + "displayRules": { + "type": "array", + "description": "Display rules of the vector style. The first matched rule will apply to the features. If no display rule is provided, a default display rule will be generated according to Geometry type.", + "items": { + "$ref": "DisplayRule" + } + }, + "featureInfo": { + "$ref": "FeatureInfo", + "description": "Individual feature info, this is called Info Window in Maps Engine UI. If not provided, a default template with all attributes will be generated." + }, + "type": { + "type": "string", + "description": "The type of the vector style. Currently, only displayRule is supported.", + "enum": [ + "displayRule" + ], + "enumDescriptions": [ + "" + ], + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + }, + "ZoomLevels": { + "id": "ZoomLevels", + "type": "object", + "description": "Zoom level range. Zoom levels are restricted between 0 and 24, inclusive.", + "properties": { + "max": { + "type": "integer", + "description": "Maximum zoom level.", + "format": "int32", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + }, + "min": { + "type": "integer", + "description": "Minimum zoom level.", + "format": "int32", + "annotations": { + "required": [ + "mapsengine.layers.create" + ] + } + } + } + } + }, + "resources": { + "assets": { + "methods": { + "get": { + "id": "mapsengine.assets.get", + "path": "assets/{id}", + "httpMethod": "GET", + "description": "Return metadata for a particular asset.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the asset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.assets.list", + "path": "assets", + "httpMethod": "GET", + "description": "Return all assets readable by the current user.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + "location": "query" + }, + "type": { + "type": "string", + "description": "An asset type restriction. If set, only resources of this type will be returned.", + "enum": [ + "layer", + "map", + "rasterCollection", + "table" + ], + "enumDescriptions": [ + "Return layers.", + "Return maps.", + "Return raster collections.", + "Return tables." + ], + "location": "query" + } + }, + "response": { + "$ref": "ResourcesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + }, + "resources": { + "parents": { + "methods": { + "list": { + "id": "mapsengine.assets.parents.list", + "path": "assets/{id}/parents", + "httpMethod": "GET", + "description": "Return all parent ids of the specified asset.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the asset whose parents will be listed.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ParentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + } + } + }, + "layers": { + "methods": { + "create": { + "id": "mapsengine.layers.create", + "path": "layers", + "httpMethod": "POST", + "description": "Create a layer asset.", + "parameters": { + "process": { + "type": "boolean", + "description": "Whether to queue the created layer for processing.", + "location": "query" + } + }, + "request": { + "$ref": "Layer" + }, + "response": { + "$ref": "Layer" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "get": { + "id": "mapsengine.layers.get", + "path": "layers/{id}", + "httpMethod": "GET", + "description": "Return metadata for a particular layer.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the layer.", + "required": true, + "location": "path" + }, + "version": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "The draft version.", + "The published version." + ], + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Layer" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.layers.list", + "path": "layers", + "httpMethod": "GET", + "description": "Return all layers readable by the current user.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + "location": "query" + } + }, + "response": { + "$ref": "LayersListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "process": { + "id": "mapsengine.layers.process", + "path": "layers/{id}/process", + "httpMethod": "POST", + "description": "Process a layer asset.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the layer.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ProcessResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "publish": { + "id": "mapsengine.layers.publish", + "path": "layers/{id}/publish", + "httpMethod": "POST", + "description": "Publish a layer asset.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the layer.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "PublishResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + } + }, + "resources": { + "parents": { + "methods": { + "list": { + "id": "mapsengine.layers.parents.list", + "path": "layers/{id}/parents", + "httpMethod": "GET", + "description": "Return all parent ids of the specified layer.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the layer whose parents will be listed.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ParentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + } + } + }, + "maps": { + "methods": { + "get": { + "id": "mapsengine.maps.get", + "path": "maps/{id}", + "httpMethod": "GET", + "description": "Return metadata for a particular map.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the map.", + "required": true, + "location": "path" + }, + "version": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "The draft version.", + "The published version." + ], + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Map" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.maps.list", + "path": "maps", + "httpMethod": "GET", + "description": "Return all maps readable by the current user.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + "location": "query" + } + }, + "response": { + "$ref": "MapsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + }, + "projects": { + "methods": { + "list": { + "id": "mapsengine.projects.list", + "path": "projects", + "httpMethod": "GET", + "description": "Return all projects readable by the current user.", + "response": { + "$ref": "ProjectsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + }, + "rasterCollections": { + "methods": { + "create": { + "id": "mapsengine.rasterCollections.create", + "path": "rasterCollections", + "httpMethod": "POST", + "description": "Create a raster collection asset.", + "request": { + "$ref": "RasterCollection" + }, + "response": { + "$ref": "RasterCollection" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "get": { + "id": "mapsengine.rasterCollections.get", + "path": "rasterCollections/{id}", + "httpMethod": "GET", + "description": "Return metadata for a particular raster collection.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the raster collection.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "RasterCollection" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.rasterCollections.list", + "path": "rasterCollections", + "httpMethod": "GET", + "description": "Return all raster collections readable by the current user.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + "location": "query" + } + }, + "response": { + "$ref": "RastercollectionsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + }, + "resources": { + "parents": { + "methods": { + "list": { + "id": "mapsengine.rasterCollections.parents.list", + "path": "rasterCollections/{id}/parents", + "httpMethod": "GET", + "description": "Return all parent ids of the specified raster collection.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the raster collection whose parents will be listed.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ParentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + }, + "rasters": { + "methods": { + "list": { + "id": "mapsengine.rasterCollections.rasters.list", + "path": "rasterCollections/{id}/rasters", + "httpMethod": "GET", + "description": "Return all rasters within a raster collection.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The ID of the raster collection to which these rasters belong.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "RastersListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + } + } + }, + "rasters": { + "methods": { + "get": { + "id": "mapsengine.rasters.get", + "path": "rasters/{id}", + "httpMethod": "GET", + "description": "Return metadata for a single raster.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the raster.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "upload": { + "id": "mapsengine.rasters.upload", + "path": "rasters/upload", + "httpMethod": "POST", + "description": "Create a skeleton raster asset for upload.", + "request": { + "$ref": "Image" + }, + "response": { + "$ref": "Image" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + } + }, + "resources": { + "files": { + "methods": { + "insert": { + "id": "mapsengine.rasters.files.insert", + "path": "rasters/{id}/files", + "httpMethod": "POST", + "description": "Upload a file to a raster asset.", + "parameters": { + "filename": { + "type": "string", + "description": "The file name of this uploaded file.", + "required": true, + "location": "query" + }, + "id": { + "type": "string", + "description": "The ID of the raster asset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id", + "filename" + ], + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/mapsengine/v1/rasters/{id}/files" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/mapsengine/v1/rasters/{id}/files" + } + } + } + } + } + }, + "parents": { + "methods": { + "list": { + "id": "mapsengine.rasters.parents.list", + "path": "rasters/{id}/parents", + "httpMethod": "GET", + "description": "Return all parent ids of the specified rasters.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the rasters whose parents will be listed.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ParentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + } + } + }, + "tables": { + "methods": { + "create": { + "id": "mapsengine.tables.create", + "path": "tables", + "httpMethod": "POST", + "description": "Create a table asset.", + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "get": { + "id": "mapsengine.tables.get", + "path": "tables/{id}", + "httpMethod": "GET", + "description": "Return metadata for a particular table, including the schema.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table.", + "required": true, + "location": "path" + }, + "version": { + "type": "string", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "The draft version.", + "The published version." + ], + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.tables.list", + "path": "tables", + "httpMethod": "GET", + "description": "Return all tables readable by the current user.", + "parameters": { + "bbox": { + "type": "string", + "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + "location": "query" + }, + "createdAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + "format": "date-time", + "location": "query" + }, + "createdBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + "format": "date-time", + "location": "query" + }, + "creatorEmail": { + "type": "string", + "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + "format": "uint32", + "location": "query" + }, + "modifiedAfter": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + "format": "date-time", + "location": "query" + }, + "modifiedBefore": { + "type": "string", + "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + "format": "date-time", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + "location": "query" + } + }, + "response": { + "$ref": "TablesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "upload": { + "id": "mapsengine.tables.upload", + "path": "tables/upload", + "httpMethod": "POST", + "description": "Create a placeholder table asset to which table files can be uploaded.\nOnce the placeholder has been created, files are uploaded to the https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files endpoint.\nSee Table Upload in the Developer's Guide or Table.files: insert in the reference documentation for more information.", + "request": { + "$ref": "Table" + }, + "response": { + "$ref": "Table" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + } + }, + "resources": { + "features": { + "methods": { + "batchDelete": { + "id": "mapsengine.tables.features.batchDelete", + "path": "tables/{id}/features/batchDelete", + "httpMethod": "POST", + "description": "Delete all features matching the given IDs.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table that contains the features to be deleted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "FeaturesBatchDeleteRequest" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "batchInsert": { + "id": "mapsengine.tables.features.batchInsert", + "path": "tables/{id}/features/batchInsert", + "httpMethod": "POST", + "description": "Append features to an existing table.\n\nA single batchInsert request can create:\n\n- Up to 50 features.\n- A combined total of 10 000 vertices.\nFeature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.\n\nFor more information about inserting features, read Creating features in the Google Maps Engine developer's guide.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table to append the features to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "FeaturesBatchInsertRequest" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "batchPatch": { + "id": "mapsengine.tables.features.batchPatch", + "path": "tables/{id}/features/batchPatch", + "httpMethod": "POST", + "description": "Update the supplied features.\n\nA single batchPatch request can update:\n\n- Up to 50 features.\n- A combined total of 10 000 vertices.\nFeature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.\n\nFeature updates use HTTP PATCH semantics:\n\n- A supplied value replaces an existing value (if any) in that field.\n- Omitted fields remain unchanged.\n- Complex values in geometries and properties must be replaced as atomic units. For example, providing just the coordinates of a geometry is not allowed; the complete geometry, including type, must be supplied.\n- Setting a property's value to null deletes that property.\nFor more information about updating features, read Updating features in the Google Maps Engine developer's guide.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table containing the features to be patched.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "FeaturesBatchPatchRequest" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ] + }, + "get": { + "id": "mapsengine.tables.features.get", + "path": "tables/{tableId}/features/{id}", + "httpMethod": "GET", + "description": "Return a single feature, given its ID.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the feature to get.", + "required": true, + "location": "path" + }, + "select": { + "type": "string", + "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.", + "location": "query" + }, + "tableId": { + "type": "string", + "description": "The ID of the table.", + "required": true, + "location": "path" + }, + "version": { + "type": "string", + "description": "The table version to access. See Accessing Public Data for information.", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "The draft version.", + "The published version." + ], + "location": "query" + } + }, + "parameterOrder": [ + "tableId", + "id" + ], + "response": { + "$ref": "Feature" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + }, + "list": { + "id": "mapsengine.tables.features.list", + "path": "tables/{id}/features", + "httpMethod": "GET", + "description": "Return all features readable by the current user.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table to which these features belong.", + "required": true, + "location": "path" + }, + "include": { + "type": "string", + "description": "A comma separated list of optional data to include. Optional data available: schema.", + "location": "query" + }, + "intersects": { + "type": "string", + "description": "A geometry literal that specifies the spatial restriction of the query.", + "location": "query" + }, + "limit": { + "type": "integer", + "description": "The total number of features to return from the query, irrespective of the number of pages.", + "format": "uint32", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in the response, used for paging.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "An SQL-like order by clause used to sort results. If this parameter is not included, the order of features is undefined.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + }, + "select": { + "type": "string", + "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.", + "location": "query" + }, + "version": { + "type": "string", + "description": "The table version to access. See Accessing Public Data for information.", + "enum": [ + "draft", + "published" + ], + "enumDescriptions": [ + "The draft version.", + "The published version." + ], + "location": "query" + }, + "where": { + "type": "string", + "description": "An SQL-like predicate used to filter results.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "FeaturesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + }, + "files": { + "methods": { + "insert": { + "id": "mapsengine.tables.files.insert", + "path": "tables/{id}/files", + "httpMethod": "POST", + "description": "Upload a file to a placeholder table asset. See Table Upload in the Developer's Guide for more information.\nSupported file types are listed in the Supported data formats and limits article of the Google Maps Engine help center.", + "parameters": { + "filename": { + "type": "string", + "description": "The file name of this uploaded file.", + "required": true, + "location": "query" + }, + "id": { + "type": "string", + "description": "The ID of the table asset.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id", + "filename" + ], + "scopes": [ + "https://www.googleapis.com/auth/mapsengine" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "maxSize": "1GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/mapsengine/v1/tables/{id}/files" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/mapsengine/v1/tables/{id}/files" + } + } + } + } + } + }, + "parents": { + "methods": { + "list": { + "id": "mapsengine.tables.parents.list", + "path": "tables/{id}/parents", + "httpMethod": "GET", + "description": "Return all parent ids of the specified table.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the table whose parents will be listed.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "ParentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/mapsengine", + "https://www.googleapis.com/auth/mapsengine.readonly" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-gen.go b/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-gen.go new file mode 100644 index 0000000000000..83b5ae71b8411 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/mapsengine/v1/mapsengine-gen.go @@ -0,0 +1,4601 @@ +// Package mapsengine provides access to the Google Maps Engine API. +// +// See https://developers.google.com/maps-engine/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/mapsengine/v1" +// ... +// mapsengineService, err := mapsengine.New(oauthHttpClient) +package mapsengine + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "mapsengine:v1" +const apiName = "mapsengine" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/mapsengine/v1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your Google Maps Engine data + MapsengineScope = "https://www.googleapis.com/auth/mapsengine" + + // View your Google Maps Engine data + MapsengineReadonlyScope = "https://www.googleapis.com/auth/mapsengine.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Assets = NewAssetsService(s) + s.Layers = NewLayersService(s) + s.Maps = NewMapsService(s) + s.Projects = NewProjectsService(s) + s.RasterCollections = NewRasterCollectionsService(s) + s.Rasters = NewRastersService(s) + s.Tables = NewTablesService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Assets *AssetsService + + Layers *LayersService + + Maps *MapsService + + Projects *ProjectsService + + RasterCollections *RasterCollectionsService + + Rasters *RastersService + + Tables *TablesService +} + +func NewAssetsService(s *Service) *AssetsService { + rs := &AssetsService{s: s} + rs.Parents = NewAssetsParentsService(s) + return rs +} + +type AssetsService struct { + s *Service + + Parents *AssetsParentsService +} + +func NewAssetsParentsService(s *Service) *AssetsParentsService { + rs := &AssetsParentsService{s: s} + return rs +} + +type AssetsParentsService struct { + s *Service +} + +func NewLayersService(s *Service) *LayersService { + rs := &LayersService{s: s} + rs.Parents = NewLayersParentsService(s) + return rs +} + +type LayersService struct { + s *Service + + Parents *LayersParentsService +} + +func NewLayersParentsService(s *Service) *LayersParentsService { + rs := &LayersParentsService{s: s} + return rs +} + +type LayersParentsService struct { + s *Service +} + +func NewMapsService(s *Service) *MapsService { + rs := &MapsService{s: s} + return rs +} + +type MapsService struct { + s *Service +} + +func NewProjectsService(s *Service) *ProjectsService { + rs := &ProjectsService{s: s} + return rs +} + +type ProjectsService struct { + s *Service +} + +func NewRasterCollectionsService(s *Service) *RasterCollectionsService { + rs := &RasterCollectionsService{s: s} + rs.Parents = NewRasterCollectionsParentsService(s) + rs.Rasters = NewRasterCollectionsRastersService(s) + return rs +} + +type RasterCollectionsService struct { + s *Service + + Parents *RasterCollectionsParentsService + + Rasters *RasterCollectionsRastersService +} + +func NewRasterCollectionsParentsService(s *Service) *RasterCollectionsParentsService { + rs := &RasterCollectionsParentsService{s: s} + return rs +} + +type RasterCollectionsParentsService struct { + s *Service +} + +func NewRasterCollectionsRastersService(s *Service) *RasterCollectionsRastersService { + rs := &RasterCollectionsRastersService{s: s} + return rs +} + +type RasterCollectionsRastersService struct { + s *Service +} + +func NewRastersService(s *Service) *RastersService { + rs := &RastersService{s: s} + rs.Files = NewRastersFilesService(s) + rs.Parents = NewRastersParentsService(s) + return rs +} + +type RastersService struct { + s *Service + + Files *RastersFilesService + + Parents *RastersParentsService +} + +func NewRastersFilesService(s *Service) *RastersFilesService { + rs := &RastersFilesService{s: s} + return rs +} + +type RastersFilesService struct { + s *Service +} + +func NewRastersParentsService(s *Service) *RastersParentsService { + rs := &RastersParentsService{s: s} + return rs +} + +type RastersParentsService struct { + s *Service +} + +func NewTablesService(s *Service) *TablesService { + rs := &TablesService{s: s} + rs.Features = NewTablesFeaturesService(s) + rs.Files = NewTablesFilesService(s) + rs.Parents = NewTablesParentsService(s) + return rs +} + +type TablesService struct { + s *Service + + Features *TablesFeaturesService + + Files *TablesFilesService + + Parents *TablesParentsService +} + +func NewTablesFeaturesService(s *Service) *TablesFeaturesService { + rs := &TablesFeaturesService{s: s} + return rs +} + +type TablesFeaturesService struct { + s *Service +} + +func NewTablesFilesService(s *Service) *TablesFilesService { + rs := &TablesFilesService{s: s} + return rs +} + +type TablesFilesService struct { + s *Service +} + +func NewTablesParentsService(s *Service) *TablesParentsService { + rs := &TablesParentsService{s: s} + return rs +} + +type TablesParentsService struct { + s *Service +} + +type AcquisitionTime struct { + // End: The end time if acquisition time is a range. The value is an RFC + // 3339 formatted date-time value (1970-01-01T00:00:00Z). + End string `json:"end,omitempty"` + + // Precision: The precision of acquisition time. Valid values include: + // 'year', 'month', 'day', 'hour', 'minute' and 'second'. + Precision string `json:"precision,omitempty"` + + // Start: The acquisition time, or start time if acquisition time is a + // range. The value is an RFC 3339 formatted date-time value + // (1970-01-01T00:00:00Z). + Start string `json:"start,omitempty"` +} + +type Border struct { + // Color: Color of the border. + Color string `json:"color,omitempty"` + + // Opacity: Opacity of the border. + Opacity float64 `json:"opacity,omitempty"` + + // Width: Width of the border, in pixels. + Width float64 `json:"width,omitempty"` +} + +type Color struct { + // Color: The CSS style color, can be in format of "red" or "#7733EE". + Color string `json:"color,omitempty"` + + // Opacity: Opacity ranges from 0 to 1, inclusive. If not provided, + // default to 1. + Opacity float64 `json:"opacity,omitempty"` +} + +type Datasource struct { + // Id: The ID of a datasource. + Id string `json:"id,omitempty"` +} + +type DisplayRule struct { + // Filters: This display rule will only be applied to features that + // match all of the filters here. If filters is empty, then the rule + // applies to all features. + Filters []*Filter `json:"filters,omitempty"` + + // LineOptions: Style applied to lines. Required for LineString + // Geometry. + LineOptions *LineStyle `json:"lineOptions,omitempty"` + + // Name: Display rule name. Name is not unique and cannot be used for + // identification purpose. + Name string `json:"name,omitempty"` + + // PointOptions: Style applied to points. Required for Point Geometry. + PointOptions *PointStyle `json:"pointOptions,omitempty"` + + // PolygonOptions: Style applied to polygons. Required for Polygon + // Geometry. + PolygonOptions *PolygonStyle `json:"polygonOptions,omitempty"` + + // ZoomLevels: The zoom levels that this display rule apply. + ZoomLevels *ZoomLevels `json:"zoomLevels,omitempty"` +} + +type Feature struct { + // Geometry: The geometry member of this Feature. + Geometry *GeoJsonGeometry `json:"geometry,omitempty"` + + // Properties: Key/value pairs of this Feature. + Properties *GeoJsonProperties `json:"properties,omitempty"` + + // Type: Identifies this object as a feature. + Type string `json:"type,omitempty"` +} + +type FeatureInfo struct { + // Content: HTML template of the info window. If not provided, a default + // template with all attributes will be generated. + Content string `json:"content,omitempty"` +} + +type FeaturesBatchDeleteRequest struct { + Gx_ids []string `json:"gx_ids,omitempty"` + + PrimaryKeys []string `json:"primaryKeys,omitempty"` +} + +type FeaturesBatchInsertRequest struct { + Features []*Feature `json:"features,omitempty"` +} + +type FeaturesBatchPatchRequest struct { + Features []*Feature `json:"features,omitempty"` +} + +type FeaturesListResponse struct { + // AllowedQueriesPerSecond: An indicator of the maximum rate at which + // queries may be made, if all queries were as expensive as this query. + AllowedQueriesPerSecond float64 `json:"allowedQueriesPerSecond,omitempty"` + + // Features: Resources returned. + Features []*Feature `json:"features,omitempty"` + + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Schema: The feature schema. + Schema *Schema `json:"schema,omitempty"` + + Type string `json:"type,omitempty"` +} + +type File struct { + // Filename: The name of the file. + Filename string `json:"filename,omitempty"` + + // Size: The size of the file in bytes. + Size int64 `json:"size,omitempty,string"` + + // UploadStatus: The upload status of the file. + UploadStatus string `json:"uploadStatus,omitempty"` +} + +type Filter struct { + // Column: The column name to filter on. + Column string `json:"column,omitempty"` + + // Operator: Operation used to evaluate the filter. + Operator string `json:"operator,omitempty"` + + // Value: Value to be evaluated against attribute. + Value interface{} `json:"value,omitempty"` +} + +type GeoJsonGeometry struct { +} + +type GeoJsonGeometryCollection struct { + // Geometries: The geometry objects that are contained within this + // geometry collection. + Geometries []*GeoJsonGeometry `json:"geometries,omitempty"` + + // Type: Identifies this object as a geometry collection. + Type string `json:"type,omitempty"` +} + +type GeoJsonLineString struct { + // Coordinates: The coordinates of this line string as an array of two + // or more positions. + Coordinates [][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a line string. + Type string `json:"type,omitempty"` +} + +type GeoJsonMultiLineString struct { + // Coordinates: The coordinates of this multi-line string as an array of + // line string coordinate arrays. + Coordinates [][][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a multi-line string. + Type string `json:"type,omitempty"` +} + +type GeoJsonMultiPoint struct { + // Coordinates: The coordinates of this multi-point as an array of + // positions. + Coordinates [][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a multi-point. + Type string `json:"type,omitempty"` +} + +type GeoJsonMultiPolygon struct { + // Coordinates: The coordinates of this multi-polygon as an array of + // polygon coordinate arrays. + Coordinates [][][][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a multi-polygon. + Type string `json:"type,omitempty"` +} + +type GeoJsonPoint struct { + // Coordinates: The coordinates of this point as a position in + // [longitude, latitude] or [longitude, latitude, altitude] form. + Coordinates []float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a point. + Type string `json:"type,omitempty"` +} + +type GeoJsonPolygon struct { + // Coordinates: The coordinates of this polygon as an array of linear + // ring coordinate arrays. A linear ring is a closed line string with 4 + // or more positions. The first and last positions are equivalent. For + // polygons with multiple rings, the first must be the exterior ring and + // any others must be interior rings or holes. + Coordinates [][][]float64 `json:"coordinates,omitempty"` + + // Type: Identifies this object as a polygon. + Type string `json:"type,omitempty"` +} + +type GeoJsonProperties struct { +} + +type IconStyle struct { + // Id: Custom icon id. + Id string `json:"id,omitempty"` + + // Name: Stock icon name. To use a stock icon, prefix it with 'gx_'. See + // Stock icon names for valid icon names. For example, to specify + // small_red, set name to 'gx_small_red'. + Name string `json:"name,omitempty"` +} + +type Image struct { + // AcquisitionTime: The acquisition time of this Raster. + AcquisitionTime *AcquisitionTime `json:"acquisitionTime,omitempty"` + + // Attribution: The name of the attribution to be used for this Raster. + Attribution string `json:"attribution,omitempty"` + + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this Raster. The numbers represent latitudes and longitudes in + // decimal degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this raster. The value is an RFC + // 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // Description: The description of this Raster, supplied by the author. + Description string `json:"description,omitempty"` + + // DraftAccessList: The Map Editors access list to share this Raster + // with. + DraftAccessList string `json:"draftAccessList,omitempty"` + + // Files: The files associated with this Raster. + Files []*File `json:"files,omitempty"` + + // Id: A globally unique ID, used to refer to this Raster. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this raster. The value is + // an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // MaskType: The mask processing type of this Raster. Valid values + // include "autoMask", "alphaChannelMask", "noMask", "imageMask". + MaskType string `json:"maskType,omitempty"` + + // Name: The name of this Raster, supplied by the author. + Name string `json:"name,omitempty"` + + // ProcessingStatus: The processing status of this Raster. The raster + // processing status values can be: + // + // 'notReady': The raster is not ready + // to be processed - some files have not been uploaded. + // 'ready': The + // raster is queued for processing. + // 'processing': The raster is + // currently processing. + // 'complete': Processing has completed + // successfully. + // 'failed': Processing failed to complete. + ProcessingStatus string `json:"processingStatus,omitempty"` + + // ProjectId: The ID of the project that this Raster is in. + ProjectId string `json:"projectId,omitempty"` + + // RasterType: The type of this Raster. Always "image" today. + RasterType string `json:"rasterType,omitempty"` + + // Tags: Tags of this Raster. + Tags []string `json:"tags,omitempty"` +} + +type LabelStyle struct { + // Color: Color of the text. If not provided, default to black. + Color string `json:"color,omitempty"` + + // Column: The column value of the feature to be displayed. + Column string `json:"column,omitempty"` + + // FontStyle: Font style of the label, defaults to 'normal'. + FontStyle string `json:"fontStyle,omitempty"` + + // FontWeight: Font weight of the label, defaults to 'normal'. + FontWeight string `json:"fontWeight,omitempty"` + + // Opacity: Opacity of the text. + Opacity float64 `json:"opacity,omitempty"` + + // Outline: Outline color of the text. + Outline *Color `json:"outline,omitempty"` + + // Size: Font size of the label, in pixels. 8 <= size <= 15. If not + // provided, a default size will be provided. + Size float64 `json:"size,omitempty"` +} + +type Layer struct { + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this Layer. The numbers represent latitudes and longitudes in decimal + // degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this layer. The value is an RFC + // 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // DatasourceType: The type of the datasources used to build this Layer. + // One of either "table" or "image". + DatasourceType string `json:"datasourceType,omitempty"` + + // Datasources: An array of datasources used to build this Layer. If + // datasourceType is "image", then each element in this array is a + // reference to an Image or RasterCollection. If datasourceType is + // "table" then each element in this array is a reference to a Vector + // Table. + Datasources []*Datasource `json:"datasources,omitempty"` + + // Description: The description of this Layer, supplied by the author. + Description string `json:"description,omitempty"` + + // DraftAccessList: The name of an access list of the Map Editor type. + // The user on whose behalf the request is being sent must be an editor + // on that access list. Read About access lists in the Google Maps + // Engine help center for more information. + DraftAccessList string `json:"draftAccessList,omitempty"` + + // Id: A globally unique ID, used to refer to this Layer. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this layer. The value is + // an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Name: The name of this Layer, supplied by the author. + Name string `json:"name,omitempty"` + + // ProcessingStatus: The processing status of this layer. + ProcessingStatus string `json:"processingStatus,omitempty"` + + // ProjectId: The ID of the project that this Layer is in. + ProjectId string `json:"projectId,omitempty"` + + // PublishedAccessList: The access list to whom view permissions are + // granted. The value must be the name of a Maps Engine access list of + // the Map Viewer type, and the user must be a viewer on that list. Read + // About access lists in the Google Maps Engine help center for more + // information. + PublishedAccessList string `json:"publishedAccessList,omitempty"` + + // Style: The Styling information for a vector layer. + Style *VectorStyle `json:"style,omitempty"` + + // Tags: Tags of this Layer. + Tags []string `json:"tags,omitempty"` +} + +type LayersListResponse struct { + // Layers: Resources returned. + Layers []*Layer `json:"layers,omitempty"` + + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type LineStyle struct { + // Border: Border of the line. 0 < border.width <= 5. + Border *Border `json:"border,omitempty"` + + // Dash: Dash defines the pattern of the line, the values are pixel + // lengths of alternating dash and gap. If dash is not provided, then it + // means a solid line. Dash can contain up to 10 values and must contain + // even number of values. + Dash []float64 `json:"dash,omitempty"` + + // Label: Label style for the line. + Label *LabelStyle `json:"label,omitempty"` + + // Stroke: Stroke of the line. + Stroke *LineStyleStroke `json:"stroke,omitempty"` +} + +type LineStyleStroke struct { + // Color: Color of the line. + Color string `json:"color,omitempty"` + + // Opacity: Opacity of the line. + Opacity float64 `json:"opacity,omitempty"` + + // Width: Width of the line, in pixels. 0 <= width <= 10. If width is + // set to 0, the line will be invisible. + Width float64 `json:"width,omitempty"` +} + +type Map struct { + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this Map. The numbers represent latitude and longitude in decimal + // degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // Contents: The contents of this Map. + Contents []*MapItem `json:"contents,omitempty"` + + // CreationTime: The creation time of this map. The value is an RFC 3339 + // formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // DefaultViewport: An array of four numbers (west, south, east, north) + // which defines the rectangular bounding box of the default viewport. + // The numbers represent latitude and longitude in decimal degrees. + DefaultViewport []float64 `json:"defaultViewport,omitempty"` + + // Description: The description of this Map, supplied by the author. + Description string `json:"description,omitempty"` + + // Id: A globally unique ID, used to refer to this Map. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this map. The value is an + // RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Name: The name of this Map, supplied by the author. + Name string `json:"name,omitempty"` + + // ProjectId: The ID of the project that this Map is in. + ProjectId string `json:"projectId,omitempty"` + + // Tags: Tags of this Map. + Tags []string `json:"tags,omitempty"` + + // Versions: An array containing the available versions of this Map. + // Currently may only contain "published". + Versions []string `json:"versions,omitempty"` +} + +type MapFolder struct { + // Contents: The contents of this Folder. + Contents []*MapItem `json:"contents,omitempty"` + + // DefaultViewport: An array of four numbers (west, south, east, north) + // which defines the rectangular bounding box of the default viewport. + // The numbers represent latitude and longitude in decimal degrees. + DefaultViewport []float64 `json:"defaultViewport,omitempty"` + + // Key: A user defined alias for this Folder, specific to this Map. + Key string `json:"key,omitempty"` + + // Name: The name of this Folder. + Name string `json:"name,omitempty"` + + // Type: Identifies this object as a Folder. (( constant "folder" )) + Type string `json:"type,omitempty"` + + // Visibility: The visibility setting of this Folder. One of "defaultOn" + // or "defaultOff". + Visibility string `json:"visibility,omitempty"` +} + +type MapItem struct { +} + +type MapKmlLink struct { + // DefaultViewport: An array of four numbers (west, south, east, north) + // which defines the rectangular bounding box of the default viewport. + // The numbers represent latitude and longitude in decimal degrees. + DefaultViewport []float64 `json:"defaultViewport,omitempty"` + + // KmlUrl: The URL to the KML file represented by this KmlLink. + KmlUrl string `json:"kmlUrl,omitempty"` + + // Name: The name of this KmlLink. + Name string `json:"name,omitempty"` + + // Type: Identifies this object as a KmlLink. (( constant "kmlLink" )) + Type string `json:"type,omitempty"` + + // Visibility: The visibility setting of this KmlLink. One of + // "defaultOn" or "defaultOff". + Visibility string `json:"visibility,omitempty"` +} + +type MapLayer struct { + // DefaultViewport: An array of four numbers (west, south, east, north) + // which defines the rectangular bounding box of the default viewport. + // The numbers represent latitude and longitude in decimal degrees. + DefaultViewport []float64 `json:"defaultViewport,omitempty"` + + // Id: The ID of this Layer. This ID can be used to request more details + // about this Layer. + Id string `json:"id,omitempty"` + + // Key: A user defined alias for this Layer, specific to this Map. + Key string `json:"key,omitempty"` + + // Name: The name of this Layer. + Name string `json:"name,omitempty"` + + // Type: Identifies this object as a Layer. (( constant "layer" )) + Type string `json:"type,omitempty"` + + // Visibility: The visibility setting of this Layer. One of "defaultOn" + // or "defaultOff". + Visibility string `json:"visibility,omitempty"` +} + +type MapsListResponse struct { + // Maps: Resources returned. + Maps []*Map `json:"maps,omitempty"` + + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Parent struct { + // Id: The ID of this parent. + Id string `json:"id,omitempty"` +} + +type ParentsListResponse struct { + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Parents: Resources returned. + Parents []*Parent `json:"parents,omitempty"` +} + +type PointStyle struct { + // Icon: Icon for the point; exactly one field in 'icon' must be set. + Icon *IconStyle `json:"icon,omitempty"` + + // Label: Label style for the point. + Label *LabelStyle `json:"label,omitempty"` +} + +type PolygonStyle struct { + // Fill: Fill color of the polygon. If not provided, the polygon will be + // transparent and not visible if there is no border. + Fill *Color `json:"fill,omitempty"` + + // Stroke: Border of the polygon. 0 < border.width <= 10. + Stroke *Border `json:"stroke,omitempty"` +} + +type ProcessResponse struct { +} + +type Project struct { + // Id: An ID used to refer to this project. + Id string `json:"id,omitempty"` + + // Name: A user provided name for this project. + Name string `json:"name,omitempty"` +} + +type ProjectsListResponse struct { + // Projects: Projects returned. + Projects []*Project `json:"projects,omitempty"` +} + +type PublishResponse struct { +} + +type Raster struct { + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this Raster. The numbers represent latitudes and longitudes in + // decimal degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this raster. The value is an RFC + // 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // Description: The description of this Raster, supplied by the author. + Description string `json:"description,omitempty"` + + // Id: A globally unique ID, used to refer to this Raster. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this raster. The value is + // an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Name: The name of this Raster, supplied by the author. + Name string `json:"name,omitempty"` + + // ProjectId: The ID of the project that this Raster is in. + ProjectId string `json:"projectId,omitempty"` + + // RasterType: The type of this Raster. Always "image" today. + RasterType string `json:"rasterType,omitempty"` + + // Tags: Tags of this Raster. + Tags []string `json:"tags,omitempty"` +} + +type RasterCollection struct { + // Attribution: The name of the attribution to be used for this + // RasterCollection. + Attribution string `json:"attribution,omitempty"` + + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this RasterCollection. The numbers represent latitudes and longitudes + // in decimal degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this rasterCollection. The value + // is an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // Description: The description of this RasterCollection, supplied by + // the author. + Description string `json:"description,omitempty"` + + // DraftAccessList: The name of an access list of the Map Editor type. + // The user on whose behalf the request is being sent must be an editor + // on that access list. Read About access lists in the Google Maps + // Engine help center for more information. + DraftAccessList string `json:"draftAccessList,omitempty"` + + // Id: A globally unique ID, used to refer to this RasterCollection. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this rasterCollection. + // The value is an RFC 3339 formatted date-time value (e.g. + // 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Mosaic: True if this RasterCollection is a mosaic. + Mosaic bool `json:"mosaic,omitempty"` + + // Name: The name of this RasterCollection, supplied by the author. + Name string `json:"name,omitempty"` + + // ProjectId: The ID of the project that this RasterCollection is in. + ProjectId string `json:"projectId,omitempty"` + + // RasterType: The type of rasters contained within this + // RasterCollection. + RasterType string `json:"rasterType,omitempty"` + + // Tags: Tags of this RasterCollection. + Tags []string `json:"tags,omitempty"` +} + +type RastercollectionsListResponse struct { + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // RasterCollections: Resources returned. + RasterCollections []*RasterCollection `json:"rasterCollections,omitempty"` +} + +type RastersListResponse struct { + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Rasters: Resources returned. + Rasters []*Raster `json:"rasters,omitempty"` +} + +type Resource struct { + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this asset. The numbers represent latitude and longitude in decimal + // degrees. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this asset. The value is an RFC + // 3339-formatted date-time value (for example, 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // Description: The asset's description. + Description string `json:"description,omitempty"` + + // Id: The asset's globally unique ID. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this asset. The value is + // an RFC 3339-formatted date-time value (for example, + // 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Name: The asset's name. + Name string `json:"name,omitempty"` + + // ProjectId: The ID of the project to which the asset belongs. + ProjectId string `json:"projectId,omitempty"` + + // Resource: The URL to query to retrieve the asset's complete object. + // The assets endpoint only returns high-level information about a + // resource. + Resource string `json:"resource,omitempty"` + + // Tags: An array of text strings, with each string representing a tag. + // More information about tags can be found in the Tagging data article + // of the Maps Engine help center. + Tags []string `json:"tags,omitempty"` + + // Type: The type of asset. One of raster, rasterCollection, table, map, + // or layer. + Type string `json:"type,omitempty"` +} + +type ResourcesListResponse struct { + // Assets: Assets returned. + Assets []*Resource `json:"assets,omitempty"` + + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Schema struct { + // Columns: An array of column objects. The first object in the array + // must be named geometry and be of type points, lineStrings, polygons, + // or mixedGeometry. + Columns []*SchemaColumns `json:"columns,omitempty"` + + // PrimaryGeometry: The name of the column that contains a feature's + // geometry. This field can be omitted during table create; Google Maps + // Engine supports only a single geometry column, which must be named + // geometry and be the first object in the columns array. + PrimaryGeometry string `json:"primaryGeometry,omitempty"` + + // PrimaryKey: The name of the column that contains the unique + // identifier of a Feature. + PrimaryKey string `json:"primaryKey,omitempty"` +} + +type SchemaColumns struct { + // Name: The column name. + Name string `json:"name,omitempty"` + + // Type: The type of data stored in this column. Accepted values are: + // + // + // - integer + // - double + // - boolean + // - string + // - mixedGeometry + // - points + // + // - lineStrings + // - polygons + Type string `json:"type,omitempty"` +} + +type Table struct { + // Bbox: An array of four numbers (west, south, east, north) which + // define the rectangular bounding box which contains all of the data in + // this table. + Bbox []float64 `json:"bbox,omitempty"` + + // CreationTime: The creation time of this table. The value is an RFC + // 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + CreationTime string `json:"creationTime,omitempty"` + + // Description: The description of this table, supplied by the author. + Description string `json:"description,omitempty"` + + // DraftAccessList: The name of an access list of the Map Editor type. + // The user on whose behalf the request is being sent must be an editor + // on that access list. Read About access lists in the Google Maps + // Engine help center for more information. + DraftAccessList string `json:"draftAccessList,omitempty"` + + // Files: The files associated with this table. + Files []*File `json:"files,omitempty"` + + // Id: A globally unique ID, used to refer to this table. + Id string `json:"id,omitempty"` + + // LastModifiedTime: The last modified time of this table. The value is + // an RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). + LastModifiedTime string `json:"lastModifiedTime,omitempty"` + + // Name: The name of this table, supplied by the author. + Name string `json:"name,omitempty"` + + // ProcessingStatus: The processing status of this table. The supported + // processing status values are: + // + // - notReady: The table is not ready to + // be processed - some files have not been uploaded. + // - ready: The table + // is queued for processing. + // - processing: The table is currently + // processing. + // - complete: Processing has completed successfully. + // - + // failed: Processing failed to complete. + ProcessingStatus string `json:"processingStatus,omitempty"` + + // ProjectId: The ID of the project to which the table belongs. + ProjectId string `json:"projectId,omitempty"` + + // PublishedAccessList: The access list to whom view permissions are + // granted. The value must be the name of a Maps Engine access list of + // the Map Viewer type, and the user must be a viewer on that list. Read + // About access lists in the Google Maps Engine help center for more + // information. + PublishedAccessList string `json:"publishedAccessList,omitempty"` + + // Schema: The schema for this table. + Schema *Schema `json:"schema,omitempty"` + + // SourceEncoding: Encoding of the uploaded files. Valid values include + // UTF-8, CP1251, ISO 8859-1, and Shift_JIS. + SourceEncoding string `json:"sourceEncoding,omitempty"` + + // Tags: An array of text strings, with each string representing a tag. + // More information about tags can be found in the Tagging data article + // of the Maps Engine help center. + Tags []string `json:"tags,omitempty"` +} + +type TablesListResponse struct { + // NextPageToken: Next page token. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Tables: Resources returned. + Tables []*Table `json:"tables,omitempty"` +} + +type VectorStyle struct { + // DisplayRules: Display rules of the vector style. The first matched + // rule will apply to the features. If no display rule is provided, a + // default display rule will be generated according to Geometry type. + DisplayRules []*DisplayRule `json:"displayRules,omitempty"` + + // FeatureInfo: Individual feature info, this is called Info Window in + // Maps Engine UI. If not provided, a default template with all + // attributes will be generated. + FeatureInfo *FeatureInfo `json:"featureInfo,omitempty"` + + // Type: The type of the vector style. Currently, only displayRule is + // supported. + Type string `json:"type,omitempty"` +} + +type ZoomLevels struct { + // Max: Maximum zoom level. + Max int64 `json:"max,omitempty"` + + // Min: Minimum zoom level. + Min int64 `json:"min,omitempty"` +} + +// method id "mapsengine.assets.get": + +type AssetsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a particular asset. +func (r *AssetsService) Get(id string) *AssetsGetCall { + c := &AssetsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *AssetsGetCall) Do() (*Resource, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "assets/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Resource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a particular asset.", + // "httpMethod": "GET", + // "id": "mapsengine.assets.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the asset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "assets/{id}", + // "response": { + // "$ref": "Resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.assets.list": + +type AssetsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all assets readable by the current user. +func (r *AssetsService) List() *AssetsListCall { + c := &AssetsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *AssetsListCall) Bbox(bbox string) *AssetsListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *AssetsListCall) CreatedAfter(createdAfter string) *AssetsListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *AssetsListCall) CreatedBefore(createdBefore string) *AssetsListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *AssetsListCall) CreatorEmail(creatorEmail string) *AssetsListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *AssetsListCall) MaxResults(maxResults int64) *AssetsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *AssetsListCall) ModifiedAfter(modifiedAfter string) *AssetsListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *AssetsListCall) ModifiedBefore(modifiedBefore string) *AssetsListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *AssetsListCall) PageToken(pageToken string) *AssetsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProjectId sets the optional parameter "projectId": The ID of a Maps +// Engine project, used to filter the response. To list all available +// projects with their IDs, send a Projects: list request. You can also +// find your project ID as the value of the DashboardPlace:cid URL +// parameter when signed in to mapsengine.google.com. +func (c *AssetsListCall) ProjectId(projectId string) *AssetsListCall { + c.opt_["projectId"] = projectId + return c +} + +// Type sets the optional parameter "type": An asset type restriction. +// If set, only resources of this type will be returned. +func (c *AssetsListCall) Type(type_ string) *AssetsListCall { + c.opt_["type"] = type_ + return c +} + +func (c *AssetsListCall) Do() (*ResourcesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projectId"]; ok { + params.Set("projectId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "assets") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ResourcesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all assets readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.assets.list", + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + // "location": "query", + // "type": "string" + // }, + // "type": { + // "description": "An asset type restriction. If set, only resources of this type will be returned.", + // "enum": [ + // "layer", + // "map", + // "rasterCollection", + // "table" + // ], + // "enumDescriptions": [ + // "Return layers.", + // "Return maps.", + // "Return raster collections.", + // "Return tables." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "assets", + // "response": { + // "$ref": "ResourcesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.assets.parents.list": + +type AssetsParentsListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all parent ids of the specified asset. +func (r *AssetsParentsService) List(id string) *AssetsParentsListCall { + c := &AssetsParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 50. +func (c *AssetsParentsListCall) MaxResults(maxResults int64) *AssetsParentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *AssetsParentsListCall) PageToken(pageToken string) *AssetsParentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AssetsParentsListCall) Do() (*ParentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "assets/{id}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all parent ids of the specified asset.", + // "httpMethod": "GET", + // "id": "mapsengine.assets.parents.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the asset whose parents will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "assets/{id}/parents", + // "response": { + // "$ref": "ParentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.layers.create": + +type LayersCreateCall struct { + s *Service + layer *Layer + opt_ map[string]interface{} +} + +// Create: Create a layer asset. +func (r *LayersService) Create(layer *Layer) *LayersCreateCall { + c := &LayersCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.layer = layer + return c +} + +// Process sets the optional parameter "process": Whether to queue the +// created layer for processing. +func (c *LayersCreateCall) Process(process bool) *LayersCreateCall { + c.opt_["process"] = process + return c +} + +func (c *LayersCreateCall) Do() (*Layer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.layer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["process"]; ok { + params.Set("process", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "layers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Layer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a layer asset.", + // "httpMethod": "POST", + // "id": "mapsengine.layers.create", + // "parameters": { + // "process": { + // "description": "Whether to queue the created layer for processing.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "layers", + // "request": { + // "$ref": "Layer" + // }, + // "response": { + // "$ref": "Layer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.layers.get": + +type LayersGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a particular layer. +func (r *LayersService) Get(id string) *LayersGetCall { + c := &LayersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Version sets the optional parameter "version": +func (c *LayersGetCall) Version(version string) *LayersGetCall { + c.opt_["version"] = version + return c +} + +func (c *LayersGetCall) Do() (*Layer, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["version"]; ok { + params.Set("version", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Layer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a particular layer.", + // "httpMethod": "GET", + // "id": "mapsengine.layers.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the layer.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "version": { + // "enum": [ + // "draft", + // "published" + // ], + // "enumDescriptions": [ + // "The draft version.", + // "The published version." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "layers/{id}", + // "response": { + // "$ref": "Layer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.layers.list": + +type LayersListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all layers readable by the current user. +func (r *LayersService) List() *LayersListCall { + c := &LayersListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *LayersListCall) Bbox(bbox string) *LayersListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *LayersListCall) CreatedAfter(createdAfter string) *LayersListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *LayersListCall) CreatedBefore(createdBefore string) *LayersListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *LayersListCall) CreatorEmail(creatorEmail string) *LayersListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *LayersListCall) MaxResults(maxResults int64) *LayersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *LayersListCall) ModifiedAfter(modifiedAfter string) *LayersListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *LayersListCall) ModifiedBefore(modifiedBefore string) *LayersListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *LayersListCall) PageToken(pageToken string) *LayersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProjectId sets the optional parameter "projectId": The ID of a Maps +// Engine project, used to filter the response. To list all available +// projects with their IDs, send a Projects: list request. You can also +// find your project ID as the value of the DashboardPlace:cid URL +// parameter when signed in to mapsengine.google.com. +func (c *LayersListCall) ProjectId(projectId string) *LayersListCall { + c.opt_["projectId"] = projectId + return c +} + +func (c *LayersListCall) Do() (*LayersListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projectId"]; ok { + params.Set("projectId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "layers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LayersListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all layers readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.layers.list", + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "layers", + // "response": { + // "$ref": "LayersListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.layers.process": + +type LayersProcessCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Process: Process a layer asset. +func (r *LayersService) Process(id string) *LayersProcessCall { + c := &LayersProcessCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *LayersProcessCall) Do() (*ProcessResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/process") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ProcessResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Process a layer asset.", + // "httpMethod": "POST", + // "id": "mapsengine.layers.process", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the layer.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "layers/{id}/process", + // "response": { + // "$ref": "ProcessResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.layers.publish": + +type LayersPublishCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Publish: Publish a layer asset. +func (r *LayersService) Publish(id string) *LayersPublishCall { + c := &LayersPublishCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *LayersPublishCall) Do() (*PublishResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/publish") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PublishResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Publish a layer asset.", + // "httpMethod": "POST", + // "id": "mapsengine.layers.publish", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the layer.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "layers/{id}/publish", + // "response": { + // "$ref": "PublishResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.layers.parents.list": + +type LayersParentsListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all parent ids of the specified layer. +func (r *LayersParentsService) List(id string) *LayersParentsListCall { + c := &LayersParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 50. +func (c *LayersParentsListCall) MaxResults(maxResults int64) *LayersParentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *LayersParentsListCall) PageToken(pageToken string) *LayersParentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *LayersParentsListCall) Do() (*ParentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "layers/{id}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all parent ids of the specified layer.", + // "httpMethod": "GET", + // "id": "mapsengine.layers.parents.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the layer whose parents will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "layers/{id}/parents", + // "response": { + // "$ref": "ParentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.maps.get": + +type MapsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a particular map. +func (r *MapsService) Get(id string) *MapsGetCall { + c := &MapsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Version sets the optional parameter "version": +func (c *MapsGetCall) Version(version string) *MapsGetCall { + c.opt_["version"] = version + return c +} + +func (c *MapsGetCall) Do() (*Map, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["version"]; ok { + params.Set("version", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "maps/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Map) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a particular map.", + // "httpMethod": "GET", + // "id": "mapsengine.maps.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the map.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "version": { + // "enum": [ + // "draft", + // "published" + // ], + // "enumDescriptions": [ + // "The draft version.", + // "The published version." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "maps/{id}", + // "response": { + // "$ref": "Map" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.maps.list": + +type MapsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all maps readable by the current user. +func (r *MapsService) List() *MapsListCall { + c := &MapsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *MapsListCall) Bbox(bbox string) *MapsListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *MapsListCall) CreatedAfter(createdAfter string) *MapsListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *MapsListCall) CreatedBefore(createdBefore string) *MapsListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *MapsListCall) CreatorEmail(creatorEmail string) *MapsListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *MapsListCall) MaxResults(maxResults int64) *MapsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *MapsListCall) ModifiedAfter(modifiedAfter string) *MapsListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *MapsListCall) ModifiedBefore(modifiedBefore string) *MapsListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *MapsListCall) PageToken(pageToken string) *MapsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProjectId sets the optional parameter "projectId": The ID of a Maps +// Engine project, used to filter the response. To list all available +// projects with their IDs, send a Projects: list request. You can also +// find your project ID as the value of the DashboardPlace:cid URL +// parameter when signed in to mapsengine.google.com. +func (c *MapsListCall) ProjectId(projectId string) *MapsListCall { + c.opt_["projectId"] = projectId + return c +} + +func (c *MapsListCall) Do() (*MapsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projectId"]; ok { + params.Set("projectId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "maps") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MapsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all maps readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.maps.list", + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "maps", + // "response": { + // "$ref": "MapsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.projects.list": + +type ProjectsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all projects readable by the current user. +func (r *ProjectsService) List() *ProjectsListCall { + c := &ProjectsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ProjectsListCall) Do() (*ProjectsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ProjectsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all projects readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.projects.list", + // "path": "projects", + // "response": { + // "$ref": "ProjectsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasterCollections.create": + +type RasterCollectionsCreateCall struct { + s *Service + rastercollection *RasterCollection + opt_ map[string]interface{} +} + +// Create: Create a raster collection asset. +func (r *RasterCollectionsService) Create(rastercollection *RasterCollection) *RasterCollectionsCreateCall { + c := &RasterCollectionsCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.rastercollection = rastercollection + return c +} + +func (c *RasterCollectionsCreateCall) Do() (*RasterCollection, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.rastercollection) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RasterCollection) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a raster collection asset.", + // "httpMethod": "POST", + // "id": "mapsengine.rasterCollections.create", + // "path": "rasterCollections", + // "request": { + // "$ref": "RasterCollection" + // }, + // "response": { + // "$ref": "RasterCollection" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.rasterCollections.get": + +type RasterCollectionsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a particular raster collection. +func (r *RasterCollectionsService) Get(id string) *RasterCollectionsGetCall { + c := &RasterCollectionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *RasterCollectionsGetCall) Do() (*RasterCollection, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RasterCollection) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a particular raster collection.", + // "httpMethod": "GET", + // "id": "mapsengine.rasterCollections.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the raster collection.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rasterCollections/{id}", + // "response": { + // "$ref": "RasterCollection" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasterCollections.list": + +type RasterCollectionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all raster collections readable by the current user. +func (r *RasterCollectionsService) List() *RasterCollectionsListCall { + c := &RasterCollectionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *RasterCollectionsListCall) Bbox(bbox string) *RasterCollectionsListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *RasterCollectionsListCall) CreatedAfter(createdAfter string) *RasterCollectionsListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *RasterCollectionsListCall) CreatedBefore(createdBefore string) *RasterCollectionsListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *RasterCollectionsListCall) CreatorEmail(creatorEmail string) *RasterCollectionsListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *RasterCollectionsListCall) MaxResults(maxResults int64) *RasterCollectionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *RasterCollectionsListCall) ModifiedAfter(modifiedAfter string) *RasterCollectionsListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *RasterCollectionsListCall) ModifiedBefore(modifiedBefore string) *RasterCollectionsListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *RasterCollectionsListCall) PageToken(pageToken string) *RasterCollectionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProjectId sets the optional parameter "projectId": The ID of a Maps +// Engine project, used to filter the response. To list all available +// projects with their IDs, send a Projects: list request. You can also +// find your project ID as the value of the DashboardPlace:cid URL +// parameter when signed in to mapsengine.google.com. +func (c *RasterCollectionsListCall) ProjectId(projectId string) *RasterCollectionsListCall { + c.opt_["projectId"] = projectId + return c +} + +func (c *RasterCollectionsListCall) Do() (*RastercollectionsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projectId"]; ok { + params.Set("projectId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RastercollectionsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all raster collections readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.rasterCollections.list", + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rasterCollections", + // "response": { + // "$ref": "RastercollectionsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasterCollections.parents.list": + +type RasterCollectionsParentsListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all parent ids of the specified raster collection. +func (r *RasterCollectionsParentsService) List(id string) *RasterCollectionsParentsListCall { + c := &RasterCollectionsParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 50. +func (c *RasterCollectionsParentsListCall) MaxResults(maxResults int64) *RasterCollectionsParentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *RasterCollectionsParentsListCall) PageToken(pageToken string) *RasterCollectionsParentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RasterCollectionsParentsListCall) Do() (*ParentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all parent ids of the specified raster collection.", + // "httpMethod": "GET", + // "id": "mapsengine.rasterCollections.parents.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the raster collection whose parents will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rasterCollections/{id}/parents", + // "response": { + // "$ref": "ParentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasterCollections.rasters.list": + +type RasterCollectionsRastersListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all rasters within a raster collection. +func (r *RasterCollectionsRastersService) List(id string) *RasterCollectionsRastersListCall { + c := &RasterCollectionsRastersListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *RasterCollectionsRastersListCall) Bbox(bbox string) *RasterCollectionsRastersListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *RasterCollectionsRastersListCall) CreatedAfter(createdAfter string) *RasterCollectionsRastersListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *RasterCollectionsRastersListCall) CreatedBefore(createdBefore string) *RasterCollectionsRastersListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *RasterCollectionsRastersListCall) CreatorEmail(creatorEmail string) *RasterCollectionsRastersListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *RasterCollectionsRastersListCall) MaxResults(maxResults int64) *RasterCollectionsRastersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *RasterCollectionsRastersListCall) ModifiedAfter(modifiedAfter string) *RasterCollectionsRastersListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *RasterCollectionsRastersListCall) ModifiedBefore(modifiedBefore string) *RasterCollectionsRastersListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *RasterCollectionsRastersListCall) PageToken(pageToken string) *RasterCollectionsRastersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RasterCollectionsRastersListCall) Do() (*RastersListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rasterCollections/{id}/rasters") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(RastersListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all rasters within a raster collection.", + // "httpMethod": "GET", + // "id": "mapsengine.rasterCollections.rasters.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "id": { + // "description": "The ID of the raster collection to which these rasters belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rasterCollections/{id}/rasters", + // "response": { + // "$ref": "RastersListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasters.get": + +type RastersGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a single raster. +func (r *RastersService) Get(id string) *RastersGetCall { + c := &RastersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *RastersGetCall) Do() (*Image, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a single raster.", + // "httpMethod": "GET", + // "id": "mapsengine.rasters.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the raster.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rasters/{id}", + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.rasters.upload": + +type RastersUploadCall struct { + s *Service + image *Image + opt_ map[string]interface{} +} + +// Upload: Create a skeleton raster asset for upload. +func (r *RastersService) Upload(image *Image) *RastersUploadCall { + c := &RastersUploadCall{s: r.s, opt_: make(map[string]interface{})} + c.image = image + return c +} + +func (c *RastersUploadCall) Do() (*Image, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.image) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/upload") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Image) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a skeleton raster asset for upload.", + // "httpMethod": "POST", + // "id": "mapsengine.rasters.upload", + // "path": "rasters/upload", + // "request": { + // "$ref": "Image" + // }, + // "response": { + // "$ref": "Image" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.rasters.files.insert": + +type RastersFilesInsertCall struct { + s *Service + id string + filename string + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Upload a file to a raster asset. +func (r *RastersFilesService) Insert(id string, filename string) *RastersFilesInsertCall { + c := &RastersFilesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.filename = filename + return c +} +func (c *RastersFilesInsertCall) Media(r io.Reader) *RastersFilesInsertCall { + c.media_ = r + return c +} + +func (c *RastersFilesInsertCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("filename", fmt.Sprintf("%v", c.filename)) + urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}/files") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Upload a file to a raster asset.", + // "httpMethod": "POST", + // "id": "mapsengine.rasters.files.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/mapsengine/v1/rasters/{id}/files" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/mapsengine/v1/rasters/{id}/files" + // } + // } + // }, + // "parameterOrder": [ + // "id", + // "filename" + // ], + // "parameters": { + // "filename": { + // "description": "The file name of this uploaded file.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "id": { + // "description": "The ID of the raster asset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "rasters/{id}/files", + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "mapsengine.rasters.parents.list": + +type RastersParentsListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all parent ids of the specified rasters. +func (r *RastersParentsService) List(id string) *RastersParentsListCall { + c := &RastersParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 50. +func (c *RastersParentsListCall) MaxResults(maxResults int64) *RastersParentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *RastersParentsListCall) PageToken(pageToken string) *RastersParentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *RastersParentsListCall) Do() (*ParentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "rasters/{id}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all parent ids of the specified rasters.", + // "httpMethod": "GET", + // "id": "mapsengine.rasters.parents.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the rasters whose parents will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "rasters/{id}/parents", + // "response": { + // "$ref": "ParentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.tables.create": + +type TablesCreateCall struct { + s *Service + table *Table + opt_ map[string]interface{} +} + +// Create: Create a table asset. +func (r *TablesService) Create(table *Table) *TablesCreateCall { + c := &TablesCreateCall{s: r.s, opt_: make(map[string]interface{})} + c.table = table + return c +} + +func (c *TablesCreateCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tables") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a table asset.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.create", + // "path": "tables", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.tables.get": + +type TablesGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Return metadata for a particular table, including the schema. +func (r *TablesService) Get(id string) *TablesGetCall { + c := &TablesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Version sets the optional parameter "version": +func (c *TablesGetCall) Version(version string) *TablesGetCall { + c.opt_["version"] = version + return c +} + +func (c *TablesGetCall) Do() (*Table, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["version"]; ok { + params.Set("version", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return metadata for a particular table, including the schema.", + // "httpMethod": "GET", + // "id": "mapsengine.tables.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "version": { + // "enum": [ + // "draft", + // "published" + // ], + // "enumDescriptions": [ + // "The draft version.", + // "The published version." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "tables/{id}", + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.tables.list": + +type TablesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Return all tables readable by the current user. +func (r *TablesService) List() *TablesListCall { + c := &TablesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Bbox sets the optional parameter "bbox": A bounding box, expressed as +// "west,south,east,north". If set, only assets which intersect this +// bounding box will be returned. +func (c *TablesListCall) Bbox(bbox string) *TablesListCall { + c.opt_["bbox"] = bbox + return c +} + +// CreatedAfter sets the optional parameter "createdAfter": An RFC 3339 +// formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or after this time. +func (c *TablesListCall) CreatedAfter(createdAfter string) *TablesListCall { + c.opt_["createdAfter"] = createdAfter + return c +} + +// CreatedBefore sets the optional parameter "createdBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been created at or before this time. +func (c *TablesListCall) CreatedBefore(createdBefore string) *TablesListCall { + c.opt_["createdBefore"] = createdBefore + return c +} + +// CreatorEmail sets the optional parameter "creatorEmail": An email +// address representing a user. Returned assets that have been created +// by the user associated with the provided email address. +func (c *TablesListCall) CreatorEmail(creatorEmail string) *TablesListCall { + c.opt_["creatorEmail"] = creatorEmail + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 100. +func (c *TablesListCall) MaxResults(maxResults int64) *TablesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// ModifiedAfter sets the optional parameter "modifiedAfter": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or after this time. +func (c *TablesListCall) ModifiedAfter(modifiedAfter string) *TablesListCall { + c.opt_["modifiedAfter"] = modifiedAfter + return c +} + +// ModifiedBefore sets the optional parameter "modifiedBefore": An RFC +// 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned +// assets will have been modified at or before this time. +func (c *TablesListCall) ModifiedBefore(modifiedBefore string) *TablesListCall { + c.opt_["modifiedBefore"] = modifiedBefore + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *TablesListCall) PageToken(pageToken string) *TablesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ProjectId sets the optional parameter "projectId": The ID of a Maps +// Engine project, used to filter the response. To list all available +// projects with their IDs, send a Projects: list request. You can also +// find your project ID as the value of the DashboardPlace:cid URL +// parameter when signed in to mapsengine.google.com. +func (c *TablesListCall) ProjectId(projectId string) *TablesListCall { + c.opt_["projectId"] = projectId + return c +} + +func (c *TablesListCall) Do() (*TablesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bbox"]; ok { + params.Set("bbox", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdAfter"]; ok { + params.Set("createdAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["createdBefore"]; ok { + params.Set("createdBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["creatorEmail"]; ok { + params.Set("creatorEmail", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedAfter"]; ok { + params.Set("modifiedAfter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["modifiedBefore"]; ok { + params.Set("modifiedBefore", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projectId"]; ok { + params.Set("projectId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "tables") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TablesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all tables readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.tables.list", + // "parameters": { + // "bbox": { + // "description": "A bounding box, expressed as \"west,south,east,north\". If set, only assets which intersect this bounding box will be returned.", + // "location": "query", + // "type": "string" + // }, + // "createdAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "createdBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been created at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "creatorEmail": { + // "description": "An email address representing a user. Returned assets that have been created by the user associated with the provided email address.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 100.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "modifiedAfter": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or after this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "modifiedBefore": { + // "description": "An RFC 3339 formatted date-time value (e.g. 1970-01-01T00:00:00Z). Returned assets will have been modified at or before this time.", + // "format": "date-time", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "The ID of a Maps Engine project, used to filter the response. To list all available projects with their IDs, send a Projects: list request. You can also find your project ID as the value of the DashboardPlace:cid URL parameter when signed in to mapsengine.google.com.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "tables", + // "response": { + // "$ref": "TablesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.tables.upload": + +type TablesUploadCall struct { + s *Service + table *Table + opt_ map[string]interface{} +} + +// Upload: Create a placeholder table asset to which table files can be +// uploaded. +// Once the placeholder has been created, files are uploaded +// to the +// https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files +// endpoint. +// See Table Upload in the Developer's Guide or Table.files: +// insert in the reference documentation for more information. +func (r *TablesService) Upload(table *Table) *TablesUploadCall { + c := &TablesUploadCall{s: r.s, opt_: make(map[string]interface{})} + c.table = table + return c +} + +func (c *TablesUploadCall) Do() (*Table, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.table) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/upload") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Table) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a placeholder table asset to which table files can be uploaded.\nOnce the placeholder has been created, files are uploaded to the https://www.googleapis.com/upload/mapsengine/v1/tables/table_id/files endpoint.\nSee Table Upload in the Developer's Guide or Table.files: insert in the reference documentation for more information.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.upload", + // "path": "tables/upload", + // "request": { + // "$ref": "Table" + // }, + // "response": { + // "$ref": "Table" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.tables.features.batchDelete": + +type TablesFeaturesBatchDeleteCall struct { + s *Service + id string + featuresbatchdeleterequest *FeaturesBatchDeleteRequest + opt_ map[string]interface{} +} + +// BatchDelete: Delete all features matching the given IDs. +func (r *TablesFeaturesService) BatchDelete(id string, featuresbatchdeleterequest *FeaturesBatchDeleteRequest) *TablesFeaturesBatchDeleteCall { + c := &TablesFeaturesBatchDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.featuresbatchdeleterequest = featuresbatchdeleterequest + return c +} + +func (c *TablesFeaturesBatchDeleteCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchdeleterequest) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchDelete") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete all features matching the given IDs.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.features.batchDelete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table that contains the features to be deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "tables/{id}/features/batchDelete", + // "request": { + // "$ref": "FeaturesBatchDeleteRequest" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.tables.features.batchInsert": + +type TablesFeaturesBatchInsertCall struct { + s *Service + id string + featuresbatchinsertrequest *FeaturesBatchInsertRequest + opt_ map[string]interface{} +} + +// BatchInsert: Append features to an existing table. +// +// A single +// batchInsert request can create: +// +// - Up to 50 features. +// - A combined +// total of 10 000 vertices. +// Feature limits are documented in the +// Supported data formats and limits article of the Google Maps Engine +// help center. Note that free and paid accounts have different +// limits. +// +// For more information about inserting features, read Creating +// features in the Google Maps Engine developer's guide. +func (r *TablesFeaturesService) BatchInsert(id string, featuresbatchinsertrequest *FeaturesBatchInsertRequest) *TablesFeaturesBatchInsertCall { + c := &TablesFeaturesBatchInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.featuresbatchinsertrequest = featuresbatchinsertrequest + return c +} + +func (c *TablesFeaturesBatchInsertCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchinsertrequest) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchInsert") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Append features to an existing table.\n\nA single batchInsert request can create:\n\n- Up to 50 features.\n- A combined total of 10 000 vertices.\nFeature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.\n\nFor more information about inserting features, read Creating features in the Google Maps Engine developer's guide.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.features.batchInsert", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table to append the features to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "tables/{id}/features/batchInsert", + // "request": { + // "$ref": "FeaturesBatchInsertRequest" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.tables.features.batchPatch": + +type TablesFeaturesBatchPatchCall struct { + s *Service + id string + featuresbatchpatchrequest *FeaturesBatchPatchRequest + opt_ map[string]interface{} +} + +// BatchPatch: Update the supplied features. +// +// A single batchPatch +// request can update: +// +// - Up to 50 features. +// - A combined total of +// 10 000 vertices. +// Feature limits are documented in the Supported +// data formats and limits article of the Google Maps Engine help +// center. Note that free and paid accounts have different +// limits. +// +// Feature updates use HTTP PATCH semantics: +// +// - A supplied +// value replaces an existing value (if any) in that field. +// - Omitted +// fields remain unchanged. +// - Complex values in geometries and +// properties must be replaced as atomic units. For example, providing +// just the coordinates of a geometry is not allowed; the complete +// geometry, including type, must be supplied. +// - Setting a property's +// value to null deletes that property. +// For more information about +// updating features, read Updating features in the Google Maps Engine +// developer's guide. +func (r *TablesFeaturesService) BatchPatch(id string, featuresbatchpatchrequest *FeaturesBatchPatchRequest) *TablesFeaturesBatchPatchCall { + c := &TablesFeaturesBatchPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.featuresbatchpatchrequest = featuresbatchpatchrequest + return c +} + +func (c *TablesFeaturesBatchPatchCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.featuresbatchpatchrequest) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features/batchPatch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Update the supplied features.\n\nA single batchPatch request can update:\n\n- Up to 50 features.\n- A combined total of 10 000 vertices.\nFeature limits are documented in the Supported data formats and limits article of the Google Maps Engine help center. Note that free and paid accounts have different limits.\n\nFeature updates use HTTP PATCH semantics:\n\n- A supplied value replaces an existing value (if any) in that field.\n- Omitted fields remain unchanged.\n- Complex values in geometries and properties must be replaced as atomic units. For example, providing just the coordinates of a geometry is not allowed; the complete geometry, including type, must be supplied.\n- Setting a property's value to null deletes that property.\nFor more information about updating features, read Updating features in the Google Maps Engine developer's guide.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.features.batchPatch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table containing the features to be patched.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "tables/{id}/features/batchPatch", + // "request": { + // "$ref": "FeaturesBatchPatchRequest" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ] + // } + +} + +// method id "mapsengine.tables.features.get": + +type TablesFeaturesGetCall struct { + s *Service + tableId string + id string + opt_ map[string]interface{} +} + +// Get: Return a single feature, given its ID. +func (r *TablesFeaturesService) Get(tableId string, id string) *TablesFeaturesGetCall { + c := &TablesFeaturesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.tableId = tableId + c.id = id + return c +} + +// Select sets the optional parameter "select": A SQL-like projection +// clause used to specify returned properties. If this parameter is not +// included, all properties are returned. +func (c *TablesFeaturesGetCall) Select(select_ string) *TablesFeaturesGetCall { + c.opt_["select"] = select_ + return c +} + +// Version sets the optional parameter "version": The table version to +// access. See Accessing Public Data for information. +func (c *TablesFeaturesGetCall) Version(version string) *TablesFeaturesGetCall { + c.opt_["version"] = version + return c +} + +func (c *TablesFeaturesGetCall) Do() (*Feature, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["select"]; ok { + params.Set("select", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["version"]; ok { + params.Set("version", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{tableId}/features/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tableId}", url.QueryEscape(c.tableId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Feature) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return a single feature, given its ID.", + // "httpMethod": "GET", + // "id": "mapsengine.tables.features.get", + // "parameterOrder": [ + // "tableId", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the feature to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "select": { + // "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.", + // "location": "query", + // "type": "string" + // }, + // "tableId": { + // "description": "The ID of the table.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "version": { + // "description": "The table version to access. See Accessing Public Data for information.", + // "enum": [ + // "draft", + // "published" + // ], + // "enumDescriptions": [ + // "The draft version.", + // "The published version." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "tables/{tableId}/features/{id}", + // "response": { + // "$ref": "Feature" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.tables.features.list": + +type TablesFeaturesListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all features readable by the current user. +func (r *TablesFeaturesService) List(id string) *TablesFeaturesListCall { + c := &TablesFeaturesListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// Include sets the optional parameter "include": A comma separated list +// of optional data to include. Optional data available: schema. +func (c *TablesFeaturesListCall) Include(include string) *TablesFeaturesListCall { + c.opt_["include"] = include + return c +} + +// Intersects sets the optional parameter "intersects": A geometry +// literal that specifies the spatial restriction of the query. +func (c *TablesFeaturesListCall) Intersects(intersects string) *TablesFeaturesListCall { + c.opt_["intersects"] = intersects + return c +} + +// Limit sets the optional parameter "limit": The total number of +// features to return from the query, irrespective of the number of +// pages. +func (c *TablesFeaturesListCall) Limit(limit int64) *TablesFeaturesListCall { + c.opt_["limit"] = limit + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in the response, used for paging. +func (c *TablesFeaturesListCall) MaxResults(maxResults int64) *TablesFeaturesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": An SQL-like order by +// clause used to sort results. If this parameter is not included, the +// order of features is undefined. +func (c *TablesFeaturesListCall) OrderBy(orderBy string) *TablesFeaturesListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *TablesFeaturesListCall) PageToken(pageToken string) *TablesFeaturesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Select sets the optional parameter "select": A SQL-like projection +// clause used to specify returned properties. If this parameter is not +// included, all properties are returned. +func (c *TablesFeaturesListCall) Select(select_ string) *TablesFeaturesListCall { + c.opt_["select"] = select_ + return c +} + +// Version sets the optional parameter "version": The table version to +// access. See Accessing Public Data for information. +func (c *TablesFeaturesListCall) Version(version string) *TablesFeaturesListCall { + c.opt_["version"] = version + return c +} + +// Where sets the optional parameter "where": An SQL-like predicate used +// to filter results. +func (c *TablesFeaturesListCall) Where(where string) *TablesFeaturesListCall { + c.opt_["where"] = where + return c +} + +func (c *TablesFeaturesListCall) Do() (*FeaturesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["include"]; ok { + params.Set("include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["intersects"]; ok { + params.Set("intersects", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["limit"]; ok { + params.Set("limit", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["select"]; ok { + params.Set("select", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["version"]; ok { + params.Set("version", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["where"]; ok { + params.Set("where", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/features") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FeaturesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all features readable by the current user.", + // "httpMethod": "GET", + // "id": "mapsengine.tables.features.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table to which these features belong.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "include": { + // "description": "A comma separated list of optional data to include. Optional data available: schema.", + // "location": "query", + // "type": "string" + // }, + // "intersects": { + // "description": "A geometry literal that specifies the spatial restriction of the query.", + // "location": "query", + // "type": "string" + // }, + // "limit": { + // "description": "The total number of features to return from the query, irrespective of the number of pages.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "description": "An SQL-like order by clause used to sort results. If this parameter is not included, the order of features is undefined.", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "select": { + // "description": "A SQL-like projection clause used to specify returned properties. If this parameter is not included, all properties are returned.", + // "location": "query", + // "type": "string" + // }, + // "version": { + // "description": "The table version to access. See Accessing Public Data for information.", + // "enum": [ + // "draft", + // "published" + // ], + // "enumDescriptions": [ + // "The draft version.", + // "The published version." + // ], + // "location": "query", + // "type": "string" + // }, + // "where": { + // "description": "An SQL-like predicate used to filter results.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "tables/{id}/features", + // "response": { + // "$ref": "FeaturesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} + +// method id "mapsengine.tables.files.insert": + +type TablesFilesInsertCall struct { + s *Service + id string + filename string + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Upload a file to a placeholder table asset. See Table Upload +// in the Developer's Guide for more information. +// Supported file types +// are listed in the Supported data formats and limits article of the +// Google Maps Engine help center. +func (r *TablesFilesService) Insert(id string, filename string) *TablesFilesInsertCall { + c := &TablesFilesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.filename = filename + return c +} +func (c *TablesFilesInsertCall) Media(r io.Reader) *TablesFilesInsertCall { + c.media_ = r + return c +} + +func (c *TablesFilesInsertCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("filename", fmt.Sprintf("%v", c.filename)) + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/files") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Upload a file to a placeholder table asset. See Table Upload in the Developer's Guide for more information.\nSupported file types are listed in the Supported data formats and limits article of the Google Maps Engine help center.", + // "httpMethod": "POST", + // "id": "mapsengine.tables.files.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "maxSize": "1GB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/mapsengine/v1/tables/{id}/files" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/mapsengine/v1/tables/{id}/files" + // } + // } + // }, + // "parameterOrder": [ + // "id", + // "filename" + // ], + // "parameters": { + // "filename": { + // "description": "The file name of this uploaded file.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "id": { + // "description": "The ID of the table asset.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "tables/{id}/files", + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "mapsengine.tables.parents.list": + +type TablesParentsListCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// List: Return all parent ids of the specified table. +func (r *TablesParentsService) List(id string) *TablesParentsListCall { + c := &TablesParentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in a single response page. The maximum +// supported value is 50. +func (c *TablesParentsListCall) MaxResults(maxResults int64) *TablesParentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, used to page through large result sets. To get the next page +// of results, set this parameter to the value of nextPageToken from the +// previous response. +func (c *TablesParentsListCall) PageToken(pageToken string) *TablesParentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TablesParentsListCall) Do() (*ParentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "tables/{id}/parents") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ParentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Return all parent ids of the specified table.", + // "httpMethod": "GET", + // "id": "mapsengine.tables.parents.list", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the table whose parents will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in a single response page. The maximum supported value is 50.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, used to page through large result sets. To get the next page of results, set this parameter to the value of nextPageToken from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "tables/{id}/parents", + // "response": { + // "$ref": "ParentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/mapsengine", + // "https://www.googleapis.com/auth/mapsengine.readonly" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-api.json b/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-api.json new file mode 100644 index 0000000000000..eb639be50cf11 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-api.json @@ -0,0 +1,1338 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"5M1WkxnZyJhziV-cW1kdtwscs8E/cLXdvPSJ73RAjLVWqio6ofbcpRI\"", + "discoveryVersion": "v1", + "id": "mirror:v1", + "name": "mirror", + "version": "v1", + "title": "Google Mirror API", + "description": "API for interacting with Glass users via the timeline.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/glass", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/mirror/v1/", + "basePath": "/mirror/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "mirror/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/glass.location": { + "description": "View your location" + }, + "https://www.googleapis.com/auth/glass.timeline": { + "description": "View and manage your Glass timeline" + } + } + } + }, + "schemas": { + "Account": { + "id": "Account", + "type": "object", + "description": "Represents an account passed into the Account Manager on Glass.", + "properties": { + "authTokens": { + "type": "array", + "items": { + "$ref": "AuthToken" + } + }, + "features": { + "type": "array", + "items": { + "type": "string" + } + }, + "password": { + "type": "string" + }, + "userData": { + "type": "array", + "items": { + "$ref": "UserData" + } + } + } + }, + "Attachment": { + "id": "Attachment", + "type": "object", + "description": "Represents media content, such as a photo, that can be attached to a timeline item.", + "properties": { + "contentType": { + "type": "string", + "description": "The MIME type of the attachment." + }, + "contentUrl": { + "type": "string", + "description": "The URL for the content." + }, + "id": { + "type": "string", + "description": "The ID of the attachment." + }, + "isProcessingContent": { + "type": "boolean", + "description": "Indicates that the contentUrl is not available because the attachment content is still being processed. If the caller wishes to retrieve the content, it should try again later." + } + } + }, + "AttachmentsListResponse": { + "id": "AttachmentsListResponse", + "type": "object", + "description": "A list of Attachments. This is the response from the server to GET requests on the attachments collection.", + "properties": { + "items": { + "type": "array", + "description": "The list of attachments.", + "items": { + "$ref": "Attachment" + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#attachmentsList.", + "default": "mirror#attachmentsList" + } + } + }, + "AuthToken": { + "id": "AuthToken", + "type": "object", + "properties": { + "authToken": { + "type": "string" + }, + "type": { + "type": "string" + } + } + }, + "Command": { + "id": "Command", + "type": "object", + "description": "A single menu command that is part of a Contact.", + "properties": { + "type": { + "type": "string", + "description": "The type of operation this command corresponds to. Allowed values are: \n- TAKE_A_NOTE - Shares a timeline item with the transcription of user speech from the \"Take a note\" voice menu command. \n- POST_AN_UPDATE - Shares a timeline item with the transcription of user speech from the \"Post an update\" voice menu command.", + "annotations": { + "required": [ + "mirror.contacts.insert", + "mirror.contacts.update" + ] + } + } + } + }, + "Contact": { + "id": "Contact", + "type": "object", + "description": "A person or group that can be used as a creator or a contact.", + "properties": { + "acceptCommands": { + "type": "array", + "description": "A list of voice menu commands that a contact can handle. Glass shows up to three contacts for each voice menu command. If there are more than that, the three contacts with the highest priority are shown for that particular command.", + "items": { + "$ref": "Command" + } + }, + "acceptTypes": { + "type": "array", + "description": "A list of MIME types that a contact supports. The contact will be shown to the user if any of its acceptTypes matches any of the types of the attachments on the item. If no acceptTypes are given, the contact will be shown for all items.", + "items": { + "type": "string" + } + }, + "displayName": { + "type": "string", + "description": "The name to display for this contact.", + "annotations": { + "required": [ + "mirror.contacts.insert", + "mirror.contacts.update" + ] + } + }, + "id": { + "type": "string", + "description": "An ID for this contact. This is generated by the application and is treated as an opaque token.", + "annotations": { + "required": [ + "mirror.contacts.insert", + "mirror.contacts.update" + ] + } + }, + "imageUrls": { + "type": "array", + "description": "Set of image URLs to display for a contact. Most contacts will have a single image, but a \"group\" contact may include up to 8 image URLs and they will be resized and cropped into a mosaic on the client.", + "items": { + "type": "string" + }, + "annotations": { + "required": [ + "mirror.contacts.insert", + "mirror.contacts.update" + ] + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#contact.", + "default": "mirror#contact" + }, + "phoneNumber": { + "type": "string", + "description": "Primary phone number for the contact. This can be a fully-qualified number, with country calling code and area code, or a local number." + }, + "priority": { + "type": "integer", + "description": "Priority for the contact to determine ordering in a list of contacts. Contacts with higher priorities will be shown before ones with lower priorities.", + "format": "uint32" + }, + "sharingFeatures": { + "type": "array", + "description": "A list of sharing features that a contact can handle. Allowed values are: \n- ADD_CAPTION", + "items": { + "type": "string" + } + }, + "source": { + "type": "string", + "description": "The ID of the application that created this contact. This is populated by the API" + }, + "speakableName": { + "type": "string", + "description": "Name of this contact as it should be pronounced. If this contact's name must be spoken as part of a voice disambiguation menu, this name is used as the expected pronunciation. This is useful for contact names with unpronounceable characters or whose display spelling is otherwise not phonetic." + }, + "type": { + "type": "string", + "description": "The type for this contact. This is used for sorting in UIs. Allowed values are: \n- INDIVIDUAL - Represents a single person. This is the default. \n- GROUP - Represents more than a single person." + } + } + }, + "ContactsListResponse": { + "id": "ContactsListResponse", + "type": "object", + "description": "A list of Contacts representing contacts. This is the response from the server to GET requests on the contacts collection.", + "properties": { + "items": { + "type": "array", + "description": "Contact list.", + "items": { + "$ref": "Contact" + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#contacts.", + "default": "mirror#contacts" + } + } + }, + "Location": { + "id": "Location", + "type": "object", + "description": "A geographic location that can be associated with a timeline item.", + "properties": { + "accuracy": { + "type": "number", + "description": "The accuracy of the location fix in meters.", + "format": "double" + }, + "address": { + "type": "string", + "description": "The full address of the location." + }, + "displayName": { + "type": "string", + "description": "The name to be displayed. This may be a business name or a user-defined place, such as \"Home\"." + }, + "id": { + "type": "string", + "description": "The ID of the location." + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#location.", + "default": "mirror#location" + }, + "latitude": { + "type": "number", + "description": "The latitude, in degrees.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude, in degrees.", + "format": "double" + }, + "timestamp": { + "type": "string", + "description": "The time at which this location was captured, formatted according to RFC 3339.", + "format": "date-time" + } + } + }, + "LocationsListResponse": { + "id": "LocationsListResponse", + "type": "object", + "description": "A list of Locations. This is the response from the server to GET requests on the locations collection.", + "properties": { + "items": { + "type": "array", + "description": "The list of locations.", + "items": { + "$ref": "Location" + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#locationsList.", + "default": "mirror#locationsList" + } + } + }, + "MenuItem": { + "id": "MenuItem", + "type": "object", + "description": "A custom menu item that can be presented to the user by a timeline item.", + "properties": { + "action": { + "type": "string", + "description": "Controls the behavior when the user picks the menu option. Allowed values are: \n- CUSTOM - Custom action set by the service. When the user selects this menuItem, the API triggers a notification to your callbackUrl with the userActions.type set to CUSTOM and the userActions.payload set to the ID of this menu item. This is the default value. \n- Built-in actions: \n- REPLY - Initiate a reply to the timeline item using the voice recording UI. The creator attribute must be set in the timeline item for this menu to be available. \n- REPLY_ALL - Same behavior as REPLY. The original timeline item's recipients will be added to the reply item. \n- DELETE - Delete the timeline item. \n- SHARE - Share the timeline item with the available contacts. \n- READ_ALOUD - Read the timeline item's speakableText aloud; if this field is not set, read the text field; if none of those fields are set, this menu item is ignored. \n- GET_MEDIA_INPUT - Allow users to provide media payloads to Glassware from a menu item (currently, only transcribed text from voice input is supported). Subscribe to notifications when users invoke this menu item to receive the timeline item ID. Retrieve the media from the timeline item in the payload property. \n- VOICE_CALL - Initiate a phone call using the timeline item's creator.phoneNumber attribute as recipient. \n- NAVIGATE - Navigate to the timeline item's location. \n- TOGGLE_PINNED - Toggle the isPinned state of the timeline item. \n- OPEN_URI - Open the payload of the menu item in the browser. \n- PLAY_VIDEO - Open the payload of the menu item in the Glass video player. \n- SEND_MESSAGE - Initiate sending a message to the timeline item's creator: \n- If the creator.phoneNumber is set and Glass is connected to an Android phone, the message is an SMS. \n- Otherwise, if the creator.email is set, the message is an email." + }, + "id": { + "type": "string", + "description": "The ID for this menu item. This is generated by the application and is treated as an opaque token." + }, + "payload": { + "type": "string", + "description": "A generic payload whose meaning changes depending on this MenuItem's action. \n- When the action is OPEN_URI, the payload is the URL of the website to view. \n- When the action is PLAY_VIDEO, the payload is the streaming URL of the video \n- When the action is GET_MEDIA_INPUT, the payload is the text transcription of a user's speech input" + }, + "removeWhenSelected": { + "type": "boolean", + "description": "If set to true on a CUSTOM menu item, that item will be removed from the menu after it is selected." + }, + "values": { + "type": "array", + "description": "For CUSTOM items, a list of values controlling the appearance of the menu item in each of its states. A value for the DEFAULT state must be provided. If the PENDING or CONFIRMED states are missing, they will not be shown.", + "items": { + "$ref": "MenuValue" + } + } + } + }, + "MenuValue": { + "id": "MenuValue", + "type": "object", + "description": "A single value that is part of a MenuItem.", + "properties": { + "displayName": { + "type": "string", + "description": "The name to display for the menu item. If you specify this property for a built-in menu item, the default contextual voice command for that menu item is not shown." + }, + "iconUrl": { + "type": "string", + "description": "URL of an icon to display with the menu item." + }, + "state": { + "type": "string", + "description": "The state that this value applies to. Allowed values are: \n- DEFAULT - Default value shown when displayed in the menuItems list. \n- PENDING - Value shown when the menuItem has been selected by the user but can still be cancelled. \n- CONFIRMED - Value shown when the menuItem has been selected by the user and can no longer be cancelled." + } + } + }, + "Notification": { + "id": "Notification", + "type": "object", + "description": "A notification delivered by the API.", + "properties": { + "collection": { + "type": "string", + "description": "The collection that generated the notification." + }, + "itemId": { + "type": "string", + "description": "The ID of the item that generated the notification." + }, + "operation": { + "type": "string", + "description": "The type of operation that generated the notification." + }, + "userActions": { + "type": "array", + "description": "A list of actions taken by the user that triggered the notification.", + "items": { + "$ref": "UserAction" + } + }, + "userToken": { + "type": "string", + "description": "The user token provided by the service when it subscribed for notifications." + }, + "verifyToken": { + "type": "string", + "description": "The secret verify token provided by the service when it subscribed for notifications." + } + } + }, + "NotificationConfig": { + "id": "NotificationConfig", + "type": "object", + "description": "Controls how notifications for a timeline item are presented to the user.", + "properties": { + "deliveryTime": { + "type": "string", + "description": "The time at which the notification should be delivered.", + "format": "date-time" + }, + "level": { + "type": "string", + "description": "Describes how important the notification is. Allowed values are: \n- DEFAULT - Notifications of default importance. A chime will be played to alert users." + } + } + }, + "Subscription": { + "id": "Subscription", + "type": "object", + "description": "A subscription to events on a collection.", + "properties": { + "callbackUrl": { + "type": "string", + "description": "The URL where notifications should be delivered (must start with https://).", + "annotations": { + "required": [ + "mirror.subscriptions.insert", + "mirror.subscriptions.update" + ] + } + }, + "collection": { + "type": "string", + "description": "The collection to subscribe to. Allowed values are: \n- timeline - Changes in the timeline including insertion, deletion, and updates. \n- locations - Location updates.", + "annotations": { + "required": [ + "mirror.subscriptions.insert", + "mirror.subscriptions.update" + ] + } + }, + "id": { + "type": "string", + "description": "The ID of the subscription." + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#subscription.", + "default": "mirror#subscription" + }, + "notification": { + "$ref": "Notification", + "description": "Container object for notifications. This is not populated in the Subscription resource." + }, + "operation": { + "type": "array", + "description": "A list of operations that should be subscribed to. An empty list indicates that all operations on the collection should be subscribed to. Allowed values are: \n- UPDATE - The item has been updated. \n- INSERT - A new item has been inserted. \n- DELETE - The item has been deleted. \n- MENU_ACTION - A custom menu item has been triggered by the user.", + "items": { + "type": "string" + } + }, + "updated": { + "type": "string", + "description": "The time at which this subscription was last modified, formatted according to RFC 3339.", + "format": "date-time" + }, + "userToken": { + "type": "string", + "description": "An opaque token sent to the subscriber in notifications so that it can determine the ID of the user." + }, + "verifyToken": { + "type": "string", + "description": "A secret token sent to the subscriber in notifications so that it can verify that the notification was generated by Google." + } + } + }, + "SubscriptionsListResponse": { + "id": "SubscriptionsListResponse", + "type": "object", + "description": "A list of Subscriptions. This is the response from the server to GET requests on the subscription collection.", + "properties": { + "items": { + "type": "array", + "description": "The list of subscriptions.", + "items": { + "$ref": "Subscription" + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#subscriptionsList.", + "default": "mirror#subscriptionsList" + } + } + }, + "TimelineItem": { + "id": "TimelineItem", + "type": "object", + "description": "Each item in the user's timeline is represented as a TimelineItem JSON structure, described below.", + "properties": { + "attachments": { + "type": "array", + "description": "A list of media attachments associated with this item. As a convenience, you can refer to attachments in your HTML payloads with the attachment or cid scheme. For example: \n- attachment: \u003cimg src=\"attachment:attachment_index\"\u003e where attachment_index is the 0-based index of this array. \n- cid: \u003cimg src=\"cid:attachment_id\"\u003e where attachment_id is the ID of the attachment.", + "items": { + "$ref": "Attachment" + } + }, + "bundleId": { + "type": "string", + "description": "The bundle ID for this item. Services can specify a bundleId to group many items together. They appear under a single top-level item on the device." + }, + "canonicalUrl": { + "type": "string", + "description": "A canonical URL pointing to the canonical/high quality version of the data represented by the timeline item." + }, + "created": { + "type": "string", + "description": "The time at which this item was created, formatted according to RFC 3339.", + "format": "date-time" + }, + "creator": { + "$ref": "Contact", + "description": "The user or group that created this item." + }, + "displayTime": { + "type": "string", + "description": "The time that should be displayed when this item is viewed in the timeline, formatted according to RFC 3339. This user's timeline is sorted chronologically on display time, so this will also determine where the item is displayed in the timeline. If not set by the service, the display time defaults to the updated time.", + "format": "date-time" + }, + "etag": { + "type": "string", + "description": "ETag for this item." + }, + "html": { + "type": "string", + "description": "HTML content for this item. If both text and html are provided for an item, the html will be rendered in the timeline.\nAllowed HTML elements - You can use these elements in your timeline cards.\n \n- Headers: h1, h2, h3, h4, h5, h6 \n- Images: img \n- Lists: li, ol, ul \n- HTML5 semantics: article, aside, details, figure, figcaption, footer, header, nav, section, summary, time \n- Structural: blockquote, br, div, hr, p, span \n- Style: b, big, center, em, i, u, s, small, strike, strong, style, sub, sup \n- Tables: table, tbody, td, tfoot, th, thead, tr \nBlocked HTML elements: These elements and their contents are removed from HTML payloads.\n \n- Document headers: head, title \n- Embeds: audio, embed, object, source, video \n- Frames: frame, frameset \n- Scripting: applet, script \nOther elements: Any elements that aren't listed are removed, but their contents are preserved." + }, + "id": { + "type": "string", + "description": "The ID of the timeline item. This is unique within a user's timeline." + }, + "inReplyTo": { + "type": "string", + "description": "If this item was generated as a reply to another item, this field will be set to the ID of the item being replied to. This can be used to attach a reply to the appropriate conversation or post." + }, + "isBundleCover": { + "type": "boolean", + "description": "Whether this item is a bundle cover.\n\nIf an item is marked as a bundle cover, it will be the entry point to the bundle of items that have the same bundleId as that item. It will be shown only on the main timeline — not within the opened bundle.\n\nOn the main timeline, items that are shown are: \n- Items that have isBundleCover set to true \n- Items that do not have a bundleId In a bundle sub-timeline, items that are shown are: \n- Items that have the bundleId in question AND isBundleCover set to false" + }, + "isDeleted": { + "type": "boolean", + "description": "When true, indicates this item is deleted, and only the ID property is set." + }, + "isPinned": { + "type": "boolean", + "description": "When true, indicates this item is pinned, which means it's grouped alongside \"active\" items like navigation and hangouts, on the opposite side of the home screen from historical (non-pinned) timeline items. You can allow the user to toggle the value of this property with the TOGGLE_PINNED built-in menu item." + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#timelineItem.", + "default": "mirror#timelineItem" + }, + "location": { + "$ref": "Location", + "description": "The geographic location associated with this item." + }, + "menuItems": { + "type": "array", + "description": "A list of menu items that will be presented to the user when this item is selected in the timeline.", + "items": { + "$ref": "MenuItem" + } + }, + "notification": { + "$ref": "NotificationConfig", + "description": "Controls how notifications for this item are presented on the device. If this is missing, no notification will be generated." + }, + "pinScore": { + "type": "integer", + "description": "For pinned items, this determines the order in which the item is displayed in the timeline, with a higher score appearing closer to the clock. Note: setting this field is currently not supported.", + "format": "int32" + }, + "recipients": { + "type": "array", + "description": "A list of users or groups that this item has been shared with.", + "items": { + "$ref": "Contact" + } + }, + "selfLink": { + "type": "string", + "description": "A URL that can be used to retrieve this item." + }, + "sourceItemId": { + "type": "string", + "description": "Opaque string you can use to map a timeline item to data in your own service." + }, + "speakableText": { + "type": "string", + "description": "The speakable version of the content of this item. Along with the READ_ALOUD menu item, use this field to provide text that would be clearer when read aloud, or to provide extended information to what is displayed visually on Glass.\n\nGlassware should also specify the speakableType field, which will be spoken before this text in cases where the additional context is useful, for example when the user requests that the item be read aloud following a notification." + }, + "speakableType": { + "type": "string", + "description": "A speakable description of the type of this item. This will be announced to the user prior to reading the content of the item in cases where the additional context is useful, for example when the user requests that the item be read aloud following a notification.\n\nThis should be a short, simple noun phrase such as \"Email\", \"Text message\", or \"Daily Planet News Update\".\n\nGlassware are encouraged to populate this field for every timeline item, even if the item does not contain speakableText or text so that the user can learn the type of the item without looking at the screen." + }, + "text": { + "type": "string", + "description": "Text content of this item." + }, + "title": { + "type": "string", + "description": "The title of this item." + }, + "updated": { + "type": "string", + "description": "The time at which this item was last modified, formatted according to RFC 3339.", + "format": "date-time" + } + } + }, + "TimelineListResponse": { + "id": "TimelineListResponse", + "type": "object", + "description": "A list of timeline items. This is the response from the server to GET requests on the timeline collection.", + "properties": { + "items": { + "type": "array", + "description": "Items in the timeline.", + "items": { + "$ref": "TimelineItem" + } + }, + "kind": { + "type": "string", + "description": "The type of resource. This is always mirror#timeline.", + "default": "mirror#timeline" + }, + "nextPageToken": { + "type": "string", + "description": "The next page token. Provide this as the pageToken parameter in the request to retrieve the next page of results." + } + } + }, + "UserAction": { + "id": "UserAction", + "type": "object", + "description": "Represents an action taken by the user that triggered a notification.", + "properties": { + "payload": { + "type": "string", + "description": "An optional payload for the action.\n\nFor actions of type CUSTOM, this is the ID of the custom menu item that was selected." + }, + "type": { + "type": "string", + "description": "The type of action. The value of this can be: \n- SHARE - the user shared an item. \n- REPLY - the user replied to an item. \n- REPLY_ALL - the user replied to all recipients of an item. \n- CUSTOM - the user selected a custom menu item on the timeline item. \n- DELETE - the user deleted the item. \n- PIN - the user pinned the item. \n- UNPIN - the user unpinned the item. \n- LAUNCH - the user initiated a voice command. In the future, additional types may be added. UserActions with unrecognized types should be ignored." + } + } + }, + "UserData": { + "id": "UserData", + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "resources": { + "accounts": { + "methods": { + "insert": { + "id": "mirror.accounts.insert", + "path": "accounts/{userToken}/{accountType}/{accountName}", + "httpMethod": "POST", + "description": "Inserts a new account for a user", + "parameters": { + "accountName": { + "type": "string", + "description": "The name of the account to be passed to the Android Account Manager.", + "required": true, + "location": "path" + }, + "accountType": { + "type": "string", + "description": "Account type to be passed to Android Account Manager.", + "required": true, + "location": "path" + }, + "userToken": { + "type": "string", + "description": "The ID for the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userToken", + "accountType", + "accountName" + ], + "request": { + "$ref": "Account" + }, + "response": { + "$ref": "Account" + } + } + } + }, + "contacts": { + "methods": { + "delete": { + "id": "mirror.contacts.delete", + "path": "contacts/{id}", + "httpMethod": "DELETE", + "description": "Deletes a contact.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the contact.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "get": { + "id": "mirror.contacts.get", + "path": "contacts/{id}", + "httpMethod": "GET", + "description": "Gets a single contact by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the contact.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Contact" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "insert": { + "id": "mirror.contacts.insert", + "path": "contacts", + "httpMethod": "POST", + "description": "Inserts a new contact.", + "request": { + "$ref": "Contact" + }, + "response": { + "$ref": "Contact" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "list": { + "id": "mirror.contacts.list", + "path": "contacts", + "httpMethod": "GET", + "description": "Retrieves a list of contacts for the authenticated user.", + "response": { + "$ref": "ContactsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "patch": { + "id": "mirror.contacts.patch", + "path": "contacts/{id}", + "httpMethod": "PATCH", + "description": "Updates a contact in place. This method supports patch semantics.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the contact.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Contact" + }, + "response": { + "$ref": "Contact" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "update": { + "id": "mirror.contacts.update", + "path": "contacts/{id}", + "httpMethod": "PUT", + "description": "Updates a contact in place.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the contact.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Contact" + }, + "response": { + "$ref": "Contact" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + } + } + }, + "locations": { + "methods": { + "get": { + "id": "mirror.locations.get", + "path": "locations/{id}", + "httpMethod": "GET", + "description": "Gets a single location by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the location or latest for the last known location.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Location" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "list": { + "id": "mirror.locations.list", + "path": "locations", + "httpMethod": "GET", + "description": "Retrieves a list of locations for the user.", + "response": { + "$ref": "LocationsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + } + } + }, + "subscriptions": { + "methods": { + "delete": { + "id": "mirror.subscriptions.delete", + "path": "subscriptions/{id}", + "httpMethod": "DELETE", + "description": "Deletes a subscription.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the subscription.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "insert": { + "id": "mirror.subscriptions.insert", + "path": "subscriptions", + "httpMethod": "POST", + "description": "Creates a new subscription.", + "request": { + "$ref": "Subscription" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "list": { + "id": "mirror.subscriptions.list", + "path": "subscriptions", + "httpMethod": "GET", + "description": "Retrieves a list of subscriptions for the authenticated user and service.", + "response": { + "$ref": "SubscriptionsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "update": { + "id": "mirror.subscriptions.update", + "path": "subscriptions/{id}", + "httpMethod": "PUT", + "description": "Updates an existing subscription in place.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the subscription.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Subscription" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + } + } + }, + "timeline": { + "methods": { + "delete": { + "id": "mirror.timeline.delete", + "path": "timeline/{id}", + "httpMethod": "DELETE", + "description": "Deletes a timeline item.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the timeline item.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "get": { + "id": "mirror.timeline.get", + "path": "timeline/{id}", + "httpMethod": "GET", + "description": "Gets a single timeline item by ID.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the timeline item.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "TimelineItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "insert": { + "id": "mirror.timeline.insert", + "path": "timeline", + "httpMethod": "POST", + "description": "Inserts a new item into the timeline.", + "request": { + "$ref": "TimelineItem" + }, + "response": { + "$ref": "TimelineItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "audio/*", + "image/*", + "video/*" + ], + "maxSize": "10MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/mirror/v1/timeline" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/mirror/v1/timeline" + } + } + } + }, + "list": { + "id": "mirror.timeline.list", + "path": "timeline", + "httpMethod": "GET", + "description": "Retrieves a list of timeline items for the authenticated user.", + "parameters": { + "bundleId": { + "type": "string", + "description": "If provided, only items with the given bundleId will be returned.", + "location": "query" + }, + "includeDeleted": { + "type": "boolean", + "description": "If true, tombstone records for deleted items will be returned.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of items to include in the response, used for paging.", + "format": "uint32", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Controls the order in which timeline items are returned.", + "enum": [ + "displayTime", + "writeTime" + ], + "enumDescriptions": [ + "Results will be ordered by displayTime (default). This is the same ordering as is used in the timeline on the device.", + "Results will be ordered by the time at which they were last written to the data store." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token for the page of results to return.", + "location": "query" + }, + "pinnedOnly": { + "type": "boolean", + "description": "If true, only pinned items will be returned.", + "location": "query" + }, + "sourceItemId": { + "type": "string", + "description": "If provided, only items with the given sourceItemId will be returned.", + "location": "query" + } + }, + "response": { + "$ref": "TimelineListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "patch": { + "id": "mirror.timeline.patch", + "path": "timeline/{id}", + "httpMethod": "PATCH", + "description": "Updates a timeline item in place. This method supports patch semantics.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the timeline item.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "TimelineItem" + }, + "response": { + "$ref": "TimelineItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "update": { + "id": "mirror.timeline.update", + "path": "timeline/{id}", + "httpMethod": "PUT", + "description": "Updates a timeline item in place.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the timeline item.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "TimelineItem" + }, + "response": { + "$ref": "TimelineItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.location", + "https://www.googleapis.com/auth/glass.timeline" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "audio/*", + "image/*", + "video/*" + ], + "maxSize": "10MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/mirror/v1/timeline/{id}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/mirror/v1/timeline/{id}" + } + } + } + } + }, + "resources": { + "attachments": { + "methods": { + "delete": { + "id": "mirror.timeline.attachments.delete", + "path": "timeline/{itemId}/attachments/{attachmentId}", + "httpMethod": "DELETE", + "description": "Deletes an attachment from a timeline item.", + "parameters": { + "attachmentId": { + "type": "string", + "description": "The ID of the attachment.", + "required": true, + "location": "path" + }, + "itemId": { + "type": "string", + "description": "The ID of the timeline item the attachment belongs to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "itemId", + "attachmentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + }, + "get": { + "id": "mirror.timeline.attachments.get", + "path": "timeline/{itemId}/attachments/{attachmentId}", + "httpMethod": "GET", + "description": "Retrieves an attachment on a timeline item by item ID and attachment ID.", + "parameters": { + "attachmentId": { + "type": "string", + "description": "The ID of the attachment.", + "required": true, + "location": "path" + }, + "itemId": { + "type": "string", + "description": "The ID of the timeline item the attachment belongs to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "itemId", + "attachmentId" + ], + "response": { + "$ref": "Attachment" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ], + "supportsMediaDownload": true + }, + "insert": { + "id": "mirror.timeline.attachments.insert", + "path": "timeline/{itemId}/attachments", + "httpMethod": "POST", + "description": "Adds a new attachment to a timeline item.", + "parameters": { + "itemId": { + "type": "string", + "description": "The ID of the timeline item the attachment belongs to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "itemId" + ], + "response": { + "$ref": "Attachment" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "audio/*", + "image/*", + "video/*" + ], + "maxSize": "10MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/mirror/v1/timeline/{itemId}/attachments" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/mirror/v1/timeline/{itemId}/attachments" + } + } + } + }, + "list": { + "id": "mirror.timeline.attachments.list", + "path": "timeline/{itemId}/attachments", + "httpMethod": "GET", + "description": "Returns a list of attachments for a timeline item.", + "parameters": { + "itemId": { + "type": "string", + "description": "The ID of the timeline item whose attachments should be listed.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "itemId" + ], + "response": { + "$ref": "AttachmentsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/glass.timeline" + ] + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-gen.go b/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-gen.go new file mode 100644 index 0000000000000..b305f016eaf86 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/mirror/v1/mirror-gen.go @@ -0,0 +1,2406 @@ +// Package mirror provides access to the Google Mirror API. +// +// See https://developers.google.com/glass +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/mirror/v1" +// ... +// mirrorService, err := mirror.New(oauthHttpClient) +package mirror + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "mirror:v1" +const apiName = "mirror" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/mirror/v1/" + +// OAuth2 scopes used by this API. +const ( + // View your location + GlassLocationScope = "https://www.googleapis.com/auth/glass.location" + + // View and manage your Glass timeline + GlassTimelineScope = "https://www.googleapis.com/auth/glass.timeline" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Accounts = NewAccountsService(s) + s.Contacts = NewContactsService(s) + s.Locations = NewLocationsService(s) + s.Subscriptions = NewSubscriptionsService(s) + s.Timeline = NewTimelineService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Accounts *AccountsService + + Contacts *ContactsService + + Locations *LocationsService + + Subscriptions *SubscriptionsService + + Timeline *TimelineService +} + +func NewAccountsService(s *Service) *AccountsService { + rs := &AccountsService{s: s} + return rs +} + +type AccountsService struct { + s *Service +} + +func NewContactsService(s *Service) *ContactsService { + rs := &ContactsService{s: s} + return rs +} + +type ContactsService struct { + s *Service +} + +func NewLocationsService(s *Service) *LocationsService { + rs := &LocationsService{s: s} + return rs +} + +type LocationsService struct { + s *Service +} + +func NewSubscriptionsService(s *Service) *SubscriptionsService { + rs := &SubscriptionsService{s: s} + return rs +} + +type SubscriptionsService struct { + s *Service +} + +func NewTimelineService(s *Service) *TimelineService { + rs := &TimelineService{s: s} + rs.Attachments = NewTimelineAttachmentsService(s) + return rs +} + +type TimelineService struct { + s *Service + + Attachments *TimelineAttachmentsService +} + +func NewTimelineAttachmentsService(s *Service) *TimelineAttachmentsService { + rs := &TimelineAttachmentsService{s: s} + return rs +} + +type TimelineAttachmentsService struct { + s *Service +} + +type Account struct { + AuthTokens []*AuthToken `json:"authTokens,omitempty"` + + Features []string `json:"features,omitempty"` + + Password string `json:"password,omitempty"` + + UserData []*UserData `json:"userData,omitempty"` +} + +type Attachment struct { + // ContentType: The MIME type of the attachment. + ContentType string `json:"contentType,omitempty"` + + // ContentUrl: The URL for the content. + ContentUrl string `json:"contentUrl,omitempty"` + + // Id: The ID of the attachment. + Id string `json:"id,omitempty"` + + // IsProcessingContent: Indicates that the contentUrl is not available + // because the attachment content is still being processed. If the + // caller wishes to retrieve the content, it should try again later. + IsProcessingContent bool `json:"isProcessingContent,omitempty"` +} + +type AttachmentsListResponse struct { + // Items: The list of attachments. + Items []*Attachment `json:"items,omitempty"` + + // Kind: The type of resource. This is always mirror#attachmentsList. + Kind string `json:"kind,omitempty"` +} + +type AuthToken struct { + AuthToken string `json:"authToken,omitempty"` + + Type string `json:"type,omitempty"` +} + +type Command struct { + // Type: The type of operation this command corresponds to. Allowed + // values are: + // - TAKE_A_NOTE - Shares a timeline item with the + // transcription of user speech from the "Take a note" voice menu + // command. + // - POST_AN_UPDATE - Shares a timeline item with the + // transcription of user speech from the "Post an update" voice menu + // command. + Type string `json:"type,omitempty"` +} + +type Contact struct { + // AcceptCommands: A list of voice menu commands that a contact can + // handle. Glass shows up to three contacts for each voice menu command. + // If there are more than that, the three contacts with the highest + // priority are shown for that particular command. + AcceptCommands []*Command `json:"acceptCommands,omitempty"` + + // AcceptTypes: A list of MIME types that a contact supports. The + // contact will be shown to the user if any of its acceptTypes matches + // any of the types of the attachments on the item. If no acceptTypes + // are given, the contact will be shown for all items. + AcceptTypes []string `json:"acceptTypes,omitempty"` + + // DisplayName: The name to display for this contact. + DisplayName string `json:"displayName,omitempty"` + + // Id: An ID for this contact. This is generated by the application and + // is treated as an opaque token. + Id string `json:"id,omitempty"` + + // ImageUrls: Set of image URLs to display for a contact. Most contacts + // will have a single image, but a "group" contact may include up to 8 + // image URLs and they will be resized and cropped into a mosaic on the + // client. + ImageUrls []string `json:"imageUrls,omitempty"` + + // Kind: The type of resource. This is always mirror#contact. + Kind string `json:"kind,omitempty"` + + // PhoneNumber: Primary phone number for the contact. This can be a + // fully-qualified number, with country calling code and area code, or a + // local number. + PhoneNumber string `json:"phoneNumber,omitempty"` + + // Priority: Priority for the contact to determine ordering in a list of + // contacts. Contacts with higher priorities will be shown before ones + // with lower priorities. + Priority int64 `json:"priority,omitempty"` + + // SharingFeatures: A list of sharing features that a contact can + // handle. Allowed values are: + // - ADD_CAPTION + SharingFeatures []string `json:"sharingFeatures,omitempty"` + + // Source: The ID of the application that created this contact. This is + // populated by the API + Source string `json:"source,omitempty"` + + // SpeakableName: Name of this contact as it should be pronounced. If + // this contact's name must be spoken as part of a voice disambiguation + // menu, this name is used as the expected pronunciation. This is useful + // for contact names with unpronounceable characters or whose display + // spelling is otherwise not phonetic. + SpeakableName string `json:"speakableName,omitempty"` + + // Type: The type for this contact. This is used for sorting in UIs. + // Allowed values are: + // - INDIVIDUAL - Represents a single person. This + // is the default. + // - GROUP - Represents more than a single person. + Type string `json:"type,omitempty"` +} + +type ContactsListResponse struct { + // Items: Contact list. + Items []*Contact `json:"items,omitempty"` + + // Kind: The type of resource. This is always mirror#contacts. + Kind string `json:"kind,omitempty"` +} + +type Location struct { + // Accuracy: The accuracy of the location fix in meters. + Accuracy float64 `json:"accuracy,omitempty"` + + // Address: The full address of the location. + Address string `json:"address,omitempty"` + + // DisplayName: The name to be displayed. This may be a business name or + // a user-defined place, such as "Home". + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the location. + Id string `json:"id,omitempty"` + + // Kind: The type of resource. This is always mirror#location. + Kind string `json:"kind,omitempty"` + + // Latitude: The latitude, in degrees. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude, in degrees. + Longitude float64 `json:"longitude,omitempty"` + + // Timestamp: The time at which this location was captured, formatted + // according to RFC 3339. + Timestamp string `json:"timestamp,omitempty"` +} + +type LocationsListResponse struct { + // Items: The list of locations. + Items []*Location `json:"items,omitempty"` + + // Kind: The type of resource. This is always mirror#locationsList. + Kind string `json:"kind,omitempty"` +} + +type MenuItem struct { + // Action: Controls the behavior when the user picks the menu option. + // Allowed values are: + // - CUSTOM - Custom action set by the service. + // When the user selects this menuItem, the API triggers a notification + // to your callbackUrl with the userActions.type set to CUSTOM and the + // userActions.payload set to the ID of this menu item. This is the + // default value. + // - Built-in actions: + // - REPLY - Initiate a reply to + // the timeline item using the voice recording UI. The creator attribute + // must be set in the timeline item for this menu to be available. + // - + // REPLY_ALL - Same behavior as REPLY. The original timeline item's + // recipients will be added to the reply item. + // - DELETE - Delete the + // timeline item. + // - SHARE - Share the timeline item with the available + // contacts. + // - READ_ALOUD - Read the timeline item's speakableText + // aloud; if this field is not set, read the text field; if none of + // those fields are set, this menu item is ignored. + // - GET_MEDIA_INPUT - + // Allow users to provide media payloads to Glassware from a menu item + // (currently, only transcribed text from voice input is supported). + // Subscribe to notifications when users invoke this menu item to + // receive the timeline item ID. Retrieve the media from the timeline + // item in the payload property. + // - VOICE_CALL - Initiate a phone call + // using the timeline item's creator.phoneNumber attribute as recipient. + // + // - NAVIGATE - Navigate to the timeline item's location. + // - + // TOGGLE_PINNED - Toggle the isPinned state of the timeline item. + // - + // OPEN_URI - Open the payload of the menu item in the browser. + // - + // PLAY_VIDEO - Open the payload of the menu item in the Glass video + // player. + // - SEND_MESSAGE - Initiate sending a message to the timeline + // item's creator: + // - If the creator.phoneNumber is set and Glass is + // connected to an Android phone, the message is an SMS. + // - Otherwise, + // if the creator.email is set, the message is an email. + Action string `json:"action,omitempty"` + + // Id: The ID for this menu item. This is generated by the application + // and is treated as an opaque token. + Id string `json:"id,omitempty"` + + // Payload: A generic payload whose meaning changes depending on this + // MenuItem's action. + // - When the action is OPEN_URI, the payload is + // the URL of the website to view. + // - When the action is PLAY_VIDEO, the + // payload is the streaming URL of the video + // - When the action is + // GET_MEDIA_INPUT, the payload is the text transcription of a user's + // speech input + Payload string `json:"payload,omitempty"` + + // RemoveWhenSelected: If set to true on a CUSTOM menu item, that item + // will be removed from the menu after it is selected. + RemoveWhenSelected bool `json:"removeWhenSelected,omitempty"` + + // Values: For CUSTOM items, a list of values controlling the appearance + // of the menu item in each of its states. A value for the DEFAULT state + // must be provided. If the PENDING or CONFIRMED states are missing, + // they will not be shown. + Values []*MenuValue `json:"values,omitempty"` +} + +type MenuValue struct { + // DisplayName: The name to display for the menu item. If you specify + // this property for a built-in menu item, the default contextual voice + // command for that menu item is not shown. + DisplayName string `json:"displayName,omitempty"` + + // IconUrl: URL of an icon to display with the menu item. + IconUrl string `json:"iconUrl,omitempty"` + + // State: The state that this value applies to. Allowed values are: + // - + // DEFAULT - Default value shown when displayed in the menuItems list. + // + // - PENDING - Value shown when the menuItem has been selected by the + // user but can still be cancelled. + // - CONFIRMED - Value shown when the + // menuItem has been selected by the user and can no longer be + // cancelled. + State string `json:"state,omitempty"` +} + +type Notification struct { + // Collection: The collection that generated the notification. + Collection string `json:"collection,omitempty"` + + // ItemId: The ID of the item that generated the notification. + ItemId string `json:"itemId,omitempty"` + + // Operation: The type of operation that generated the notification. + Operation string `json:"operation,omitempty"` + + // UserActions: A list of actions taken by the user that triggered the + // notification. + UserActions []*UserAction `json:"userActions,omitempty"` + + // UserToken: The user token provided by the service when it subscribed + // for notifications. + UserToken string `json:"userToken,omitempty"` + + // VerifyToken: The secret verify token provided by the service when it + // subscribed for notifications. + VerifyToken string `json:"verifyToken,omitempty"` +} + +type NotificationConfig struct { + // DeliveryTime: The time at which the notification should be delivered. + DeliveryTime string `json:"deliveryTime,omitempty"` + + // Level: Describes how important the notification is. Allowed values + // are: + // - DEFAULT - Notifications of default importance. A chime will + // be played to alert users. + Level string `json:"level,omitempty"` +} + +type Subscription struct { + // CallbackUrl: The URL where notifications should be delivered (must + // start with https://). + CallbackUrl string `json:"callbackUrl,omitempty"` + + // Collection: The collection to subscribe to. Allowed values are: + // - + // timeline - Changes in the timeline including insertion, deletion, and + // updates. + // - locations - Location updates. + Collection string `json:"collection,omitempty"` + + // Id: The ID of the subscription. + Id string `json:"id,omitempty"` + + // Kind: The type of resource. This is always mirror#subscription. + Kind string `json:"kind,omitempty"` + + // Notification: Container object for notifications. This is not + // populated in the Subscription resource. + Notification *Notification `json:"notification,omitempty"` + + // Operation: A list of operations that should be subscribed to. An + // empty list indicates that all operations on the collection should be + // subscribed to. Allowed values are: + // - UPDATE - The item has been + // updated. + // - INSERT - A new item has been inserted. + // - DELETE - The + // item has been deleted. + // - MENU_ACTION - A custom menu item has been + // triggered by the user. + Operation []string `json:"operation,omitempty"` + + // Updated: The time at which this subscription was last modified, + // formatted according to RFC 3339. + Updated string `json:"updated,omitempty"` + + // UserToken: An opaque token sent to the subscriber in notifications so + // that it can determine the ID of the user. + UserToken string `json:"userToken,omitempty"` + + // VerifyToken: A secret token sent to the subscriber in notifications + // so that it can verify that the notification was generated by Google. + VerifyToken string `json:"verifyToken,omitempty"` +} + +type SubscriptionsListResponse struct { + // Items: The list of subscriptions. + Items []*Subscription `json:"items,omitempty"` + + // Kind: The type of resource. This is always mirror#subscriptionsList. + Kind string `json:"kind,omitempty"` +} + +type TimelineItem struct { + // Attachments: A list of media attachments associated with this item. + // As a convenience, you can refer to attachments in your HTML payloads + // with the attachment or cid scheme. For example: + // - attachment: where attachment_index is the + // 0-based index of this array. + // - cid: + // where attachment_id is the ID of the attachment. + Attachments []*Attachment `json:"attachments,omitempty"` + + // BundleId: The bundle ID for this item. Services can specify a + // bundleId to group many items together. They appear under a single + // top-level item on the device. + BundleId string `json:"bundleId,omitempty"` + + // CanonicalUrl: A canonical URL pointing to the canonical/high quality + // version of the data represented by the timeline item. + CanonicalUrl string `json:"canonicalUrl,omitempty"` + + // Created: The time at which this item was created, formatted according + // to RFC 3339. + Created string `json:"created,omitempty"` + + // Creator: The user or group that created this item. + Creator *Contact `json:"creator,omitempty"` + + // DisplayTime: The time that should be displayed when this item is + // viewed in the timeline, formatted according to RFC 3339. This user's + // timeline is sorted chronologically on display time, so this will also + // determine where the item is displayed in the timeline. If not set by + // the service, the display time defaults to the updated time. + DisplayTime string `json:"displayTime,omitempty"` + + // Etag: ETag for this item. + Etag string `json:"etag,omitempty"` + + // Html: HTML content for this item. If both text and html are provided + // for an item, the html will be rendered in the timeline. + // Allowed HTML + // elements - You can use these elements in your timeline cards. + // + // - + // Headers: h1, h2, h3, h4, h5, h6 + // - Images: img + // - Lists: li, ol, ul + // + // - HTML5 semantics: article, aside, details, figure, figcaption, + // footer, header, nav, section, summary, time + // - Structural: + // blockquote, br, div, hr, p, span + // - Style: b, big, center, em, i, u, + // s, small, strike, strong, style, sub, sup + // - Tables: table, tbody, + // td, tfoot, th, thead, tr + // Blocked HTML elements: These elements and + // their contents are removed from HTML payloads. + // + // - Document headers: + // head, title + // - Embeds: audio, embed, object, source, video + // - Frames: + // frame, frameset + // - Scripting: applet, script + // Other elements: Any + // elements that aren't listed are removed, but their contents are + // preserved. + Html string `json:"html,omitempty"` + + // Id: The ID of the timeline item. This is unique within a user's + // timeline. + Id string `json:"id,omitempty"` + + // InReplyTo: If this item was generated as a reply to another item, + // this field will be set to the ID of the item being replied to. This + // can be used to attach a reply to the appropriate conversation or + // post. + InReplyTo string `json:"inReplyTo,omitempty"` + + // IsBundleCover: Whether this item is a bundle cover. + // + // If an item is + // marked as a bundle cover, it will be the entry point to the bundle of + // items that have the same bundleId as that item. It will be shown only + // on the main timeline — not within the opened bundle. + // + // On the main + // timeline, items that are shown are: + // - Items that have isBundleCover + // set to true + // - Items that do not have a bundleId In a bundle + // sub-timeline, items that are shown are: + // - Items that have the + // bundleId in question AND isBundleCover set to false + IsBundleCover bool `json:"isBundleCover,omitempty"` + + // IsDeleted: When true, indicates this item is deleted, and only the ID + // property is set. + IsDeleted bool `json:"isDeleted,omitempty"` + + // IsPinned: When true, indicates this item is pinned, which means it's + // grouped alongside "active" items like navigation and hangouts, on the + // opposite side of the home screen from historical (non-pinned) + // timeline items. You can allow the user to toggle the value of this + // property with the TOGGLE_PINNED built-in menu item. + IsPinned bool `json:"isPinned,omitempty"` + + // Kind: The type of resource. This is always mirror#timelineItem. + Kind string `json:"kind,omitempty"` + + // Location: The geographic location associated with this item. + Location *Location `json:"location,omitempty"` + + // MenuItems: A list of menu items that will be presented to the user + // when this item is selected in the timeline. + MenuItems []*MenuItem `json:"menuItems,omitempty"` + + // Notification: Controls how notifications for this item are presented + // on the device. If this is missing, no notification will be generated. + Notification *NotificationConfig `json:"notification,omitempty"` + + // PinScore: For pinned items, this determines the order in which the + // item is displayed in the timeline, with a higher score appearing + // closer to the clock. Note: setting this field is currently not + // supported. + PinScore int64 `json:"pinScore,omitempty"` + + // Recipients: A list of users or groups that this item has been shared + // with. + Recipients []*Contact `json:"recipients,omitempty"` + + // SelfLink: A URL that can be used to retrieve this item. + SelfLink string `json:"selfLink,omitempty"` + + // SourceItemId: Opaque string you can use to map a timeline item to + // data in your own service. + SourceItemId string `json:"sourceItemId,omitempty"` + + // SpeakableText: The speakable version of the content of this item. + // Along with the READ_ALOUD menu item, use this field to provide text + // that would be clearer when read aloud, or to provide extended + // information to what is displayed visually on Glass. + // + // Glassware should + // also specify the speakableType field, which will be spoken before + // this text in cases where the additional context is useful, for + // example when the user requests that the item be read aloud following + // a notification. + SpeakableText string `json:"speakableText,omitempty"` + + // SpeakableType: A speakable description of the type of this item. This + // will be announced to the user prior to reading the content of the + // item in cases where the additional context is useful, for example + // when the user requests that the item be read aloud following a + // notification. + // + // This should be a short, simple noun phrase such as + // "Email", "Text message", or "Daily Planet News Update". + // + // Glassware + // are encouraged to populate this field for every timeline item, even + // if the item does not contain speakableText or text so that the user + // can learn the type of the item without looking at the screen. + SpeakableType string `json:"speakableType,omitempty"` + + // Text: Text content of this item. + Text string `json:"text,omitempty"` + + // Title: The title of this item. + Title string `json:"title,omitempty"` + + // Updated: The time at which this item was last modified, formatted + // according to RFC 3339. + Updated string `json:"updated,omitempty"` +} + +type TimelineListResponse struct { + // Items: Items in the timeline. + Items []*TimelineItem `json:"items,omitempty"` + + // Kind: The type of resource. This is always mirror#timeline. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The next page token. Provide this as the pageToken + // parameter in the request to retrieve the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type UserAction struct { + // Payload: An optional payload for the action. + // + // For actions of type + // CUSTOM, this is the ID of the custom menu item that was selected. + Payload string `json:"payload,omitempty"` + + // Type: The type of action. The value of this can be: + // - SHARE - the + // user shared an item. + // - REPLY - the user replied to an item. + // - + // REPLY_ALL - the user replied to all recipients of an item. + // - CUSTOM + // - the user selected a custom menu item on the timeline item. + // - + // DELETE - the user deleted the item. + // - PIN - the user pinned the + // item. + // - UNPIN - the user unpinned the item. + // - LAUNCH - the user + // initiated a voice command. In the future, additional types may be + // added. UserActions with unrecognized types should be ignored. + Type string `json:"type,omitempty"` +} + +type UserData struct { + Key string `json:"key,omitempty"` + + Value string `json:"value,omitempty"` +} + +// method id "mirror.accounts.insert": + +type AccountsInsertCall struct { + s *Service + userToken string + accountType string + accountName string + account *Account + opt_ map[string]interface{} +} + +// Insert: Inserts a new account for a user +func (r *AccountsService) Insert(userToken string, accountType string, accountName string, account *Account) *AccountsInsertCall { + c := &AccountsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userToken = userToken + c.accountType = accountType + c.accountName = accountName + c.account = account + return c +} + +func (c *AccountsInsertCall) Do() (*Account, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.account) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "accounts/{userToken}/{accountType}/{accountName}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userToken}", url.QueryEscape(c.userToken), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{accountType}", url.QueryEscape(c.accountType), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{accountName}", url.QueryEscape(c.accountName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Account) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new account for a user", + // "httpMethod": "POST", + // "id": "mirror.accounts.insert", + // "parameterOrder": [ + // "userToken", + // "accountType", + // "accountName" + // ], + // "parameters": { + // "accountName": { + // "description": "The name of the account to be passed to the Android Account Manager.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "accountType": { + // "description": "Account type to be passed to Android Account Manager.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userToken": { + // "description": "The ID for the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "accounts/{userToken}/{accountType}/{accountName}", + // "request": { + // "$ref": "Account" + // }, + // "response": { + // "$ref": "Account" + // } + // } + +} + +// method id "mirror.contacts.delete": + +type ContactsDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Deletes a contact. +func (r *ContactsService) Delete(id string) *ContactsDeleteCall { + c := &ContactsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *ContactsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a contact.", + // "httpMethod": "DELETE", + // "id": "mirror.contacts.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the contact.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "contacts/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.contacts.get": + +type ContactsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Gets a single contact by ID. +func (r *ContactsService) Get(id string) *ContactsGetCall { + c := &ContactsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *ContactsGetCall) Do() (*Contact, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Contact) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a single contact by ID.", + // "httpMethod": "GET", + // "id": "mirror.contacts.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the contact.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "contacts/{id}", + // "response": { + // "$ref": "Contact" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.contacts.insert": + +type ContactsInsertCall struct { + s *Service + contact *Contact + opt_ map[string]interface{} +} + +// Insert: Inserts a new contact. +func (r *ContactsService) Insert(contact *Contact) *ContactsInsertCall { + c := &ContactsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.contact = contact + return c +} + +func (c *ContactsInsertCall) Do() (*Contact, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Contact) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new contact.", + // "httpMethod": "POST", + // "id": "mirror.contacts.insert", + // "path": "contacts", + // "request": { + // "$ref": "Contact" + // }, + // "response": { + // "$ref": "Contact" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.contacts.list": + +type ContactsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of contacts for the authenticated user. +func (r *ContactsService) List() *ContactsListCall { + c := &ContactsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ContactsListCall) Do() (*ContactsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ContactsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of contacts for the authenticated user.", + // "httpMethod": "GET", + // "id": "mirror.contacts.list", + // "path": "contacts", + // "response": { + // "$ref": "ContactsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.contacts.patch": + +type ContactsPatchCall struct { + s *Service + id string + contact *Contact + opt_ map[string]interface{} +} + +// Patch: Updates a contact in place. This method supports patch +// semantics. +func (r *ContactsService) Patch(id string, contact *Contact) *ContactsPatchCall { + c := &ContactsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.contact = contact + return c +} + +func (c *ContactsPatchCall) Do() (*Contact, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Contact) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a contact in place. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "mirror.contacts.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the contact.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "contacts/{id}", + // "request": { + // "$ref": "Contact" + // }, + // "response": { + // "$ref": "Contact" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.contacts.update": + +type ContactsUpdateCall struct { + s *Service + id string + contact *Contact + opt_ map[string]interface{} +} + +// Update: Updates a contact in place. +func (r *ContactsService) Update(id string, contact *Contact) *ContactsUpdateCall { + c := &ContactsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.contact = contact + return c +} + +func (c *ContactsUpdateCall) Do() (*Contact, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.contact) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "contacts/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Contact) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a contact in place.", + // "httpMethod": "PUT", + // "id": "mirror.contacts.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the contact.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "contacts/{id}", + // "request": { + // "$ref": "Contact" + // }, + // "response": { + // "$ref": "Contact" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.locations.get": + +type LocationsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Gets a single location by ID. +func (r *LocationsService) Get(id string) *LocationsGetCall { + c := &LocationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *LocationsGetCall) Do() (*Location, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "locations/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Location) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a single location by ID.", + // "httpMethod": "GET", + // "id": "mirror.locations.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the location or latest for the last known location.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "locations/{id}", + // "response": { + // "$ref": "Location" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.locations.list": + +type LocationsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of locations for the user. +func (r *LocationsService) List() *LocationsListCall { + c := &LocationsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *LocationsListCall) Do() (*LocationsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "locations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LocationsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of locations for the user.", + // "httpMethod": "GET", + // "id": "mirror.locations.list", + // "path": "locations", + // "response": { + // "$ref": "LocationsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.subscriptions.delete": + +type SubscriptionsDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Deletes a subscription. +func (r *SubscriptionsService) Delete(id string) *SubscriptionsDeleteCall { + c := &SubscriptionsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *SubscriptionsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a subscription.", + // "httpMethod": "DELETE", + // "id": "mirror.subscriptions.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the subscription.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "subscriptions/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.subscriptions.insert": + +type SubscriptionsInsertCall struct { + s *Service + subscription *Subscription + opt_ map[string]interface{} +} + +// Insert: Creates a new subscription. +func (r *SubscriptionsService) Insert(subscription *Subscription) *SubscriptionsInsertCall { + c := &SubscriptionsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.subscription = subscription + return c +} + +func (c *SubscriptionsInsertCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new subscription.", + // "httpMethod": "POST", + // "id": "mirror.subscriptions.insert", + // "path": "subscriptions", + // "request": { + // "$ref": "Subscription" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.subscriptions.list": + +type SubscriptionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of subscriptions for the authenticated user +// and service. +func (r *SubscriptionsService) List() *SubscriptionsListCall { + c := &SubscriptionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *SubscriptionsListCall) Do() (*SubscriptionsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SubscriptionsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of subscriptions for the authenticated user and service.", + // "httpMethod": "GET", + // "id": "mirror.subscriptions.list", + // "path": "subscriptions", + // "response": { + // "$ref": "SubscriptionsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.subscriptions.update": + +type SubscriptionsUpdateCall struct { + s *Service + id string + subscription *Subscription + opt_ map[string]interface{} +} + +// Update: Updates an existing subscription in place. +func (r *SubscriptionsService) Update(id string, subscription *Subscription) *SubscriptionsUpdateCall { + c := &SubscriptionsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.subscription = subscription + return c +} + +func (c *SubscriptionsUpdateCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an existing subscription in place.", + // "httpMethod": "PUT", + // "id": "mirror.subscriptions.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the subscription.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "subscriptions/{id}", + // "request": { + // "$ref": "Subscription" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.delete": + +type TimelineDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Deletes a timeline item. +func (r *TimelineService) Delete(id string) *TimelineDeleteCall { + c := &TimelineDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TimelineDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes a timeline item.", + // "httpMethod": "DELETE", + // "id": "mirror.timeline.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the timeline item.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.get": + +type TimelineGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Gets a single timeline item by ID. +func (r *TimelineService) Get(id string) *TimelineGetCall { + c := &TimelineGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TimelineGetCall) Do() (*TimelineItem, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TimelineItem) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a single timeline item by ID.", + // "httpMethod": "GET", + // "id": "mirror.timeline.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the timeline item.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{id}", + // "response": { + // "$ref": "TimelineItem" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.insert": + +type TimelineInsertCall struct { + s *Service + timelineitem *TimelineItem + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Inserts a new item into the timeline. +func (r *TimelineService) Insert(timelineitem *TimelineItem) *TimelineInsertCall { + c := &TimelineInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.timelineitem = timelineitem + return c +} +func (c *TimelineInsertCall) Media(r io.Reader) *TimelineInsertCall { + c.media_ = r + return c +} + +func (c *TimelineInsertCall) Do() (*TimelineItem, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TimelineItem) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new item into the timeline.", + // "httpMethod": "POST", + // "id": "mirror.timeline.insert", + // "mediaUpload": { + // "accept": [ + // "audio/*", + // "image/*", + // "video/*" + // ], + // "maxSize": "10MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/mirror/v1/timeline" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/mirror/v1/timeline" + // } + // } + // }, + // "path": "timeline", + // "request": { + // "$ref": "TimelineItem" + // }, + // "response": { + // "$ref": "TimelineItem" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "mirror.timeline.list": + +type TimelineListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of timeline items for the authenticated user. +func (r *TimelineService) List() *TimelineListCall { + c := &TimelineListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// BundleId sets the optional parameter "bundleId": If provided, only +// items with the given bundleId will be returned. +func (c *TimelineListCall) BundleId(bundleId string) *TimelineListCall { + c.opt_["bundleId"] = bundleId + return c +} + +// IncludeDeleted sets the optional parameter "includeDeleted": If true, +// tombstone records for deleted items will be returned. +func (c *TimelineListCall) IncludeDeleted(includeDeleted bool) *TimelineListCall { + c.opt_["includeDeleted"] = includeDeleted + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of items to include in the response, used for paging. +func (c *TimelineListCall) MaxResults(maxResults int64) *TimelineListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Controls the order in +// which timeline items are returned. +func (c *TimelineListCall) OrderBy(orderBy string) *TimelineListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": Token for the page +// of results to return. +func (c *TimelineListCall) PageToken(pageToken string) *TimelineListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// PinnedOnly sets the optional parameter "pinnedOnly": If true, only +// pinned items will be returned. +func (c *TimelineListCall) PinnedOnly(pinnedOnly bool) *TimelineListCall { + c.opt_["pinnedOnly"] = pinnedOnly + return c +} + +// SourceItemId sets the optional parameter "sourceItemId": If provided, +// only items with the given sourceItemId will be returned. +func (c *TimelineListCall) SourceItemId(sourceItemId string) *TimelineListCall { + c.opt_["sourceItemId"] = sourceItemId + return c +} + +func (c *TimelineListCall) Do() (*TimelineListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["bundleId"]; ok { + params.Set("bundleId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["includeDeleted"]; ok { + params.Set("includeDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pinnedOnly"]; ok { + params.Set("pinnedOnly", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sourceItemId"]; ok { + params.Set("sourceItemId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TimelineListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of timeline items for the authenticated user.", + // "httpMethod": "GET", + // "id": "mirror.timeline.list", + // "parameters": { + // "bundleId": { + // "description": "If provided, only items with the given bundleId will be returned.", + // "location": "query", + // "type": "string" + // }, + // "includeDeleted": { + // "description": "If true, tombstone records for deleted items will be returned.", + // "location": "query", + // "type": "boolean" + // }, + // "maxResults": { + // "description": "The maximum number of items to include in the response, used for paging.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "orderBy": { + // "description": "Controls the order in which timeline items are returned.", + // "enum": [ + // "displayTime", + // "writeTime" + // ], + // "enumDescriptions": [ + // "Results will be ordered by displayTime (default). This is the same ordering as is used in the timeline on the device.", + // "Results will be ordered by the time at which they were last written to the data store." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token for the page of results to return.", + // "location": "query", + // "type": "string" + // }, + // "pinnedOnly": { + // "description": "If true, only pinned items will be returned.", + // "location": "query", + // "type": "boolean" + // }, + // "sourceItemId": { + // "description": "If provided, only items with the given sourceItemId will be returned.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "timeline", + // "response": { + // "$ref": "TimelineListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.patch": + +type TimelinePatchCall struct { + s *Service + id string + timelineitem *TimelineItem + opt_ map[string]interface{} +} + +// Patch: Updates a timeline item in place. This method supports patch +// semantics. +func (r *TimelineService) Patch(id string, timelineitem *TimelineItem) *TimelinePatchCall { + c := &TimelinePatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.timelineitem = timelineitem + return c +} + +func (c *TimelinePatchCall) Do() (*TimelineItem, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TimelineItem) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a timeline item in place. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "mirror.timeline.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the timeline item.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{id}", + // "request": { + // "$ref": "TimelineItem" + // }, + // "response": { + // "$ref": "TimelineItem" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.update": + +type TimelineUpdateCall struct { + s *Service + id string + timelineitem *TimelineItem + opt_ map[string]interface{} + media_ io.Reader +} + +// Update: Updates a timeline item in place. +func (r *TimelineService) Update(id string, timelineitem *TimelineItem) *TimelineUpdateCall { + c := &TimelineUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.timelineitem = timelineitem + return c +} +func (c *TimelineUpdateCall) Media(r io.Reader) *TimelineUpdateCall { + c.media_ = r + return c +} + +func (c *TimelineUpdateCall) Do() (*TimelineItem, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.timelineitem) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{id}") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TimelineItem) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a timeline item in place.", + // "httpMethod": "PUT", + // "id": "mirror.timeline.update", + // "mediaUpload": { + // "accept": [ + // "audio/*", + // "image/*", + // "video/*" + // ], + // "maxSize": "10MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/mirror/v1/timeline/{id}" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/mirror/v1/timeline/{id}" + // } + // } + // }, + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the timeline item.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{id}", + // "request": { + // "$ref": "TimelineItem" + // }, + // "response": { + // "$ref": "TimelineItem" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.location", + // "https://www.googleapis.com/auth/glass.timeline" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "mirror.timeline.attachments.delete": + +type TimelineAttachmentsDeleteCall struct { + s *Service + itemId string + attachmentId string + opt_ map[string]interface{} +} + +// Delete: Deletes an attachment from a timeline item. +func (r *TimelineAttachmentsService) Delete(itemId string, attachmentId string) *TimelineAttachmentsDeleteCall { + c := &TimelineAttachmentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.itemId = itemId + c.attachmentId = attachmentId + return c +} + +func (c *TimelineAttachmentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments/{attachmentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{itemId}", url.QueryEscape(c.itemId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{attachmentId}", url.QueryEscape(c.attachmentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an attachment from a timeline item.", + // "httpMethod": "DELETE", + // "id": "mirror.timeline.attachments.delete", + // "parameterOrder": [ + // "itemId", + // "attachmentId" + // ], + // "parameters": { + // "attachmentId": { + // "description": "The ID of the attachment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "itemId": { + // "description": "The ID of the timeline item the attachment belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{itemId}/attachments/{attachmentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} + +// method id "mirror.timeline.attachments.get": + +type TimelineAttachmentsGetCall struct { + s *Service + itemId string + attachmentId string + opt_ map[string]interface{} +} + +// Get: Retrieves an attachment on a timeline item by item ID and +// attachment ID. +func (r *TimelineAttachmentsService) Get(itemId string, attachmentId string) *TimelineAttachmentsGetCall { + c := &TimelineAttachmentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.itemId = itemId + c.attachmentId = attachmentId + return c +} + +func (c *TimelineAttachmentsGetCall) Do() (*Attachment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments/{attachmentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{itemId}", url.QueryEscape(c.itemId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{attachmentId}", url.QueryEscape(c.attachmentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Attachment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves an attachment on a timeline item by item ID and attachment ID.", + // "httpMethod": "GET", + // "id": "mirror.timeline.attachments.get", + // "parameterOrder": [ + // "itemId", + // "attachmentId" + // ], + // "parameters": { + // "attachmentId": { + // "description": "The ID of the attachment.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "itemId": { + // "description": "The ID of the timeline item the attachment belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{itemId}/attachments/{attachmentId}", + // "response": { + // "$ref": "Attachment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "mirror.timeline.attachments.insert": + +type TimelineAttachmentsInsertCall struct { + s *Service + itemId string + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Adds a new attachment to a timeline item. +func (r *TimelineAttachmentsService) Insert(itemId string) *TimelineAttachmentsInsertCall { + c := &TimelineAttachmentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.itemId = itemId + return c +} +func (c *TimelineAttachmentsInsertCall) Media(r io.Reader) *TimelineAttachmentsInsertCall { + c.media_ = r + return c +} + +func (c *TimelineAttachmentsInsertCall) Do() (*Attachment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + body = new(bytes.Buffer) + ctype := "application/json" + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{itemId}", url.QueryEscape(c.itemId), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Attachment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a new attachment to a timeline item.", + // "httpMethod": "POST", + // "id": "mirror.timeline.attachments.insert", + // "mediaUpload": { + // "accept": [ + // "audio/*", + // "image/*", + // "video/*" + // ], + // "maxSize": "10MB", + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/mirror/v1/timeline/{itemId}/attachments" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/mirror/v1/timeline/{itemId}/attachments" + // } + // } + // }, + // "parameterOrder": [ + // "itemId" + // ], + // "parameters": { + // "itemId": { + // "description": "The ID of the timeline item the attachment belongs to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{itemId}/attachments", + // "response": { + // "$ref": "Attachment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "mirror.timeline.attachments.list": + +type TimelineAttachmentsListCall struct { + s *Service + itemId string + opt_ map[string]interface{} +} + +// List: Returns a list of attachments for a timeline item. +func (r *TimelineAttachmentsService) List(itemId string) *TimelineAttachmentsListCall { + c := &TimelineAttachmentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.itemId = itemId + return c +} + +func (c *TimelineAttachmentsListCall) Do() (*AttachmentsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "timeline/{itemId}/attachments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{itemId}", url.QueryEscape(c.itemId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AttachmentsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a list of attachments for a timeline item.", + // "httpMethod": "GET", + // "id": "mirror.timeline.attachments.list", + // "parameterOrder": [ + // "itemId" + // ], + // "parameters": { + // "itemId": { + // "description": "The ID of the timeline item whose attachments should be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "timeline/{itemId}/attachments", + // "response": { + // "$ref": "AttachmentsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/glass.timeline" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-api.json b/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-api.json new file mode 100644 index 0000000000000..2becaf0531581 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-api.json @@ -0,0 +1,1769 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"a3GBuXuTtUYW9BV1SIieU5LiL7w/0W9ODbl6hqMnzt7N9_K7ILXgS_I\"", + "discoveryVersion": "v1", + "id": "moderator:v1", + "name": "moderator", + "version": "v1", + "revision": "19700115", + "title": "Moderator API", + "description": "Moderator API", + "icons": { + "x16": "http://www.google.com/images/icons/product/moderator-32.png", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "http://code.google.com/apis/moderator/v1/using_rest.html", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/moderator/v1/", + "basePath": "/moderator/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "moderator/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "false", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/moderator": { + "description": "Manage your activity in Google Moderator" + } + } + } + }, + "features": [ + "dataWrapper" + ], + "schemas": { + "ModeratorTopicsResourcePartial": { + "id": "ModeratorTopicsResourcePartial", + "type": "object", + "properties": { + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "topicId": { + "type": "string", + "format": "int64" + } + } + } + } + }, + "ModeratorVotesResourcePartial": { + "id": "ModeratorVotesResourcePartial", + "type": "object", + "properties": { + "flag": { + "type": "string" + }, + "vote": { + "type": "string" + } + } + }, + "Profile": { + "id": "Profile", + "type": "object", + "properties": { + "attribution": { + "type": "object", + "properties": { + "avatarUrl": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "geo": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "location": { + "type": "string" + }, + "longitude": { + "type": "number", + "format": "double" + } + } + }, + "location": { + "type": "string" + } + } + }, + "id": { + "type": "object", + "properties": { + "user": { + "type": "string" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#profile" + } + } + }, + "Series": { + "id": "Series", + "type": "object", + "properties": { + "anonymousSubmissionAllowed": { + "type": "boolean" + }, + "counters": { + "type": "object", + "properties": { + "anonymousSubmissions": { + "type": "integer", + "format": "int32" + }, + "minusVotes": { + "type": "integer", + "format": "int32" + }, + "noneVotes": { + "type": "integer", + "format": "int32" + }, + "plusVotes": { + "type": "integer", + "format": "int32" + }, + "submissions": { + "type": "integer", + "format": "int32" + }, + "users": { + "type": "integer", + "format": "int32" + }, + "videoSubmissions": { + "type": "integer", + "format": "int32" + } + } + }, + "description": { + "type": "string" + }, + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#series" + }, + "name": { + "type": "string" + }, + "numTopics": { + "type": "integer", + "format": "int32" + }, + "rules": { + "type": "object", + "properties": { + "submissions": { + "type": "object", + "properties": { + "close": { + "type": "string", + "format": "uint64" + }, + "open": { + "type": "string", + "format": "uint64" + } + } + }, + "votes": { + "type": "object", + "properties": { + "close": { + "type": "string", + "format": "uint64" + }, + "open": { + "type": "string", + "format": "uint64" + } + } + } + } + }, + "unauthSubmissionAllowed": { + "type": "boolean" + }, + "unauthVotingAllowed": { + "type": "boolean" + }, + "videoSubmissionAllowed": { + "type": "boolean" + } + } + }, + "SeriesList": { + "id": "SeriesList", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Series" + } + }, + "kind": { + "type": "string", + "default": "moderator#seriesList" + } + } + }, + "Submission": { + "id": "Submission", + "type": "object", + "properties": { + "attachmentUrl": { + "type": "string" + }, + "attribution": { + "type": "object", + "properties": { + "avatarUrl": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "location": { + "type": "string" + } + } + }, + "author": { + "type": "string" + }, + "counters": { + "type": "object", + "properties": { + "minusVotes": { + "type": "integer", + "format": "int32" + }, + "noneVotes": { + "type": "integer", + "format": "int32" + }, + "plusVotes": { + "type": "integer", + "format": "int32" + } + } + }, + "created": { + "type": "string", + "format": "uint64" + }, + "geo": { + "type": "object", + "properties": { + "latitude": { + "type": "number", + "format": "double" + }, + "location": { + "type": "string" + }, + "longitude": { + "type": "number", + "format": "double" + } + } + }, + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "submissionId": { + "type": "string", + "format": "int64" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#submission" + }, + "parentSubmissionId": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "submissionId": { + "type": "string", + "format": "int64" + } + } + }, + "text": { + "type": "string" + }, + "topics": { + "type": "array", + "items": { + "$ref": "ModeratorTopicsResourcePartial" + } + }, + "translations": { + "type": "array", + "items": { + "type": "object", + "properties": { + "lang": { + "type": "string" + }, + "text": { + "type": "string" + } + } + } + }, + "vote": { + "$ref": "ModeratorVotesResourcePartial" + } + } + }, + "SubmissionList": { + "id": "SubmissionList", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Submission" + } + }, + "kind": { + "type": "string", + "default": "moderator#submissionList" + } + } + }, + "Tag": { + "id": "Tag", + "type": "object", + "properties": { + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "submissionId": { + "type": "string", + "format": "int64" + }, + "tagId": { + "type": "string" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#tag" + }, + "text": { + "type": "string" + } + } + }, + "TagList": { + "id": "TagList", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Tag" + } + }, + "kind": { + "type": "string", + "default": "moderator#tagList" + } + } + }, + "Topic": { + "id": "Topic", + "type": "object", + "properties": { + "counters": { + "type": "object", + "properties": { + "minusVotes": { + "type": "integer", + "format": "int32" + }, + "noneVotes": { + "type": "integer", + "format": "int32" + }, + "plusVotes": { + "type": "integer", + "format": "int32" + }, + "submissions": { + "type": "integer", + "format": "int32" + }, + "users": { + "type": "integer", + "format": "int32" + }, + "videoSubmissions": { + "type": "integer", + "format": "int32" + } + } + }, + "description": { + "type": "string" + }, + "featuredSubmission": { + "$ref": "Submission" + }, + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "topicId": { + "type": "string", + "format": "int64" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#topic" + }, + "name": { + "type": "string" + }, + "presenter": { + "type": "string" + }, + "rules": { + "type": "object", + "properties": { + "submissions": { + "type": "object", + "properties": { + "close": { + "type": "string", + "format": "uint64" + }, + "open": { + "type": "string", + "format": "uint64" + } + } + }, + "votes": { + "type": "object", + "properties": { + "close": { + "type": "string", + "format": "uint64" + }, + "open": { + "type": "string", + "format": "uint64" + } + } + } + } + } + } + }, + "TopicList": { + "id": "TopicList", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Topic" + } + }, + "kind": { + "type": "string", + "default": "moderator#topicList" + } + } + }, + "Vote": { + "id": "Vote", + "type": "object", + "properties": { + "flag": { + "type": "string" + }, + "id": { + "type": "object", + "properties": { + "seriesId": { + "type": "string", + "format": "int64" + }, + "submissionId": { + "type": "string", + "format": "int64" + } + } + }, + "kind": { + "type": "string", + "default": "moderator#vote" + }, + "vote": { + "type": "string" + } + } + }, + "VoteList": { + "id": "VoteList", + "type": "object", + "properties": { + "items": { + "type": "array", + "items": { + "$ref": "Vote" + } + }, + "kind": { + "type": "string", + "default": "moderator#voteList" + } + } + } + }, + "resources": { + "featured": { + "resources": { + "series": { + "methods": { + "list": { + "id": "moderator.featured.series.list", + "path": "series/featured", + "httpMethod": "GET", + "description": "Lists the featured series.", + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "global": { + "resources": { + "series": { + "methods": { + "list": { + "id": "moderator.global.series.list", + "path": "search", + "httpMethod": "GET", + "description": "Searches the public series and returns the search results.", + "parameters": { + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "my": { + "resources": { + "series": { + "methods": { + "list": { + "id": "moderator.my.series.list", + "path": "series/@me/mine", + "httpMethod": "GET", + "description": "Lists all series created by the authenticated user.", + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "myrecent": { + "resources": { + "series": { + "methods": { + "list": { + "id": "moderator.myrecent.series.list", + "path": "series/@me/recent", + "httpMethod": "GET", + "description": "Lists the series the authenticated user has visited.", + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "profiles": { + "methods": { + "get": { + "id": "moderator.profiles.get", + "path": "profiles/@me", + "httpMethod": "GET", + "description": "Returns the profile information for the authenticated user.", + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "patch": { + "id": "moderator.profiles.patch", + "path": "profiles/@me", + "httpMethod": "PATCH", + "description": "Updates the profile information for the authenticated user. This method supports patch semantics.", + "request": { + "$ref": "Profile" + }, + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "update": { + "id": "moderator.profiles.update", + "path": "profiles/@me", + "httpMethod": "PUT", + "description": "Updates the profile information for the authenticated user.", + "request": { + "$ref": "Profile" + }, + "response": { + "$ref": "Profile" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + }, + "responses": { + "methods": { + "insert": { + "id": "moderator.responses.insert", + "path": "series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses", + "httpMethod": "POST", + "description": "Inserts a response for the specified submission in the specified topic within the specified series.", + "parameters": { + "anonymous": { + "type": "boolean", + "description": "Set to true to mark the new submission as anonymous.", + "location": "query" + }, + "parentSubmissionId": { + "type": "integer", + "description": "The decimal ID of the parent Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "topicId": { + "type": "integer", + "description": "The decimal ID of the Topic within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "topicId", + "parentSubmissionId" + ], + "request": { + "$ref": "Submission" + }, + "response": { + "$ref": "Submission" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "list": { + "id": "moderator.responses.list", + "path": "series/{seriesId}/submissions/{submissionId}/responses", + "httpMethod": "GET", + "description": "Lists or searches the responses for the specified submission within the specified series and returns the search results.", + "parameters": { + "author": { + "type": "string", + "description": "Restricts the results to submissions by a specific author.", + "location": "query" + }, + "hasAttachedVideo": { + "type": "boolean", + "description": "Specifies whether to restrict to submissions that have videos attached.", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "sort": { + "type": "string", + "description": "Sort order.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "response": { + "$ref": "SubmissionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + }, + "series": { + "methods": { + "get": { + "id": "moderator.series.get", + "path": "series/{seriesId}", + "httpMethod": "GET", + "description": "Returns the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId" + ], + "response": { + "$ref": "Series" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "insert": { + "id": "moderator.series.insert", + "path": "series", + "httpMethod": "POST", + "description": "Inserts a new series.", + "request": { + "$ref": "Series" + }, + "response": { + "$ref": "Series" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "list": { + "id": "moderator.series.list", + "path": "series", + "httpMethod": "GET", + "description": "Searches the series and returns the search results.", + "parameters": { + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "patch": { + "id": "moderator.series.patch", + "path": "series/{seriesId}", + "httpMethod": "PATCH", + "description": "Updates the specified series. This method supports patch semantics.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId" + ], + "request": { + "$ref": "Series" + }, + "response": { + "$ref": "Series" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "update": { + "id": "moderator.series.update", + "path": "series/{seriesId}", + "httpMethod": "PUT", + "description": "Updates the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId" + ], + "request": { + "$ref": "Series" + }, + "response": { + "$ref": "Series" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + }, + "resources": { + "responses": { + "methods": { + "list": { + "id": "moderator.series.responses.list", + "path": "series/{seriesId}/responses", + "httpMethod": "GET", + "description": "Searches the responses for the specified series and returns the search results.", + "parameters": { + "author": { + "type": "string", + "description": "Restricts the results to submissions by a specific author.", + "location": "query" + }, + "hasAttachedVideo": { + "type": "boolean", + "description": "Specifies whether to restrict to submissions that have videos attached.", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "sort": { + "type": "string", + "description": "Sort order.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId" + ], + "response": { + "$ref": "SeriesList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + }, + "submissions": { + "methods": { + "list": { + "id": "moderator.series.submissions.list", + "path": "series/{seriesId}/submissions", + "httpMethod": "GET", + "description": "Searches the submissions for the specified series and returns the search results.", + "parameters": { + "author": { + "type": "string", + "description": "Restricts the results to submissions by a specific author.", + "location": "query" + }, + "hasAttachedVideo": { + "type": "boolean", + "description": "Specifies whether to restrict to submissions that have videos attached.", + "location": "query" + }, + "includeVotes": { + "type": "boolean", + "description": "Specifies whether to include the current user's vote", + "location": "query" + }, + "lang": { + "type": "string", + "description": "The language code for the language the client prefers resuls in.", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "sort": { + "type": "string", + "description": "Sort order.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId" + ], + "response": { + "$ref": "SubmissionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "submissions": { + "methods": { + "get": { + "id": "moderator.submissions.get", + "path": "series/{seriesId}/submissions/{submissionId}", + "httpMethod": "GET", + "description": "Returns the specified submission within the specified series.", + "parameters": { + "includeVotes": { + "type": "boolean", + "description": "Specifies whether to include the current user's vote", + "location": "query" + }, + "lang": { + "type": "string", + "description": "The language code for the language the client prefers resuls in.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "response": { + "$ref": "Submission" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "insert": { + "id": "moderator.submissions.insert", + "path": "series/{seriesId}/topics/{topicId}/submissions", + "httpMethod": "POST", + "description": "Inserts a new submission in the specified topic within the specified series.", + "parameters": { + "anonymous": { + "type": "boolean", + "description": "Set to true to mark the new submission as anonymous.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "topicId": { + "type": "integer", + "description": "The decimal ID of the Topic within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "topicId" + ], + "request": { + "$ref": "Submission" + }, + "response": { + "$ref": "Submission" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + }, + "tags": { + "methods": { + "delete": { + "id": "moderator.tags.delete", + "path": "series/{seriesId}/submissions/{submissionId}/tags/{tagId}", + "httpMethod": "DELETE", + "description": "Deletes the specified tag from the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "tagId": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId", + "tagId" + ], + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "insert": { + "id": "moderator.tags.insert", + "path": "series/{seriesId}/submissions/{submissionId}/tags", + "httpMethod": "POST", + "description": "Inserts a new tag for the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "request": { + "$ref": "Tag" + }, + "response": { + "$ref": "Tag" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "list": { + "id": "moderator.tags.list", + "path": "series/{seriesId}/submissions/{submissionId}/tags", + "httpMethod": "GET", + "description": "Lists all tags for the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "response": { + "$ref": "TagList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + }, + "topics": { + "methods": { + "get": { + "id": "moderator.topics.get", + "path": "series/{seriesId}/topics/{topicId}", + "httpMethod": "GET", + "description": "Returns the specified topic from the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "topicId": { + "type": "integer", + "description": "The decimal ID of the Topic within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "topicId" + ], + "response": { + "$ref": "Topic" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "insert": { + "id": "moderator.topics.insert", + "path": "series/{seriesId}/topics", + "httpMethod": "POST", + "description": "Inserts a new topic into the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId" + ], + "request": { + "$ref": "Topic" + }, + "response": { + "$ref": "Topic" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "list": { + "id": "moderator.topics.list", + "path": "series/{seriesId}/topics", + "httpMethod": "GET", + "description": "Searches the topics within the specified series and returns the search results.", + "parameters": { + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "mode": { + "type": "string", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId" + ], + "response": { + "$ref": "TopicList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "update": { + "id": "moderator.topics.update", + "path": "series/{seriesId}/topics/{topicId}", + "httpMethod": "PUT", + "description": "Updates the specified topic within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "topicId": { + "type": "integer", + "description": "The decimal ID of the Topic within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "topicId" + ], + "request": { + "$ref": "Topic" + }, + "response": { + "$ref": "Topic" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + }, + "resources": { + "submissions": { + "methods": { + "list": { + "id": "moderator.topics.submissions.list", + "path": "series/{seriesId}/topics/{topicId}/submissions", + "httpMethod": "GET", + "description": "Searches the submissions for the specified topic within the specified series and returns the search results.", + "parameters": { + "author": { + "type": "string", + "description": "Restricts the results to submissions by a specific author.", + "location": "query" + }, + "hasAttachedVideo": { + "type": "boolean", + "description": "Specifies whether to restrict to submissions that have videos attached.", + "location": "query" + }, + "includeVotes": { + "type": "boolean", + "description": "Specifies whether to include the current user's vote", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query.", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "sort": { + "type": "string", + "description": "Sort order.", + "location": "query" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + }, + "topicId": { + "type": "integer", + "description": "The decimal ID of the Topic within the Series.", + "required": true, + "format": "uint32", + "location": "path" + } + }, + "parameterOrder": [ + "seriesId", + "topicId" + ], + "response": { + "$ref": "SubmissionList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } + }, + "votes": { + "methods": { + "get": { + "id": "moderator.votes.get", + "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + "httpMethod": "GET", + "description": "Returns the votes by the authenticated user for the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + }, + "userId": { + "type": "string", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "response": { + "$ref": "Vote" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "insert": { + "id": "moderator.votes.insert", + "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + "httpMethod": "POST", + "description": "Inserts a new vote by the authenticated user for the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "request": { + "$ref": "Vote" + }, + "response": { + "$ref": "Vote" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "list": { + "id": "moderator.votes.list", + "path": "series/{seriesId}/votes/@me", + "httpMethod": "GET", + "description": "Lists the votes by the authenticated user for the given series.", + "parameters": { + "max-results": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "location": "query" + }, + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "start-index": { + "type": "integer", + "description": "Index of the first result to be retrieved.", + "format": "uint32", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId" + ], + "response": { + "$ref": "VoteList" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "patch": { + "id": "moderator.votes.patch", + "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + "httpMethod": "PATCH", + "description": "Updates the votes by the authenticated user for the specified submission within the specified series. This method supports patch semantics.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + }, + "userId": { + "type": "string", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "request": { + "$ref": "Vote" + }, + "response": { + "$ref": "Vote" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + }, + "update": { + "id": "moderator.votes.update", + "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + "httpMethod": "PUT", + "description": "Updates the votes by the authenticated user for the specified submission within the specified series.", + "parameters": { + "seriesId": { + "type": "integer", + "description": "The decimal ID of the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "submissionId": { + "type": "integer", + "description": "The decimal ID of the Submission within the Series.", + "required": true, + "format": "uint32", + "location": "path" + }, + "unauthToken": { + "type": "string", + "description": "User identifier for unauthenticated usage mode", + "location": "query" + }, + "userId": { + "type": "string", + "location": "query" + } + }, + "parameterOrder": [ + "seriesId", + "submissionId" + ], + "request": { + "$ref": "Vote" + }, + "response": { + "$ref": "Vote" + }, + "scopes": [ + "https://www.googleapis.com/auth/moderator" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-gen.go b/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-gen.go new file mode 100644 index 0000000000000..c20da411a3496 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/moderator/v1/moderator-gen.go @@ -0,0 +1,2606 @@ +// Package moderator provides access to the Moderator API. +// +// See http://code.google.com/apis/moderator/v1/using_rest.html +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/moderator/v1" +// ... +// moderatorService, err := moderator.New(oauthHttpClient) +package moderator + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New + +const apiId = "moderator:v1" +const apiName = "moderator" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/moderator/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your activity in Google Moderator + ModeratorScope = "https://www.googleapis.com/auth/moderator" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Featured = &FeaturedService{s: s} + s.Global = &GlobalService{s: s} + s.My = &MyService{s: s} + s.Myrecent = &MyrecentService{s: s} + s.Profiles = &ProfilesService{s: s} + s.Responses = &ResponsesService{s: s} + s.Series = &SeriesService{s: s} + s.Submissions = &SubmissionsService{s: s} + s.Tags = &TagsService{s: s} + s.Topics = &TopicsService{s: s} + s.Votes = &VotesService{s: s} + return s, nil +} + +type Service struct { + client *http.Client + + Featured *FeaturedService + + Global *GlobalService + + My *MyService + + Myrecent *MyrecentService + + Profiles *ProfilesService + + Responses *ResponsesService + + Series *SeriesService + + Submissions *SubmissionsService + + Tags *TagsService + + Topics *TopicsService + + Votes *VotesService +} + +type FeaturedService struct { + s *Service +} + +type GlobalService struct { + s *Service +} + +type MyService struct { + s *Service +} + +type MyrecentService struct { + s *Service +} + +type ProfilesService struct { + s *Service +} + +type ResponsesService struct { + s *Service +} + +type SeriesService struct { + s *Service +} + +type SubmissionsService struct { + s *Service +} + +type TagsService struct { + s *Service +} + +type TopicsService struct { + s *Service +} + +type VotesService struct { + s *Service +} + +type ModeratorTopicsResourcePartial struct { + Id *ModeratorTopicsResourcePartialId `json:"id,omitempty"` +} + +type ModeratorTopicsResourcePartialId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + TopicId int64 `json:"topicId,omitempty,string"` +} + +type ModeratorVotesResourcePartial struct { + Flag string `json:"flag,omitempty"` + + Vote string `json:"vote,omitempty"` +} + +type Profile struct { + Attribution *ProfileAttribution `json:"attribution,omitempty"` + + Id *ProfileId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type ProfileAttribution struct { + AvatarUrl string `json:"avatarUrl,omitempty"` + + DisplayName string `json:"displayName,omitempty"` + + Geo *ProfileAttributionGeo `json:"geo,omitempty"` + + Location string `json:"location,omitempty"` +} + +type ProfileAttributionGeo struct { + Latitude float64 `json:"latitude,omitempty"` + + Location string `json:"location,omitempty"` + + Longitude float64 `json:"longitude,omitempty"` +} + +type ProfileId struct { + User string `json:"user,omitempty"` +} + +type Series struct { + AnonymousSubmissionAllowed bool `json:"anonymousSubmissionAllowed,omitempty"` + + Counters *SeriesCounters `json:"counters,omitempty"` + + Description string `json:"description,omitempty"` + + Id *SeriesId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + Name string `json:"name,omitempty"` + + NumTopics int64 `json:"numTopics,omitempty"` + + Rules *SeriesRules `json:"rules,omitempty"` + + UnauthSubmissionAllowed bool `json:"unauthSubmissionAllowed,omitempty"` + + UnauthVotingAllowed bool `json:"unauthVotingAllowed,omitempty"` + + VideoSubmissionAllowed bool `json:"videoSubmissionAllowed,omitempty"` +} + +type SeriesCounters struct { + AnonymousSubmissions int64 `json:"anonymousSubmissions,omitempty"` + + MinusVotes int64 `json:"minusVotes,omitempty"` + + NoneVotes int64 `json:"noneVotes,omitempty"` + + PlusVotes int64 `json:"plusVotes,omitempty"` + + Submissions int64 `json:"submissions,omitempty"` + + Users int64 `json:"users,omitempty"` + + VideoSubmissions int64 `json:"videoSubmissions,omitempty"` +} + +type SeriesId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` +} + +type SeriesRules struct { + Submissions *SeriesRulesSubmissions `json:"submissions,omitempty"` + + Votes *SeriesRulesVotes `json:"votes,omitempty"` +} + +type SeriesRulesSubmissions struct { + Close uint64 `json:"close,omitempty,string"` + + Open uint64 `json:"open,omitempty,string"` +} + +type SeriesRulesVotes struct { + Close uint64 `json:"close,omitempty,string"` + + Open uint64 `json:"open,omitempty,string"` +} + +type SeriesList struct { + Items []*Series `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type Submission struct { + AttachmentUrl string `json:"attachmentUrl,omitempty"` + + Attribution *SubmissionAttribution `json:"attribution,omitempty"` + + Author string `json:"author,omitempty"` + + Counters *SubmissionCounters `json:"counters,omitempty"` + + Created uint64 `json:"created,omitempty,string"` + + Geo *SubmissionGeo `json:"geo,omitempty"` + + Id *SubmissionId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + ParentSubmissionId *SubmissionParentSubmissionId `json:"parentSubmissionId,omitempty"` + + Text string `json:"text,omitempty"` + + Topics []*ModeratorTopicsResourcePartial `json:"topics,omitempty"` + + Translations []*SubmissionTranslations `json:"translations,omitempty"` + + Vote *ModeratorVotesResourcePartial `json:"vote,omitempty"` +} + +type SubmissionAttribution struct { + AvatarUrl string `json:"avatarUrl,omitempty"` + + DisplayName string `json:"displayName,omitempty"` + + Location string `json:"location,omitempty"` +} + +type SubmissionCounters struct { + MinusVotes int64 `json:"minusVotes,omitempty"` + + NoneVotes int64 `json:"noneVotes,omitempty"` + + PlusVotes int64 `json:"plusVotes,omitempty"` +} + +type SubmissionGeo struct { + Latitude float64 `json:"latitude,omitempty"` + + Location string `json:"location,omitempty"` + + Longitude float64 `json:"longitude,omitempty"` +} + +type SubmissionId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + SubmissionId int64 `json:"submissionId,omitempty,string"` +} + +type SubmissionParentSubmissionId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + SubmissionId int64 `json:"submissionId,omitempty,string"` +} + +type SubmissionTranslations struct { + Lang string `json:"lang,omitempty"` + + Text string `json:"text,omitempty"` +} + +type SubmissionList struct { + Items []*Submission `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type Tag struct { + Id *TagId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + Text string `json:"text,omitempty"` +} + +type TagId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + SubmissionId int64 `json:"submissionId,omitempty,string"` + + TagId string `json:"tagId,omitempty"` +} + +type TagList struct { + Items []*Tag `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type Topic struct { + Counters *TopicCounters `json:"counters,omitempty"` + + Description string `json:"description,omitempty"` + + FeaturedSubmission *Submission `json:"featuredSubmission,omitempty"` + + Id *TopicId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + Name string `json:"name,omitempty"` + + Presenter string `json:"presenter,omitempty"` + + Rules *TopicRules `json:"rules,omitempty"` +} + +type TopicCounters struct { + MinusVotes int64 `json:"minusVotes,omitempty"` + + NoneVotes int64 `json:"noneVotes,omitempty"` + + PlusVotes int64 `json:"plusVotes,omitempty"` + + Submissions int64 `json:"submissions,omitempty"` + + Users int64 `json:"users,omitempty"` + + VideoSubmissions int64 `json:"videoSubmissions,omitempty"` +} + +type TopicId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + TopicId int64 `json:"topicId,omitempty,string"` +} + +type TopicRules struct { + Submissions *TopicRulesSubmissions `json:"submissions,omitempty"` + + Votes *TopicRulesVotes `json:"votes,omitempty"` +} + +type TopicRulesSubmissions struct { + Close uint64 `json:"close,omitempty,string"` + + Open uint64 `json:"open,omitempty,string"` +} + +type TopicRulesVotes struct { + Close uint64 `json:"close,omitempty,string"` + + Open uint64 `json:"open,omitempty,string"` +} + +type TopicList struct { + Items []*Topic `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +type Vote struct { + Flag string `json:"flag,omitempty"` + + Id *VoteId `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + Vote string `json:"vote,omitempty"` +} + +type VoteId struct { + SeriesId int64 `json:"seriesId,omitempty,string"` + + SubmissionId int64 `json:"submissionId,omitempty,string"` +} + +type VoteList struct { + Items []*Vote `json:"items,omitempty"` + + Kind string `json:"kind,omitempty"` +} + +// method id "moderator.profiles.get": + +type ProfilesGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Returns the profile information for the authenticated user. +func (r *ProfilesService) Get() *ProfilesGetCall { + c := &ProfilesGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *ProfilesGetCall) Do() (*Profile, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "profiles/@me") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the profile information for the authenticated user.", + // "httpMethod": "GET", + // "id": "moderator.profiles.get", + // "path": "profiles/@me", + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.profiles.patch": + +type ProfilesPatchCall struct { + s *Service + profile *Profile + opt_ map[string]interface{} +} + +// Patch: Updates the profile information for the authenticated user. +// This method supports patch semantics. +func (r *ProfilesService) Patch(profile *Profile) *ProfilesPatchCall { + c := &ProfilesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.profile = profile + return c +} + +func (c *ProfilesPatchCall) Do() (*Profile, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.profile) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "profiles/@me") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the profile information for the authenticated user. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "moderator.profiles.patch", + // "path": "profiles/@me", + // "request": { + // "$ref": "Profile" + // }, + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.profiles.update": + +type ProfilesUpdateCall struct { + s *Service + profile *Profile + opt_ map[string]interface{} +} + +// Update: Updates the profile information for the authenticated user. +func (r *ProfilesService) Update(profile *Profile) *ProfilesUpdateCall { + c := &ProfilesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.profile = profile + return c +} + +func (c *ProfilesUpdateCall) Do() (*Profile, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.profile) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "profiles/@me") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Profile) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the profile information for the authenticated user.", + // "httpMethod": "PUT", + // "id": "moderator.profiles.update", + // "path": "profiles/@me", + // "request": { + // "$ref": "Profile" + // }, + // "response": { + // "$ref": "Profile" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.responses.insert": + +type ResponsesInsertCall struct { + s *Service + seriesId int64 + topicId int64 + parentSubmissionId int64 + submission *Submission + opt_ map[string]interface{} +} + +// Insert: Inserts a response for the specified submission in the +// specified topic within the specified series. +func (r *ResponsesService) Insert(seriesId int64, topicId int64, parentSubmissionId int64, submission *Submission) *ResponsesInsertCall { + c := &ResponsesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.topicId = topicId + c.parentSubmissionId = parentSubmissionId + c.submission = submission + return c +} + +// Anonymous sets the optional parameter "anonymous": Set to true to +// mark the new submission as anonymous. +func (c *ResponsesInsertCall) Anonymous(anonymous bool) *ResponsesInsertCall { + c.opt_["anonymous"] = anonymous + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *ResponsesInsertCall) UnauthToken(unauthToken string) *ResponsesInsertCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +func (c *ResponsesInsertCall) Do() (*Submission, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.submission) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["anonymous"]; ok { + params.Set("anonymous", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + urls = strings.Replace(urls, "{parentSubmissionId}", strconv.FormatInt(c.parentSubmissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Submission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a response for the specified submission in the specified topic within the specified series.", + // "httpMethod": "POST", + // "id": "moderator.responses.insert", + // "parameterOrder": [ + // "seriesId", + // "topicId", + // "parentSubmissionId" + // ], + // "parameters": { + // "anonymous": { + // "description": "Set to true to mark the new submission as anonymous.", + // "location": "query", + // "type": "boolean" + // }, + // "parentSubmissionId": { + // "description": "The decimal ID of the parent Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The decimal ID of the Topic within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/topics/{topicId}/submissions/{parentSubmissionId}/responses", + // "request": { + // "$ref": "Submission" + // }, + // "response": { + // "$ref": "Submission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.responses.list": + +type ResponsesListCall struct { + s *Service + seriesId int64 + submissionId int64 + opt_ map[string]interface{} +} + +// List: Lists or searches the responses for the specified submission +// within the specified series and returns the search results. +func (r *ResponsesService) List(seriesId int64, submissionId int64) *ResponsesListCall { + c := &ResponsesListCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + return c +} + +// Author sets the optional parameter "author": Restricts the results to +// submissions by a specific author. +func (c *ResponsesListCall) Author(author string) *ResponsesListCall { + c.opt_["author"] = author + return c +} + +// HasAttachedVideo sets the optional parameter "hasAttachedVideo": +// Specifies whether to restrict to submissions that have videos +// attached. +func (c *ResponsesListCall) HasAttachedVideo(hasAttachedVideo bool) *ResponsesListCall { + c.opt_["hasAttachedVideo"] = hasAttachedVideo + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of results to return. +func (c *ResponsesListCall) MaxResults(maxResults int64) *ResponsesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// Q sets the optional parameter "q": Search query. +func (c *ResponsesListCall) Q(q string) *ResponsesListCall { + c.opt_["q"] = q + return c +} + +// Sort sets the optional parameter "sort": Sort order. +func (c *ResponsesListCall) Sort(sort string) *ResponsesListCall { + c.opt_["sort"] = sort + return c +} + +// StartIndex sets the optional parameter "start-index": Index of the +// first result to be retrieved. +func (c *ResponsesListCall) StartIndex(startIndex int64) *ResponsesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *ResponsesListCall) Do() (*SubmissionList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["author"]; ok { + params.Set("author", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["hasAttachedVideo"]; ok { + params.Set("hasAttachedVideo", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/responses") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SubmissionList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists or searches the responses for the specified submission within the specified series and returns the search results.", + // "httpMethod": "GET", + // "id": "moderator.responses.list", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "author": { + // "description": "Restricts the results to submissions by a specific author.", + // "location": "query", + // "type": "string" + // }, + // "hasAttachedVideo": { + // "description": "Specifies whether to restrict to submissions that have videos attached.", + // "location": "query", + // "type": "boolean" + // }, + // "max-results": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "q": { + // "description": "Search query.", + // "location": "query", + // "type": "string" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "sort": { + // "description": "Sort order.", + // "location": "query", + // "type": "string" + // }, + // "start-index": { + // "description": "Index of the first result to be retrieved.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/responses", + // "response": { + // "$ref": "SubmissionList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.series.get": + +type SeriesGetCall struct { + s *Service + seriesId int64 + opt_ map[string]interface{} +} + +// Get: Returns the specified series. +func (r *SeriesService) Get(seriesId int64) *SeriesGetCall { + c := &SeriesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + return c +} + +func (c *SeriesGetCall) Do() (*Series, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Series) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified series.", + // "httpMethod": "GET", + // "id": "moderator.series.get", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}", + // "response": { + // "$ref": "Series" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.series.insert": + +type SeriesInsertCall struct { + s *Service + series *Series + opt_ map[string]interface{} +} + +// Insert: Inserts a new series. +func (r *SeriesService) Insert(series *Series) *SeriesInsertCall { + c := &SeriesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.series = series + return c +} + +func (c *SeriesInsertCall) Do() (*Series, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.series) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Series) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new series.", + // "httpMethod": "POST", + // "id": "moderator.series.insert", + // "path": "series", + // "request": { + // "$ref": "Series" + // }, + // "response": { + // "$ref": "Series" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.series.list": + +type SeriesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Searches the series and returns the search results. +func (r *SeriesService) List() *SeriesListCall { + c := &SeriesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of results to return. +func (c *SeriesListCall) MaxResults(maxResults int64) *SeriesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// Q sets the optional parameter "q": Search query. +func (c *SeriesListCall) Q(q string) *SeriesListCall { + c.opt_["q"] = q + return c +} + +// StartIndex sets the optional parameter "start-index": Index of the +// first result to be retrieved. +func (c *SeriesListCall) StartIndex(startIndex int64) *SeriesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *SeriesListCall) Do() (*SeriesList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SeriesList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Searches the series and returns the search results.", + // "httpMethod": "GET", + // "id": "moderator.series.list", + // "parameters": { + // "max-results": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "q": { + // "description": "Search query.", + // "location": "query", + // "type": "string" + // }, + // "start-index": { + // "description": "Index of the first result to be retrieved.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "series", + // "response": { + // "$ref": "SeriesList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.series.patch": + +type SeriesPatchCall struct { + s *Service + seriesId int64 + series *Series + opt_ map[string]interface{} +} + +// Patch: Updates the specified series. This method supports patch +// semantics. +func (r *SeriesService) Patch(seriesId int64, series *Series) *SeriesPatchCall { + c := &SeriesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.series = series + return c +} + +func (c *SeriesPatchCall) Do() (*Series, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.series) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Series) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified series. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "moderator.series.patch", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}", + // "request": { + // "$ref": "Series" + // }, + // "response": { + // "$ref": "Series" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.series.update": + +type SeriesUpdateCall struct { + s *Service + seriesId int64 + series *Series + opt_ map[string]interface{} +} + +// Update: Updates the specified series. +func (r *SeriesService) Update(seriesId int64, series *Series) *SeriesUpdateCall { + c := &SeriesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.series = series + return c +} + +func (c *SeriesUpdateCall) Do() (*Series, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.series) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Series) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified series.", + // "httpMethod": "PUT", + // "id": "moderator.series.update", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}", + // "request": { + // "$ref": "Series" + // }, + // "response": { + // "$ref": "Series" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.submissions.get": + +type SubmissionsGetCall struct { + s *Service + seriesId int64 + submissionId int64 + opt_ map[string]interface{} +} + +// Get: Returns the specified submission within the specified series. +func (r *SubmissionsService) Get(seriesId int64, submissionId int64) *SubmissionsGetCall { + c := &SubmissionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + return c +} + +// IncludeVotes sets the optional parameter "includeVotes": Specifies +// whether to include the current user's vote +func (c *SubmissionsGetCall) IncludeVotes(includeVotes bool) *SubmissionsGetCall { + c.opt_["includeVotes"] = includeVotes + return c +} + +// Lang sets the optional parameter "lang": The language code for the +// language the client prefers resuls in. +func (c *SubmissionsGetCall) Lang(lang string) *SubmissionsGetCall { + c.opt_["lang"] = lang + return c +} + +func (c *SubmissionsGetCall) Do() (*Submission, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["includeVotes"]; ok { + params.Set("includeVotes", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["lang"]; ok { + params.Set("lang", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Submission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified submission within the specified series.", + // "httpMethod": "GET", + // "id": "moderator.submissions.get", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "includeVotes": { + // "description": "Specifies whether to include the current user's vote", + // "location": "query", + // "type": "boolean" + // }, + // "lang": { + // "description": "The language code for the language the client prefers resuls in.", + // "location": "query", + // "type": "string" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}", + // "response": { + // "$ref": "Submission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.submissions.insert": + +type SubmissionsInsertCall struct { + s *Service + seriesId int64 + topicId int64 + submission *Submission + opt_ map[string]interface{} +} + +// Insert: Inserts a new submission in the specified topic within the +// specified series. +func (r *SubmissionsService) Insert(seriesId int64, topicId int64, submission *Submission) *SubmissionsInsertCall { + c := &SubmissionsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.topicId = topicId + c.submission = submission + return c +} + +// Anonymous sets the optional parameter "anonymous": Set to true to +// mark the new submission as anonymous. +func (c *SubmissionsInsertCall) Anonymous(anonymous bool) *SubmissionsInsertCall { + c.opt_["anonymous"] = anonymous + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *SubmissionsInsertCall) UnauthToken(unauthToken string) *SubmissionsInsertCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +func (c *SubmissionsInsertCall) Do() (*Submission, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.submission) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["anonymous"]; ok { + params.Set("anonymous", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics/{topicId}/submissions") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Submission) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new submission in the specified topic within the specified series.", + // "httpMethod": "POST", + // "id": "moderator.submissions.insert", + // "parameterOrder": [ + // "seriesId", + // "topicId" + // ], + // "parameters": { + // "anonymous": { + // "description": "Set to true to mark the new submission as anonymous.", + // "location": "query", + // "type": "boolean" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The decimal ID of the Topic within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/topics/{topicId}/submissions", + // "request": { + // "$ref": "Submission" + // }, + // "response": { + // "$ref": "Submission" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.tags.delete": + +type TagsDeleteCall struct { + s *Service + seriesId int64 + submissionId int64 + tagId string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified tag from the specified submission +// within the specified series. +func (r *TagsService) Delete(seriesId int64, submissionId int64, tagId string) *TagsDeleteCall { + c := &TagsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + c.tagId = tagId + return c +} + +func (c *TagsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/tags/{tagId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls = strings.Replace(urls, "{tagId}", cleanPathString(c.tagId), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified tag from the specified submission within the specified series.", + // "httpMethod": "DELETE", + // "id": "moderator.tags.delete", + // "parameterOrder": [ + // "seriesId", + // "submissionId", + // "tagId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "tagId": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/tags/{tagId}", + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.tags.insert": + +type TagsInsertCall struct { + s *Service + seriesId int64 + submissionId int64 + tag *Tag + opt_ map[string]interface{} +} + +// Insert: Inserts a new tag for the specified submission within the +// specified series. +func (r *TagsService) Insert(seriesId int64, submissionId int64, tag *Tag) *TagsInsertCall { + c := &TagsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + c.tag = tag + return c +} + +func (c *TagsInsertCall) Do() (*Tag, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.tag) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/tags") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tag) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new tag for the specified submission within the specified series.", + // "httpMethod": "POST", + // "id": "moderator.tags.insert", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/tags", + // "request": { + // "$ref": "Tag" + // }, + // "response": { + // "$ref": "Tag" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.tags.list": + +type TagsListCall struct { + s *Service + seriesId int64 + submissionId int64 + opt_ map[string]interface{} +} + +// List: Lists all tags for the specified submission within the +// specified series. +func (r *TagsService) List(seriesId int64, submissionId int64) *TagsListCall { + c := &TagsListCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + return c +} + +func (c *TagsListCall) Do() (*TagList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/tags") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TagList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all tags for the specified submission within the specified series.", + // "httpMethod": "GET", + // "id": "moderator.tags.list", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/tags", + // "response": { + // "$ref": "TagList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.topics.get": + +type TopicsGetCall struct { + s *Service + seriesId int64 + topicId int64 + opt_ map[string]interface{} +} + +// Get: Returns the specified topic from the specified series. +func (r *TopicsService) Get(seriesId int64, topicId int64) *TopicsGetCall { + c := &TopicsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.topicId = topicId + return c +} + +func (c *TopicsGetCall) Do() (*Topic, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics/{topicId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Topic) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified topic from the specified series.", + // "httpMethod": "GET", + // "id": "moderator.topics.get", + // "parameterOrder": [ + // "seriesId", + // "topicId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The decimal ID of the Topic within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/topics/{topicId}", + // "response": { + // "$ref": "Topic" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.topics.insert": + +type TopicsInsertCall struct { + s *Service + seriesId int64 + topic *Topic + opt_ map[string]interface{} +} + +// Insert: Inserts a new topic into the specified series. +func (r *TopicsService) Insert(seriesId int64, topic *Topic) *TopicsInsertCall { + c := &TopicsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.topic = topic + return c +} + +func (c *TopicsInsertCall) Do() (*Topic, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.topic) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Topic) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new topic into the specified series.", + // "httpMethod": "POST", + // "id": "moderator.topics.insert", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/topics", + // "request": { + // "$ref": "Topic" + // }, + // "response": { + // "$ref": "Topic" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.topics.list": + +type TopicsListCall struct { + s *Service + seriesId int64 + opt_ map[string]interface{} +} + +// List: Searches the topics within the specified series and returns the +// search results. +func (r *TopicsService) List(seriesId int64) *TopicsListCall { + c := &TopicsListCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of results to return. +func (c *TopicsListCall) MaxResults(maxResults int64) *TopicsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// Mode sets the optional parameter "mode": +func (c *TopicsListCall) Mode(mode string) *TopicsListCall { + c.opt_["mode"] = mode + return c +} + +// Q sets the optional parameter "q": Search query. +func (c *TopicsListCall) Q(q string) *TopicsListCall { + c.opt_["q"] = q + return c +} + +// StartIndex sets the optional parameter "start-index": Index of the +// first result to be retrieved. +func (c *TopicsListCall) StartIndex(startIndex int64) *TopicsListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *TopicsListCall) Do() (*TopicList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["mode"]; ok { + params.Set("mode", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TopicList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Searches the topics within the specified series and returns the search results.", + // "httpMethod": "GET", + // "id": "moderator.topics.list", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "max-results": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "mode": { + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "Search query.", + // "location": "query", + // "type": "string" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "start-index": { + // "description": "Index of the first result to be retrieved.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/topics", + // "response": { + // "$ref": "TopicList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.topics.update": + +type TopicsUpdateCall struct { + s *Service + seriesId int64 + topicId int64 + topic *Topic + opt_ map[string]interface{} +} + +// Update: Updates the specified topic within the specified series. +func (r *TopicsService) Update(seriesId int64, topicId int64, topic *Topic) *TopicsUpdateCall { + c := &TopicsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.topicId = topicId + c.topic = topic + return c +} + +func (c *TopicsUpdateCall) Do() (*Topic, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.topic) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/topics/{topicId}") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Topic) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified topic within the specified series.", + // "httpMethod": "PUT", + // "id": "moderator.topics.update", + // "parameterOrder": [ + // "seriesId", + // "topicId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The decimal ID of the Topic within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/topics/{topicId}", + // "request": { + // "$ref": "Topic" + // }, + // "response": { + // "$ref": "Topic" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.votes.get": + +type VotesGetCall struct { + s *Service + seriesId int64 + submissionId int64 + opt_ map[string]interface{} +} + +// Get: Returns the votes by the authenticated user for the specified +// submission within the specified series. +func (r *VotesService) Get(seriesId int64, submissionId int64) *VotesGetCall { + c := &VotesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *VotesGetCall) UnauthToken(unauthToken string) *VotesGetCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +// UserId sets the optional parameter "userId": +func (c *VotesGetCall) UserId(userId string) *VotesGetCall { + c.opt_["userId"] = userId + return c +} + +func (c *VotesGetCall) Do() (*Vote, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/votes/@me") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Vote) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the votes by the authenticated user for the specified submission within the specified series.", + // "httpMethod": "GET", + // "id": "moderator.votes.get", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + // "response": { + // "$ref": "Vote" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.votes.insert": + +type VotesInsertCall struct { + s *Service + seriesId int64 + submissionId int64 + vote *Vote + opt_ map[string]interface{} +} + +// Insert: Inserts a new vote by the authenticated user for the +// specified submission within the specified series. +func (r *VotesService) Insert(seriesId int64, submissionId int64, vote *Vote) *VotesInsertCall { + c := &VotesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + c.vote = vote + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *VotesInsertCall) UnauthToken(unauthToken string) *VotesInsertCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +func (c *VotesInsertCall) Do() (*Vote, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.vote) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/votes/@me") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Vote) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new vote by the authenticated user for the specified submission within the specified series.", + // "httpMethod": "POST", + // "id": "moderator.votes.insert", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + // "request": { + // "$ref": "Vote" + // }, + // "response": { + // "$ref": "Vote" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.votes.list": + +type VotesListCall struct { + s *Service + seriesId int64 + opt_ map[string]interface{} +} + +// List: Lists the votes by the authenticated user for the given series. +func (r *VotesService) List(seriesId int64) *VotesListCall { + c := &VotesListCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of results to return. +func (c *VotesListCall) MaxResults(maxResults int64) *VotesListCall { + c.opt_["max-results"] = maxResults + return c +} + +// StartIndex sets the optional parameter "start-index": Index of the +// first result to be retrieved. +func (c *VotesListCall) StartIndex(startIndex int64) *VotesListCall { + c.opt_["start-index"] = startIndex + return c +} + +func (c *VotesListCall) Do() (*VoteList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-index"]; ok { + params.Set("start-index", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/votes/@me") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(VoteList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists the votes by the authenticated user for the given series.", + // "httpMethod": "GET", + // "id": "moderator.votes.list", + // "parameterOrder": [ + // "seriesId" + // ], + // "parameters": { + // "max-results": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "start-index": { + // "description": "Index of the first result to be retrieved.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // } + // }, + // "path": "series/{seriesId}/votes/@me", + // "response": { + // "$ref": "VoteList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.votes.patch": + +type VotesPatchCall struct { + s *Service + seriesId int64 + submissionId int64 + vote *Vote + opt_ map[string]interface{} +} + +// Patch: Updates the votes by the authenticated user for the specified +// submission within the specified series. This method supports patch +// semantics. +func (r *VotesService) Patch(seriesId int64, submissionId int64, vote *Vote) *VotesPatchCall { + c := &VotesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + c.vote = vote + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *VotesPatchCall) UnauthToken(unauthToken string) *VotesPatchCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +// UserId sets the optional parameter "userId": +func (c *VotesPatchCall) UserId(userId string) *VotesPatchCall { + c.opt_["userId"] = userId + return c +} + +func (c *VotesPatchCall) Do() (*Vote, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.vote) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/votes/@me") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Vote) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the votes by the authenticated user for the specified submission within the specified series. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "moderator.votes.patch", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + // "request": { + // "$ref": "Vote" + // }, + // "response": { + // "$ref": "Vote" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +// method id "moderator.votes.update": + +type VotesUpdateCall struct { + s *Service + seriesId int64 + submissionId int64 + vote *Vote + opt_ map[string]interface{} +} + +// Update: Updates the votes by the authenticated user for the specified +// submission within the specified series. +func (r *VotesService) Update(seriesId int64, submissionId int64, vote *Vote) *VotesUpdateCall { + c := &VotesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.seriesId = seriesId + c.submissionId = submissionId + c.vote = vote + return c +} + +// UnauthToken sets the optional parameter "unauthToken": User +// identifier for unauthenticated usage mode +func (c *VotesUpdateCall) UnauthToken(unauthToken string) *VotesUpdateCall { + c.opt_["unauthToken"] = unauthToken + return c +} + +// UserId sets the optional parameter "userId": +func (c *VotesUpdateCall) UserId(userId string) *VotesUpdateCall { + c.opt_["userId"] = userId + return c +} + +func (c *VotesUpdateCall) Do() (*Vote, error) { + var body io.Reader = nil + body, err := googleapi.WithDataWrapper.JSONReader(c.vote) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["unauthToken"]; ok { + params.Set("unauthToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/moderator/v1/", "series/{seriesId}/submissions/{submissionId}/votes/@me") + urls = strings.Replace(urls, "{seriesId}", strconv.FormatInt(c.seriesId, 10), 1) + urls = strings.Replace(urls, "{submissionId}", strconv.FormatInt(c.submissionId, 10), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Vote) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the votes by the authenticated user for the specified submission within the specified series.", + // "httpMethod": "PUT", + // "id": "moderator.votes.update", + // "parameterOrder": [ + // "seriesId", + // "submissionId" + // ], + // "parameters": { + // "seriesId": { + // "description": "The decimal ID of the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "submissionId": { + // "description": "The decimal ID of the Submission within the Series.", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "unauthToken": { + // "description": "User identifier for unauthenticated usage mode", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "series/{seriesId}/submissions/{submissionId}/votes/@me", + // "request": { + // "$ref": "Vote" + // }, + // "response": { + // "$ref": "Vote" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/moderator" + // ] + // } + +} + +func cleanPathString(s string) string { + return strings.Map(func(r rune) rune { + if r >= 0x2d && r <= 0x7a || r == '~' { + return r + } + return -1 + }, s) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-api.json b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-api.json new file mode 100644 index 0000000000000..906c48223ba31 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-api.json @@ -0,0 +1,264 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/WlcQEurGo0sEddzjdUrIBdx9npM\"", + "discoveryVersion": "v1", + "id": "oauth2:v1", + "name": "oauth2", + "version": "v1", + "title": "Google OAuth2 API", + "description": "Lets you access OAuth2 protocol related APIs.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/accounts/docs/OAuth2", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/", + "basePath": "/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + }, + "https://www.googleapis.com/auth/plus.me": { + "description": "Know who you are on Google" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + }, + "https://www.googleapis.com/auth/userinfo.profile": { + "description": "View basic information about your account" + } + } + } + }, + "schemas": { + "Tokeninfo": { + "id": "Tokeninfo", + "type": "object", + "properties": { + "access_type": { + "type": "string", + "description": "The access type granted with this token. It can be offline or online." + }, + "audience": { + "type": "string", + "description": "Who is the intended audience for this token. In general the same as issued_to." + }, + "email": { + "type": "string", + "description": "The email address of the user. Present only if the email scope is present in the request." + }, + "email_verified": { + "type": "boolean", + "description": "Boolean flag which is true if the email address is verified. Present only if the email scope is present in the request." + }, + "expires_in": { + "type": "integer", + "description": "The expiry time of the token, as number of seconds left until expiry.", + "format": "int32" + }, + "issued_at": { + "type": "integer", + "description": "The issue time of the token, as number of seconds.", + "format": "int32" + }, + "issued_to": { + "type": "string", + "description": "To whom was the token issued to. In general the same as audience." + }, + "issuer": { + "type": "string", + "description": "Who issued the token." + }, + "nonce": { + "type": "string", + "description": "Nonce of the id token." + }, + "scope": { + "type": "string", + "description": "The space separated list of scopes granted to this token." + }, + "user_id": { + "type": "string", + "description": "The Gaia obfuscated user id." + }, + "verified_email": { + "type": "boolean", + "description": "Boolean flag which is true if the email address is verified. Present only if the email scope is present in the request." + } + } + }, + "Userinfoplus": { + "id": "Userinfoplus", + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user's email address." + }, + "family_name": { + "type": "string", + "description": "The user's last name." + }, + "gender": { + "type": "string", + "description": "The user's gender." + }, + "given_name": { + "type": "string", + "description": "The user's first name." + }, + "hd": { + "type": "string", + "description": "The hosted domain e.g. example.com if the user is Google apps user." + }, + "id": { + "type": "string", + "description": "The focus obfuscated gaia id of the user." + }, + "link": { + "type": "string", + "description": "URL of the profile page." + }, + "locale": { + "type": "string", + "description": "The user's preferred locale." + }, + "name": { + "type": "string", + "description": "The user's full name." + }, + "picture": { + "type": "string", + "description": "URL of the user's picture image." + }, + "verified_email": { + "type": "boolean", + "description": "Boolean flag which is true if the email address is verified. Always verified because we only return the user's primary email address.", + "default": "true" + } + } + } + }, + "methods": { + "tokeninfo": { + "id": "oauth2.tokeninfo", + "path": "oauth2/v1/tokeninfo", + "httpMethod": "POST", + "description": "Get token info", + "parameters": { + "access_token": { + "type": "string", + "description": "The oauth2 access token", + "location": "query" + }, + "id_token": { + "type": "string", + "description": "The ID token", + "location": "query" + } + }, + "response": { + "$ref": "Tokeninfo" + } + } + }, + "resources": { + "userinfo": { + "methods": { + "get": { + "id": "oauth2.userinfo.get", + "path": "oauth2/v1/userinfo", + "httpMethod": "GET", + "description": "Get user info", + "response": { + "$ref": "Userinfoplus" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + } + }, + "resources": { + "v2": { + "resources": { + "me": { + "methods": { + "get": { + "id": "oauth2.userinfo.v2.me.get", + "path": "userinfo/v2/me", + "httpMethod": "GET", + "description": "Get user info", + "response": { + "$ref": "Userinfoplus" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + } + } + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-gen.go b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-gen.go new file mode 100644 index 0000000000000..d142f5190baf3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v1/oauth2-gen.go @@ -0,0 +1,371 @@ +// Package oauth2 provides access to the Google OAuth2 API. +// +// See https://developers.google.com/accounts/docs/OAuth2 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/oauth2/v1" +// ... +// oauth2Service, err := oauth2.New(oauthHttpClient) +package oauth2 + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "oauth2:v1" +const apiName = "oauth2" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/" + +// OAuth2 scopes used by this API. +const ( + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" + + // Know who you are on Google + PlusMeScope = "https://www.googleapis.com/auth/plus.me" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" + + // View basic information about your account + UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Userinfo = NewUserinfoService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Userinfo *UserinfoService +} + +func NewUserinfoService(s *Service) *UserinfoService { + rs := &UserinfoService{s: s} + rs.V2 = NewUserinfoV2Service(s) + return rs +} + +type UserinfoService struct { + s *Service + + V2 *UserinfoV2Service +} + +func NewUserinfoV2Service(s *Service) *UserinfoV2Service { + rs := &UserinfoV2Service{s: s} + rs.Me = NewUserinfoV2MeService(s) + return rs +} + +type UserinfoV2Service struct { + s *Service + + Me *UserinfoV2MeService +} + +func NewUserinfoV2MeService(s *Service) *UserinfoV2MeService { + rs := &UserinfoV2MeService{s: s} + return rs +} + +type UserinfoV2MeService struct { + s *Service +} + +type Tokeninfo struct { + // Access_type: The access type granted with this token. It can be + // offline or online. + Access_type string `json:"access_type,omitempty"` + + // Audience: Who is the intended audience for this token. In general the + // same as issued_to. + Audience string `json:"audience,omitempty"` + + // Email: The email address of the user. Present only if the email scope + // is present in the request. + Email string `json:"email,omitempty"` + + // Email_verified: Boolean flag which is true if the email address is + // verified. Present only if the email scope is present in the request. + Email_verified bool `json:"email_verified,omitempty"` + + // Expires_in: The expiry time of the token, as number of seconds left + // until expiry. + Expires_in int64 `json:"expires_in,omitempty"` + + // Issued_at: The issue time of the token, as number of seconds. + Issued_at int64 `json:"issued_at,omitempty"` + + // Issued_to: To whom was the token issued to. In general the same as + // audience. + Issued_to string `json:"issued_to,omitempty"` + + // Issuer: Who issued the token. + Issuer string `json:"issuer,omitempty"` + + // Nonce: Nonce of the id token. + Nonce string `json:"nonce,omitempty"` + + // Scope: The space separated list of scopes granted to this token. + Scope string `json:"scope,omitempty"` + + // User_id: The Gaia obfuscated user id. + User_id string `json:"user_id,omitempty"` + + // Verified_email: Boolean flag which is true if the email address is + // verified. Present only if the email scope is present in the request. + Verified_email bool `json:"verified_email,omitempty"` +} + +type Userinfoplus struct { + // Email: The user's email address. + Email string `json:"email,omitempty"` + + // Family_name: The user's last name. + Family_name string `json:"family_name,omitempty"` + + // Gender: The user's gender. + Gender string `json:"gender,omitempty"` + + // Given_name: The user's first name. + Given_name string `json:"given_name,omitempty"` + + // Hd: The hosted domain e.g. example.com if the user is Google apps + // user. + Hd string `json:"hd,omitempty"` + + // Id: The focus obfuscated gaia id of the user. + Id string `json:"id,omitempty"` + + // Link: URL of the profile page. + Link string `json:"link,omitempty"` + + // Locale: The user's preferred locale. + Locale string `json:"locale,omitempty"` + + // Name: The user's full name. + Name string `json:"name,omitempty"` + + // Picture: URL of the user's picture image. + Picture string `json:"picture,omitempty"` + + // Verified_email: Boolean flag which is true if the email address is + // verified. Always verified because we only return the user's primary + // email address. + Verified_email bool `json:"verified_email,omitempty"` +} + +// method id "oauth2.tokeninfo": + +type TokeninfoCall struct { + s *Service + opt_ map[string]interface{} +} + +// Tokeninfo: Get token info +func (s *Service) Tokeninfo() *TokeninfoCall { + c := &TokeninfoCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// Access_token sets the optional parameter "access_token": The oauth2 +// access token +func (c *TokeninfoCall) Access_token(access_token string) *TokeninfoCall { + c.opt_["access_token"] = access_token + return c +} + +// Id_token sets the optional parameter "id_token": The ID token +func (c *TokeninfoCall) Id_token(id_token string) *TokeninfoCall { + c.opt_["id_token"] = id_token + return c +} + +func (c *TokeninfoCall) Do() (*Tokeninfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["access_token"]; ok { + params.Set("access_token", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["id_token"]; ok { + params.Set("id_token", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v1/tokeninfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tokeninfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get token info", + // "httpMethod": "POST", + // "id": "oauth2.tokeninfo", + // "parameters": { + // "access_token": { + // "description": "The oauth2 access token", + // "location": "query", + // "type": "string" + // }, + // "id_token": { + // "description": "The ID token", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "oauth2/v1/tokeninfo", + // "response": { + // "$ref": "Tokeninfo" + // } + // } + +} + +// method id "oauth2.userinfo.get": + +type UserinfoGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Get user info +func (r *UserinfoService) Get() *UserinfoGetCall { + c := &UserinfoGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserinfoGetCall) Do() (*Userinfoplus, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v1/userinfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Userinfoplus) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get user info", + // "httpMethod": "GET", + // "id": "oauth2.userinfo.get", + // "path": "oauth2/v1/userinfo", + // "response": { + // "$ref": "Userinfoplus" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} + +// method id "oauth2.userinfo.v2.me.get": + +type UserinfoV2MeGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: Get user info +func (r *UserinfoV2MeService) Get() *UserinfoV2MeGetCall { + c := &UserinfoV2MeGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserinfoV2MeGetCall) Do() (*Userinfoplus, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userinfo/v2/me") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Userinfoplus) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get user info", + // "httpMethod": "GET", + // "id": "oauth2.userinfo.v2.me.get", + // "path": "userinfo/v2/me", + // "response": { + // "$ref": "Userinfoplus" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-api.json b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-api.json new file mode 100644 index 0000000000000..f2dc9f4b90497 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-api.json @@ -0,0 +1,242 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/czsLFT9it2ZNLIudcLONTk9pYrY\"", + "discoveryVersion": "v1", + "id": "oauth2:v2", + "name": "oauth2", + "version": "v2", + "title": "Google OAuth2 API", + "description": "Lets you access OAuth2 protocol related APIs.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/accounts/docs/OAuth2", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/", + "basePath": "/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + }, + "https://www.googleapis.com/auth/plus.me": { + "description": "Know who you are on Google" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + }, + "https://www.googleapis.com/auth/userinfo.profile": { + "description": "View basic information about your account" + } + } + } + }, + "schemas": { + "Tokeninfo": { + "id": "Tokeninfo", + "type": "object", + "properties": { + "access_type": { + "type": "string", + "description": "The access type granted with this token. It can be offline or online." + }, + "audience": { + "type": "string", + "description": "Who is the intended audience for this token. In general the same as issued_to." + }, + "email": { + "type": "string", + "description": "The email address of the user. Present only if the email scope is present in the request." + }, + "expires_in": { + "type": "integer", + "description": "The expiry time of the token, as number of seconds left until expiry.", + "format": "int32" + }, + "issued_to": { + "type": "string", + "description": "To whom was the token issued to. In general the same as audience." + }, + "scope": { + "type": "string", + "description": "The space separated list of scopes granted to this token." + }, + "user_id": { + "type": "string", + "description": "The Gaia obfuscated user id." + }, + "verified_email": { + "type": "boolean", + "description": "Boolean flag which is true if the email address is verified. Present only if the email scope is present in the request." + } + } + }, + "Userinfoplus": { + "id": "Userinfoplus", + "type": "object", + "properties": { + "email": { + "type": "string", + "description": "The user's email address." + }, + "family_name": { + "type": "string", + "description": "The user's last name." + }, + "gender": { + "type": "string", + "description": "The user's gender." + }, + "given_name": { + "type": "string", + "description": "The user's first name." + }, + "hd": { + "type": "string", + "description": "The hosted domain e.g. example.com if the user is Google apps user." + }, + "id": { + "type": "string", + "description": "The focus obfuscated gaia id of the user." + }, + "link": { + "type": "string", + "description": "URL of the profile page." + }, + "locale": { + "type": "string", + "description": "The user's preferred locale." + }, + "name": { + "type": "string", + "description": "The user's full name." + }, + "picture": { + "type": "string", + "description": "URL of the user's picture image." + }, + "verified_email": { + "type": "boolean", + "description": "Boolean flag which is true if the email address is verified. Always verified because we only return the user's primary email address.", + "default": "true" + } + } + } + }, + "methods": { + "tokeninfo": { + "id": "oauth2.tokeninfo", + "path": "oauth2/v2/tokeninfo", + "httpMethod": "POST", + "parameters": { + "access_token": { + "type": "string", + "location": "query" + }, + "id_token": { + "type": "string", + "location": "query" + } + }, + "response": { + "$ref": "Tokeninfo" + } + } + }, + "resources": { + "userinfo": { + "methods": { + "get": { + "id": "oauth2.userinfo.get", + "path": "oauth2/v2/userinfo", + "httpMethod": "GET", + "response": { + "$ref": "Userinfoplus" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + } + }, + "resources": { + "v2": { + "resources": { + "me": { + "methods": { + "get": { + "id": "oauth2.userinfo.v2.me.get", + "path": "userinfo/v2/me", + "httpMethod": "GET", + "response": { + "$ref": "Userinfoplus" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + } + } + } + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-gen.go b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-gen.go new file mode 100644 index 0000000000000..bfa61293568b2 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/oauth2/v2/oauth2-gen.go @@ -0,0 +1,352 @@ +// Package oauth2 provides access to the Google OAuth2 API. +// +// See https://developers.google.com/accounts/docs/OAuth2 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/oauth2/v2" +// ... +// oauth2Service, err := oauth2.New(oauthHttpClient) +package oauth2 + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "oauth2:v2" +const apiName = "oauth2" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/" + +// OAuth2 scopes used by this API. +const ( + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" + + // Know who you are on Google + PlusMeScope = "https://www.googleapis.com/auth/plus.me" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" + + // View basic information about your account + UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Userinfo = NewUserinfoService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Userinfo *UserinfoService +} + +func NewUserinfoService(s *Service) *UserinfoService { + rs := &UserinfoService{s: s} + rs.V2 = NewUserinfoV2Service(s) + return rs +} + +type UserinfoService struct { + s *Service + + V2 *UserinfoV2Service +} + +func NewUserinfoV2Service(s *Service) *UserinfoV2Service { + rs := &UserinfoV2Service{s: s} + rs.Me = NewUserinfoV2MeService(s) + return rs +} + +type UserinfoV2Service struct { + s *Service + + Me *UserinfoV2MeService +} + +func NewUserinfoV2MeService(s *Service) *UserinfoV2MeService { + rs := &UserinfoV2MeService{s: s} + return rs +} + +type UserinfoV2MeService struct { + s *Service +} + +type Tokeninfo struct { + // Access_type: The access type granted with this token. It can be + // offline or online. + Access_type string `json:"access_type,omitempty"` + + // Audience: Who is the intended audience for this token. In general the + // same as issued_to. + Audience string `json:"audience,omitempty"` + + // Email: The email address of the user. Present only if the email scope + // is present in the request. + Email string `json:"email,omitempty"` + + // Expires_in: The expiry time of the token, as number of seconds left + // until expiry. + Expires_in int64 `json:"expires_in,omitempty"` + + // Issued_to: To whom was the token issued to. In general the same as + // audience. + Issued_to string `json:"issued_to,omitempty"` + + // Scope: The space separated list of scopes granted to this token. + Scope string `json:"scope,omitempty"` + + // User_id: The Gaia obfuscated user id. + User_id string `json:"user_id,omitempty"` + + // Verified_email: Boolean flag which is true if the email address is + // verified. Present only if the email scope is present in the request. + Verified_email bool `json:"verified_email,omitempty"` +} + +type Userinfoplus struct { + // Email: The user's email address. + Email string `json:"email,omitempty"` + + // Family_name: The user's last name. + Family_name string `json:"family_name,omitempty"` + + // Gender: The user's gender. + Gender string `json:"gender,omitempty"` + + // Given_name: The user's first name. + Given_name string `json:"given_name,omitempty"` + + // Hd: The hosted domain e.g. example.com if the user is Google apps + // user. + Hd string `json:"hd,omitempty"` + + // Id: The focus obfuscated gaia id of the user. + Id string `json:"id,omitempty"` + + // Link: URL of the profile page. + Link string `json:"link,omitempty"` + + // Locale: The user's preferred locale. + Locale string `json:"locale,omitempty"` + + // Name: The user's full name. + Name string `json:"name,omitempty"` + + // Picture: URL of the user's picture image. + Picture string `json:"picture,omitempty"` + + // Verified_email: Boolean flag which is true if the email address is + // verified. Always verified because we only return the user's primary + // email address. + Verified_email bool `json:"verified_email,omitempty"` +} + +// method id "oauth2.tokeninfo": + +type TokeninfoCall struct { + s *Service + opt_ map[string]interface{} +} + +// Tokeninfo: +func (s *Service) Tokeninfo() *TokeninfoCall { + c := &TokeninfoCall{s: s, opt_: make(map[string]interface{})} + return c +} + +// Access_token sets the optional parameter "access_token": +func (c *TokeninfoCall) Access_token(access_token string) *TokeninfoCall { + c.opt_["access_token"] = access_token + return c +} + +// Id_token sets the optional parameter "id_token": +func (c *TokeninfoCall) Id_token(id_token string) *TokeninfoCall { + c.opt_["id_token"] = id_token + return c +} + +func (c *TokeninfoCall) Do() (*Tokeninfo, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["access_token"]; ok { + params.Set("access_token", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["id_token"]; ok { + params.Set("id_token", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v2/tokeninfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tokeninfo) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "POST", + // "id": "oauth2.tokeninfo", + // "parameters": { + // "access_token": { + // "location": "query", + // "type": "string" + // }, + // "id_token": { + // "location": "query", + // "type": "string" + // } + // }, + // "path": "oauth2/v2/tokeninfo", + // "response": { + // "$ref": "Tokeninfo" + // } + // } + +} + +// method id "oauth2.userinfo.get": + +type UserinfoGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: +func (r *UserinfoService) Get() *UserinfoGetCall { + c := &UserinfoGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserinfoGetCall) Do() (*Userinfoplus, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "oauth2/v2/userinfo") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Userinfoplus) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "oauth2.userinfo.get", + // "path": "oauth2/v2/userinfo", + // "response": { + // "$ref": "Userinfoplus" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} + +// method id "oauth2.userinfo.v2.me.get": + +type UserinfoV2MeGetCall struct { + s *Service + opt_ map[string]interface{} +} + +// Get: +func (r *UserinfoV2MeService) Get() *UserinfoV2MeGetCall { + c := &UserinfoV2MeGetCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *UserinfoV2MeGetCall) Do() (*Userinfoplus, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "userinfo/v2/me") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Userinfoplus) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "httpMethod": "GET", + // "id": "oauth2.userinfo.v2.me.get", + // "path": "userinfo/v2/me", + // "response": { + // "$ref": "Userinfoplus" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-api.json b/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-api.json new file mode 100644 index 0000000000000..aee0d749e3c95 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-api.json @@ -0,0 +1,2451 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/xiMdcGrwm4vNaftUqbcmg_X46_0\"", + "discoveryVersion": "v1", + "id": "orkut:v2", + "name": "orkut", + "version": "v2", + "title": "Orkut API", + "description": "Lets you manage activities, comments and badges in Orkut. More stuff coming in time.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/orkut-16.png", + "x32": "http://www.google.com/images/icons/product/orkut-32.png" + }, + "documentationLink": "http://code.google.com/apis/orkut/v2/reference.html", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/orkut/v2/", + "basePath": "/orkut/v2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "orkut/v2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/orkut": { + "description": "Manage your Orkut activity" + }, + "https://www.googleapis.com/auth/orkut.readonly": { + "description": "View your Orkut data" + } + } + } + }, + "schemas": { + "Acl": { + "id": "Acl", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Human readable description of the access granted." + }, + "items": { + "type": "array", + "description": "The list of ACL entries.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the entity. For entities of type \"person\" or \"circle\", this is the ID of the resource. For other types, this will be unset." + }, + "type": { + "type": "string", + "description": "The type of entity to whom access is granted." + } + } + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an access control list. Value: \"orkut#acl\"", + "default": "orkut#acl" + }, + "totalParticipants": { + "type": "integer", + "description": "The total count of participants of the parent resource.", + "format": "int32" + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "properties": { + "access": { + "$ref": "Acl", + "description": "Identifies who has access to see this activity." + }, + "actor": { + "$ref": "OrkutAuthorResource", + "description": "The person who performed the activity." + }, + "id": { + "type": "string", + "description": "The ID for the activity." + }, + "kind": { + "type": "string", + "description": "The kind of activity. Always orkut#activity.", + "default": "orkut#activity" + }, + "links": { + "type": "array", + "description": "Links to resources related to this activity.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "object": { + "type": "object", + "description": "The activity's object.", + "properties": { + "content": { + "type": "string", + "description": "The HTML-formatted content, suitable for display. When updating an activity's content, post the changes to this property, using the value of originalContent as a starting point. If the update is successful, the server adds HTML formatting and responds with this formatted content." + }, + "items": { + "type": "array", + "description": "The list of additional items.", + "items": { + "$ref": "OrkutActivityobjectsResource" + } + }, + "objectType": { + "type": "string", + "description": "The type of the object affected by the activity. Clients can use this information to style the rendered activity object differently depending on the content." + }, + "replies": { + "type": "object", + "description": "Comments in reply to this activity.", + "properties": { + "items": { + "type": "array", + "description": "The list of comments.", + "items": { + "$ref": "Comment" + } + }, + "totalItems": { + "type": "string", + "description": "Total number of comments.", + "format": "uint64" + }, + "url": { + "type": "string", + "description": "URL for the collection of comments in reply to this activity." + } + } + } + } + }, + "published": { + "type": "string", + "description": "The time at which the activity was initially published.", + "format": "date-time" + }, + "title": { + "type": "string", + "description": "Title of the activity." + }, + "updated": { + "type": "string", + "description": "The time at which the activity was last updated.", + "format": "date-time" + }, + "verb": { + "type": "string", + "description": "This activity's verb, indicating what action was performed. Possible values are: \n- add - User added new content to profile or album, e.g. video, photo. \n- post - User publish content to the stream, e.g. status, scrap. \n- update - User commented on an activity. \n- make-friend - User added a new friend. \n- birthday - User has a birthday." + } + } + }, + "ActivityList": { + "id": "ActivityList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of activities retrieved.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of activities. Value: \"orkut#activityList\"", + "default": "orkut#activityList" + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in activities.list request to get the next page, if there are more to retrieve." + } + } + }, + "Badge": { + "id": "Badge", + "type": "object", + "properties": { + "badgeLargeLogo": { + "type": "string", + "description": "The URL for the 64x64 badge logo." + }, + "badgeSmallLogo": { + "type": "string", + "description": "The URL for the 24x24 badge logo." + }, + "caption": { + "type": "string", + "description": "The name of the badge, suitable for display." + }, + "description": { + "type": "string", + "description": "The description for the badge, suitable for display." + }, + "id": { + "type": "string", + "description": "The unique ID for the badge.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a badge. Value: \"orkut#badge\"", + "default": "orkut#badge" + }, + "sponsorLogo": { + "type": "string", + "description": "The URL for the 32x32 badge sponsor logo." + }, + "sponsorName": { + "type": "string", + "description": "The name of the badge sponsor, suitable for display." + }, + "sponsorUrl": { + "type": "string", + "description": "The URL for the badge sponsor." + } + } + }, + "BadgeList": { + "id": "BadgeList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of badges retrieved.", + "items": { + "$ref": "Badge" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of badges. Value: \"orkut#badgeList\"", + "default": "orkut#badgeList" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "actor": { + "$ref": "OrkutAuthorResource", + "description": "The person who posted the comment." + }, + "content": { + "type": "string", + "description": "The content of the comment in text/html" + }, + "id": { + "type": "string", + "description": "The unique ID for the comment." + }, + "inReplyTo": { + "type": "object", + "description": "Link to the original activity where this comment was posted.", + "properties": { + "href": { + "type": "string", + "description": "Link to the post on activity stream being commented." + }, + "ref": { + "type": "string", + "description": "Unique identifier of the post on activity stream being commented." + }, + "rel": { + "type": "string", + "description": "Relationship between the comment and the post on activity stream being commented. Always inReplyTo.", + "default": "inReplyTo" + }, + "type": { + "type": "string", + "description": "Type of the post on activity stream being commented. Always text/html." + } + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a comment. Value: \"orkut#comment\"", + "default": "orkut#comment" + }, + "links": { + "type": "array", + "description": "List of resources for the comment.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "published": { + "type": "string", + "description": "The time the comment was initially published, in RFC 3339 format.", + "format": "date-time" + } + } + }, + "CommentList": { + "id": "CommentList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of comments retrieved.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of comments. Value: \"orkut#commentList\"", + "default": "orkut#commentList" + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in comments.list request to get the next page, if there are more to retrieve." + }, + "previousPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in comments.list request to get the previous page, if there are more to retrieve." + } + } + }, + "Community": { + "id": "Community", + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "The category of the community." + }, + "co_owners": { + "type": "array", + "description": "The co-owners of the community.", + "items": { + "$ref": "OrkutAuthorResource" + } + }, + "creation_date": { + "type": "string", + "description": "The time the community was created, in RFC 3339 format.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The description of the community." + }, + "id": { + "type": "integer", + "description": "The id of the community.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community. Value: \"orkut#community\"", + "default": "orkut#community" + }, + "language": { + "type": "string", + "description": "The official language of the community." + }, + "links": { + "type": "array", + "description": "List of resources for the community.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "location": { + "type": "string", + "description": "The location of the community." + }, + "member_count": { + "type": "integer", + "description": "The number of users who are part of the community. This number may be approximate, so do not rely on it for iteration.", + "format": "int32" + }, + "moderators": { + "type": "array", + "description": "The list of moderators of the community.", + "items": { + "$ref": "OrkutAuthorResource" + } + }, + "name": { + "type": "string", + "description": "The name of the community." + }, + "owner": { + "$ref": "OrkutAuthorResource", + "description": "The person who owns the community." + }, + "photo_url": { + "type": "string", + "description": "The photo of the community." + } + } + }, + "CommunityList": { + "id": "CommunityList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of communities retrieved.", + "items": { + "$ref": "Community" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of communities. Value: \"orkut#communityList\"", + "default": "orkut#communityList" + } + } + }, + "CommunityMembers": { + "id": "CommunityMembers", + "type": "object", + "properties": { + "communityMembershipStatus": { + "$ref": "CommunityMembershipStatus", + "description": "Status and permissions of the user related to the community." + }, + "kind": { + "type": "string", + "description": "Kind of this item. Always orkut#communityMembers.", + "default": "orkut#communityMembers" + }, + "person": { + "$ref": "OrkutActivitypersonResource", + "description": "Description of the community member." + } + } + }, + "CommunityMembersList": { + "id": "CommunityMembersList", + "type": "object", + "properties": { + "firstPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_members.list request to get the first page." + }, + "items": { + "type": "array", + "description": "List of community members retrieved.", + "items": { + "$ref": "CommunityMembers" + } + }, + "kind": { + "type": "string", + "description": "Kind of this item. Always orkut#communityMembersList.", + "default": "orkut#communityMembersList" + }, + "lastPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_members.list request to get the last page." + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_members.list request to get the next page, if there are more to retrieve." + }, + "prevPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_members.list request to get the previous page, if there are more to retrieve." + } + } + }, + "CommunityMembershipStatus": { + "id": "CommunityMembershipStatus", + "type": "object", + "properties": { + "canCreatePoll": { + "type": "boolean", + "description": "Whether the user can create a poll in this community." + }, + "canCreateTopic": { + "type": "boolean", + "description": "Whether the user can create a topic in this community." + }, + "canShout": { + "type": "boolean", + "description": "Whether the user can perform a shout operation in this community." + }, + "isCoOwner": { + "type": "boolean", + "description": "Whether the session user is a community co-owner." + }, + "isFollowing": { + "type": "boolean", + "description": "Whether the user is following this community." + }, + "isModerator": { + "type": "boolean", + "description": "Whether the session user is a community moderator." + }, + "isOwner": { + "type": "boolean", + "description": "Whether the session user is the community owner." + }, + "isRestoreAvailable": { + "type": "boolean", + "description": "Whether the restore operation is available for the community." + }, + "isTakebackAvailable": { + "type": "boolean", + "description": "Whether the take-back operation is available for the community." + }, + "kind": { + "type": "string", + "description": "Kind of this item. Always orkut#communityMembershipStatus.", + "default": "orkut#communityMembershipStatus" + }, + "status": { + "type": "string", + "description": "The status of the current link between the community and the user." + } + } + }, + "CommunityMessage": { + "id": "CommunityMessage", + "type": "object", + "properties": { + "addedDate": { + "type": "string", + "description": "The timestamp of the date when the message was added, in RFC 3339 format.", + "format": "date-time" + }, + "author": { + "$ref": "OrkutAuthorResource", + "description": "The creator of the message. If ommited, the message is annonimous." + }, + "body": { + "type": "string", + "description": "The body of the message." + }, + "id": { + "type": "string", + "description": "The ID of the message.", + "format": "int64" + }, + "isSpam": { + "type": "boolean", + "description": "Whether this post was marked as spam by the viewer, when he/she is not the community owner or one of its moderators." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community message. Value: \"orkut#communityMessage\"", + "default": "orkut#communityMessage" + }, + "links": { + "type": "array", + "description": "List of resources for the community message.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "subject": { + "type": "string", + "description": "The subject of the message." + } + } + }, + "CommunityMessageList": { + "id": "CommunityMessageList", + "type": "object", + "properties": { + "firstPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_messages.list request to get the first page." + }, + "items": { + "type": "array", + "description": "List of messages retrieved.", + "items": { + "$ref": "CommunityMessage" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of community messages. Value: \"orkut#communityMessageList\"", + "default": "orkut#communityMessageList" + }, + "lastPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_messages.list request to get the last page." + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_messages.list request to get the next page, if there are more to retrieve." + }, + "prevPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_messages.list request to get the previous page, if there are more to retrieve." + } + } + }, + "CommunityPoll": { + "id": "CommunityPoll", + "type": "object", + "properties": { + "author": { + "$ref": "OrkutAuthorResource", + "description": "The person who created the poll." + }, + "communityId": { + "type": "integer", + "description": "The ID of the community.", + "format": "int32" + }, + "creationTime": { + "type": "string", + "description": "The date of creation of this poll", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "The poll description." + }, + "endingTime": { + "type": "string", + "description": "The ending date of this poll or empty if the poll doesn't have one.", + "format": "date-time" + }, + "hasVoted": { + "type": "boolean", + "description": "Whether the user has voted on this poll." + }, + "id": { + "type": "string", + "description": "The poll ID." + }, + "image": { + "type": "object", + "description": "The image representing the poll. Field is omitted if no image exists.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to an image of the poll." + } + } + }, + "isClosed": { + "type": "boolean", + "description": "Whether the poll is not expired if there is an expiration date. A poll is open (that is, not closed for voting) if it either is not expired or doesn't have an expiration date at all. Note that just because a poll is open, it doesn't mean that the requester can vote on it." + }, + "isMultipleAnswers": { + "type": "boolean", + "description": "Whether this poll allows voting for more than one option." + }, + "isOpenForVoting": { + "type": "boolean", + "description": "Whether this poll is still opened for voting. A poll is open for voting if it is not closed, the user has not yet voted on it and the user has the permission to do so, which happens if he/she is either a community member or the poll is open for everybody." + }, + "isRestricted": { + "type": "boolean", + "description": "Whether this poll is restricted for members only. If a poll is open but the user can't vote on it, it's been restricted to members only. This information is important to tell this case apart from the one where the user can't vote simply because the poll is already closed." + }, + "isSpam": { + "type": "boolean", + "description": "Whether the user has marked this poll as spam. This only affects the poll for this user, not globally." + }, + "isUsersVotePublic": { + "type": "boolean", + "description": "If user has already voted, whether his vote is publicly visible." + }, + "isVotingAllowedForNonMembers": { + "type": "boolean", + "description": "Whether non-members of the community can vote on the poll." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community poll. Value: \"orkut#communityPoll\"", + "default": "orkut#communityPoll" + }, + "lastUpdate": { + "type": "string", + "description": "The date of the last update of this poll.", + "format": "date-time" + }, + "links": { + "type": "array", + "description": "List of resources for the community poll.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "options": { + "type": "array", + "description": "List of options of this poll.", + "items": { + "$ref": "OrkutCommunitypolloptionResource" + } + }, + "question": { + "type": "string", + "description": "The poll question." + }, + "totalNumberOfVotes": { + "type": "integer", + "description": "The total number of votes this poll has received.", + "format": "int32" + }, + "votedOptions": { + "type": "array", + "description": "List of options the user has voted on, if there are any.", + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, + "CommunityPollComment": { + "id": "CommunityPollComment", + "type": "object", + "properties": { + "addedDate": { + "type": "string", + "description": "The date when the message was added, in RFC 3339 format.", + "format": "date-time" + }, + "author": { + "$ref": "OrkutAuthorResource", + "description": "The creator of the comment." + }, + "body": { + "type": "string", + "description": "The body of the message." + }, + "id": { + "type": "integer", + "description": "The ID of the comment.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community poll comment. Value: \"orkut#communityPollComment\"", + "default": "orkut#communityPollComment" + } + } + }, + "CommunityPollCommentList": { + "id": "CommunityPollCommentList", + "type": "object", + "properties": { + "firstPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_poll_comments.list request to get the first page." + }, + "items": { + "type": "array", + "description": "List of community poll comments retrieved.", + "items": { + "$ref": "CommunityPollComment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of community poll comments. Value: \"orkut#CommunityPollCommentList\"", + "default": "orkut#CommunityPollCommentList" + }, + "lastPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_poll_comments.list request to get the last page." + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_poll_comments.list request to get the next page, if there are more to retrieve." + }, + "prevPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_poll_comments.list request to get the previous page, if there are more to retrieve." + } + } + }, + "CommunityPollList": { + "id": "CommunityPollList", + "type": "object", + "properties": { + "firstPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_polls.list request to get the first page." + }, + "items": { + "type": "array", + "description": "List of community polls retrieved.", + "items": { + "$ref": "CommunityPoll" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of community polls. Value: \"orkut#communityPollList\"", + "default": "orkut#communityPollList" + }, + "lastPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_polls.list request to get the last page." + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_polls.list request to get the next page, if there are more to retrieve." + }, + "prevPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_polls.list request to get the previous page, if there are more to retrieve." + } + } + }, + "CommunityPollVote": { + "id": "CommunityPollVote", + "type": "object", + "properties": { + "isVotevisible": { + "type": "boolean", + "description": "Whether this vote is visible to other users or not." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community poll vote. Value: \"orkut#communityPollVote\"", + "default": "orkut#communityPollVote" + }, + "optionIds": { + "type": "array", + "description": "The ids of the voted options.", + "items": { + "type": "integer", + "format": "int32" + } + } + } + }, + "CommunityTopic": { + "id": "CommunityTopic", + "type": "object", + "properties": { + "author": { + "$ref": "OrkutAuthorResource", + "description": "The creator of the topic." + }, + "body": { + "type": "string", + "description": "The body of the topic." + }, + "id": { + "type": "string", + "description": "The ID of the topic.", + "format": "int64" + }, + "isClosed": { + "type": "boolean", + "description": "Whether the topic is closed for new messages." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a community topic. Value: \"orkut#communityTopic\"", + "default": "orkut#communityTopic" + }, + "lastUpdate": { + "type": "string", + "description": "The timestamp of the last update, in RFC 3339 format.", + "format": "date-time" + }, + "latestMessageSnippet": { + "type": "string", + "description": "Snippet of the last message posted on this topic." + }, + "links": { + "type": "array", + "description": "List of resources for the community.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "messages": { + "type": "array", + "description": "Most recent messages.", + "items": { + "$ref": "CommunityMessage" + } + }, + "numberOfReplies": { + "type": "integer", + "description": "The total number of replies this topic has received.", + "format": "int32" + }, + "title": { + "type": "string", + "description": "The title of the topic." + } + } + }, + "CommunityTopicList": { + "id": "CommunityTopicList", + "type": "object", + "properties": { + "firstPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_topic.list request to get the first page." + }, + "items": { + "type": "array", + "description": "List of topics retrieved.", + "items": { + "$ref": "CommunityTopic" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of community topics. Value: \"orkut#communityTopicList\"", + "default": "orkut#communityTopicList" + }, + "lastPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_topic.list request to get the last page." + }, + "nextPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_topic.list request to get the next page, if there are more to retrieve." + }, + "prevPageToken": { + "type": "string", + "description": "The value of pageToken query parameter in community_topic.list request to get the previous page, if there are more to retrieve." + } + } + }, + "Counters": { + "id": "Counters", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of counters retrieved.", + "items": { + "$ref": "OrkutCounterResource" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of counters. Value: \"orkut#counters\"", + "default": "orkut#counters" + } + } + }, + "OrkutActivityobjectsResource": { + "id": "OrkutActivityobjectsResource", + "type": "object", + "properties": { + "community": { + "$ref": "Community", + "description": "The community which is related with this activity, e.g. a joined community." + }, + "content": { + "type": "string", + "description": "The HTML-formatted content, suitable for display. When updating an activity's content, post the changes to this property, using the value of originalContent as a starting point. If the update is successful, the server adds HTML formatting and responds with this formatted content." + }, + "displayName": { + "type": "string", + "description": "The title of the object." + }, + "id": { + "type": "string", + "description": "The ID for the object." + }, + "links": { + "type": "array", + "description": "Links to other resources related to this object.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "objectType": { + "type": "string", + "description": "The object type." + }, + "person": { + "$ref": "OrkutActivitypersonResource", + "description": "The person who is related with this activity, e.g. an Added User." + } + } + }, + "OrkutActivitypersonResource": { + "id": "OrkutActivitypersonResource", + "type": "object", + "properties": { + "birthday": { + "type": "string", + "description": "The person's date of birth, represented as YYYY-MM-DD." + }, + "gender": { + "type": "string", + "description": "The person's gender. Values include \"male\", \"female\", and \"other\"." + }, + "id": { + "type": "string", + "description": "The person's opensocial ID." + }, + "image": { + "type": "object", + "description": "The person's profile photo. This is adapted from Google+ and was originaly introduced as extra OpenSocial convenience fields.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the person's profile photo." + } + } + }, + "name": { + "type": "object", + "description": "An object that encapsulates the individual components of a person's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this person." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this person." + } + } + }, + "url": { + "type": "string", + "description": "The person's profile url. This is adapted from Google+ and was originaly introduced as extra OpenSocial convenience fields." + } + } + }, + "OrkutAuthorResource": { + "id": "OrkutAuthorResource", + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the author, suitable for display." + }, + "id": { + "type": "string", + "description": "Unique identifier of the person who posted the comment. This is the person's OpenSocial ID." + }, + "image": { + "type": "object", + "description": "Image data about the author.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a thumbnail photo of the author." + } + } + }, + "url": { + "type": "string", + "description": "The URL of the author who posted the comment [not yet implemented]" + } + } + }, + "OrkutCommunitypolloptionResource": { + "id": "OrkutCommunitypolloptionResource", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The option description." + }, + "image": { + "type": "object", + "description": "Image data about the poll option. Field is omitted if no image exists.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to an image of the poll question." + } + } + }, + "numberOfVotes": { + "type": "integer", + "description": "The total number of votes that this option received.", + "format": "int32" + }, + "optionId": { + "type": "integer", + "description": "The poll option ID", + "format": "int32" + } + } + }, + "OrkutCounterResource": { + "id": "OrkutCounterResource", + "type": "object", + "properties": { + "link": { + "$ref": "OrkutLinkResource", + "description": "Link to the collection being counted." + }, + "name": { + "type": "string", + "description": "The name of the counted collection. Currently supported collections are: \n- scraps - The scraps of the user. \n- photos - The photos of the user. \n- videos - The videos of the user. \n- pendingTestimonials - The pending testimonials of the user." + }, + "total": { + "type": "integer", + "description": "The number of resources on the counted collection.", + "format": "int32" + } + } + }, + "OrkutLinkResource": { + "id": "OrkutLinkResource", + "type": "object", + "description": "Links to resources related to the parent object.", + "properties": { + "href": { + "type": "string", + "description": "URL of the link." + }, + "rel": { + "type": "string", + "description": "Relation between the resource and the parent object." + }, + "title": { + "type": "string", + "description": "Title of the link." + }, + "type": { + "type": "string", + "description": "Media type of the link." + } + } + }, + "Visibility": { + "id": "Visibility", + "type": "object", + "properties": { + "kind": { + "type": "string", + "description": "Identifies this resource as a visibility item. Value: \"orkut#visibility\"", + "default": "orkut#visibility" + }, + "links": { + "type": "array", + "description": "List of resources for the visibility item.", + "items": { + "$ref": "OrkutLinkResource" + } + }, + "visibility": { + "type": "string", + "description": "The visibility of the resource. Possible values are: \n- default: not hidden by the user \n- hidden: hidden" + } + } + } + }, + "resources": { + "acl": { + "methods": { + "delete": { + "id": "orkut.acl.delete", + "path": "activities/{activityId}/acl/{userId}", + "httpMethod": "DELETE", + "description": "Excludes an element from the ACL of the activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "ID of the activity.", + "required": true, + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user to be removed from the activity.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId", + "userId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + } + } + }, + "activities": { + "methods": { + "delete": { + "id": "orkut.activities.delete", + "path": "activities/{activityId}", + "httpMethod": "DELETE", + "description": "Deletes an existing activity, if the access controls allow it.", + "parameters": { + "activityId": { + "type": "string", + "description": "ID of the activity to remove.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.activities.list", + "path": "people/{userId}/activities/{collection}", + "httpMethod": "GET", + "description": "Retrieves a list of activities.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of activities to list.", + "required": true, + "enum": [ + "all", + "scraps", + "stream" + ], + "enumDescriptions": [ + "All activities created by the specified user that the authenticated user is authorized to view.", + "The specified user's scrapbook.", + "The specified user's stream feed, intended for consumption. This includes activities posted by people that the user is following, and activities in which the user has been mentioned." + ], + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response.", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user whose activities will be listed. Can be me to refer to the viewer (i.e. the authenticated user).", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "ActivityList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "activityVisibility": { + "methods": { + "get": { + "id": "orkut.activityVisibility.get", + "path": "activities/{activityId}/visibility", + "httpMethod": "GET", + "description": "Gets the visibility of an existing activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "ID of the activity to get the visibility.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "Visibility" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "patch": { + "id": "orkut.activityVisibility.patch", + "path": "activities/{activityId}/visibility", + "httpMethod": "PATCH", + "description": "Updates the visibility of an existing activity. This method supports patch semantics.", + "parameters": { + "activityId": { + "type": "string", + "description": "ID of the activity.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "request": { + "$ref": "Visibility" + }, + "response": { + "$ref": "Visibility" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "update": { + "id": "orkut.activityVisibility.update", + "path": "activities/{activityId}/visibility", + "httpMethod": "PUT", + "description": "Updates the visibility of an existing activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "ID of the activity.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "request": { + "$ref": "Visibility" + }, + "response": { + "$ref": "Visibility" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + } + } + }, + "badges": { + "methods": { + "get": { + "id": "orkut.badges.get", + "path": "people/{userId}/badges/{badgeId}", + "httpMethod": "GET", + "description": "Retrieves a badge from a user.", + "parameters": { + "badgeId": { + "type": "string", + "description": "The ID of the badge that will be retrieved.", + "required": true, + "format": "int64", + "location": "path" + }, + "userId": { + "type": "string", + "description": "The ID of the user whose badges will be listed. Can be me to refer to caller.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "badgeId" + ], + "response": { + "$ref": "Badge" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "list": { + "id": "orkut.badges.list", + "path": "people/{userId}/badges", + "httpMethod": "GET", + "description": "Retrieves the list of visible badges of a user.", + "parameters": { + "userId": { + "type": "string", + "description": "The id of the user whose badges will be listed. Can be me to refer to caller.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "BadgeList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "comments": { + "methods": { + "delete": { + "id": "orkut.comments.delete", + "path": "comments/{commentId}", + "httpMethod": "DELETE", + "description": "Deletes an existing comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "ID of the comment to remove.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "commentId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "get": { + "id": "orkut.comments.get", + "path": "comments/{commentId}", + "httpMethod": "GET", + "description": "Retrieves an existing comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "ID of the comment to get.", + "required": true, + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + } + }, + "parameterOrder": [ + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "insert": { + "id": "orkut.comments.insert", + "path": "activities/{activityId}/comments", + "httpMethod": "POST", + "description": "Inserts a new comment to an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to contain the new comment.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.comments.list", + "path": "activities/{activityId}/comments", + "httpMethod": "GET", + "description": "Retrieves a list of comments, possibly filtered.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity containing the comments.", + "required": true, + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response.", + "format": "uint32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Sort search results.", + "default": "DESCENDING_SORT", + "enum": [ + "ascending", + "descending" + ], + "enumDescriptions": [ + "Use ascending sort order.", + "Use descending sort order." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "CommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communities": { + "methods": { + "get": { + "id": "orkut.communities.get", + "path": "communities/{communityId}", + "httpMethod": "GET", + "description": "Retrieves the basic information (aka. profile) of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community to get.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "response": { + "$ref": "Community" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "list": { + "id": "orkut.communities.list", + "path": "people/{userId}/communities", + "httpMethod": "GET", + "description": "Retrieves the list of communities the current user is a member of.", + "parameters": { + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of communities to include in the response.", + "format": "uint32", + "minimum": "1", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "How to order the communities by.", + "enum": [ + "id", + "ranked" + ], + "enumDescriptions": [ + "Returns the communities sorted by a fixed, natural order.", + "Returns the communities ranked accordingly to how they are displayed on the orkut web application." + ], + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user whose communities will be listed. Can be me to refer to caller.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "CommunityList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityFollow": { + "methods": { + "delete": { + "id": "orkut.communityFollow.delete", + "path": "communities/{communityId}/followers/{userId}", + "httpMethod": "DELETE", + "description": "Removes a user from the followers of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "ID of the community.", + "required": true, + "format": "int32", + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "userId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "insert": { + "id": "orkut.communityFollow.insert", + "path": "communities/{communityId}/followers/{userId}", + "httpMethod": "POST", + "description": "Adds a user as a follower of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "ID of the community.", + "required": true, + "format": "int32", + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "userId" + ], + "response": { + "$ref": "CommunityMembers" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + } + } + }, + "communityMembers": { + "methods": { + "delete": { + "id": "orkut.communityMembers.delete", + "path": "communities/{communityId}/members/{userId}", + "httpMethod": "DELETE", + "description": "Makes the user leave a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "ID of the community.", + "required": true, + "format": "int32", + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "userId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "get": { + "id": "orkut.communityMembers.get", + "path": "communities/{communityId}/members/{userId}", + "httpMethod": "GET", + "description": "Retrieves the relationship between a user and a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "ID of the community.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "ID of the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "userId" + ], + "response": { + "$ref": "CommunityMembers" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "insert": { + "id": "orkut.communityMembers.insert", + "path": "communities/{communityId}/members/{userId}", + "httpMethod": "POST", + "description": "Makes the user join a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "ID of the community.", + "required": true, + "format": "int32", + "location": "path" + }, + "userId": { + "type": "string", + "description": "ID of the user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "userId" + ], + "response": { + "$ref": "CommunityMembers" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.communityMembers.list", + "path": "communities/{communityId}/members", + "httpMethod": "GET", + "description": "Lists members of a community. Use the pagination tokens to retrieve the full list; do not rely on the member count available in the community profile information to know when to stop iterating, as that count may be approximate.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose members will be listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "friendsOnly": { + "type": "boolean", + "description": "Whether to list only community members who are friends of the user.", + "location": "query" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of members to include in the response.", + "format": "uint32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "response": { + "$ref": "CommunityMembersList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityMessages": { + "methods": { + "delete": { + "id": "orkut.communityMessages.delete", + "path": "communities/{communityId}/topics/{topicId}/messages/{messageId}", + "httpMethod": "DELETE", + "description": "Moves a message of the community to the trash folder.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose message will be moved to the trash folder.", + "required": true, + "format": "int32", + "location": "path" + }, + "messageId": { + "type": "string", + "description": "The ID of the message to be moved to the trash folder.", + "required": true, + "format": "int64", + "location": "path" + }, + "topicId": { + "type": "string", + "description": "The ID of the topic whose message will be moved to the trash folder.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "topicId", + "messageId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "insert": { + "id": "orkut.communityMessages.insert", + "path": "communities/{communityId}/topics/{topicId}/messages", + "httpMethod": "POST", + "description": "Adds a message to a given community topic.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community the message should be added to.", + "required": true, + "format": "int32", + "location": "path" + }, + "topicId": { + "type": "string", + "description": "The ID of the topic the message should be added to.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "topicId" + ], + "request": { + "$ref": "CommunityMessage" + }, + "response": { + "$ref": "CommunityMessage" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.communityMessages.list", + "path": "communities/{communityId}/topics/{topicId}/messages", + "httpMethod": "GET", + "description": "Retrieves the messages of a topic of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community which messages will be listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of messages to include in the response.", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + }, + "topicId": { + "type": "string", + "description": "The ID of the topic which messages will be listed.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "topicId" + ], + "response": { + "$ref": "CommunityMessageList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityPollComments": { + "methods": { + "insert": { + "id": "orkut.communityPollComments.insert", + "path": "communities/{communityId}/polls/{pollId}/comments", + "httpMethod": "POST", + "description": "Adds a comment on a community poll.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose poll is being commented.", + "required": true, + "format": "int32", + "location": "path" + }, + "pollId": { + "type": "string", + "description": "The ID of the poll being commented.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "pollId" + ], + "request": { + "$ref": "CommunityPollComment" + }, + "response": { + "$ref": "CommunityPollComment" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.communityPollComments.list", + "path": "communities/{communityId}/polls/{pollId}/comments", + "httpMethod": "GET", + "description": "Retrieves the comments of a community poll.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose poll is having its comments listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of comments to include in the response.", + "format": "uint32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + }, + "pollId": { + "type": "string", + "description": "The ID of the community whose polls will be listed.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "pollId" + ], + "response": { + "$ref": "CommunityPollCommentList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityPollVotes": { + "methods": { + "insert": { + "id": "orkut.communityPollVotes.insert", + "path": "communities/{communityId}/polls/{pollId}/votes", + "httpMethod": "POST", + "description": "Votes on a community poll.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose poll is being voted.", + "required": true, + "format": "int32", + "location": "path" + }, + "pollId": { + "type": "string", + "description": "The ID of the poll being voted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "pollId" + ], + "request": { + "$ref": "CommunityPollVote" + }, + "response": { + "$ref": "CommunityPollVote" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + } + } + }, + "communityPolls": { + "methods": { + "get": { + "id": "orkut.communityPolls.get", + "path": "communities/{communityId}/polls/{pollId}", + "httpMethod": "GET", + "description": "Retrieves one specific poll of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community for whose poll will be retrieved.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "pollId": { + "type": "string", + "description": "The ID of the poll to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "pollId" + ], + "response": { + "$ref": "CommunityPoll" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "list": { + "id": "orkut.communityPolls.list", + "path": "communities/{communityId}/polls", + "httpMethod": "GET", + "description": "Retrieves the polls of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community which polls will be listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of polls to include in the response.", + "format": "uint32", + "minimum": "1", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "response": { + "$ref": "CommunityPollList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityRelated": { + "methods": { + "list": { + "id": "orkut.communityRelated.list", + "path": "communities/{communityId}/related", + "httpMethod": "GET", + "description": "Retrieves the communities related to another one.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose related communities will be listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "response": { + "$ref": "CommunityList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "communityTopics": { + "methods": { + "delete": { + "id": "orkut.communityTopics.delete", + "path": "communities/{communityId}/topics/{topicId}", + "httpMethod": "DELETE", + "description": "Moves a topic of the community to the trash folder.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose topic will be moved to the trash folder.", + "required": true, + "format": "int32", + "location": "path" + }, + "topicId": { + "type": "string", + "description": "The ID of the topic to be moved to the trash folder.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "topicId" + ], + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "get": { + "id": "orkut.communityTopics.get", + "path": "communities/{communityId}/topics/{topicId}", + "httpMethod": "GET", + "description": "Retrieves a topic of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community whose topic will be retrieved.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "topicId": { + "type": "string", + "description": "The ID of the topic to get.", + "required": true, + "format": "int64", + "location": "path" + } + }, + "parameterOrder": [ + "communityId", + "topicId" + ], + "response": { + "$ref": "CommunityTopic" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + }, + "insert": { + "id": "orkut.communityTopics.insert", + "path": "communities/{communityId}/topics", + "httpMethod": "POST", + "description": "Adds a topic to a given community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community the topic should be added to.", + "required": true, + "format": "int32", + "location": "path" + }, + "isShout": { + "type": "boolean", + "description": "Whether this topic is a shout.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "request": { + "$ref": "CommunityTopic" + }, + "response": { + "$ref": "CommunityTopic" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + }, + "list": { + "id": "orkut.communityTopics.list", + "path": "communities/{communityId}/topics", + "httpMethod": "GET", + "description": "Retrieves the topics of a community.", + "parameters": { + "communityId": { + "type": "integer", + "description": "The ID of the community which topics will be listed.", + "required": true, + "format": "int32", + "location": "path" + }, + "hl": { + "type": "string", + "description": "Specifies the interface language (host language) of your user interface.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of topics to include in the response.", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A continuation token that allows pagination.", + "location": "query" + } + }, + "parameterOrder": [ + "communityId" + ], + "response": { + "$ref": "CommunityTopicList" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "counters": { + "methods": { + "list": { + "id": "orkut.counters.list", + "path": "people/{userId}/counters", + "httpMethod": "GET", + "description": "Retrieves the counters of a user.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user whose counters will be listed. Can be me to refer to caller.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "Counters" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut", + "https://www.googleapis.com/auth/orkut.readonly" + ] + } + } + }, + "scraps": { + "methods": { + "insert": { + "id": "orkut.scraps.insert", + "path": "activities/scraps", + "httpMethod": "POST", + "description": "Creates a new scrap.", + "request": { + "$ref": "Activity" + }, + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/orkut" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-gen.go b/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-gen.go new file mode 100644 index 0000000000000..2c7141ceddb5d --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/orkut/v2/orkut-gen.go @@ -0,0 +1,4095 @@ +// Package orkut provides access to the Orkut API. +// +// See http://code.google.com/apis/orkut/v2/reference.html +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/orkut/v2" +// ... +// orkutService, err := orkut.New(oauthHttpClient) +package orkut + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "orkut:v2" +const apiName = "orkut" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/orkut/v2/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Orkut activity + OrkutScope = "https://www.googleapis.com/auth/orkut" + + // View your Orkut data + OrkutReadonlyScope = "https://www.googleapis.com/auth/orkut.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Acl = NewAclService(s) + s.Activities = NewActivitiesService(s) + s.ActivityVisibility = NewActivityVisibilityService(s) + s.Badges = NewBadgesService(s) + s.Comments = NewCommentsService(s) + s.Communities = NewCommunitiesService(s) + s.CommunityFollow = NewCommunityFollowService(s) + s.CommunityMembers = NewCommunityMembersService(s) + s.CommunityMessages = NewCommunityMessagesService(s) + s.CommunityPollComments = NewCommunityPollCommentsService(s) + s.CommunityPollVotes = NewCommunityPollVotesService(s) + s.CommunityPolls = NewCommunityPollsService(s) + s.CommunityRelated = NewCommunityRelatedService(s) + s.CommunityTopics = NewCommunityTopicsService(s) + s.Counters = NewCountersService(s) + s.Scraps = NewScrapsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Acl *AclService + + Activities *ActivitiesService + + ActivityVisibility *ActivityVisibilityService + + Badges *BadgesService + + Comments *CommentsService + + Communities *CommunitiesService + + CommunityFollow *CommunityFollowService + + CommunityMembers *CommunityMembersService + + CommunityMessages *CommunityMessagesService + + CommunityPollComments *CommunityPollCommentsService + + CommunityPollVotes *CommunityPollVotesService + + CommunityPolls *CommunityPollsService + + CommunityRelated *CommunityRelatedService + + CommunityTopics *CommunityTopicsService + + Counters *CountersService + + Scraps *ScrapsService +} + +func NewAclService(s *Service) *AclService { + rs := &AclService{s: s} + return rs +} + +type AclService struct { + s *Service +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewActivityVisibilityService(s *Service) *ActivityVisibilityService { + rs := &ActivityVisibilityService{s: s} + return rs +} + +type ActivityVisibilityService struct { + s *Service +} + +func NewBadgesService(s *Service) *BadgesService { + rs := &BadgesService{s: s} + return rs +} + +type BadgesService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewCommunitiesService(s *Service) *CommunitiesService { + rs := &CommunitiesService{s: s} + return rs +} + +type CommunitiesService struct { + s *Service +} + +func NewCommunityFollowService(s *Service) *CommunityFollowService { + rs := &CommunityFollowService{s: s} + return rs +} + +type CommunityFollowService struct { + s *Service +} + +func NewCommunityMembersService(s *Service) *CommunityMembersService { + rs := &CommunityMembersService{s: s} + return rs +} + +type CommunityMembersService struct { + s *Service +} + +func NewCommunityMessagesService(s *Service) *CommunityMessagesService { + rs := &CommunityMessagesService{s: s} + return rs +} + +type CommunityMessagesService struct { + s *Service +} + +func NewCommunityPollCommentsService(s *Service) *CommunityPollCommentsService { + rs := &CommunityPollCommentsService{s: s} + return rs +} + +type CommunityPollCommentsService struct { + s *Service +} + +func NewCommunityPollVotesService(s *Service) *CommunityPollVotesService { + rs := &CommunityPollVotesService{s: s} + return rs +} + +type CommunityPollVotesService struct { + s *Service +} + +func NewCommunityPollsService(s *Service) *CommunityPollsService { + rs := &CommunityPollsService{s: s} + return rs +} + +type CommunityPollsService struct { + s *Service +} + +func NewCommunityRelatedService(s *Service) *CommunityRelatedService { + rs := &CommunityRelatedService{s: s} + return rs +} + +type CommunityRelatedService struct { + s *Service +} + +func NewCommunityTopicsService(s *Service) *CommunityTopicsService { + rs := &CommunityTopicsService{s: s} + return rs +} + +type CommunityTopicsService struct { + s *Service +} + +func NewCountersService(s *Service) *CountersService { + rs := &CountersService{s: s} + return rs +} + +type CountersService struct { + s *Service +} + +func NewScrapsService(s *Service) *ScrapsService { + rs := &ScrapsService{s: s} + return rs +} + +type ScrapsService struct { + s *Service +} + +type Acl struct { + // Description: Human readable description of the access granted. + Description string `json:"description,omitempty"` + + // Items: The list of ACL entries. + Items []*AclItems `json:"items,omitempty"` + + // Kind: Identifies this resource as an access control list. Value: + // "orkut#acl" + Kind string `json:"kind,omitempty"` + + // TotalParticipants: The total count of participants of the parent + // resource. + TotalParticipants int64 `json:"totalParticipants,omitempty"` +} + +type AclItems struct { + // Id: The ID of the entity. For entities of type "person" or "circle", + // this is the ID of the resource. For other types, this will be unset. + Id string `json:"id,omitempty"` + + // Type: The type of entity to whom access is granted. + Type string `json:"type,omitempty"` +} + +type Activity struct { + // Access: Identifies who has access to see this activity. + Access *Acl `json:"access,omitempty"` + + // Actor: The person who performed the activity. + Actor *OrkutAuthorResource `json:"actor,omitempty"` + + // Id: The ID for the activity. + Id string `json:"id,omitempty"` + + // Kind: The kind of activity. Always orkut#activity. + Kind string `json:"kind,omitempty"` + + // Links: Links to resources related to this activity. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Object: The activity's object. + Object *ActivityObject `json:"object,omitempty"` + + // Published: The time at which the activity was initially published. + Published string `json:"published,omitempty"` + + // Title: Title of the activity. + Title string `json:"title,omitempty"` + + // Updated: The time at which the activity was last updated. + Updated string `json:"updated,omitempty"` + + // Verb: This activity's verb, indicating what action was performed. + // Possible values are: + // - add - User added new content to profile or + // album, e.g. video, photo. + // - post - User publish content to the + // stream, e.g. status, scrap. + // - update - User commented on an + // activity. + // - make-friend - User added a new friend. + // - birthday - + // User has a birthday. + Verb string `json:"verb,omitempty"` +} + +type ActivityObject struct { + // Content: The HTML-formatted content, suitable for display. When + // updating an activity's content, post the changes to this property, + // using the value of originalContent as a starting point. If the update + // is successful, the server adds HTML formatting and responds with this + // formatted content. + Content string `json:"content,omitempty"` + + // Items: The list of additional items. + Items []*OrkutActivityobjectsResource `json:"items,omitempty"` + + // ObjectType: The type of the object affected by the activity. Clients + // can use this information to style the rendered activity object + // differently depending on the content. + ObjectType string `json:"objectType,omitempty"` + + // Replies: Comments in reply to this activity. + Replies *ActivityObjectReplies `json:"replies,omitempty"` +} + +type ActivityObjectReplies struct { + // Items: The list of comments. + Items []*Comment `json:"items,omitempty"` + + // TotalItems: Total number of comments. + TotalItems uint64 `json:"totalItems,omitempty,string"` + + // Url: URL for the collection of comments in reply to this activity. + Url string `json:"url,omitempty"` +} + +type ActivityList struct { + // Items: List of activities retrieved. + Items []*Activity `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of activities. Value: + // "orkut#activityList" + Kind string `json:"kind,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // activities.list request to get the next page, if there are more to + // retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Badge struct { + // BadgeLargeLogo: The URL for the 64x64 badge logo. + BadgeLargeLogo string `json:"badgeLargeLogo,omitempty"` + + // BadgeSmallLogo: The URL for the 24x24 badge logo. + BadgeSmallLogo string `json:"badgeSmallLogo,omitempty"` + + // Caption: The name of the badge, suitable for display. + Caption string `json:"caption,omitempty"` + + // Description: The description for the badge, suitable for display. + Description string `json:"description,omitempty"` + + // Id: The unique ID for the badge. + Id int64 `json:"id,omitempty,string"` + + // Kind: Identifies this resource as a badge. Value: "orkut#badge" + Kind string `json:"kind,omitempty"` + + // SponsorLogo: The URL for the 32x32 badge sponsor logo. + SponsorLogo string `json:"sponsorLogo,omitempty"` + + // SponsorName: The name of the badge sponsor, suitable for display. + SponsorName string `json:"sponsorName,omitempty"` + + // SponsorUrl: The URL for the badge sponsor. + SponsorUrl string `json:"sponsorUrl,omitempty"` +} + +type BadgeList struct { + // Items: List of badges retrieved. + Items []*Badge `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of badges. Value: + // "orkut#badgeList" + Kind string `json:"kind,omitempty"` +} + +type Comment struct { + // Actor: The person who posted the comment. + Actor *OrkutAuthorResource `json:"actor,omitempty"` + + // Content: The content of the comment in text/html + Content string `json:"content,omitempty"` + + // Id: The unique ID for the comment. + Id string `json:"id,omitempty"` + + // InReplyTo: Link to the original activity where this comment was + // posted. + InReplyTo *CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: Identifies this resource as a comment. Value: "orkut#comment" + Kind string `json:"kind,omitempty"` + + // Links: List of resources for the comment. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Published: The time the comment was initially published, in RFC 3339 + // format. + Published string `json:"published,omitempty"` +} + +type CommentInReplyTo struct { + // Href: Link to the post on activity stream being commented. + Href string `json:"href,omitempty"` + + // Ref: Unique identifier of the post on activity stream being + // commented. + Ref string `json:"ref,omitempty"` + + // Rel: Relationship between the comment and the post on activity stream + // being commented. Always inReplyTo. + Rel string `json:"rel,omitempty"` + + // Type: Type of the post on activity stream being commented. Always + // text/html. + Type string `json:"type,omitempty"` +} + +type CommentList struct { + // Items: List of comments retrieved. + Items []*Comment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of comments. Value: + // "orkut#commentList" + Kind string `json:"kind,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // comments.list request to get the next page, if there are more to + // retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PreviousPageToken: The value of pageToken query parameter in + // comments.list request to get the previous page, if there are more to + // retrieve. + PreviousPageToken string `json:"previousPageToken,omitempty"` +} + +type Community struct { + // Category: The category of the community. + Category string `json:"category,omitempty"` + + // Co_owners: The co-owners of the community. + Co_owners []*OrkutAuthorResource `json:"co_owners,omitempty"` + + // Creation_date: The time the community was created, in RFC 3339 + // format. + Creation_date string `json:"creation_date,omitempty"` + + // Description: The description of the community. + Description string `json:"description,omitempty"` + + // Id: The id of the community. + Id int64 `json:"id,omitempty"` + + // Kind: Identifies this resource as a community. Value: + // "orkut#community" + Kind string `json:"kind,omitempty"` + + // Language: The official language of the community. + Language string `json:"language,omitempty"` + + // Links: List of resources for the community. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Location: The location of the community. + Location string `json:"location,omitempty"` + + // Member_count: The number of users who are part of the community. This + // number may be approximate, so do not rely on it for iteration. + Member_count int64 `json:"member_count,omitempty"` + + // Moderators: The list of moderators of the community. + Moderators []*OrkutAuthorResource `json:"moderators,omitempty"` + + // Name: The name of the community. + Name string `json:"name,omitempty"` + + // Owner: The person who owns the community. + Owner *OrkutAuthorResource `json:"owner,omitempty"` + + // Photo_url: The photo of the community. + Photo_url string `json:"photo_url,omitempty"` +} + +type CommunityList struct { + // Items: List of communities retrieved. + Items []*Community `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of communities. Value: + // "orkut#communityList" + Kind string `json:"kind,omitempty"` +} + +type CommunityMembers struct { + // CommunityMembershipStatus: Status and permissions of the user related + // to the community. + CommunityMembershipStatus *CommunityMembershipStatus `json:"communityMembershipStatus,omitempty"` + + // Kind: Kind of this item. Always orkut#communityMembers. + Kind string `json:"kind,omitempty"` + + // Person: Description of the community member. + Person *OrkutActivitypersonResource `json:"person,omitempty"` +} + +type CommunityMembersList struct { + // FirstPageToken: The value of pageToken query parameter in + // community_members.list request to get the first page. + FirstPageToken string `json:"firstPageToken,omitempty"` + + // Items: List of community members retrieved. + Items []*CommunityMembers `json:"items,omitempty"` + + // Kind: Kind of this item. Always orkut#communityMembersList. + Kind string `json:"kind,omitempty"` + + // LastPageToken: The value of pageToken query parameter in + // community_members.list request to get the last page. + LastPageToken string `json:"lastPageToken,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // community_members.list request to get the next page, if there are + // more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: The value of pageToken query parameter in + // community_members.list request to get the previous page, if there are + // more to retrieve. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type CommunityMembershipStatus struct { + // CanCreatePoll: Whether the user can create a poll in this community. + CanCreatePoll bool `json:"canCreatePoll,omitempty"` + + // CanCreateTopic: Whether the user can create a topic in this + // community. + CanCreateTopic bool `json:"canCreateTopic,omitempty"` + + // CanShout: Whether the user can perform a shout operation in this + // community. + CanShout bool `json:"canShout,omitempty"` + + // IsCoOwner: Whether the session user is a community co-owner. + IsCoOwner bool `json:"isCoOwner,omitempty"` + + // IsFollowing: Whether the user is following this community. + IsFollowing bool `json:"isFollowing,omitempty"` + + // IsModerator: Whether the session user is a community moderator. + IsModerator bool `json:"isModerator,omitempty"` + + // IsOwner: Whether the session user is the community owner. + IsOwner bool `json:"isOwner,omitempty"` + + // IsRestoreAvailable: Whether the restore operation is available for + // the community. + IsRestoreAvailable bool `json:"isRestoreAvailable,omitempty"` + + // IsTakebackAvailable: Whether the take-back operation is available for + // the community. + IsTakebackAvailable bool `json:"isTakebackAvailable,omitempty"` + + // Kind: Kind of this item. Always orkut#communityMembershipStatus. + Kind string `json:"kind,omitempty"` + + // Status: The status of the current link between the community and the + // user. + Status string `json:"status,omitempty"` +} + +type CommunityMessage struct { + // AddedDate: The timestamp of the date when the message was added, in + // RFC 3339 format. + AddedDate string `json:"addedDate,omitempty"` + + // Author: The creator of the message. If ommited, the message is + // annonimous. + Author *OrkutAuthorResource `json:"author,omitempty"` + + // Body: The body of the message. + Body string `json:"body,omitempty"` + + // Id: The ID of the message. + Id int64 `json:"id,omitempty,string"` + + // IsSpam: Whether this post was marked as spam by the viewer, when + // he/she is not the community owner or one of its moderators. + IsSpam bool `json:"isSpam,omitempty"` + + // Kind: Identifies this resource as a community message. Value: + // "orkut#communityMessage" + Kind string `json:"kind,omitempty"` + + // Links: List of resources for the community message. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Subject: The subject of the message. + Subject string `json:"subject,omitempty"` +} + +type CommunityMessageList struct { + // FirstPageToken: The value of pageToken query parameter in + // community_messages.list request to get the first page. + FirstPageToken string `json:"firstPageToken,omitempty"` + + // Items: List of messages retrieved. + Items []*CommunityMessage `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of community messages. + // Value: "orkut#communityMessageList" + Kind string `json:"kind,omitempty"` + + // LastPageToken: The value of pageToken query parameter in + // community_messages.list request to get the last page. + LastPageToken string `json:"lastPageToken,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // community_messages.list request to get the next page, if there are + // more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: The value of pageToken query parameter in + // community_messages.list request to get the previous page, if there + // are more to retrieve. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type CommunityPoll struct { + // Author: The person who created the poll. + Author *OrkutAuthorResource `json:"author,omitempty"` + + // CommunityId: The ID of the community. + CommunityId int64 `json:"communityId,omitempty"` + + // CreationTime: The date of creation of this poll + CreationTime string `json:"creationTime,omitempty"` + + // Description: The poll description. + Description string `json:"description,omitempty"` + + // EndingTime: The ending date of this poll or empty if the poll doesn't + // have one. + EndingTime string `json:"endingTime,omitempty"` + + // HasVoted: Whether the user has voted on this poll. + HasVoted bool `json:"hasVoted,omitempty"` + + // Id: The poll ID. + Id string `json:"id,omitempty"` + + // Image: The image representing the poll. Field is omitted if no image + // exists. + Image *CommunityPollImage `json:"image,omitempty"` + + // IsClosed: Whether the poll is not expired if there is an expiration + // date. A poll is open (that is, not closed for voting) if it either is + // not expired or doesn't have an expiration date at all. Note that just + // because a poll is open, it doesn't mean that the requester can vote + // on it. + IsClosed bool `json:"isClosed,omitempty"` + + // IsMultipleAnswers: Whether this poll allows voting for more than one + // option. + IsMultipleAnswers bool `json:"isMultipleAnswers,omitempty"` + + // IsOpenForVoting: Whether this poll is still opened for voting. A poll + // is open for voting if it is not closed, the user has not yet voted on + // it and the user has the permission to do so, which happens if he/she + // is either a community member or the poll is open for everybody. + IsOpenForVoting bool `json:"isOpenForVoting,omitempty"` + + // IsRestricted: Whether this poll is restricted for members only. If a + // poll is open but the user can't vote on it, it's been restricted to + // members only. This information is important to tell this case apart + // from the one where the user can't vote simply because the poll is + // already closed. + IsRestricted bool `json:"isRestricted,omitempty"` + + // IsSpam: Whether the user has marked this poll as spam. This only + // affects the poll for this user, not globally. + IsSpam bool `json:"isSpam,omitempty"` + + // IsUsersVotePublic: If user has already voted, whether his vote is + // publicly visible. + IsUsersVotePublic bool `json:"isUsersVotePublic,omitempty"` + + // IsVotingAllowedForNonMembers: Whether non-members of the community + // can vote on the poll. + IsVotingAllowedForNonMembers bool `json:"isVotingAllowedForNonMembers,omitempty"` + + // Kind: Identifies this resource as a community poll. Value: + // "orkut#communityPoll" + Kind string `json:"kind,omitempty"` + + // LastUpdate: The date of the last update of this poll. + LastUpdate string `json:"lastUpdate,omitempty"` + + // Links: List of resources for the community poll. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Options: List of options of this poll. + Options []*OrkutCommunitypolloptionResource `json:"options,omitempty"` + + // Question: The poll question. + Question string `json:"question,omitempty"` + + // TotalNumberOfVotes: The total number of votes this poll has received. + TotalNumberOfVotes int64 `json:"totalNumberOfVotes,omitempty"` + + // VotedOptions: List of options the user has voted on, if there are + // any. + VotedOptions []int64 `json:"votedOptions,omitempty"` +} + +type CommunityPollImage struct { + // Url: A URL that points to an image of the poll. + Url string `json:"url,omitempty"` +} + +type CommunityPollComment struct { + // AddedDate: The date when the message was added, in RFC 3339 format. + AddedDate string `json:"addedDate,omitempty"` + + // Author: The creator of the comment. + Author *OrkutAuthorResource `json:"author,omitempty"` + + // Body: The body of the message. + Body string `json:"body,omitempty"` + + // Id: The ID of the comment. + Id int64 `json:"id,omitempty"` + + // Kind: Identifies this resource as a community poll comment. Value: + // "orkut#communityPollComment" + Kind string `json:"kind,omitempty"` +} + +type CommunityPollCommentList struct { + // FirstPageToken: The value of pageToken query parameter in + // community_poll_comments.list request to get the first page. + FirstPageToken string `json:"firstPageToken,omitempty"` + + // Items: List of community poll comments retrieved. + Items []*CommunityPollComment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of community poll + // comments. Value: "orkut#CommunityPollCommentList" + Kind string `json:"kind,omitempty"` + + // LastPageToken: The value of pageToken query parameter in + // community_poll_comments.list request to get the last page. + LastPageToken string `json:"lastPageToken,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // community_poll_comments.list request to get the next page, if there + // are more to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: The value of pageToken query parameter in + // community_poll_comments.list request to get the previous page, if + // there are more to retrieve. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type CommunityPollList struct { + // FirstPageToken: The value of pageToken query parameter in + // community_polls.list request to get the first page. + FirstPageToken string `json:"firstPageToken,omitempty"` + + // Items: List of community polls retrieved. + Items []*CommunityPoll `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of community polls. + // Value: "orkut#communityPollList" + Kind string `json:"kind,omitempty"` + + // LastPageToken: The value of pageToken query parameter in + // community_polls.list request to get the last page. + LastPageToken string `json:"lastPageToken,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // community_polls.list request to get the next page, if there are more + // to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: The value of pageToken query parameter in + // community_polls.list request to get the previous page, if there are + // more to retrieve. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type CommunityPollVote struct { + // IsVotevisible: Whether this vote is visible to other users or not. + IsVotevisible bool `json:"isVotevisible,omitempty"` + + // Kind: Identifies this resource as a community poll vote. Value: + // "orkut#communityPollVote" + Kind string `json:"kind,omitempty"` + + // OptionIds: The ids of the voted options. + OptionIds []int64 `json:"optionIds,omitempty"` +} + +type CommunityTopic struct { + // Author: The creator of the topic. + Author *OrkutAuthorResource `json:"author,omitempty"` + + // Body: The body of the topic. + Body string `json:"body,omitempty"` + + // Id: The ID of the topic. + Id int64 `json:"id,omitempty,string"` + + // IsClosed: Whether the topic is closed for new messages. + IsClosed bool `json:"isClosed,omitempty"` + + // Kind: Identifies this resource as a community topic. Value: + // "orkut#communityTopic" + Kind string `json:"kind,omitempty"` + + // LastUpdate: The timestamp of the last update, in RFC 3339 format. + LastUpdate string `json:"lastUpdate,omitempty"` + + // LatestMessageSnippet: Snippet of the last message posted on this + // topic. + LatestMessageSnippet string `json:"latestMessageSnippet,omitempty"` + + // Links: List of resources for the community. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Messages: Most recent messages. + Messages []*CommunityMessage `json:"messages,omitempty"` + + // NumberOfReplies: The total number of replies this topic has received. + NumberOfReplies int64 `json:"numberOfReplies,omitempty"` + + // Title: The title of the topic. + Title string `json:"title,omitempty"` +} + +type CommunityTopicList struct { + // FirstPageToken: The value of pageToken query parameter in + // community_topic.list request to get the first page. + FirstPageToken string `json:"firstPageToken,omitempty"` + + // Items: List of topics retrieved. + Items []*CommunityTopic `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of community topics. + // Value: "orkut#communityTopicList" + Kind string `json:"kind,omitempty"` + + // LastPageToken: The value of pageToken query parameter in + // community_topic.list request to get the last page. + LastPageToken string `json:"lastPageToken,omitempty"` + + // NextPageToken: The value of pageToken query parameter in + // community_topic.list request to get the next page, if there are more + // to retrieve. + NextPageToken string `json:"nextPageToken,omitempty"` + + // PrevPageToken: The value of pageToken query parameter in + // community_topic.list request to get the previous page, if there are + // more to retrieve. + PrevPageToken string `json:"prevPageToken,omitempty"` +} + +type Counters struct { + // Items: List of counters retrieved. + Items []*OrkutCounterResource `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of counters. Value: + // "orkut#counters" + Kind string `json:"kind,omitempty"` +} + +type OrkutActivityobjectsResource struct { + // Community: The community which is related with this activity, e.g. a + // joined community. + Community *Community `json:"community,omitempty"` + + // Content: The HTML-formatted content, suitable for display. When + // updating an activity's content, post the changes to this property, + // using the value of originalContent as a starting point. If the update + // is successful, the server adds HTML formatting and responds with this + // formatted content. + Content string `json:"content,omitempty"` + + // DisplayName: The title of the object. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID for the object. + Id string `json:"id,omitempty"` + + // Links: Links to other resources related to this object. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // ObjectType: The object type. + ObjectType string `json:"objectType,omitempty"` + + // Person: The person who is related with this activity, e.g. an Added + // User. + Person *OrkutActivitypersonResource `json:"person,omitempty"` +} + +type OrkutActivitypersonResource struct { + // Birthday: The person's date of birth, represented as YYYY-MM-DD. + Birthday string `json:"birthday,omitempty"` + + // Gender: The person's gender. Values include "male", "female", and + // "other". + Gender string `json:"gender,omitempty"` + + // Id: The person's opensocial ID. + Id string `json:"id,omitempty"` + + // Image: The person's profile photo. This is adapted from Google+ and + // was originaly introduced as extra OpenSocial convenience fields. + Image *OrkutActivitypersonResourceImage `json:"image,omitempty"` + + // Name: An object that encapsulates the individual components of a + // person's name. + Name *OrkutActivitypersonResourceName `json:"name,omitempty"` + + // Url: The person's profile url. This is adapted from Google+ and was + // originaly introduced as extra OpenSocial convenience fields. + Url string `json:"url,omitempty"` +} + +type OrkutActivitypersonResourceImage struct { + // Url: The URL of the person's profile photo. + Url string `json:"url,omitempty"` +} + +type OrkutActivitypersonResourceName struct { + // FamilyName: The family name (last name) of this person. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name (first name) of this person. + GivenName string `json:"givenName,omitempty"` +} + +type OrkutAuthorResource struct { + // DisplayName: The name of the author, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: Unique identifier of the person who posted the comment. This is + // the person's OpenSocial ID. + Id string `json:"id,omitempty"` + + // Image: Image data about the author. + Image *OrkutAuthorResourceImage `json:"image,omitempty"` + + // Url: The URL of the author who posted the comment [not yet + // implemented] + Url string `json:"url,omitempty"` +} + +type OrkutAuthorResourceImage struct { + // Url: A URL that points to a thumbnail photo of the author. + Url string `json:"url,omitempty"` +} + +type OrkutCommunitypolloptionResource struct { + // Description: The option description. + Description string `json:"description,omitempty"` + + // Image: Image data about the poll option. Field is omitted if no image + // exists. + Image *OrkutCommunitypolloptionResourceImage `json:"image,omitempty"` + + // NumberOfVotes: The total number of votes that this option received. + NumberOfVotes int64 `json:"numberOfVotes,omitempty"` + + // OptionId: The poll option ID + OptionId int64 `json:"optionId,omitempty"` +} + +type OrkutCommunitypolloptionResourceImage struct { + // Url: A URL that points to an image of the poll question. + Url string `json:"url,omitempty"` +} + +type OrkutCounterResource struct { + // Link: Link to the collection being counted. + Link *OrkutLinkResource `json:"link,omitempty"` + + // Name: The name of the counted collection. Currently supported + // collections are: + // - scraps - The scraps of the user. + // - photos - The + // photos of the user. + // - videos - The videos of the user. + // - + // pendingTestimonials - The pending testimonials of the user. + Name string `json:"name,omitempty"` + + // Total: The number of resources on the counted collection. + Total int64 `json:"total,omitempty"` +} + +type OrkutLinkResource struct { + // Href: URL of the link. + Href string `json:"href,omitempty"` + + // Rel: Relation between the resource and the parent object. + Rel string `json:"rel,omitempty"` + + // Title: Title of the link. + Title string `json:"title,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` +} + +type Visibility struct { + // Kind: Identifies this resource as a visibility item. Value: + // "orkut#visibility" + Kind string `json:"kind,omitempty"` + + // Links: List of resources for the visibility item. + Links []*OrkutLinkResource `json:"links,omitempty"` + + // Visibility: The visibility of the resource. Possible values are: + // - + // default: not hidden by the user + // - hidden: hidden + Visibility string `json:"visibility,omitempty"` +} + +// method id "orkut.acl.delete": + +type AclDeleteCall struct { + s *Service + activityId string + userId string + opt_ map[string]interface{} +} + +// Delete: Excludes an element from the ACL of the activity. +func (r *AclService) Delete(activityId string, userId string) *AclDeleteCall { + c := &AclDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.userId = userId + return c +} + +func (c *AclDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/acl/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Excludes an element from the ACL of the activity.", + // "httpMethod": "DELETE", + // "id": "orkut.acl.delete", + // "parameterOrder": [ + // "activityId", + // "userId" + // ], + // "parameters": { + // "activityId": { + // "description": "ID of the activity.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user to be removed from the activity.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/acl/{userId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.activities.delete": + +type ActivitiesDeleteCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// Delete: Deletes an existing activity, if the access controls allow +// it. +func (r *ActivitiesService) Delete(activityId string) *ActivitiesDeleteCall { + c := &ActivitiesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +func (c *ActivitiesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an existing activity, if the access controls allow it.", + // "httpMethod": "DELETE", + // "id": "orkut.activities.delete", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "ID of the activity to remove.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.activities.list": + +type ActivitiesListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: Retrieves a list of activities. +func (r *ActivitiesService) List(userId string, collection string) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *ActivitiesListCall) Hl(hl string) *ActivitiesListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *ActivitiesListCall) PageToken(pageToken string) *ActivitiesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ActivitiesListCall) Do() (*ActivityList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/activities/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ActivityList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of activities.", + // "httpMethod": "GET", + // "id": "orkut.activities.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of activities to list.", + // "enum": [ + // "all", + // "scraps", + // "stream" + // ], + // "enumDescriptions": [ + // "All activities created by the specified user that the authenticated user is authorized to view.", + // "The specified user's scrapbook.", + // "The specified user's stream feed, intended for consumption. This includes activities posted by people that the user is following, and activities in which the user has been mentioned." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of activities to include in the response.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user whose activities will be listed. Can be me to refer to the viewer (i.e. the authenticated user).", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities/{collection}", + // "response": { + // "$ref": "ActivityList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.activityVisibility.get": + +type ActivityVisibilityGetCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// Get: Gets the visibility of an existing activity. +func (r *ActivityVisibilityService) Get(activityId string) *ActivityVisibilityGetCall { + c := &ActivityVisibilityGetCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +func (c *ActivityVisibilityGetCall) Do() (*Visibility, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/visibility") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Visibility) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets the visibility of an existing activity.", + // "httpMethod": "GET", + // "id": "orkut.activityVisibility.get", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "ID of the activity to get the visibility.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/visibility", + // "response": { + // "$ref": "Visibility" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.activityVisibility.patch": + +type ActivityVisibilityPatchCall struct { + s *Service + activityId string + visibility *Visibility + opt_ map[string]interface{} +} + +// Patch: Updates the visibility of an existing activity. This method +// supports patch semantics. +func (r *ActivityVisibilityService) Patch(activityId string, visibility *Visibility) *ActivityVisibilityPatchCall { + c := &ActivityVisibilityPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.visibility = visibility + return c +} + +func (c *ActivityVisibilityPatchCall) Do() (*Visibility, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.visibility) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/visibility") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Visibility) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the visibility of an existing activity. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "orkut.activityVisibility.patch", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "ID of the activity.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/visibility", + // "request": { + // "$ref": "Visibility" + // }, + // "response": { + // "$ref": "Visibility" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.activityVisibility.update": + +type ActivityVisibilityUpdateCall struct { + s *Service + activityId string + visibility *Visibility + opt_ map[string]interface{} +} + +// Update: Updates the visibility of an existing activity. +func (r *ActivityVisibilityService) Update(activityId string, visibility *Visibility) *ActivityVisibilityUpdateCall { + c := &ActivityVisibilityUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.visibility = visibility + return c +} + +func (c *ActivityVisibilityUpdateCall) Do() (*Visibility, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.visibility) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/visibility") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Visibility) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the visibility of an existing activity.", + // "httpMethod": "PUT", + // "id": "orkut.activityVisibility.update", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "ID of the activity.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/visibility", + // "request": { + // "$ref": "Visibility" + // }, + // "response": { + // "$ref": "Visibility" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.badges.get": + +type BadgesGetCall struct { + s *Service + userId string + badgeId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a badge from a user. +func (r *BadgesService) Get(userId string, badgeId int64) *BadgesGetCall { + c := &BadgesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.badgeId = badgeId + return c +} + +func (c *BadgesGetCall) Do() (*Badge, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/badges/{badgeId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{badgeId}", strconv.FormatInt(c.badgeId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Badge) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a badge from a user.", + // "httpMethod": "GET", + // "id": "orkut.badges.get", + // "parameterOrder": [ + // "userId", + // "badgeId" + // ], + // "parameters": { + // "badgeId": { + // "description": "The ID of the badge that will be retrieved.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user whose badges will be listed. Can be me to refer to caller.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/badges/{badgeId}", + // "response": { + // "$ref": "Badge" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.badges.list": + +type BadgesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: Retrieves the list of visible badges of a user. +func (r *BadgesService) List(userId string) *BadgesListCall { + c := &BadgesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *BadgesListCall) Do() (*BadgeList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/badges") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BadgeList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of visible badges of a user.", + // "httpMethod": "GET", + // "id": "orkut.badges.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The id of the user whose badges will be listed. Can be me to refer to caller.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/badges", + // "response": { + // "$ref": "BadgeList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.comments.delete": + +type CommentsDeleteCall struct { + s *Service + commentId string + opt_ map[string]interface{} +} + +// Delete: Deletes an existing comment. +func (r *CommentsService) Delete(commentId string) *CommentsDeleteCall { + c := &CommentsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.commentId = commentId + return c +} + +func (c *CommentsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an existing comment.", + // "httpMethod": "DELETE", + // "id": "orkut.comments.delete", + // "parameterOrder": [ + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "ID of the comment to remove.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "comments/{commentId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.comments.get": + +type CommentsGetCall struct { + s *Service + commentId string + opt_ map[string]interface{} +} + +// Get: Retrieves an existing comment. +func (r *CommentsService) Get(commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.commentId = commentId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommentsGetCall) Hl(hl string) *CommentsGetCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves an existing comment.", + // "httpMethod": "GET", + // "id": "orkut.comments.get", + // "parameterOrder": [ + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.comments.insert": + +type CommentsInsertCall struct { + s *Service + activityId string + comment *Comment + opt_ map[string]interface{} +} + +// Insert: Inserts a new comment to an activity. +func (r *CommentsService) Insert(activityId string, comment *Comment) *CommentsInsertCall { + c := &CommentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.comment = comment + return c +} + +func (c *CommentsInsertCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Inserts a new comment to an activity.", + // "httpMethod": "POST", + // "id": "orkut.comments.insert", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to contain the new comment.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.comments.list": + +type CommentsListCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// List: Retrieves a list of comments, possibly filtered. +func (r *CommentsService) List(activityId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommentsListCall) Hl(hl string) *CommentsListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Sort search results. +func (c *CommentsListCall) OrderBy(orderBy string) *CommentsListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommentsListCall) Do() (*CommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of comments, possibly filtered.", + // "httpMethod": "GET", + // "id": "orkut.comments.list", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity containing the comments.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of activities to include in the response.", + // "format": "uint32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "default": "DESCENDING_SORT", + // "description": "Sort search results.", + // "enum": [ + // "ascending", + // "descending" + // ], + // "enumDescriptions": [ + // "Use ascending sort order.", + // "Use descending sort order." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "response": { + // "$ref": "CommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communities.get": + +type CommunitiesGetCall struct { + s *Service + communityId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves the basic information (aka. profile) of a community. +func (r *CommunitiesService) Get(communityId int64) *CommunitiesGetCall { + c := &CommunitiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunitiesGetCall) Hl(hl string) *CommunitiesGetCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommunitiesGetCall) Do() (*Community, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Community) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the basic information (aka. profile) of a community.", + // "httpMethod": "GET", + // "id": "orkut.communities.get", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community to get.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "communities/{communityId}", + // "response": { + // "$ref": "Community" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communities.list": + +type CommunitiesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: Retrieves the list of communities the current user is a member +// of. +func (r *CommunitiesService) List(userId string) *CommunitiesListCall { + c := &CommunitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunitiesListCall) Hl(hl string) *CommunitiesListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of communities to include in the response. +func (c *CommunitiesListCall) MaxResults(maxResults int64) *CommunitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": How to order the +// communities by. +func (c *CommunitiesListCall) OrderBy(orderBy string) *CommunitiesListCall { + c.opt_["orderBy"] = orderBy + return c +} + +func (c *CommunitiesListCall) Do() (*CommunityList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/communities") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of communities the current user is a member of.", + // "httpMethod": "GET", + // "id": "orkut.communities.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of communities to include in the response.", + // "format": "uint32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "How to order the communities by.", + // "enum": [ + // "id", + // "ranked" + // ], + // "enumDescriptions": [ + // "Returns the communities sorted by a fixed, natural order.", + // "Returns the communities ranked accordingly to how they are displayed on the orkut web application." + // ], + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user whose communities will be listed. Can be me to refer to caller.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/communities", + // "response": { + // "$ref": "CommunityList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityFollow.delete": + +type CommunityFollowDeleteCall struct { + s *Service + communityId int64 + userId string + opt_ map[string]interface{} +} + +// Delete: Removes a user from the followers of a community. +func (r *CommunityFollowService) Delete(communityId int64, userId string) *CommunityFollowDeleteCall { + c := &CommunityFollowDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.userId = userId + return c +} + +func (c *CommunityFollowDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/followers/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Removes a user from the followers of a community.", + // "httpMethod": "DELETE", + // "id": "orkut.communityFollow.delete", + // "parameterOrder": [ + // "communityId", + // "userId" + // ], + // "parameters": { + // "communityId": { + // "description": "ID of the community.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/followers/{userId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityFollow.insert": + +type CommunityFollowInsertCall struct { + s *Service + communityId int64 + userId string + opt_ map[string]interface{} +} + +// Insert: Adds a user as a follower of a community. +func (r *CommunityFollowService) Insert(communityId int64, userId string) *CommunityFollowInsertCall { + c := &CommunityFollowInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.userId = userId + return c +} + +func (c *CommunityFollowInsertCall) Do() (*CommunityMembers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/followers/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMembers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a user as a follower of a community.", + // "httpMethod": "POST", + // "id": "orkut.communityFollow.insert", + // "parameterOrder": [ + // "communityId", + // "userId" + // ], + // "parameters": { + // "communityId": { + // "description": "ID of the community.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/followers/{userId}", + // "response": { + // "$ref": "CommunityMembers" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityMembers.delete": + +type CommunityMembersDeleteCall struct { + s *Service + communityId int64 + userId string + opt_ map[string]interface{} +} + +// Delete: Makes the user leave a community. +func (r *CommunityMembersService) Delete(communityId int64, userId string) *CommunityMembersDeleteCall { + c := &CommunityMembersDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.userId = userId + return c +} + +func (c *CommunityMembersDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/members/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Makes the user leave a community.", + // "httpMethod": "DELETE", + // "id": "orkut.communityMembers.delete", + // "parameterOrder": [ + // "communityId", + // "userId" + // ], + // "parameters": { + // "communityId": { + // "description": "ID of the community.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/members/{userId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityMembers.get": + +type CommunityMembersGetCall struct { + s *Service + communityId int64 + userId string + opt_ map[string]interface{} +} + +// Get: Retrieves the relationship between a user and a community. +func (r *CommunityMembersService) Get(communityId int64, userId string) *CommunityMembersGetCall { + c := &CommunityMembersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.userId = userId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityMembersGetCall) Hl(hl string) *CommunityMembersGetCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommunityMembersGetCall) Do() (*CommunityMembers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/members/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMembers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the relationship between a user and a community.", + // "httpMethod": "GET", + // "id": "orkut.communityMembers.get", + // "parameterOrder": [ + // "communityId", + // "userId" + // ], + // "parameters": { + // "communityId": { + // "description": "ID of the community.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "ID of the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/members/{userId}", + // "response": { + // "$ref": "CommunityMembers" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityMembers.insert": + +type CommunityMembersInsertCall struct { + s *Service + communityId int64 + userId string + opt_ map[string]interface{} +} + +// Insert: Makes the user join a community. +func (r *CommunityMembersService) Insert(communityId int64, userId string) *CommunityMembersInsertCall { + c := &CommunityMembersInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.userId = userId + return c +} + +func (c *CommunityMembersInsertCall) Do() (*CommunityMembers, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/members/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMembers) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Makes the user join a community.", + // "httpMethod": "POST", + // "id": "orkut.communityMembers.insert", + // "parameterOrder": [ + // "communityId", + // "userId" + // ], + // "parameters": { + // "communityId": { + // "description": "ID of the community.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "userId": { + // "description": "ID of the user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/members/{userId}", + // "response": { + // "$ref": "CommunityMembers" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityMembers.list": + +type CommunityMembersListCall struct { + s *Service + communityId int64 + opt_ map[string]interface{} +} + +// List: Lists members of a community. Use the pagination tokens to +// retrieve the full list; do not rely on the member count available in +// the community profile information to know when to stop iterating, as +// that count may be approximate. +func (r *CommunityMembersService) List(communityId int64) *CommunityMembersListCall { + c := &CommunityMembersListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + return c +} + +// FriendsOnly sets the optional parameter "friendsOnly": Whether to +// list only community members who are friends of the user. +func (c *CommunityMembersListCall) FriendsOnly(friendsOnly bool) *CommunityMembersListCall { + c.opt_["friendsOnly"] = friendsOnly + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityMembersListCall) Hl(hl string) *CommunityMembersListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of members to include in the response. +func (c *CommunityMembersListCall) MaxResults(maxResults int64) *CommunityMembersListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommunityMembersListCall) PageToken(pageToken string) *CommunityMembersListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommunityMembersListCall) Do() (*CommunityMembersList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["friendsOnly"]; ok { + params.Set("friendsOnly", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/members") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMembersList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists members of a community. Use the pagination tokens to retrieve the full list; do not rely on the member count available in the community profile information to know when to stop iterating, as that count may be approximate.", + // "httpMethod": "GET", + // "id": "orkut.communityMembers.list", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose members will be listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "friendsOnly": { + // "description": "Whether to list only community members who are friends of the user.", + // "location": "query", + // "type": "boolean" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of members to include in the response.", + // "format": "uint32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/members", + // "response": { + // "$ref": "CommunityMembersList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityMessages.delete": + +type CommunityMessagesDeleteCall struct { + s *Service + communityId int64 + topicId int64 + messageId int64 + opt_ map[string]interface{} +} + +// Delete: Moves a message of the community to the trash folder. +func (r *CommunityMessagesService) Delete(communityId int64, topicId int64, messageId int64) *CommunityMessagesDeleteCall { + c := &CommunityMessagesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.topicId = topicId + c.messageId = messageId + return c +} + +func (c *CommunityMessagesDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics/{topicId}/messages/{messageId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{messageId}", strconv.FormatInt(c.messageId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Moves a message of the community to the trash folder.", + // "httpMethod": "DELETE", + // "id": "orkut.communityMessages.delete", + // "parameterOrder": [ + // "communityId", + // "topicId", + // "messageId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose message will be moved to the trash folder.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "messageId": { + // "description": "The ID of the message to be moved to the trash folder.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "topicId": { + // "description": "The ID of the topic whose message will be moved to the trash folder.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics/{topicId}/messages/{messageId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityMessages.insert": + +type CommunityMessagesInsertCall struct { + s *Service + communityId int64 + topicId int64 + communitymessage *CommunityMessage + opt_ map[string]interface{} +} + +// Insert: Adds a message to a given community topic. +func (r *CommunityMessagesService) Insert(communityId int64, topicId int64, communitymessage *CommunityMessage) *CommunityMessagesInsertCall { + c := &CommunityMessagesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.topicId = topicId + c.communitymessage = communitymessage + return c +} + +func (c *CommunityMessagesInsertCall) Do() (*CommunityMessage, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.communitymessage) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics/{topicId}/messages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMessage) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a message to a given community topic.", + // "httpMethod": "POST", + // "id": "orkut.communityMessages.insert", + // "parameterOrder": [ + // "communityId", + // "topicId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community the message should be added to.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The ID of the topic the message should be added to.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics/{topicId}/messages", + // "request": { + // "$ref": "CommunityMessage" + // }, + // "response": { + // "$ref": "CommunityMessage" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityMessages.list": + +type CommunityMessagesListCall struct { + s *Service + communityId int64 + topicId int64 + opt_ map[string]interface{} +} + +// List: Retrieves the messages of a topic of a community. +func (r *CommunityMessagesService) List(communityId int64, topicId int64) *CommunityMessagesListCall { + c := &CommunityMessagesListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.topicId = topicId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityMessagesListCall) Hl(hl string) *CommunityMessagesListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of messages to include in the response. +func (c *CommunityMessagesListCall) MaxResults(maxResults int64) *CommunityMessagesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommunityMessagesListCall) PageToken(pageToken string) *CommunityMessagesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommunityMessagesListCall) Do() (*CommunityMessageList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics/{topicId}/messages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityMessageList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the messages of a topic of a community.", + // "httpMethod": "GET", + // "id": "orkut.communityMessages.list", + // "parameterOrder": [ + // "communityId", + // "topicId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community which messages will be listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of messages to include in the response.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // }, + // "topicId": { + // "description": "The ID of the topic which messages will be listed.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics/{topicId}/messages", + // "response": { + // "$ref": "CommunityMessageList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityPollComments.insert": + +type CommunityPollCommentsInsertCall struct { + s *Service + communityId int64 + pollId string + communitypollcomment *CommunityPollComment + opt_ map[string]interface{} +} + +// Insert: Adds a comment on a community poll. +func (r *CommunityPollCommentsService) Insert(communityId int64, pollId string, communitypollcomment *CommunityPollComment) *CommunityPollCommentsInsertCall { + c := &CommunityPollCommentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.pollId = pollId + c.communitypollcomment = communitypollcomment + return c +} + +func (c *CommunityPollCommentsInsertCall) Do() (*CommunityPollComment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.communitypollcomment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/polls/{pollId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pollId}", url.QueryEscape(c.pollId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityPollComment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a comment on a community poll.", + // "httpMethod": "POST", + // "id": "orkut.communityPollComments.insert", + // "parameterOrder": [ + // "communityId", + // "pollId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose poll is being commented.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "pollId": { + // "description": "The ID of the poll being commented.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/polls/{pollId}/comments", + // "request": { + // "$ref": "CommunityPollComment" + // }, + // "response": { + // "$ref": "CommunityPollComment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityPollComments.list": + +type CommunityPollCommentsListCall struct { + s *Service + communityId int64 + pollId string + opt_ map[string]interface{} +} + +// List: Retrieves the comments of a community poll. +func (r *CommunityPollCommentsService) List(communityId int64, pollId string) *CommunityPollCommentsListCall { + c := &CommunityPollCommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.pollId = pollId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityPollCommentsListCall) Hl(hl string) *CommunityPollCommentsListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of comments to include in the response. +func (c *CommunityPollCommentsListCall) MaxResults(maxResults int64) *CommunityPollCommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommunityPollCommentsListCall) PageToken(pageToken string) *CommunityPollCommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommunityPollCommentsListCall) Do() (*CommunityPollCommentList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/polls/{pollId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pollId}", url.QueryEscape(c.pollId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityPollCommentList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the comments of a community poll.", + // "httpMethod": "GET", + // "id": "orkut.communityPollComments.list", + // "parameterOrder": [ + // "communityId", + // "pollId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose poll is having its comments listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of comments to include in the response.", + // "format": "uint32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // }, + // "pollId": { + // "description": "The ID of the community whose polls will be listed.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/polls/{pollId}/comments", + // "response": { + // "$ref": "CommunityPollCommentList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityPollVotes.insert": + +type CommunityPollVotesInsertCall struct { + s *Service + communityId int64 + pollId string + communitypollvote *CommunityPollVote + opt_ map[string]interface{} +} + +// Insert: Votes on a community poll. +func (r *CommunityPollVotesService) Insert(communityId int64, pollId string, communitypollvote *CommunityPollVote) *CommunityPollVotesInsertCall { + c := &CommunityPollVotesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.pollId = pollId + c.communitypollvote = communitypollvote + return c +} + +func (c *CommunityPollVotesInsertCall) Do() (*CommunityPollVote, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.communitypollvote) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/polls/{pollId}/votes") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pollId}", url.QueryEscape(c.pollId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityPollVote) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Votes on a community poll.", + // "httpMethod": "POST", + // "id": "orkut.communityPollVotes.insert", + // "parameterOrder": [ + // "communityId", + // "pollId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose poll is being voted.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "pollId": { + // "description": "The ID of the poll being voted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/polls/{pollId}/votes", + // "request": { + // "$ref": "CommunityPollVote" + // }, + // "response": { + // "$ref": "CommunityPollVote" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityPolls.get": + +type CommunityPollsGetCall struct { + s *Service + communityId int64 + pollId string + opt_ map[string]interface{} +} + +// Get: Retrieves one specific poll of a community. +func (r *CommunityPollsService) Get(communityId int64, pollId string) *CommunityPollsGetCall { + c := &CommunityPollsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.pollId = pollId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityPollsGetCall) Hl(hl string) *CommunityPollsGetCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommunityPollsGetCall) Do() (*CommunityPoll, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/polls/{pollId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{pollId}", url.QueryEscape(c.pollId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityPoll) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves one specific poll of a community.", + // "httpMethod": "GET", + // "id": "orkut.communityPolls.get", + // "parameterOrder": [ + // "communityId", + // "pollId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community for whose poll will be retrieved.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "pollId": { + // "description": "The ID of the poll to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/polls/{pollId}", + // "response": { + // "$ref": "CommunityPoll" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityPolls.list": + +type CommunityPollsListCall struct { + s *Service + communityId int64 + opt_ map[string]interface{} +} + +// List: Retrieves the polls of a community. +func (r *CommunityPollsService) List(communityId int64) *CommunityPollsListCall { + c := &CommunityPollsListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityPollsListCall) Hl(hl string) *CommunityPollsListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of polls to include in the response. +func (c *CommunityPollsListCall) MaxResults(maxResults int64) *CommunityPollsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommunityPollsListCall) PageToken(pageToken string) *CommunityPollsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommunityPollsListCall) Do() (*CommunityPollList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/polls") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityPollList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the polls of a community.", + // "httpMethod": "GET", + // "id": "orkut.communityPolls.list", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community which polls will be listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of polls to include in the response.", + // "format": "uint32", + // "location": "query", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/polls", + // "response": { + // "$ref": "CommunityPollList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityRelated.list": + +type CommunityRelatedListCall struct { + s *Service + communityId int64 + opt_ map[string]interface{} +} + +// List: Retrieves the communities related to another one. +func (r *CommunityRelatedService) List(communityId int64) *CommunityRelatedListCall { + c := &CommunityRelatedListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityRelatedListCall) Hl(hl string) *CommunityRelatedListCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommunityRelatedListCall) Do() (*CommunityList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/related") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the communities related to another one.", + // "httpMethod": "GET", + // "id": "orkut.communityRelated.list", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose related communities will be listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/related", + // "response": { + // "$ref": "CommunityList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityTopics.delete": + +type CommunityTopicsDeleteCall struct { + s *Service + communityId int64 + topicId int64 + opt_ map[string]interface{} +} + +// Delete: Moves a topic of the community to the trash folder. +func (r *CommunityTopicsService) Delete(communityId int64, topicId int64) *CommunityTopicsDeleteCall { + c := &CommunityTopicsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.topicId = topicId + return c +} + +func (c *CommunityTopicsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics/{topicId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Moves a topic of the community to the trash folder.", + // "httpMethod": "DELETE", + // "id": "orkut.communityTopics.delete", + // "parameterOrder": [ + // "communityId", + // "topicId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose topic will be moved to the trash folder.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "topicId": { + // "description": "The ID of the topic to be moved to the trash folder.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics/{topicId}", + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityTopics.get": + +type CommunityTopicsGetCall struct { + s *Service + communityId int64 + topicId int64 + opt_ map[string]interface{} +} + +// Get: Retrieves a topic of a community. +func (r *CommunityTopicsService) Get(communityId int64, topicId int64) *CommunityTopicsGetCall { + c := &CommunityTopicsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.topicId = topicId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityTopicsGetCall) Hl(hl string) *CommunityTopicsGetCall { + c.opt_["hl"] = hl + return c +} + +func (c *CommunityTopicsGetCall) Do() (*CommunityTopic, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics/{topicId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{topicId}", strconv.FormatInt(c.topicId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityTopic) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a topic of a community.", + // "httpMethod": "GET", + // "id": "orkut.communityTopics.get", + // "parameterOrder": [ + // "communityId", + // "topicId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community whose topic will be retrieved.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "topicId": { + // "description": "The ID of the topic to get.", + // "format": "int64", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics/{topicId}", + // "response": { + // "$ref": "CommunityTopic" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.communityTopics.insert": + +type CommunityTopicsInsertCall struct { + s *Service + communityId int64 + communitytopic *CommunityTopic + opt_ map[string]interface{} +} + +// Insert: Adds a topic to a given community. +func (r *CommunityTopicsService) Insert(communityId int64, communitytopic *CommunityTopic) *CommunityTopicsInsertCall { + c := &CommunityTopicsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + c.communitytopic = communitytopic + return c +} + +// IsShout sets the optional parameter "isShout": Whether this topic is +// a shout. +func (c *CommunityTopicsInsertCall) IsShout(isShout bool) *CommunityTopicsInsertCall { + c.opt_["isShout"] = isShout + return c +} + +func (c *CommunityTopicsInsertCall) Do() (*CommunityTopic, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.communitytopic) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["isShout"]; ok { + params.Set("isShout", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityTopic) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Adds a topic to a given community.", + // "httpMethod": "POST", + // "id": "orkut.communityTopics.insert", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community the topic should be added to.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "isShout": { + // "description": "Whether this topic is a shout.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "communities/{communityId}/topics", + // "request": { + // "$ref": "CommunityTopic" + // }, + // "response": { + // "$ref": "CommunityTopic" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} + +// method id "orkut.communityTopics.list": + +type CommunityTopicsListCall struct { + s *Service + communityId int64 + opt_ map[string]interface{} +} + +// List: Retrieves the topics of a community. +func (r *CommunityTopicsService) List(communityId int64) *CommunityTopicsListCall { + c := &CommunityTopicsListCall{s: r.s, opt_: make(map[string]interface{})} + c.communityId = communityId + return c +} + +// Hl sets the optional parameter "hl": Specifies the interface language +// (host language) of your user interface. +func (c *CommunityTopicsListCall) Hl(hl string) *CommunityTopicsListCall { + c.opt_["hl"] = hl + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of topics to include in the response. +func (c *CommunityTopicsListCall) MaxResults(maxResults int64) *CommunityTopicsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A continuation +// token that allows pagination. +func (c *CommunityTopicsListCall) PageToken(pageToken string) *CommunityTopicsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CommunityTopicsListCall) Do() (*CommunityTopicList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["hl"]; ok { + params.Set("hl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "communities/{communityId}/topics") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{communityId}", strconv.FormatInt(c.communityId, 10), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommunityTopicList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the topics of a community.", + // "httpMethod": "GET", + // "id": "orkut.communityTopics.list", + // "parameterOrder": [ + // "communityId" + // ], + // "parameters": { + // "communityId": { + // "description": "The ID of the community which topics will be listed.", + // "format": "int32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "hl": { + // "description": "Specifies the interface language (host language) of your user interface.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "The maximum number of topics to include in the response.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A continuation token that allows pagination.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "communities/{communityId}/topics", + // "response": { + // "$ref": "CommunityTopicList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.counters.list": + +type CountersListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: Retrieves the counters of a user. +func (r *CountersService) List(userId string) *CountersListCall { + c := &CountersListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *CountersListCall) Do() (*Counters, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/counters") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Counters) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the counters of a user.", + // "httpMethod": "GET", + // "id": "orkut.counters.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user whose counters will be listed. Can be me to refer to caller.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/counters", + // "response": { + // "$ref": "Counters" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut", + // "https://www.googleapis.com/auth/orkut.readonly" + // ] + // } + +} + +// method id "orkut.scraps.insert": + +type ScrapsInsertCall struct { + s *Service + activity *Activity + opt_ map[string]interface{} +} + +// Insert: Creates a new scrap. +func (r *ScrapsService) Insert(activity *Activity) *ScrapsInsertCall { + c := &ScrapsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.activity = activity + return c +} + +func (c *ScrapsInsertCall) Do() (*Activity, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.activity) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/scraps") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new scrap.", + // "httpMethod": "POST", + // "id": "orkut.scraps.insert", + // "path": "activities/scraps", + // "request": { + // "$ref": "Activity" + // }, + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/orkut" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-api.json b/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-api.json new file mode 100644 index 0000000000000..58dfb4b9ee330 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-api.json @@ -0,0 +1,420 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/_7T_t50z1qoOGh9ZOpbii06YKEs\"", + "discoveryVersion": "v1", + "id": "pagespeedonline:v1", + "name": "pagespeedonline", + "version": "v1", + "title": "PageSpeed Insights API", + "description": "Lets you analyze the performance of a web page and get tailored suggestions to make that page faster.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/pagespeed-16.png", + "x32": "http://www.google.com/images/icons/product/pagespeed-32.png" + }, + "documentationLink": "https://developers.google.com/speed/docs/insights/v1/getting_started", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/pagespeedonline/v1/", + "basePath": "/pagespeedonline/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "pagespeedonline/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Result": { + "id": "Result", + "type": "object", + "properties": { + "formattedResults": { + "type": "object", + "description": "Localized Page Speed results. Contains a ruleResults entry for each Page Speed rule instantiated and run by the server.", + "properties": { + "locale": { + "type": "string", + "description": "The locale of the formattedResults, e.g. \"en_US\"." + }, + "ruleResults": { + "type": "object", + "description": "Dictionary of formatted rule results, with one entry for each Page Speed rule instantiated and run by the server.", + "additionalProperties": { + "type": "object", + "description": "The enum-like identifier for this rule. For instance \"EnableKeepAlive\" or \"AvoidCssImport\". Not localized.", + "properties": { + "localizedRuleName": { + "type": "string", + "description": "Localized name of the rule, intended for presentation to a user." + }, + "ruleImpact": { + "type": "number", + "description": "The impact (unbounded floating point value) that implementing the suggestions for this rule would have on making the page faster. Impact is comparable between rules to determine which rule's suggestions would have a higher or lower impact on making a page faster. For instance, if enabling compression would save 1MB, while optimizing images would save 500kB, the enable compression rule would have 2x the impact of the image optimization rule, all other things being equal.", + "format": "double" + }, + "urlBlocks": { + "type": "array", + "description": "List of blocks of URLs. Each block may contain a heading and a list of URLs. Each URL may optionally include additional details.", + "items": { + "type": "object", + "properties": { + "header": { + "type": "object", + "description": "Heading to be displayed with the list of URLs.", + "properties": { + "args": { + "type": "array", + "description": "List of arguments for the format string.", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of argument. One of URL, STRING_LITERAL, INT_LITERAL, BYTES, or DURATION." + }, + "value": { + "type": "string", + "description": "Argument value, as a localized string." + } + } + } + }, + "format": { + "type": "string", + "description": "A localized format string with $N placeholders, where N is the 1-indexed argument number, e.g. 'Minifying the following $1 resources would save a total of $2 bytes'." + } + } + }, + "urls": { + "type": "array", + "description": "List of entries that provide information about URLs in the url block. Optional.", + "items": { + "type": "object", + "properties": { + "details": { + "type": "array", + "description": "List of entries that provide additional details about a single URL. Optional.", + "items": { + "type": "object", + "properties": { + "args": { + "type": "array", + "description": "List of arguments for the format string.", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of argument. One of URL, STRING_LITERAL, INT_LITERAL, BYTES, or DURATION." + }, + "value": { + "type": "string", + "description": "Argument value, as a localized string." + } + } + } + }, + "format": { + "type": "string", + "description": "A localized format string with $N placeholders, where N is the 1-indexed argument number, e.g. 'Unnecessary metadata for this resource adds an additional $1 bytes to its download size'." + } + } + } + }, + "result": { + "type": "object", + "description": "A format string that gives information about the URL, and a list of arguments for that format string.", + "properties": { + "args": { + "type": "array", + "description": "List of arguments for the format string.", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "Type of argument. One of URL, STRING_LITERAL, INT_LITERAL, BYTES, or DURATION." + }, + "value": { + "type": "string", + "description": "Argument value, as a localized string." + } + } + } + }, + "format": { + "type": "string", + "description": "A localized format string with $N placeholders, where N is the 1-indexed argument number, e.g. 'Minifying the resource at URL $1 can save $2 bytes'." + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "id": { + "type": "string", + "description": "Canonicalized and final URL for the document, after following page redirects (if any)." + }, + "invalidRules": { + "type": "array", + "description": "List of rules that were specified in the request, but which the server did not know how to instantiate.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Kind of result.", + "default": "pagespeedonline#result" + }, + "pageStats": { + "type": "object", + "description": "Summary statistics for the page, such as number of JavaScript bytes, number of HTML bytes, etc.", + "properties": { + "cssResponseBytes": { + "type": "string", + "description": "Number of uncompressed response bytes for CSS resources on the page.", + "format": "int64" + }, + "flashResponseBytes": { + "type": "string", + "description": "Number of response bytes for flash resources on the page.", + "format": "int64" + }, + "htmlResponseBytes": { + "type": "string", + "description": "Number of uncompressed response bytes for the main HTML document and all iframes on the page.", + "format": "int64" + }, + "imageResponseBytes": { + "type": "string", + "description": "Number of response bytes for image resources on the page.", + "format": "int64" + }, + "javascriptResponseBytes": { + "type": "string", + "description": "Number of uncompressed response bytes for JS resources on the page.", + "format": "int64" + }, + "numberCssResources": { + "type": "integer", + "description": "Number of CSS resources referenced by the page.", + "format": "int32" + }, + "numberHosts": { + "type": "integer", + "description": "Number of unique hosts referenced by the page.", + "format": "int32" + }, + "numberJsResources": { + "type": "integer", + "description": "Number of JavaScript resources referenced by the page.", + "format": "int32" + }, + "numberResources": { + "type": "integer", + "description": "Number of HTTP resources loaded by the page.", + "format": "int32" + }, + "numberStaticResources": { + "type": "integer", + "description": "Number of static (i.e. cacheable) resources on the page.", + "format": "int32" + }, + "otherResponseBytes": { + "type": "string", + "description": "Number of response bytes for other resources on the page.", + "format": "int64" + }, + "textResponseBytes": { + "type": "string", + "description": "Number of uncompressed response bytes for text resources not covered by other statistics (i.e non-HTML, non-script, non-CSS resources) on the page.", + "format": "int64" + }, + "totalRequestBytes": { + "type": "string", + "description": "Total size of all request bytes sent by the page.", + "format": "int64" + } + } + }, + "responseCode": { + "type": "integer", + "description": "Response code for the document. 200 indicates a normal page load. 4xx/5xx indicates an error.", + "format": "int32" + }, + "score": { + "type": "integer", + "description": "The Page Speed Score (0-100), which indicates how much faster a page could be. A high score indicates little room for improvement, while a lower score indicates more room for improvement.", + "format": "int32" + }, + "screenshot": { + "type": "object", + "description": "Base64 encoded screenshot of the page that was analyzed.", + "properties": { + "data": { + "type": "string", + "description": "Image data base64 encoded.", + "format": "byte" + }, + "height": { + "type": "integer", + "description": "Height of screenshot in pixels.", + "format": "int32" + }, + "mime_type": { + "type": "string", + "description": "Mime type of image data. E.g. \"image/jpeg\"." + }, + "width": { + "type": "integer", + "description": "Width of screenshot in pixels.", + "format": "int32" + } + } + }, + "title": { + "type": "string", + "description": "Title of the page, as displayed in the browser's title bar." + }, + "version": { + "type": "object", + "description": "The version of the Page Speed SDK used to generate these results.", + "properties": { + "major": { + "type": "integer", + "description": "The major version number of the Page Speed SDK used to generate these results.", + "format": "int32" + }, + "minor": { + "type": "integer", + "description": "The minor version number of the Page Speed SDK used to generate these results.", + "format": "int32" + } + } + } + } + } + }, + "resources": { + "pagespeedapi": { + "methods": { + "runpagespeed": { + "id": "pagespeedonline.pagespeedapi.runpagespeed", + "path": "runPagespeed", + "httpMethod": "GET", + "description": "Runs Page Speed analysis on the page at the specified URL, and returns a Page Speed score, a list of suggestions to make that page faster, and other information.", + "parameters": { + "filter_third_party_resources": { + "type": "boolean", + "description": "Indicates if third party resources should be filtered out before PageSpeed analysis.", + "default": "false", + "location": "query" + }, + "locale": { + "type": "string", + "description": "The locale used to localize formatted results", + "pattern": "[a-zA-Z]+(_[a-zA-Z]+)?", + "location": "query" + }, + "rule": { + "type": "string", + "description": "A Page Speed rule to run; if none are given, all rules are run", + "pattern": "[a-zA-Z]+", + "repeated": true, + "location": "query" + }, + "screenshot": { + "type": "boolean", + "description": "Indicates if binary data containing a screenshot should be included", + "default": "false", + "location": "query" + }, + "snapshots": { + "type": "boolean", + "description": "Indicates if binary data containing snapshot images should be included", + "default": "false", + "location": "query" + }, + "strategy": { + "type": "string", + "description": "The analysis strategy to use", + "enum": [ + "desktop", + "mobile" + ], + "enumDescriptions": [ + "Fetch and analyze the URL for desktop browsers", + "Fetch and analyze the URL for mobile devices" + ], + "location": "query" + }, + "url": { + "type": "string", + "description": "The URL to fetch and analyze", + "required": true, + "pattern": "http(s)?://.*", + "location": "query" + } + }, + "parameterOrder": [ + "url" + ], + "response": { + "$ref": "Result" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-gen.go b/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-gen.go new file mode 100644 index 0000000000000..51b2b86e313d1 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/pagespeedonline/v1/pagespeedonline-gen.go @@ -0,0 +1,362 @@ +// Package pagespeedonline provides access to the PageSpeed Insights API. +// +// See https://developers.google.com/speed/docs/insights/v1/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/pagespeedonline/v1" +// ... +// pagespeedonlineService, err := pagespeedonline.New(oauthHttpClient) +package pagespeedonline + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "pagespeedonline:v1" +const apiName = "pagespeedonline" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/pagespeedonline/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Pagespeedapi = NewPagespeedapiService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Pagespeedapi *PagespeedapiService +} + +func NewPagespeedapiService(s *Service) *PagespeedapiService { + rs := &PagespeedapiService{s: s} + return rs +} + +type PagespeedapiService struct { + s *Service +} + +type Result struct { + // FormattedResults: Localized Page Speed results. Contains a + // ruleResults entry for each Page Speed rule instantiated and run by + // the server. + FormattedResults *ResultFormattedResults `json:"formattedResults,omitempty"` + + // Id: Canonicalized and final URL for the document, after following + // page redirects (if any). + Id string `json:"id,omitempty"` + + // InvalidRules: List of rules that were specified in the request, but + // which the server did not know how to instantiate. + InvalidRules []string `json:"invalidRules,omitempty"` + + // Kind: Kind of result. + Kind string `json:"kind,omitempty"` + + // PageStats: Summary statistics for the page, such as number of + // JavaScript bytes, number of HTML bytes, etc. + PageStats *ResultPageStats `json:"pageStats,omitempty"` + + // ResponseCode: Response code for the document. 200 indicates a normal + // page load. 4xx/5xx indicates an error. + ResponseCode int64 `json:"responseCode,omitempty"` + + // Score: The Page Speed Score (0-100), which indicates how much faster + // a page could be. A high score indicates little room for improvement, + // while a lower score indicates more room for improvement. + Score int64 `json:"score,omitempty"` + + // Screenshot: Base64 encoded screenshot of the page that was analyzed. + Screenshot *ResultScreenshot `json:"screenshot,omitempty"` + + // Title: Title of the page, as displayed in the browser's title bar. + Title string `json:"title,omitempty"` + + // Version: The version of the Page Speed SDK used to generate these + // results. + Version *ResultVersion `json:"version,omitempty"` +} + +type ResultFormattedResults struct { + // Locale: The locale of the formattedResults, e.g. "en_US". + Locale string `json:"locale,omitempty"` + + // RuleResults: Dictionary of formatted rule results, with one entry for + // each Page Speed rule instantiated and run by the server. + RuleResults *ResultFormattedResultsRuleResults `json:"ruleResults,omitempty"` +} + +type ResultFormattedResultsRuleResults struct { +} + +type ResultPageStats struct { + // CssResponseBytes: Number of uncompressed response bytes for CSS + // resources on the page. + CssResponseBytes int64 `json:"cssResponseBytes,omitempty,string"` + + // FlashResponseBytes: Number of response bytes for flash resources on + // the page. + FlashResponseBytes int64 `json:"flashResponseBytes,omitempty,string"` + + // HtmlResponseBytes: Number of uncompressed response bytes for the main + // HTML document and all iframes on the page. + HtmlResponseBytes int64 `json:"htmlResponseBytes,omitempty,string"` + + // ImageResponseBytes: Number of response bytes for image resources on + // the page. + ImageResponseBytes int64 `json:"imageResponseBytes,omitempty,string"` + + // JavascriptResponseBytes: Number of uncompressed response bytes for JS + // resources on the page. + JavascriptResponseBytes int64 `json:"javascriptResponseBytes,omitempty,string"` + + // NumberCssResources: Number of CSS resources referenced by the page. + NumberCssResources int64 `json:"numberCssResources,omitempty"` + + // NumberHosts: Number of unique hosts referenced by the page. + NumberHosts int64 `json:"numberHosts,omitempty"` + + // NumberJsResources: Number of JavaScript resources referenced by the + // page. + NumberJsResources int64 `json:"numberJsResources,omitempty"` + + // NumberResources: Number of HTTP resources loaded by the page. + NumberResources int64 `json:"numberResources,omitempty"` + + // NumberStaticResources: Number of static (i.e. cacheable) resources on + // the page. + NumberStaticResources int64 `json:"numberStaticResources,omitempty"` + + // OtherResponseBytes: Number of response bytes for other resources on + // the page. + OtherResponseBytes int64 `json:"otherResponseBytes,omitempty,string"` + + // TextResponseBytes: Number of uncompressed response bytes for text + // resources not covered by other statistics (i.e non-HTML, non-script, + // non-CSS resources) on the page. + TextResponseBytes int64 `json:"textResponseBytes,omitempty,string"` + + // TotalRequestBytes: Total size of all request bytes sent by the page. + TotalRequestBytes int64 `json:"totalRequestBytes,omitempty,string"` +} + +type ResultScreenshot struct { + // Data: Image data base64 encoded. + Data string `json:"data,omitempty"` + + // Height: Height of screenshot in pixels. + Height int64 `json:"height,omitempty"` + + // Mime_type: Mime type of image data. E.g. "image/jpeg". + Mime_type string `json:"mime_type,omitempty"` + + // Width: Width of screenshot in pixels. + Width int64 `json:"width,omitempty"` +} + +type ResultVersion struct { + // Major: The major version number of the Page Speed SDK used to + // generate these results. + Major int64 `json:"major,omitempty"` + + // Minor: The minor version number of the Page Speed SDK used to + // generate these results. + Minor int64 `json:"minor,omitempty"` +} + +// method id "pagespeedonline.pagespeedapi.runpagespeed": + +type PagespeedapiRunpagespeedCall struct { + s *Service + url string + opt_ map[string]interface{} +} + +// Runpagespeed: Runs Page Speed analysis on the page at the specified +// URL, and returns a Page Speed score, a list of suggestions to make +// that page faster, and other information. +func (r *PagespeedapiService) Runpagespeed(url string) *PagespeedapiRunpagespeedCall { + c := &PagespeedapiRunpagespeedCall{s: r.s, opt_: make(map[string]interface{})} + c.url = url + return c +} + +// Filter_third_party_resources sets the optional parameter +// "filter_third_party_resources": Indicates if third party resources +// should be filtered out before PageSpeed analysis. +func (c *PagespeedapiRunpagespeedCall) Filter_third_party_resources(filter_third_party_resources bool) *PagespeedapiRunpagespeedCall { + c.opt_["filter_third_party_resources"] = filter_third_party_resources + return c +} + +// Locale sets the optional parameter "locale": The locale used to +// localize formatted results +func (c *PagespeedapiRunpagespeedCall) Locale(locale string) *PagespeedapiRunpagespeedCall { + c.opt_["locale"] = locale + return c +} + +// Rule sets the optional parameter "rule": A Page Speed rule to run; if +// none are given, all rules are run +func (c *PagespeedapiRunpagespeedCall) Rule(rule string) *PagespeedapiRunpagespeedCall { + c.opt_["rule"] = rule + return c +} + +// Screenshot sets the optional parameter "screenshot": Indicates if +// binary data containing a screenshot should be included +func (c *PagespeedapiRunpagespeedCall) Screenshot(screenshot bool) *PagespeedapiRunpagespeedCall { + c.opt_["screenshot"] = screenshot + return c +} + +// Snapshots sets the optional parameter "snapshots": Indicates if +// binary data containing snapshot images should be included +func (c *PagespeedapiRunpagespeedCall) Snapshots(snapshots bool) *PagespeedapiRunpagespeedCall { + c.opt_["snapshots"] = snapshots + return c +} + +// Strategy sets the optional parameter "strategy": The analysis +// strategy to use +func (c *PagespeedapiRunpagespeedCall) Strategy(strategy string) *PagespeedapiRunpagespeedCall { + c.opt_["strategy"] = strategy + return c +} + +func (c *PagespeedapiRunpagespeedCall) Do() (*Result, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("url", fmt.Sprintf("%v", c.url)) + if v, ok := c.opt_["filter_third_party_resources"]; ok { + params.Set("filter_third_party_resources", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["locale"]; ok { + params.Set("locale", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["rule"]; ok { + params.Set("rule", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["screenshot"]; ok { + params.Set("screenshot", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["snapshots"]; ok { + params.Set("snapshots", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["strategy"]; ok { + params.Set("strategy", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "runPagespeed") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Result) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Runs Page Speed analysis on the page at the specified URL, and returns a Page Speed score, a list of suggestions to make that page faster, and other information.", + // "httpMethod": "GET", + // "id": "pagespeedonline.pagespeedapi.runpagespeed", + // "parameterOrder": [ + // "url" + // ], + // "parameters": { + // "filter_third_party_resources": { + // "default": "false", + // "description": "Indicates if third party resources should be filtered out before PageSpeed analysis.", + // "location": "query", + // "type": "boolean" + // }, + // "locale": { + // "description": "The locale used to localize formatted results", + // "location": "query", + // "pattern": "[a-zA-Z]+(_[a-zA-Z]+)?", + // "type": "string" + // }, + // "rule": { + // "description": "A Page Speed rule to run; if none are given, all rules are run", + // "location": "query", + // "pattern": "[a-zA-Z]+", + // "repeated": true, + // "type": "string" + // }, + // "screenshot": { + // "default": "false", + // "description": "Indicates if binary data containing a screenshot should be included", + // "location": "query", + // "type": "boolean" + // }, + // "snapshots": { + // "default": "false", + // "description": "Indicates if binary data containing snapshot images should be included", + // "location": "query", + // "type": "boolean" + // }, + // "strategy": { + // "description": "The analysis strategy to use", + // "enum": [ + // "desktop", + // "mobile" + // ], + // "enumDescriptions": [ + // "Fetch and analyze the URL for desktop browsers", + // "Fetch and analyze the URL for mobile devices" + // ], + // "location": "query", + // "type": "string" + // }, + // "url": { + // "description": "The URL to fetch and analyze", + // "location": "query", + // "pattern": "http(s)?://.*", + // "required": true, + // "type": "string" + // } + // }, + // "path": "runPagespeed", + // "response": { + // "$ref": "Result" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-api.json b/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-api.json new file mode 100644 index 0000000000000..597008c4278cc --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-api.json @@ -0,0 +1,1945 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/NWyyDxpG_jUB4-BRItKBh_G9Iew\"", + "discoveryVersion": "v1", + "id": "plus:v1", + "name": "plus", + "version": "v1", + "title": "Google+ API", + "description": "The Google+ API enables developers to build on top of the Google+ platform.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/gplus-16.png", + "x32": "http://www.google.com/images/icons/product/gplus-32.png" + }, + "documentationLink": "https://developers.google.com/+/api/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/plus/v1/", + "basePath": "/plus/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "plus/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + }, + "https://www.googleapis.com/auth/plus.me": { + "description": "Know who you are on Google" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + }, + "https://www.googleapis.com/auth/userinfo.profile": { + "description": "View basic information about your account" + } + } + } + }, + "schemas": { + "Acl": { + "id": "Acl", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description of the access granted, suitable for display." + }, + "items": { + "type": "array", + "description": "The list of access entries.", + "items": { + "$ref": "PlusAclentryResource" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of access controls. Value: \"plus#acl\".", + "default": "plus#acl" + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "properties": { + "access": { + "$ref": "Acl", + "description": "Identifies who has access to see this activity." + }, + "actor": { + "type": "object", + "description": "The person who performed this activity.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor's Person resource." + }, + "image": { + "type": "object", + "description": "The image representation of the actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (\"last name\") of the actor." + }, + "givenName": { + "type": "string", + "description": "The given name (\"first name\") of the actor." + } + } + }, + "url": { + "type": "string", + "description": "The link to the actor's Google profile." + } + } + }, + "address": { + "type": "string", + "description": "Street address where this activity occurred." + }, + "annotation": { + "type": "string", + "description": "Additional content added by the person who shared this activity, applicable only when resharing an activity." + }, + "crosspostSource": { + "type": "string", + "description": "If this activity is a crosspost from another system, this property specifies the ID of the original activity." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "geocode": { + "type": "string", + "description": "Latitude and longitude where this activity occurred. Format is latitude followed by longitude, space separated." + }, + "id": { + "type": "string", + "description": "The ID of this activity." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an activity. Value: \"plus#activity\".", + "default": "plus#activity" + }, + "location": { + "$ref": "Place", + "description": "The location where this activity occurred." + }, + "object": { + "type": "object", + "description": "The object of this activity.", + "properties": { + "actor": { + "type": "object", + "description": "If this activity's object is itself another activity, such as when a person reshares an activity, this property specifies the original activity's actor.", + "properties": { + "displayName": { + "type": "string", + "description": "The original actor's name, which is suitable for display." + }, + "id": { + "type": "string", + "description": "ID of the original actor." + }, + "image": { + "type": "object", + "description": "The image representation of the original actor.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a thumbnail photo of the original actor." + } + } + }, + "url": { + "type": "string", + "description": "A link to the original actor's Google profile." + } + } + }, + "attachments": { + "type": "array", + "description": "The media objects attached to this activity.", + "items": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "If the attachment is an article, this property contains a snippet of text from the article. It can also include descriptions for other types." + }, + "displayName": { + "type": "string", + "description": "The title of the attachment, such as a photo caption or an article title." + }, + "embed": { + "type": "object", + "description": "If the attachment is a video, the embeddable link.", + "properties": { + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the link." + } + } + }, + "fullImage": { + "type": "object", + "description": "The full image URL for photo attachments.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the image." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "id": { + "type": "string", + "description": "The ID of the attachment." + }, + "image": { + "type": "object", + "description": "The preview image for photos or videos.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image URL." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "objectType": { + "type": "string", + "description": "The type of media object. Possible values include, but are not limited to, the following values: \n- \"photo\" - A photo. \n- \"album\" - A photo album. \n- \"video\" - A video. \n- \"article\" - An article, specified by a link." + }, + "thumbnails": { + "type": "array", + "description": "If the attachment is an album, this property is a list of potential additional thumbnails from the album.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Potential name of the thumbnail." + }, + "image": { + "type": "object", + "description": "Image resource.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image url." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "url": { + "type": "string", + "description": "URL of the webpage containing the image." + } + } + } + }, + "url": { + "type": "string", + "description": "The link to the attachment, which should be of type text/html." + } + } + } + }, + "content": { + "type": "string", + "description": "The HTML-formatted content, which is suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the object. When resharing an activity, this is the ID of the activity that is being reshared." + }, + "objectType": { + "type": "string", + "description": "The type of the object. Possible values include, but are not limited to, the following values: \n- \"note\" - Textual content. \n- \"activity\" - A Google+ activity." + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, which is stored without any HTML formatting. When creating or updating an activity, this value must be supplied as plain text in the request." + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of people who +1'd this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this activity.", + "format": "uint32" + } + } + }, + "replies": { + "type": "object", + "description": "Comments in reply to this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of comments in reply to this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of comments on this activity.", + "format": "uint32" + } + } + }, + "resharers": { + "type": "object", + "description": "People who reshared this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of resharers." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who reshared this activity.", + "format": "uint32" + } + } + }, + "url": { + "type": "string", + "description": "The URL that points to the linked resource." + } + } + }, + "placeId": { + "type": "string", + "description": "ID of the place where this activity occurred." + }, + "placeName": { + "type": "string", + "description": "Name of the place where this activity occurred." + }, + "provider": { + "type": "object", + "description": "The service provider that initially published this activity.", + "properties": { + "title": { + "type": "string", + "description": "Name of the service provider." + } + } + }, + "published": { + "type": "string", + "description": "The time at which this activity was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "radius": { + "type": "string", + "description": "Radius, in meters, of the region where this activity occurred, centered at the latitude and longitude identified in geocode." + }, + "title": { + "type": "string", + "description": "Title of this activity." + }, + "updated": { + "type": "string", + "description": "The time at which this activity was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The link to this activity." + }, + "verb": { + "type": "string", + "description": "This activity's verb, which indicates the action that was performed. Possible values include, but are not limited to, the following values: \n- \"post\" - Publish content to the stream. \n- \"share\" - Reshare an activity." + } + } + }, + "ActivityFeed": { + "id": "ActivityFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of activities. Deprecated." + }, + "items": { + "type": "array", + "description": "The activities in this page of results.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of activities. Value: \"plus#activityFeed\".", + "default": "plus#activityFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this activity resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of activities, which is a truncated portion of the content." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of activities was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "actor": { + "type": "object", + "description": "The person who posted this comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of this actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor." + }, + "image": { + "type": "object", + "description": "The image representation of this actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "url": { + "type": "string", + "description": "A link to the Person resource for this actor." + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this comment." + }, + "inReplyTo": { + "type": "array", + "description": "The activity this comment replied to.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the activity." + }, + "url": { + "type": "string", + "description": "The URL of the activity." + } + } + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a comment. Value: \"plus#comment\".", + "default": "plus#comment" + }, + "object": { + "type": "object", + "description": "The object of this comment.", + "properties": { + "content": { + "type": "string", + "description": "The HTML-formatted content, suitable for display." + }, + "objectType": { + "type": "string", + "description": "The object type of this comment. Possible values are: \n- \"comment\" - A comment in reply to an activity.", + "default": "comment" + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, stored without any HTML formatting. When creating or updating a comment, this value must be supplied as plain text in the request." + } + } + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this comment.", + "properties": { + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this comment.", + "format": "uint32" + } + } + }, + "published": { + "type": "string", + "description": "The time at which this comment was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "Link to this comment resource." + }, + "updated": { + "type": "string", + "description": "The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "verb": { + "type": "string", + "description": "This comment's verb, indicating what action was performed. Possible values are: \n- \"post\" - Publish content to the stream.", + "default": "post" + } + } + }, + "CommentFeed": { + "id": "CommentFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of comments." + }, + "items": { + "type": "array", + "description": "The comments in this page of results.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of comments. Value: \"plus#commentFeed\".", + "default": "plus#commentFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "title": { + "type": "string", + "description": "The title of this collection of comments." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of comments was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "ItemScope": { + "id": "ItemScope", + "type": "object", + "properties": { + "about": { + "$ref": "ItemScope", + "description": "The subject matter of the content." + }, + "additionalName": { + "type": "array", + "description": "An additional name for a Person, can be used for a middle name.", + "items": { + "type": "string" + } + }, + "address": { + "$ref": "ItemScope", + "description": "Postal address." + }, + "addressCountry": { + "type": "string", + "description": "Address country." + }, + "addressLocality": { + "type": "string", + "description": "Address locality." + }, + "addressRegion": { + "type": "string", + "description": "Address region." + }, + "associated_media": { + "type": "array", + "description": "The encoding.", + "items": { + "$ref": "ItemScope" + } + }, + "attendeeCount": { + "type": "integer", + "description": "Number of attendees.", + "format": "int32" + }, + "attendees": { + "type": "array", + "description": "A person attending the event.", + "items": { + "$ref": "ItemScope" + } + }, + "audio": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, the audio file." + }, + "author": { + "type": "array", + "description": "The person or persons who created this result. In the example of restaurant reviews, this might be the reviewer's name.", + "items": { + "$ref": "ItemScope" + } + }, + "bestRating": { + "type": "string", + "description": "Best possible rating value that a result might obtain. This property defines the upper bound for the ratingValue. For example, you might have a 5 star rating scale, you would provide 5 as the value for this property." + }, + "birthDate": { + "type": "string", + "description": "Date of birth." + }, + "byArtist": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, the artist that performed this recording." + }, + "caption": { + "type": "string", + "description": "The caption for this object." + }, + "contentSize": { + "type": "string", + "description": "File size in (mega/kilo) bytes." + }, + "contentUrl": { + "type": "string", + "description": "Actual bytes of the media object, for example the image file or video file." + }, + "contributor": { + "type": "array", + "description": "A list of contributors to this result.", + "items": { + "$ref": "ItemScope" + } + }, + "dateCreated": { + "type": "string", + "description": "The date the result was created such as the date that a review was first created." + }, + "dateModified": { + "type": "string", + "description": "The date the result was last modified such as the date that a review was last edited." + }, + "datePublished": { + "type": "string", + "description": "The initial date that the result was published. For example, a user writes a comment on a blog, which has a result.dateCreated of when they submit it. If the blog users comment moderation, the result.datePublished value would match the date when the owner approved the message." + }, + "description": { + "type": "string", + "description": "The string that describes the content of the result." + }, + "duration": { + "type": "string", + "description": "The duration of the item (movie, audio recording, event, etc.) in ISO 8601 date format." + }, + "embedUrl": { + "type": "string", + "description": "A URL pointing to a player for a specific video. In general, this is the information in the src element of an embed tag and should not be the same as the content of the loc tag." + }, + "endDate": { + "type": "string", + "description": "The end date and time of the event (in ISO 8601 date format)." + }, + "familyName": { + "type": "string", + "description": "Family name. This property can be used with givenName instead of the name property." + }, + "gender": { + "type": "string", + "description": "Gender of the person." + }, + "geo": { + "$ref": "ItemScope", + "description": "Geo coordinates." + }, + "givenName": { + "type": "string", + "description": "Given name. This property can be used with familyName instead of the name property." + }, + "height": { + "type": "string", + "description": "The height of the media object." + }, + "id": { + "type": "string", + "description": "An identifier for the target. Your app can choose how to identify targets. The target.id is required if you are writing an activity that does not have a corresponding web page or target.url property." + }, + "image": { + "type": "string", + "description": "A URL to the image that represents this result. For example, if a user writes a review of a restaurant and attaches a photo of their meal, you might use that photo as the result.image." + }, + "inAlbum": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, which album a song is in." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an itemScope.", + "default": "plus#itemScope" + }, + "latitude": { + "type": "number", + "description": "Latitude.", + "format": "double" + }, + "location": { + "$ref": "ItemScope", + "description": "The location of the event or organization." + }, + "longitude": { + "type": "number", + "description": "Longitude.", + "format": "double" + }, + "name": { + "type": "string", + "description": "The name of the result. In the example of a restaurant review, this might be the summary the user gave their review such as \"Great ambiance, but overpriced.\"" + }, + "partOfTVSeries": { + "$ref": "ItemScope", + "description": "Property of http://schema.org/TVEpisode indicating which series the episode belongs to." + }, + "performers": { + "type": "array", + "description": "The main performer or performers of the event-for example, a presenter, musician, or actor.", + "items": { + "$ref": "ItemScope" + } + }, + "playerType": { + "type": "string", + "description": "Player type that is required. For example: Flash or Silverlight." + }, + "postOfficeBoxNumber": { + "type": "string", + "description": "Post office box number." + }, + "postalCode": { + "type": "string", + "description": "Postal code." + }, + "ratingValue": { + "type": "string", + "description": "Rating value." + }, + "reviewRating": { + "$ref": "ItemScope", + "description": "Review rating." + }, + "startDate": { + "type": "string", + "description": "The start date and time of the event (in ISO 8601 date format)." + }, + "streetAddress": { + "type": "string", + "description": "Street address." + }, + "text": { + "type": "string", + "description": "The text that is the result of the app activity. For example, if a user leaves a review of a restaurant, this might be the text of the review." + }, + "thumbnail": { + "$ref": "ItemScope", + "description": "Thumbnail image for an image or video." + }, + "thumbnailUrl": { + "type": "string", + "description": "A URL to a thumbnail image that represents this result." + }, + "tickerSymbol": { + "type": "string", + "description": "The exchange traded instrument associated with a Corporation object. The tickerSymbol is expressed as an exchange and an instrument name separated by a space character. For the exchange component of the tickerSymbol attribute, we recommend using the controlled vocabulary of Market Identifier Codes (MIC) specified in ISO15022." + }, + "type": { + "type": "string", + "description": "The schema.org URL that best describes the referenced target and matches the type of moment." + }, + "url": { + "type": "string", + "description": "The URL that points to the result object. For example, a permalink directly to a restaurant reviewer's comment." + }, + "width": { + "type": "string", + "description": "The width of the media object." + }, + "worstRating": { + "type": "string", + "description": "Worst possible rating value that a result might obtain. This property defines the lower bound for the ratingValue." + } + } + }, + "Moment": { + "id": "Moment", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The moment ID." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a moment.", + "default": "plus#moment" + }, + "result": { + "$ref": "ItemScope", + "description": "The object generated by performing the action on the target. For example, a user writes a review of a restaurant, the target is the restaurant and the result is the review." + }, + "startDate": { + "type": "string", + "description": "Time stamp of when the action occurred in RFC3339 format.", + "format": "date-time" + }, + "target": { + "$ref": "ItemScope", + "description": "The object on which the action was performed.", + "annotations": { + "required": [ + "plus.moments.insert" + ] + } + }, + "type": { + "type": "string", + "description": "The Google schema for the type of moment to write. For example, http://schemas.google.com/AddActivity.", + "annotations": { + "required": [ + "plus.moments.insert" + ] + } + } + } + }, + "MomentsFeed": { + "id": "MomentsFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The moments in this page of results.", + "items": { + "$ref": "Moment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of moments. Value: \"plus#momentsFeed\".", + "default": "plus#momentsFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of moments." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this page of moments." + }, + "title": { + "type": "string", + "description": "The title of this collection of moments." + }, + "updated": { + "type": "string", + "description": "The RFC 339 timestamp for when this collection of moments was last updated.", + "format": "date-time" + } + } + }, + "PeopleFeed": { + "id": "PeopleFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The people in this page of results. Each item includes the id, displayName, image, and url for the person. To retrieve additional profile data, see the people.get method.", + "items": { + "$ref": "Person" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of people. Value: \"plus#peopleFeed\".", + "default": "plus#peopleFeed" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of people." + }, + "totalItems": { + "type": "integer", + "description": "The total number of people available in this list. The number of people in a response might be smaller due to paging. This might not be set for all collections.", + "format": "int32" + } + } + }, + "Person": { + "id": "Person", + "type": "object", + "properties": { + "aboutMe": { + "type": "string", + "description": "A short biography for this person." + }, + "ageRange": { + "type": "object", + "description": "The age range of the person. Valid ranges are 17 or younger, 18 to 20, and 21 or older. Age is determined from the user's birthday using Western age reckoning.", + "properties": { + "max": { + "type": "integer", + "description": "The age range's upper bound, if any. Possible values include, but are not limited to, the following: \n- \"17\" - for age 17 \n- \"20\" - for age 20", + "format": "int32" + }, + "min": { + "type": "integer", + "description": "The age range's lower bound, if any. Possible values include, but are not limited to, the following: \n- \"21\" - for age 21 \n- \"18\" - for age 18", + "format": "int32" + } + } + }, + "birthday": { + "type": "string", + "description": "The person's date of birth, represented as YYYY-MM-DD." + }, + "braggingRights": { + "type": "string", + "description": "The \"bragging rights\" line of this person." + }, + "circledByCount": { + "type": "integer", + "description": "For followers who are visible, the number of people who have added this person or page to a circle.", + "format": "int32" + }, + "cover": { + "type": "object", + "description": "The cover photo content.", + "properties": { + "coverInfo": { + "type": "object", + "description": "Extra information about the cover photo.", + "properties": { + "leftImageOffset": { + "type": "integer", + "description": "The difference between the left position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + }, + "topImageOffset": { + "type": "integer", + "description": "The difference between the top position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + } + } + }, + "coverPhoto": { + "type": "object", + "description": "The person's primary cover image.", + "properties": { + "height": { + "type": "integer", + "description": "The height of the image.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "The URL of the image." + }, + "width": { + "type": "integer", + "description": "The width of the image.", + "format": "int32" + } + } + }, + "layout": { + "type": "string", + "description": "The layout of the cover art. Possible values include, but are not limited to, the following values: \n- \"banner\" - One large image banner." + } + } + }, + "currentLocation": { + "type": "string", + "description": "The current location for this person." + }, + "displayName": { + "type": "string", + "description": "The name of this person, which is suitable for display." + }, + "domain": { + "type": "string", + "description": "The hosted domain name for the user's Google Apps account. For instance, example.com. The plus.profile.emails.read or email scope is needed to get this domain name." + }, + "emails": { + "type": "array", + "description": "A list of email addresses that this person has, including their Google account email address, and the public verified email addresses on their Google+ profile. The plus.profile.emails.read scope is needed to retrieve these email addresses, or the email scope can be used to retrieve just the Google account email address.", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of address. Possible values include, but are not limited to, the following values: \n- \"account\" - Google account email address. \n- \"home\" - Home email address. \n- \"work\" - Work email address. \n- \"other\" - Other." + }, + "value": { + "type": "string", + "description": "The email address." + } + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "gender": { + "type": "string", + "description": "The person's gender. Possible values include, but are not limited to, the following values: \n- \"male\" - Male gender. \n- \"female\" - Female gender. \n- \"other\" - Other." + }, + "id": { + "type": "string", + "description": "The ID of this person." + }, + "image": { + "type": "object", + "description": "The representation of the person's profile photo.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the person's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "isPlusUser": { + "type": "boolean", + "description": "Whether this user has signed up for Google+." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a person. Value: \"plus#person\".", + "default": "plus#person" + }, + "language": { + "type": "string", + "description": "The user's preferred language for rendering." + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of a person's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this person." + }, + "formatted": { + "type": "string", + "description": "The full name of this person, including middle names, suffixes, etc." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this person." + }, + "honorificPrefix": { + "type": "string", + "description": "The honorific prefixes (such as \"Dr.\" or \"Mrs.\") for this person." + }, + "honorificSuffix": { + "type": "string", + "description": "The honorific suffixes (such as \"Jr.\") for this person." + }, + "middleName": { + "type": "string", + "description": "The middle name of this person." + } + } + }, + "nickname": { + "type": "string", + "description": "The nickname of this person." + }, + "objectType": { + "type": "string", + "description": "Type of person within Google+. Possible values include, but are not limited to, the following values: \n- \"person\" - represents an actual person. \n- \"page\" - represents a page." + }, + "occupation": { + "type": "string", + "description": "The occupation of this person." + }, + "organizations": { + "type": "array", + "description": "A list of current or past organizations with which this person is associated.", + "items": { + "type": "object", + "properties": { + "department": { + "type": "string", + "description": "The department within the organization. Deprecated." + }, + "description": { + "type": "string", + "description": "A short description of the person's role in this organization. Deprecated." + }, + "endDate": { + "type": "string", + "description": "The date that the person left this organization." + }, + "location": { + "type": "string", + "description": "The location of this organization. Deprecated." + }, + "name": { + "type": "string", + "description": "The name of the organization." + }, + "primary": { + "type": "boolean", + "description": "If \"true\", indicates this organization is the person's primary one, which is typically interpreted as the current one." + }, + "startDate": { + "type": "string", + "description": "The date that the person joined this organization." + }, + "title": { + "type": "string", + "description": "The person's job title or role within the organization." + }, + "type": { + "type": "string", + "description": "The type of organization. Possible values include, but are not limited to, the following values: \n- \"work\" - Work. \n- \"school\" - School." + } + } + } + }, + "placesLived": { + "type": "array", + "description": "A list of places where this person has lived.", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "If \"true\", this place of residence is this person's primary residence." + }, + "value": { + "type": "string", + "description": "A place where this person has lived. For example: \"Seattle, WA\", \"Near Toronto\"." + } + } + } + }, + "plusOneCount": { + "type": "integer", + "description": "If a Google+ Page, the number of people who have +1'd this page.", + "format": "int32" + }, + "relationshipStatus": { + "type": "string", + "description": "The person's relationship status. Possible values include, but are not limited to, the following values: \n- \"single\" - Person is single. \n- \"in_a_relationship\" - Person is in a relationship. \n- \"engaged\" - Person is engaged. \n- \"married\" - Person is married. \n- \"its_complicated\" - The relationship is complicated. \n- \"open_relationship\" - Person is in an open relationship. \n- \"widowed\" - Person is widowed. \n- \"in_domestic_partnership\" - Person is in a domestic partnership. \n- \"in_civil_union\" - Person is in a civil union." + }, + "skills": { + "type": "string", + "description": "The person's skills." + }, + "tagline": { + "type": "string", + "description": "The brief description (tagline) of this person." + }, + "url": { + "type": "string", + "description": "The URL of this person's profile." + }, + "urls": { + "type": "array", + "description": "A list of URLs for this person.", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The label of the URL." + }, + "type": { + "type": "string", + "description": "The type of URL. Possible values include, but are not limited to, the following values: \n- \"otherProfile\" - URL for another profile. \n- \"contributor\" - URL to a site for which this person is a contributor. \n- \"website\" - URL for this Google+ Page's primary website. \n- \"other\" - Other URL." + }, + "value": { + "type": "string", + "description": "The URL value." + } + } + } + }, + "verified": { + "type": "boolean", + "description": "Whether the person or Google+ Page has been verified." + } + } + }, + "Place": { + "id": "Place", + "type": "object", + "properties": { + "address": { + "type": "object", + "description": "The physical address of the place.", + "properties": { + "formatted": { + "type": "string", + "description": "The formatted address for display." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name of the place." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a place. Value: \"plus#place\".", + "default": "plus#place" + }, + "position": { + "type": "object", + "description": "The position of the place.", + "properties": { + "latitude": { + "type": "number", + "description": "The latitude of this position.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude of this position.", + "format": "double" + } + } + } + } + }, + "PlusAclentryResource": { + "id": "PlusAclentryResource", + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "A descriptive name for this entry. Suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the entry. For entries of type \"person\" or \"circle\", this is the ID of the resource. For other types, this property is not set." + }, + "type": { + "type": "string", + "description": "The type of entry describing to whom access is granted. Possible values are: \n- \"person\" - Access to an individual. \n- \"circle\" - Access to members of a circle. \n- \"myCircles\" - Access to members of all the person's circles. \n- \"extendedCircles\" - Access to members of all the person's circles, plus all of the people in their circles. \n- \"domain\" - Access to members of the person's Google Apps domain. \n- \"public\" - Access to anyone on the web." + } + } + } + }, + "resources": { + "activities": { + "methods": { + "get": { + "id": "plus.activities.get", + "path": "activities/{activityId}", + "httpMethod": "GET", + "description": "Get an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "list": { + "id": "plus.activities.list", + "path": "people/{userId}/activities/{collection}", + "httpMethod": "GET", + "description": "List all of the activities in the specified collection for a particular user.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of activities to list.", + "required": true, + "enum": [ + "public" + ], + "enumDescriptions": [ + "All public activities created by the specified user." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "ActivityFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "search": { + "id": "plus.activities.search", + "path": "activities", + "httpMethod": "GET", + "description": "Search public activities.", + "parameters": { + "language": { + "type": "string", + "description": "Specify the preferred language to search with. See search language codes for available values.", + "default": "en-US", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "10", + "format": "uint32", + "minimum": "1", + "maximum": "20", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "Specifies how to order search results.", + "default": "recent", + "enum": [ + "best", + "recent" + ], + "enumDescriptions": [ + "Sort activities by relevance to the user, most relevant first.", + "Sort activities by published date, most recent first." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response. This token can be of any length.", + "location": "query" + }, + "query": { + "type": "string", + "description": "Full-text search query string.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "query" + ], + "response": { + "$ref": "ActivityFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + } + } + }, + "comments": { + "methods": { + "get": { + "id": "plus.comments.get", + "path": "comments/{commentId}", + "httpMethod": "GET", + "description": "Get a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "list": { + "id": "plus.comments.list", + "path": "activities/{activityId}/comments", + "httpMethod": "GET", + "description": "List all of the comments for an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get comments for.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "The order in which to sort the list of comments.", + "default": "ascending", + "enum": [ + "ascending", + "descending" + ], + "enumDescriptions": [ + "Sort oldest comments first.", + "Sort newest comments first." + ], + "location": "query" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "CommentFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + } + } + }, + "moments": { + "methods": { + "insert": { + "id": "plus.moments.insert", + "path": "people/{userId}/moments/{collection}", + "httpMethod": "POST", + "description": "Record a moment representing a user's activity such as making a purchase or commenting on a blog.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection to which to write moments.", + "required": true, + "enum": [ + "vault" + ], + "enumDescriptions": [ + "The default collection for writing new moments." + ], + "location": "path" + }, + "debug": { + "type": "boolean", + "description": "Return the moment as written. Should be used only for debugging.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to record activities for. The only valid values are \"me\" and the ID of the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "request": { + "$ref": "Moment" + }, + "response": { + "$ref": "Moment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "list": { + "id": "plus.moments.list", + "path": "people/{userId}/moments/{collection}", + "httpMethod": "GET", + "description": "List all of the moments for a particular user.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of moments to list.", + "required": true, + "enum": [ + "vault" + ], + "enumDescriptions": [ + "All moments created by the requesting application for the authenticated user." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of moments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "targetUrl": { + "type": "string", + "description": "Only moments containing this targetUrl will be returned.", + "location": "query" + }, + "type": { + "type": "string", + "description": "Only moments of this type will be returned.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get moments for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "MomentsFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "remove": { + "id": "plus.moments.remove", + "path": "moments/{id}", + "httpMethod": "DELETE", + "description": "Delete a moment.", + "parameters": { + "id": { + "type": "string", + "description": "The ID of the moment to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "people": { + "methods": { + "get": { + "id": "plus.people.get", + "path": "people/{userId}", + "httpMethod": "GET", + "description": "Get a person's profile. If your app uses scope https://www.googleapis.com/auth/plus.login, this method is guaranteed to return ageRange and language.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "Person" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + }, + "list": { + "id": "plus.people.list", + "path": "people/{userId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "connected", + "visible" + ], + "enumDescriptions": [ + "The list of visible people in the authenticated user's circles who also use the requesting app. This list is limited to users who made their app activities visible to the authenticated user.", + "The list of people who this user has added to one or more circles, limited to the circles visible to the requesting application." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "100", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "The order to return people in.", + "enum": [ + "alphabetical", + "best" + ], + "enumDescriptions": [ + "Order the people by their display name.", + "Order people based on the relevence to the viewer." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "listByActivity": { + "id": "plus.people.listByActivity", + "path": "activities/{activityId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection for a particular activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get the list of people for.", + "required": true, + "location": "path" + }, + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "plusoners", + "resharers" + ], + "enumDescriptions": [ + "List all people who have +1'd this activity.", + "List all people who have reshared this activity." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "activityId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "search": { + "id": "plus.people.search", + "path": "people", + "httpMethod": "GET", + "description": "Search all public profiles.", + "parameters": { + "language": { + "type": "string", + "description": "Specify the preferred language to search with. See search language codes for available values.", + "default": "en-US", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "25", + "format": "uint32", + "minimum": "1", + "maximum": "50", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response. This token can be of any length.", + "location": "query" + }, + "query": { + "type": "string", + "description": "Specify a query string for full text search of public text in all profiles.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "query" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-gen.go b/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-gen.go new file mode 100644 index 0000000000000..981982e06a33c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1/plus-gen.go @@ -0,0 +1,2507 @@ +// Package plus provides access to the Google+ API. +// +// See https://developers.google.com/+/api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/plus/v1" +// ... +// plusService, err := plus.New(oauthHttpClient) +package plus + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "plus:v1" +const apiName = "plus" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/plus/v1/" + +// OAuth2 scopes used by this API. +const ( + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" + + // Know who you are on Google + PlusMeScope = "https://www.googleapis.com/auth/plus.me" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" + + // View basic information about your account + UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Activities = NewActivitiesService(s) + s.Comments = NewCommentsService(s) + s.Moments = NewMomentsService(s) + s.People = NewPeopleService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Activities *ActivitiesService + + Comments *CommentsService + + Moments *MomentsService + + People *PeopleService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewMomentsService(s *Service) *MomentsService { + rs := &MomentsService{s: s} + return rs +} + +type MomentsService struct { + s *Service +} + +func NewPeopleService(s *Service) *PeopleService { + rs := &PeopleService{s: s} + return rs +} + +type PeopleService struct { + s *Service +} + +type Acl struct { + // Description: Description of the access granted, suitable for display. + Description string `json:"description,omitempty"` + + // Items: The list of access entries. + Items []*PlusAclentryResource `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of access controls. + // Value: "plus#acl". + Kind string `json:"kind,omitempty"` +} + +type Activity struct { + // Access: Identifies who has access to see this activity. + Access *Acl `json:"access,omitempty"` + + // Actor: The person who performed this activity. + Actor *ActivityActor `json:"actor,omitempty"` + + // Address: Street address where this activity occurred. + Address string `json:"address,omitempty"` + + // Annotation: Additional content added by the person who shared this + // activity, applicable only when resharing an activity. + Annotation string `json:"annotation,omitempty"` + + // CrosspostSource: If this activity is a crosspost from another system, + // this property specifies the ID of the original activity. + CrosspostSource string `json:"crosspostSource,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Geocode: Latitude and longitude where this activity occurred. Format + // is latitude followed by longitude, space separated. + Geocode string `json:"geocode,omitempty"` + + // Id: The ID of this activity. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as an activity. Value: + // "plus#activity". + Kind string `json:"kind,omitempty"` + + // Location: The location where this activity occurred. + Location *Place `json:"location,omitempty"` + + // Object: The object of this activity. + Object *ActivityObject `json:"object,omitempty"` + + // PlaceId: ID of the place where this activity occurred. + PlaceId string `json:"placeId,omitempty"` + + // PlaceName: Name of the place where this activity occurred. + PlaceName string `json:"placeName,omitempty"` + + // Provider: The service provider that initially published this + // activity. + Provider *ActivityProvider `json:"provider,omitempty"` + + // Published: The time at which this activity was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // Radius: Radius, in meters, of the region where this activity + // occurred, centered at the latitude and longitude identified in + // geocode. + Radius string `json:"radius,omitempty"` + + // Title: Title of this activity. + Title string `json:"title,omitempty"` + + // Updated: The time at which this activity was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Url: The link to this activity. + Url string `json:"url,omitempty"` + + // Verb: This activity's verb, which indicates the action that was + // performed. Possible values include, but are not limited to, the + // following values: + // - "post" - Publish content to the stream. + // - + // "share" - Reshare an activity. + Verb string `json:"verb,omitempty"` +} + +type ActivityActor struct { + // DisplayName: The name of the actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor's Person resource. + Id string `json:"id,omitempty"` + + // Image: The image representation of the actor. + Image *ActivityActorImage `json:"image,omitempty"` + + // Name: An object representation of the individual components of name. + Name *ActivityActorName `json:"name,omitempty"` + + // Url: The link to the actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type ActivityActorName struct { + // FamilyName: The family name ("last name") of the actor. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name ("first name") of the actor. + GivenName string `json:"givenName,omitempty"` +} + +type ActivityObject struct { + // Actor: If this activity's object is itself another activity, such as + // when a person reshares an activity, this property specifies the + // original activity's actor. + Actor *ActivityObjectActor `json:"actor,omitempty"` + + // Attachments: The media objects attached to this activity. + Attachments []*ActivityObjectAttachments `json:"attachments,omitempty"` + + // Content: The HTML-formatted content, which is suitable for display. + Content string `json:"content,omitempty"` + + // Id: The ID of the object. When resharing an activity, this is the ID + // of the activity that is being reshared. + Id string `json:"id,omitempty"` + + // ObjectType: The type of the object. Possible values include, but are + // not limited to, the following values: + // - "note" - Textual content. + // + // - "activity" - A Google+ activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, which + // is stored without any HTML formatting. When creating or updating an + // activity, this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` + + // Plusoners: People who +1'd this activity. + Plusoners *ActivityObjectPlusoners `json:"plusoners,omitempty"` + + // Replies: Comments in reply to this activity. + Replies *ActivityObjectReplies `json:"replies,omitempty"` + + // Resharers: People who reshared this activity. + Resharers *ActivityObjectResharers `json:"resharers,omitempty"` + + // Url: The URL that points to the linked resource. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActor struct { + // DisplayName: The original actor's name, which is suitable for + // display. + DisplayName string `json:"displayName,omitempty"` + + // Id: ID of the original actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of the original actor. + Image *ActivityObjectActorImage `json:"image,omitempty"` + + // Url: A link to the original actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActorImage struct { + // Url: A URL that points to a thumbnail photo of the original actor. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachments struct { + // Content: If the attachment is an article, this property contains a + // snippet of text from the article. It can also include descriptions + // for other types. + Content string `json:"content,omitempty"` + + // DisplayName: The title of the attachment, such as a photo caption or + // an article title. + DisplayName string `json:"displayName,omitempty"` + + // Embed: If the attachment is a video, the embeddable link. + Embed *ActivityObjectAttachmentsEmbed `json:"embed,omitempty"` + + // FullImage: The full image URL for photo attachments. + FullImage *ActivityObjectAttachmentsFullImage `json:"fullImage,omitempty"` + + // Id: The ID of the attachment. + Id string `json:"id,omitempty"` + + // Image: The preview image for photos or videos. + Image *ActivityObjectAttachmentsImage `json:"image,omitempty"` + + // ObjectType: The type of media object. Possible values include, but + // are not limited to, the following values: + // - "photo" - A photo. + // - + // "album" - A photo album. + // - "video" - A video. + // - "article" - An + // article, specified by a link. + ObjectType string `json:"objectType,omitempty"` + + // Thumbnails: If the attachment is an album, this property is a list of + // potential additional thumbnails from the album. + Thumbnails []*ActivityObjectAttachmentsThumbnails `json:"thumbnails,omitempty"` + + // Url: The link to the attachment, which should be of type text/html. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsEmbed struct { + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the link. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsFullImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image URL. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsThumbnails struct { + // Description: Potential name of the thumbnail. + Description string `json:"description,omitempty"` + + // Image: Image resource. + Image *ActivityObjectAttachmentsThumbnailsImage `json:"image,omitempty"` + + // Url: URL of the webpage containing the image. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsThumbnailsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image url. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectPlusoners struct { + // SelfLink: The URL for the collection of people who +1'd this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who +1'd this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectReplies struct { + // SelfLink: The URL for the collection of comments in reply to this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of comments on this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectResharers struct { + // SelfLink: The URL for the collection of resharers. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who reshared this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityProvider struct { + // Title: Name of the service provider. + Title string `json:"title,omitempty"` +} + +type ActivityFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of activities. Deprecated. + Id string `json:"id,omitempty"` + + // Items: The activities in this page of results. + Items []*Activity `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of activities. Value: + // "plus#activityFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this activity resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of activities, which is a + // truncated portion of the content. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of activities was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type Comment struct { + // Actor: The person who posted this comment. + Actor *CommentActor `json:"actor,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this comment. + Id string `json:"id,omitempty"` + + // InReplyTo: The activity this comment replied to. + InReplyTo []*CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: Identifies this resource as a comment. Value: "plus#comment". + Kind string `json:"kind,omitempty"` + + // Object: The object of this comment. + Object *CommentObject `json:"object,omitempty"` + + // Plusoners: People who +1'd this comment. + Plusoners *CommentPlusoners `json:"plusoners,omitempty"` + + // Published: The time at which this comment was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // SelfLink: Link to this comment resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: The time at which this comment was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Verb: This comment's verb, indicating what action was performed. + // Possible values are: + // - "post" - Publish content to the stream. + Verb string `json:"verb,omitempty"` +} + +type CommentActor struct { + // DisplayName: The name of this actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of this actor. + Image *CommentActorImage `json:"image,omitempty"` + + // Url: A link to the Person resource for this actor. + Url string `json:"url,omitempty"` +} + +type CommentActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The ID of the activity. + Id string `json:"id,omitempty"` + + // Url: The URL of the activity. + Url string `json:"url,omitempty"` +} + +type CommentObject struct { + // Content: The HTML-formatted content, suitable for display. + Content string `json:"content,omitempty"` + + // ObjectType: The object type of this comment. Possible values are: + // - + // "comment" - A comment in reply to an activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, stored + // without any HTML formatting. When creating or updating a comment, + // this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` +} + +type CommentPlusoners struct { + // TotalItems: Total number of people who +1'd this comment. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type CommentFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of comments. + Id string `json:"id,omitempty"` + + // Items: The comments in this page of results. + Items []*Comment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of comments. Value: + // "plus#commentFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Title: The title of this collection of comments. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of comments was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type ItemScope struct { + // About: The subject matter of the content. + About *ItemScope `json:"about,omitempty"` + + // AdditionalName: An additional name for a Person, can be used for a + // middle name. + AdditionalName []string `json:"additionalName,omitempty"` + + // Address: Postal address. + Address *ItemScope `json:"address,omitempty"` + + // AddressCountry: Address country. + AddressCountry string `json:"addressCountry,omitempty"` + + // AddressLocality: Address locality. + AddressLocality string `json:"addressLocality,omitempty"` + + // AddressRegion: Address region. + AddressRegion string `json:"addressRegion,omitempty"` + + // Associated_media: The encoding. + Associated_media []*ItemScope `json:"associated_media,omitempty"` + + // AttendeeCount: Number of attendees. + AttendeeCount int64 `json:"attendeeCount,omitempty"` + + // Attendees: A person attending the event. + Attendees []*ItemScope `json:"attendees,omitempty"` + + // Audio: From http://schema.org/MusicRecording, the audio file. + Audio *ItemScope `json:"audio,omitempty"` + + // Author: The person or persons who created this result. In the example + // of restaurant reviews, this might be the reviewer's name. + Author []*ItemScope `json:"author,omitempty"` + + // BestRating: Best possible rating value that a result might obtain. + // This property defines the upper bound for the ratingValue. For + // example, you might have a 5 star rating scale, you would provide 5 as + // the value for this property. + BestRating string `json:"bestRating,omitempty"` + + // BirthDate: Date of birth. + BirthDate string `json:"birthDate,omitempty"` + + // ByArtist: From http://schema.org/MusicRecording, the artist that + // performed this recording. + ByArtist *ItemScope `json:"byArtist,omitempty"` + + // Caption: The caption for this object. + Caption string `json:"caption,omitempty"` + + // ContentSize: File size in (mega/kilo) bytes. + ContentSize string `json:"contentSize,omitempty"` + + // ContentUrl: Actual bytes of the media object, for example the image + // file or video file. + ContentUrl string `json:"contentUrl,omitempty"` + + // Contributor: A list of contributors to this result. + Contributor []*ItemScope `json:"contributor,omitempty"` + + // DateCreated: The date the result was created such as the date that a + // review was first created. + DateCreated string `json:"dateCreated,omitempty"` + + // DateModified: The date the result was last modified such as the date + // that a review was last edited. + DateModified string `json:"dateModified,omitempty"` + + // DatePublished: The initial date that the result was published. For + // example, a user writes a comment on a blog, which has a + // result.dateCreated of when they submit it. If the blog users comment + // moderation, the result.datePublished value would match the date when + // the owner approved the message. + DatePublished string `json:"datePublished,omitempty"` + + // Description: The string that describes the content of the result. + Description string `json:"description,omitempty"` + + // Duration: The duration of the item (movie, audio recording, event, + // etc.) in ISO 8601 date format. + Duration string `json:"duration,omitempty"` + + // EmbedUrl: A URL pointing to a player for a specific video. In + // general, this is the information in the src element of an embed tag + // and should not be the same as the content of the loc tag. + EmbedUrl string `json:"embedUrl,omitempty"` + + // EndDate: The end date and time of the event (in ISO 8601 date + // format). + EndDate string `json:"endDate,omitempty"` + + // FamilyName: Family name. This property can be used with givenName + // instead of the name property. + FamilyName string `json:"familyName,omitempty"` + + // Gender: Gender of the person. + Gender string `json:"gender,omitempty"` + + // Geo: Geo coordinates. + Geo *ItemScope `json:"geo,omitempty"` + + // GivenName: Given name. This property can be used with familyName + // instead of the name property. + GivenName string `json:"givenName,omitempty"` + + // Height: The height of the media object. + Height string `json:"height,omitempty"` + + // Id: An identifier for the target. Your app can choose how to identify + // targets. The target.id is required if you are writing an activity + // that does not have a corresponding web page or target.url property. + Id string `json:"id,omitempty"` + + // Image: A URL to the image that represents this result. For example, + // if a user writes a review of a restaurant and attaches a photo of + // their meal, you might use that photo as the result.image. + Image string `json:"image,omitempty"` + + // InAlbum: From http://schema.org/MusicRecording, which album a song is + // in. + InAlbum *ItemScope `json:"inAlbum,omitempty"` + + // Kind: Identifies this resource as an itemScope. + Kind string `json:"kind,omitempty"` + + // Latitude: Latitude. + Latitude float64 `json:"latitude,omitempty"` + + // Location: The location of the event or organization. + Location *ItemScope `json:"location,omitempty"` + + // Longitude: Longitude. + Longitude float64 `json:"longitude,omitempty"` + + // Name: The name of the result. In the example of a restaurant review, + // this might be the summary the user gave their review such as "Great + // ambiance, but overpriced." + Name string `json:"name,omitempty"` + + // PartOfTVSeries: Property of http://schema.org/TVEpisode indicating + // which series the episode belongs to. + PartOfTVSeries *ItemScope `json:"partOfTVSeries,omitempty"` + + // Performers: The main performer or performers of the event-for + // example, a presenter, musician, or actor. + Performers []*ItemScope `json:"performers,omitempty"` + + // PlayerType: Player type that is required. For example: Flash or + // Silverlight. + PlayerType string `json:"playerType,omitempty"` + + // PostOfficeBoxNumber: Post office box number. + PostOfficeBoxNumber string `json:"postOfficeBoxNumber,omitempty"` + + // PostalCode: Postal code. + PostalCode string `json:"postalCode,omitempty"` + + // RatingValue: Rating value. + RatingValue string `json:"ratingValue,omitempty"` + + // ReviewRating: Review rating. + ReviewRating *ItemScope `json:"reviewRating,omitempty"` + + // StartDate: The start date and time of the event (in ISO 8601 date + // format). + StartDate string `json:"startDate,omitempty"` + + // StreetAddress: Street address. + StreetAddress string `json:"streetAddress,omitempty"` + + // Text: The text that is the result of the app activity. For example, + // if a user leaves a review of a restaurant, this might be the text of + // the review. + Text string `json:"text,omitempty"` + + // Thumbnail: Thumbnail image for an image or video. + Thumbnail *ItemScope `json:"thumbnail,omitempty"` + + // ThumbnailUrl: A URL to a thumbnail image that represents this result. + ThumbnailUrl string `json:"thumbnailUrl,omitempty"` + + // TickerSymbol: The exchange traded instrument associated with a + // Corporation object. The tickerSymbol is expressed as an exchange and + // an instrument name separated by a space character. For the exchange + // component of the tickerSymbol attribute, we recommend using the + // controlled vocabulary of Market Identifier Codes (MIC) specified in + // ISO15022. + TickerSymbol string `json:"tickerSymbol,omitempty"` + + // Type: The schema.org URL that best describes the referenced target + // and matches the type of moment. + Type string `json:"type,omitempty"` + + // Url: The URL that points to the result object. For example, a + // permalink directly to a restaurant reviewer's comment. + Url string `json:"url,omitempty"` + + // Width: The width of the media object. + Width string `json:"width,omitempty"` + + // WorstRating: Worst possible rating value that a result might obtain. + // This property defines the lower bound for the ratingValue. + WorstRating string `json:"worstRating,omitempty"` +} + +type Moment struct { + // Id: The moment ID. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as a moment. + Kind string `json:"kind,omitempty"` + + // Result: The object generated by performing the action on the target. + // For example, a user writes a review of a restaurant, the target is + // the restaurant and the result is the review. + Result *ItemScope `json:"result,omitempty"` + + // StartDate: Time stamp of when the action occurred in RFC3339 format. + StartDate string `json:"startDate,omitempty"` + + // Target: The object on which the action was performed. + Target *ItemScope `json:"target,omitempty"` + + // Type: The Google schema for the type of moment to write. For example, + // http://schemas.google.com/AddActivity. + Type string `json:"type,omitempty"` +} + +type MomentsFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The moments in this page of results. + Items []*Moment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of moments. Value: + // "plus#momentsFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of moments. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this page of moments. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of moments. + Title string `json:"title,omitempty"` + + // Updated: The RFC 339 timestamp for when this collection of moments + // was last updated. + Updated string `json:"updated,omitempty"` +} + +type PeopleFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The people in this page of results. Each item includes the id, + // displayName, image, and url for the person. To retrieve additional + // profile data, see the people.get method. + Items []*Person `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of people. Value: + // "plus#peopleFeed". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of people. + Title string `json:"title,omitempty"` + + // TotalItems: The total number of people available in this list. The + // number of people in a response might be smaller due to paging. This + // might not be set for all collections. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Person struct { + // AboutMe: A short biography for this person. + AboutMe string `json:"aboutMe,omitempty"` + + // AgeRange: The age range of the person. Valid ranges are 17 or + // younger, 18 to 20, and 21 or older. Age is determined from the user's + // birthday using Western age reckoning. + AgeRange *PersonAgeRange `json:"ageRange,omitempty"` + + // Birthday: The person's date of birth, represented as YYYY-MM-DD. + Birthday string `json:"birthday,omitempty"` + + // BraggingRights: The "bragging rights" line of this person. + BraggingRights string `json:"braggingRights,omitempty"` + + // CircledByCount: For followers who are visible, the number of people + // who have added this person or page to a circle. + CircledByCount int64 `json:"circledByCount,omitempty"` + + // Cover: The cover photo content. + Cover *PersonCover `json:"cover,omitempty"` + + // CurrentLocation: The current location for this person. + CurrentLocation string `json:"currentLocation,omitempty"` + + // DisplayName: The name of this person, which is suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Domain: The hosted domain name for the user's Google Apps account. + // For instance, example.com. The plus.profile.emails.read or email + // scope is needed to get this domain name. + Domain string `json:"domain,omitempty"` + + // Emails: A list of email addresses that this person has, including + // their Google account email address, and the public verified email + // addresses on their Google+ profile. The plus.profile.emails.read + // scope is needed to retrieve these email addresses, or the email scope + // can be used to retrieve just the Google account email address. + Emails []*PersonEmails `json:"emails,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Gender: The person's gender. Possible values include, but are not + // limited to, the following values: + // - "male" - Male gender. + // - + // "female" - Female gender. + // - "other" - Other. + Gender string `json:"gender,omitempty"` + + // Id: The ID of this person. + Id string `json:"id,omitempty"` + + // Image: The representation of the person's profile photo. + Image *PersonImage `json:"image,omitempty"` + + // IsPlusUser: Whether this user has signed up for Google+. + IsPlusUser bool `json:"isPlusUser,omitempty"` + + // Kind: Identifies this resource as a person. Value: "plus#person". + Kind string `json:"kind,omitempty"` + + // Language: The user's preferred language for rendering. + Language string `json:"language,omitempty"` + + // Name: An object representation of the individual components of a + // person's name. + Name *PersonName `json:"name,omitempty"` + + // Nickname: The nickname of this person. + Nickname string `json:"nickname,omitempty"` + + // ObjectType: Type of person within Google+. Possible values include, + // but are not limited to, the following values: + // - "person" - + // represents an actual person. + // - "page" - represents a page. + ObjectType string `json:"objectType,omitempty"` + + // Occupation: The occupation of this person. + Occupation string `json:"occupation,omitempty"` + + // Organizations: A list of current or past organizations with which + // this person is associated. + Organizations []*PersonOrganizations `json:"organizations,omitempty"` + + // PlacesLived: A list of places where this person has lived. + PlacesLived []*PersonPlacesLived `json:"placesLived,omitempty"` + + // PlusOneCount: If a Google+ Page, the number of people who have +1'd + // this page. + PlusOneCount int64 `json:"plusOneCount,omitempty"` + + // RelationshipStatus: The person's relationship status. Possible values + // include, but are not limited to, the following values: + // - "single" - + // Person is single. + // - "in_a_relationship" - Person is in a + // relationship. + // - "engaged" - Person is engaged. + // - "married" - Person + // is married. + // - "its_complicated" - The relationship is complicated. + // + // - "open_relationship" - Person is in an open relationship. + // - + // "widowed" - Person is widowed. + // - "in_domestic_partnership" - Person + // is in a domestic partnership. + // - "in_civil_union" - Person is in a + // civil union. + RelationshipStatus string `json:"relationshipStatus,omitempty"` + + // Skills: The person's skills. + Skills string `json:"skills,omitempty"` + + // Tagline: The brief description (tagline) of this person. + Tagline string `json:"tagline,omitempty"` + + // Url: The URL of this person's profile. + Url string `json:"url,omitempty"` + + // Urls: A list of URLs for this person. + Urls []*PersonUrls `json:"urls,omitempty"` + + // Verified: Whether the person or Google+ Page has been verified. + Verified bool `json:"verified,omitempty"` +} + +type PersonAgeRange struct { + // Max: The age range's upper bound, if any. Possible values include, + // but are not limited to, the following: + // - "17" - for age 17 + // - "20" + // - for age 20 + Max int64 `json:"max,omitempty"` + + // Min: The age range's lower bound, if any. Possible values include, + // but are not limited to, the following: + // - "21" - for age 21 + // - "18" + // - for age 18 + Min int64 `json:"min,omitempty"` +} + +type PersonCover struct { + // CoverInfo: Extra information about the cover photo. + CoverInfo *PersonCoverCoverInfo `json:"coverInfo,omitempty"` + + // CoverPhoto: The person's primary cover image. + CoverPhoto *PersonCoverCoverPhoto `json:"coverPhoto,omitempty"` + + // Layout: The layout of the cover art. Possible values include, but are + // not limited to, the following values: + // - "banner" - One large image + // banner. + Layout string `json:"layout,omitempty"` +} + +type PersonCoverCoverInfo struct { + // LeftImageOffset: The difference between the left position of the + // cover image and the actual displayed cover image. Only valid for + // banner layout. + LeftImageOffset int64 `json:"leftImageOffset,omitempty"` + + // TopImageOffset: The difference between the top position of the cover + // image and the actual displayed cover image. Only valid for banner + // layout. + TopImageOffset int64 `json:"topImageOffset,omitempty"` +} + +type PersonCoverCoverPhoto struct { + // Height: The height of the image. + Height int64 `json:"height,omitempty"` + + // Url: The URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width of the image. + Width int64 `json:"width,omitempty"` +} + +type PersonEmails struct { + // Type: The type of address. Possible values include, but are not + // limited to, the following values: + // - "account" - Google account + // email address. + // - "home" - Home email address. + // - "work" - Work email + // address. + // - "other" - Other. + Type string `json:"type,omitempty"` + + // Value: The email address. + Value string `json:"value,omitempty"` +} + +type PersonImage struct { + // Url: The URL of the person's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type PersonName struct { + // FamilyName: The family name (last name) of this person. + FamilyName string `json:"familyName,omitempty"` + + // Formatted: The full name of this person, including middle names, + // suffixes, etc. + Formatted string `json:"formatted,omitempty"` + + // GivenName: The given name (first name) of this person. + GivenName string `json:"givenName,omitempty"` + + // HonorificPrefix: The honorific prefixes (such as "Dr." or "Mrs.") for + // this person. + HonorificPrefix string `json:"honorificPrefix,omitempty"` + + // HonorificSuffix: The honorific suffixes (such as "Jr.") for this + // person. + HonorificSuffix string `json:"honorificSuffix,omitempty"` + + // MiddleName: The middle name of this person. + MiddleName string `json:"middleName,omitempty"` +} + +type PersonOrganizations struct { + // Department: The department within the organization. Deprecated. + Department string `json:"department,omitempty"` + + // Description: A short description of the person's role in this + // organization. Deprecated. + Description string `json:"description,omitempty"` + + // EndDate: The date that the person left this organization. + EndDate string `json:"endDate,omitempty"` + + // Location: The location of this organization. Deprecated. + Location string `json:"location,omitempty"` + + // Name: The name of the organization. + Name string `json:"name,omitempty"` + + // Primary: If "true", indicates this organization is the person's + // primary one, which is typically interpreted as the current one. + Primary bool `json:"primary,omitempty"` + + // StartDate: The date that the person joined this organization. + StartDate string `json:"startDate,omitempty"` + + // Title: The person's job title or role within the organization. + Title string `json:"title,omitempty"` + + // Type: The type of organization. Possible values include, but are not + // limited to, the following values: + // - "work" - Work. + // - "school" - + // School. + Type string `json:"type,omitempty"` +} + +type PersonPlacesLived struct { + // Primary: If "true", this place of residence is this person's primary + // residence. + Primary bool `json:"primary,omitempty"` + + // Value: A place where this person has lived. For example: "Seattle, + // WA", "Near Toronto". + Value string `json:"value,omitempty"` +} + +type PersonUrls struct { + // Label: The label of the URL. + Label string `json:"label,omitempty"` + + // Type: The type of URL. Possible values include, but are not limited + // to, the following values: + // - "otherProfile" - URL for another + // profile. + // - "contributor" - URL to a site for which this person is a + // contributor. + // - "website" - URL for this Google+ Page's primary + // website. + // - "other" - Other URL. + Type string `json:"type,omitempty"` + + // Value: The URL value. + Value string `json:"value,omitempty"` +} + +type Place struct { + // Address: The physical address of the place. + Address *PlaceAddress `json:"address,omitempty"` + + // DisplayName: The display name of the place. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Identifies this resource as a place. Value: "plus#place". + Kind string `json:"kind,omitempty"` + + // Position: The position of the place. + Position *PlacePosition `json:"position,omitempty"` +} + +type PlaceAddress struct { + // Formatted: The formatted address for display. + Formatted string `json:"formatted,omitempty"` +} + +type PlacePosition struct { + // Latitude: The latitude of this position. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude of this position. + Longitude float64 `json:"longitude,omitempty"` +} + +type PlusAclentryResource struct { + // DisplayName: A descriptive name for this entry. Suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the entry. For entries of type "person" or "circle", + // this is the ID of the resource. For other types, this property is not + // set. + Id string `json:"id,omitempty"` + + // Type: The type of entry describing to whom access is granted. + // Possible values are: + // - "person" - Access to an individual. + // - + // "circle" - Access to members of a circle. + // - "myCircles" - Access to + // members of all the person's circles. + // - "extendedCircles" - Access to + // members of all the person's circles, plus all of the people in their + // circles. + // - "domain" - Access to members of the person's Google Apps + // domain. + // - "public" - Access to anyone on the web. + Type string `json:"type,omitempty"` +} + +// method id "plus.activities.get": + +type ActivitiesGetCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// Get: Get an activity. +func (r *ActivitiesService) Get(activityId string) *ActivitiesGetCall { + c := &ActivitiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +func (c *ActivitiesGetCall) Do() (*Activity, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get an activity.", + // "httpMethod": "GET", + // "id": "plus.activities.get", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}", + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.activities.list": + +type ActivitiesListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the activities in the specified collection for a +// particular user. +func (r *ActivitiesService) List(userId string, collection string) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *ActivitiesListCall) PageToken(pageToken string) *ActivitiesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ActivitiesListCall) Do() (*ActivityFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/activities/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ActivityFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the activities in the specified collection for a particular user.", + // "httpMethod": "GET", + // "id": "plus.activities.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of activities to list.", + // "enum": [ + // "public" + // ], + // "enumDescriptions": [ + // "All public activities created by the specified user." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities/{collection}", + // "response": { + // "$ref": "ActivityFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.activities.search": + +type ActivitiesSearchCall struct { + s *Service + query string + opt_ map[string]interface{} +} + +// Search: Search public activities. +func (r *ActivitiesService) Search(query string) *ActivitiesSearchCall { + c := &ActivitiesSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.query = query + return c +} + +// Language sets the optional parameter "language": Specify the +// preferred language to search with. See search language codes for +// available values. +func (c *ActivitiesSearchCall) Language(language string) *ActivitiesSearchCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *ActivitiesSearchCall) MaxResults(maxResults int64) *ActivitiesSearchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": Specifies how to order +// search results. +func (c *ActivitiesSearchCall) OrderBy(orderBy string) *ActivitiesSearchCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. This token can be of any +// length. +func (c *ActivitiesSearchCall) PageToken(pageToken string) *ActivitiesSearchCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ActivitiesSearchCall) Do() (*ActivityFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("query", fmt.Sprintf("%v", c.query)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ActivityFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Search public activities.", + // "httpMethod": "GET", + // "id": "plus.activities.search", + // "parameterOrder": [ + // "query" + // ], + // "parameters": { + // "language": { + // "default": "en-US", + // "description": "Specify the preferred language to search with. See search language codes for available values.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "10", + // "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "20", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "default": "recent", + // "description": "Specifies how to order search results.", + // "enum": [ + // "best", + // "recent" + // ], + // "enumDescriptions": [ + // "Sort activities by relevance to the user, most relevant first.", + // "Sort activities by published date, most recent first." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response. This token can be of any length.", + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Full-text search query string.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities", + // "response": { + // "$ref": "ActivityFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.comments.get": + +type CommentsGetCall struct { + s *Service + commentId string + opt_ map[string]interface{} +} + +// Get: Get a comment. +func (r *CommentsService) Get(commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a comment.", + // "httpMethod": "GET", + // "id": "plus.comments.get", + // "parameterOrder": [ + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.comments.list": + +type CommentsListCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// List: List all of the comments for an activity. +func (r *CommentsService) List(activityId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of comments to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortOrder sets the optional parameter "sortOrder": The order in which +// to sort the list of comments. +func (c *CommentsListCall) SortOrder(sortOrder string) *CommentsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *CommentsListCall) Do() (*CommentFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the comments for an activity.", + // "httpMethod": "GET", + // "id": "plus.comments.list", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get comments for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "ascending", + // "description": "The order in which to sort the list of comments.", + // "enum": [ + // "ascending", + // "descending" + // ], + // "enumDescriptions": [ + // "Sort oldest comments first.", + // "Sort newest comments first." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "response": { + // "$ref": "CommentFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.moments.insert": + +type MomentsInsertCall struct { + s *Service + userId string + collection string + moment *Moment + opt_ map[string]interface{} +} + +// Insert: Record a moment representing a user's activity such as making +// a purchase or commenting on a blog. +func (r *MomentsService) Insert(userId string, collection string, moment *Moment) *MomentsInsertCall { + c := &MomentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + c.moment = moment + return c +} + +// Debug sets the optional parameter "debug": Return the moment as +// written. Should be used only for debugging. +func (c *MomentsInsertCall) Debug(debug bool) *MomentsInsertCall { + c.opt_["debug"] = debug + return c +} + +func (c *MomentsInsertCall) Do() (*Moment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.moment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["debug"]; ok { + params.Set("debug", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/moments/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Moment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Record a moment representing a user's activity such as making a purchase or commenting on a blog.", + // "httpMethod": "POST", + // "id": "plus.moments.insert", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection to which to write moments.", + // "enum": [ + // "vault" + // ], + // "enumDescriptions": [ + // "The default collection for writing new moments." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "debug": { + // "description": "Return the moment as written. Should be used only for debugging.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "The ID of the user to record activities for. The only valid values are \"me\" and the ID of the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/moments/{collection}", + // "request": { + // "$ref": "Moment" + // }, + // "response": { + // "$ref": "Moment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.moments.list": + +type MomentsListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the moments for a particular user. +func (r *MomentsService) List(userId string, collection string) *MomentsListCall { + c := &MomentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of moments to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *MomentsListCall) MaxResults(maxResults int64) *MomentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *MomentsListCall) PageToken(pageToken string) *MomentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// TargetUrl sets the optional parameter "targetUrl": Only moments +// containing this targetUrl will be returned. +func (c *MomentsListCall) TargetUrl(targetUrl string) *MomentsListCall { + c.opt_["targetUrl"] = targetUrl + return c +} + +// Type sets the optional parameter "type": Only moments of this type +// will be returned. +func (c *MomentsListCall) Type(type_ string) *MomentsListCall { + c.opt_["type"] = type_ + return c +} + +func (c *MomentsListCall) Do() (*MomentsFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["targetUrl"]; ok { + params.Set("targetUrl", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["type"]; ok { + params.Set("type", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/moments/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(MomentsFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the moments for a particular user.", + // "httpMethod": "GET", + // "id": "plus.moments.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of moments to list.", + // "enum": [ + // "vault" + // ], + // "enumDescriptions": [ + // "All moments created by the requesting application for the authenticated user." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of moments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "targetUrl": { + // "description": "Only moments containing this targetUrl will be returned.", + // "location": "query", + // "type": "string" + // }, + // "type": { + // "description": "Only moments of this type will be returned.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get moments for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/moments/{collection}", + // "response": { + // "$ref": "MomentsFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.moments.remove": + +type MomentsRemoveCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Remove: Delete a moment. +func (r *MomentsService) Remove(id string) *MomentsRemoveCall { + c := &MomentsRemoveCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *MomentsRemoveCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "moments/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a moment.", + // "httpMethod": "DELETE", + // "id": "plus.moments.remove", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The ID of the moment to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "moments/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.people.get": + +type PeopleGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Get a person's profile. If your app uses scope +// https://www.googleapis.com/auth/plus.login, this method is guaranteed +// to return ageRange and language. +func (r *PeopleService) Get(userId string) *PeopleGetCall { + c := &PeopleGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *PeopleGetCall) Do() (*Person, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Person) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a person's profile. If your app uses scope https://www.googleapis.com/auth/plus.login, this method is guaranteed to return ageRange and language.", + // "httpMethod": "GET", + // "id": "plus.people.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}", + // "response": { + // "$ref": "Person" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} + +// method id "plus.people.list": + +type PeopleListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the people in the specified collection. +func (r *PeopleService) List(userId string, collection string) *PeopleListCall { + c := &PeopleListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListCall) MaxResults(maxResults int64) *PeopleListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": The order to return +// people in. +func (c *PeopleListCall) OrderBy(orderBy string) *PeopleListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListCall) PageToken(pageToken string) *PeopleListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection.", + // "httpMethod": "GET", + // "id": "plus.people.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "connected", + // "visible" + // ], + // "enumDescriptions": [ + // "The list of visible people in the authenticated user's circles who also use the requesting app. This list is limited to users who made their app activities visible to the authenticated user.", + // "The list of people who this user has added to one or more circles, limited to the circles visible to the requesting application." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "The order to return people in.", + // "enum": [ + // "alphabetical", + // "best" + // ], + // "enumDescriptions": [ + // "Order the people by their display name.", + // "Order people based on the relevence to the viewer." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.people.listByActivity": + +type PeopleListByActivityCall struct { + s *Service + activityId string + collection string + opt_ map[string]interface{} +} + +// ListByActivity: List all of the people in the specified collection +// for a particular activity. +func (r *PeopleService) ListByActivity(activityId string, collection string) *PeopleListByActivityCall { + c := &PeopleListByActivityCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListByActivityCall) MaxResults(maxResults int64) *PeopleListByActivityCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListByActivityCall) PageToken(pageToken string) *PeopleListByActivityCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListByActivityCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection for a particular activity.", + // "httpMethod": "GET", + // "id": "plus.people.listByActivity", + // "parameterOrder": [ + // "activityId", + // "collection" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get the list of people for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "plusoners", + // "resharers" + // ], + // "enumDescriptions": [ + // "List all people who have +1'd this activity.", + // "List all people who have reshared this activity." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.people.search": + +type PeopleSearchCall struct { + s *Service + query string + opt_ map[string]interface{} +} + +// Search: Search all public profiles. +func (r *PeopleService) Search(query string) *PeopleSearchCall { + c := &PeopleSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.query = query + return c +} + +// Language sets the optional parameter "language": Specify the +// preferred language to search with. See search language codes for +// available values. +func (c *PeopleSearchCall) Language(language string) *PeopleSearchCall { + c.opt_["language"] = language + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleSearchCall) MaxResults(maxResults int64) *PeopleSearchCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. This token can be of any +// length. +func (c *PeopleSearchCall) PageToken(pageToken string) *PeopleSearchCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleSearchCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("query", fmt.Sprintf("%v", c.query)) + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Search all public profiles.", + // "httpMethod": "GET", + // "id": "plus.people.search", + // "parameterOrder": [ + // "query" + // ], + // "parameters": { + // "language": { + // "default": "en-US", + // "description": "Specify the preferred language to search with. See search language codes for available values.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "default": "25", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "50", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response. This token can be of any length.", + // "location": "query", + // "type": "string" + // }, + // "query": { + // "description": "Specify a query string for full text search of public text in all profiles.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-api.json b/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-api.json new file mode 100644 index 0000000000000..9b4552fce50a3 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-api.json @@ -0,0 +1,2118 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"wtgj9ZncHCe-ShJM8RewHb1DgWI/osZuPoYT5hJnE0hEpTbvxVAA6M0\"", + "discoveryVersion": "v1", + "id": "plus:v1domains", + "name": "plus", + "version": "v1domains", + "revision": "20130726", + "title": "Google+ API", + "description": "The Google+ API enables developers to build on top of the Google+ platform.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/gplus-16.png", + "x32": "http://www.google.com/images/icons/product/gplus-32.png" + }, + "documentationLink": "https://developers.google.com/+/api/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/plus/v1domains/", + "basePath": "/plus/v1domains/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "plus/v1domains/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/plus.circles.read": { + "description": "View your circles and people in them" + }, + "https://www.googleapis.com/auth/plus.circles.write": { + "description": "Manage your circles and add people" + }, + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your name, basic info, and list of people you're connected to on Google+" + }, + "https://www.googleapis.com/auth/plus.me": { + "description": "Know who you are on Google" + }, + "https://www.googleapis.com/auth/plus.media.upload": { + "description": "Send your photos and videos to Google+" + }, + "https://www.googleapis.com/auth/plus.profiles.read": { + "description": "View your own Google+ profile and profiles shared with you" + }, + "https://www.googleapis.com/auth/plus.stream.read": { + "description": "View your posts, comments, and stream" + }, + "https://www.googleapis.com/auth/plus.stream.write": { + "description": "Manage your posts, comments, and stream" + } + } + } + }, + "schemas": { + "Acl": { + "id": "Acl", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description of the access granted, suitable for display." + }, + "domainRestricted": { + "type": "boolean", + "description": "Whether access is restricted to the domain." + }, + "items": { + "type": "array", + "description": "The list of access entries.", + "items": { + "$ref": "PlusAclentryResource" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of access controls. Value: \"plus#acl\".", + "default": "plus#acl" + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "properties": { + "access": { + "$ref": "Acl", + "description": "Identifies who has access to see this activity." + }, + "actor": { + "type": "object", + "description": "The person who performed this activity.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor's Person resource." + }, + "image": { + "type": "object", + "description": "The image representation of the actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (\"last name\") of the actor." + }, + "givenName": { + "type": "string", + "description": "The given name (\"first name\") of the actor." + } + } + }, + "url": { + "type": "string", + "description": "The link to the actor's Google profile." + } + } + }, + "address": { + "type": "string", + "description": "Street address where this activity occurred." + }, + "annotation": { + "type": "string", + "description": "Additional content added by the person who shared this activity, applicable only when resharing an activity." + }, + "crosspostSource": { + "type": "string", + "description": "If this activity is a crosspost from another system, this property specifies the ID of the original activity." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "geocode": { + "type": "string", + "description": "Latitude and longitude where this activity occurred. Format is latitude followed by longitude, space separated." + }, + "id": { + "type": "string", + "description": "The ID of this activity." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an activity. Value: \"plus#activity\".", + "default": "plus#activity" + }, + "location": { + "$ref": "Place", + "description": "The location where this activity occurred." + }, + "object": { + "type": "object", + "description": "The object of this activity.", + "properties": { + "actor": { + "type": "object", + "description": "If this activity's object is itself another activity, such as when a person reshares an activity, this property specifies the original activity's actor.", + "properties": { + "displayName": { + "type": "string", + "description": "The original actor's name, which is suitable for display." + }, + "id": { + "type": "string", + "description": "ID of the original actor." + }, + "image": { + "type": "object", + "description": "The image representation of the original actor.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a thumbnail photo of the original actor." + } + } + }, + "url": { + "type": "string", + "description": "A link to the original actor's Google profile." + } + } + }, + "attachments": { + "type": "array", + "description": "The media objects attached to this activity.", + "items": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "If the attachment is an article, this property contains a snippet of text from the article. It can also include descriptions for other types." + }, + "displayName": { + "type": "string", + "description": "The title of the attachment, such as a photo caption or an article title." + }, + "embed": { + "type": "object", + "description": "If the attachment is a video, the embeddable link.", + "properties": { + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the link." + } + } + }, + "fullImage": { + "type": "object", + "description": "The full image URL for photo attachments.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the image." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "id": { + "type": "string", + "description": "The ID of the attachment." + }, + "image": { + "type": "object", + "description": "The preview image for photos or videos.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image URL." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "objectType": { + "type": "string", + "description": "The type of media object. Possible values include, but are not limited to, the following values: \n- \"photo\" - A photo. \n- \"album\" - A photo album. \n- \"video\" - A video. \n- \"article\" - An article, specified by a link." + }, + "previewThumbnails": { + "type": "array", + "description": "When previewing, these are the optional thumbnails for the post. When posting an article, choose one by setting the attachment.image.url property. If you don't choose one, one will be chosen for you.", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "URL of the thumbnail image." + } + } + } + }, + "thumbnails": { + "type": "array", + "description": "If the attachment is an album, this property is a list of potential additional thumbnails from the album.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Potential name of the thumbnail." + }, + "image": { + "type": "object", + "description": "Image resource.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image url." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "url": { + "type": "string", + "description": "URL of the webpage containing the image." + } + } + } + }, + "url": { + "type": "string", + "description": "The link to the attachment; should be of type text/html." + } + } + } + }, + "content": { + "type": "string", + "description": "The HTML-formatted content, which is suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the object. When resharing an activity, this is the ID of the activity that is being reshared." + }, + "objectType": { + "type": "string", + "description": "The type of the object. Possible values include, but are not limited to, the following values: \n- \"note\" - Textual content. \n- \"activity\" - A Google+ activity." + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, which is stored without any HTML formatting. When creating or updating an activity, this value must be supplied as plain text in the request.", + "annotations": { + "required": [ + "plus.activities.insert" + ] + } + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of people who +1'd this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this activity.", + "format": "uint32" + } + } + }, + "replies": { + "type": "object", + "description": "Comments in reply to this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of comments in reply to this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of comments on this activity.", + "format": "uint32" + } + } + }, + "resharers": { + "type": "object", + "description": "People who reshared this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of resharers." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who reshared this activity.", + "format": "uint32" + } + } + }, + "statusForViewer": { + "type": "object", + "description": "Status of the activity as seen by the viewer.", + "properties": { + "canComment": { + "type": "boolean", + "description": "Whether the viewer can comment on the activity." + }, + "canPlusone": { + "type": "boolean", + "description": "Whether the viewer can +1 the activity." + }, + "isPlusOned": { + "type": "boolean", + "description": "Whether the viewer has +1'd the activity." + }, + "resharingDisabled": { + "type": "boolean", + "description": "Whether reshares are disabled for the activity." + } + } + }, + "url": { + "type": "string", + "description": "The URL that points to the linked resource." + } + } + }, + "placeId": { + "type": "string", + "description": "ID of the place where this activity occurred." + }, + "placeName": { + "type": "string", + "description": "Name of the place where this activity occurred." + }, + "provider": { + "type": "object", + "description": "The service provider that initially published this activity.", + "properties": { + "title": { + "type": "string", + "description": "Name of the service provider." + } + } + }, + "published": { + "type": "string", + "description": "The time at which this activity was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "radius": { + "type": "string", + "description": "Radius, in meters, of the region where this activity occurred, centered at the latitude and longitude identified in geocode." + }, + "title": { + "type": "string", + "description": "Title of this activity." + }, + "updated": { + "type": "string", + "description": "The time at which this activity was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The link to this activity." + }, + "verb": { + "type": "string", + "description": "This activity's verb, which indicates the action that was performed. Possible values include, but are not limited to, the following values: \n- \"post\" - Publish content to the stream. \n- \"share\" - Reshare an activity." + } + } + }, + "ActivityFeed": { + "id": "ActivityFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of activities. Deprecated." + }, + "items": { + "type": "array", + "description": "The activities in this page of results.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of activities. Value: \"plus#activityFeed\".", + "default": "plus#activityFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this activities resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of activities, which is a truncated portion of the content." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of activities was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "Audience": { + "id": "Audience", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "item": { + "$ref": "PlusAclentryResource", + "description": "The access control list entry." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an audience. Value: \"plus#audience\".", + "default": "plus#audience" + }, + "visibility": { + "type": "string", + "description": "The circle members' visibility as chosen by the owner of the circle. This only applies for items with \"item.type\" equals \"circle\". Possible values are: \n- \"public\" - Members are visible to the public. \n- \"limited\" - Members are visible to a limited audience. \n- \"private\" - Members are visible to the owner only." + } + } + }, + "AudiencesFeed": { + "id": "AudiencesFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The audiences in this result.", + "items": { + "$ref": "Audience" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of audiences. Value: \"plus#audienceFeed\".", + "default": "plus#audiencesFeed" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "totalItems": { + "type": "integer", + "description": "The total number of ACL entries. The number of entries in this response may be smaller due to paging.", + "format": "int32" + } + } + }, + "Circle": { + "id": "Circle", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The description of this circle." + }, + "displayName": { + "type": "string", + "description": "The circle name.", + "annotations": { + "required": [ + "plus.circles.insert" + ] + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of the circle." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a circle. Value: \"plus#circle\".", + "default": "plus#circle" + }, + "people": { + "type": "object", + "description": "The people in this circle.", + "properties": { + "totalItems": { + "type": "integer", + "description": "The total number of people in this circle.", + "format": "uint32" + } + } + }, + "selfLink": { + "type": "string", + "description": "Link to this circle resource" + } + } + }, + "CircleFeed": { + "id": "CircleFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The circles in this page of results.", + "items": { + "$ref": "Circle" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of circles. Value: \"plus#circleFeed\".", + "default": "plus#circleFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of circles." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this page of circles." + }, + "title": { + "type": "string", + "description": "The title of this list of resources." + }, + "totalItems": { + "type": "integer", + "description": "The total number of circles. The number of circles in this response may be smaller due to paging.", + "format": "int32" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "actor": { + "type": "object", + "description": "The person who posted this comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of this actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor." + }, + "image": { + "type": "object", + "description": "The image representation of this actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "url": { + "type": "string", + "description": "A link to the Person resource for this actor." + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this comment." + }, + "inReplyTo": { + "type": "array", + "description": "The activity this comment replied to.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the activity." + }, + "url": { + "type": "string", + "description": "The URL of the activity." + } + } + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a comment. Value: \"plus#comment\".", + "default": "plus#comment" + }, + "object": { + "type": "object", + "description": "The object of this comment.", + "properties": { + "content": { + "type": "string", + "description": "The HTML-formatted content, suitable for display." + }, + "objectType": { + "type": "string", + "description": "The object type of this comment. Possible values are: \n- \"comment\" - A comment in reply to an activity.", + "default": "comment" + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, stored without any HTML formatting. When creating or updating a comment, this value must be supplied as plain text in the request.", + "annotations": { + "required": [ + "plus.comments.insert" + ] + } + } + } + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this comment.", + "properties": { + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this comment.", + "format": "uint32" + } + } + }, + "published": { + "type": "string", + "description": "The time at which this comment was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "Link to this comment resource." + }, + "updated": { + "type": "string", + "description": "The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "verb": { + "type": "string", + "description": "This comment's verb, indicating what action was performed. Possible values are: \n- \"post\" - Publish content to the stream.", + "default": "post" + } + } + }, + "CommentFeed": { + "id": "CommentFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of comments." + }, + "items": { + "type": "array", + "description": "The comments in this page of results.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of comments. Value: \"plus#commentFeed\".", + "default": "plus#commentFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "title": { + "type": "string", + "description": "The title of this collection of comments." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of comments was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "Media": { + "id": "Media", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The person who uploaded this media.", + "properties": { + "displayName": { + "type": "string", + "description": "The author's name." + }, + "id": { + "type": "string", + "description": "ID of the author." + }, + "image": { + "type": "object", + "description": "The author's Google profile image.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the author's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "url": { + "type": "string", + "description": "A link to the author's Google profile." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name for this media." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "exif": { + "type": "object", + "description": "Exif information of the media item.", + "properties": { + "time": { + "type": "string", + "description": "The time the media was captured. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "height": { + "type": "integer", + "description": "The height in pixels of the original image.", + "format": "uint32" + }, + "id": { + "type": "string", + "description": "ID of this media, which is generated by the API." + }, + "kind": { + "type": "string", + "description": "The type of resource.", + "default": "plus#media" + }, + "mediaUrl": { + "type": "string", + "description": "The URL of this photo or video's still image." + }, + "published": { + "type": "string", + "description": "The time at which this media was uploaded. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "sizeBytes": { + "type": "string", + "description": "The size in bytes of this video.", + "format": "int64" + }, + "streams": { + "type": "array", + "description": "The list of video streams for this video. There might be several different streams available for a single video, either Flash or MPEG, of various sizes", + "items": { + "$ref": "Videostream" + } + }, + "summary": { + "type": "string", + "description": "A description, or caption, for this media." + }, + "updated": { + "type": "string", + "description": "The time at which this media was last updated. This includes changes to media metadata. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL for the page that hosts this media." + }, + "videoDuration": { + "type": "string", + "description": "The duration in milliseconds of this video.", + "format": "int64" + }, + "videoStatus": { + "type": "string", + "description": "The encoding status of this video. Possible values are: \n- \"PENDING\" - Video not yet processed. \n- \"FAILED\" - Video processing failed. \n- \"READY\" - A single video stream is playable. \n- \"FINAL\" - All video streams are playable." + }, + "width": { + "type": "integer", + "description": "The width in pixels of the original image.", + "format": "uint32" + } + } + }, + "PeopleFeed": { + "id": "PeopleFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The people in this page of results. Each item includes the id, displayName, image, and url for the person. To retrieve additional profile data, see the people.get method.", + "items": { + "$ref": "Person" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of people. Value: \"plus#peopleFeed\".", + "default": "plus#peopleFeed" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of people." + }, + "totalItems": { + "type": "integer", + "description": "The total number of people available in this list. The number of people in a response might be smaller due to paging. This might not be set for all collections.", + "format": "int32" + } + } + }, + "Person": { + "id": "Person", + "type": "object", + "properties": { + "aboutMe": { + "type": "string", + "description": "A short biography for this person." + }, + "birthday": { + "type": "string", + "description": "The person's date of birth, represented as YYYY-MM-DD." + }, + "braggingRights": { + "type": "string", + "description": "The \"bragging rights\" line of this person." + }, + "circledByCount": { + "type": "integer", + "description": "If a Google+ Page and for followers who are visible, the number of people who have added this page to a circle.", + "format": "int32" + }, + "cover": { + "type": "object", + "description": "The cover photo content.", + "properties": { + "coverInfo": { + "type": "object", + "description": "Extra information about the cover photo.", + "properties": { + "leftImageOffset": { + "type": "integer", + "description": "The difference between the left position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + }, + "topImageOffset": { + "type": "integer", + "description": "The difference between the top position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + } + } + }, + "coverPhoto": { + "type": "object", + "description": "The person's primary cover image.", + "properties": { + "height": { + "type": "integer", + "description": "The height of the image.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "The URL of the image." + }, + "width": { + "type": "integer", + "description": "The width of the image.", + "format": "int32" + } + } + }, + "layout": { + "type": "string", + "description": "The layout of the cover art. Possible values include, but are not limited to, the following values: \n- \"banner\" - One large image banner." + } + } + }, + "currentLocation": { + "type": "string", + "description": "The current location for this person." + }, + "displayName": { + "type": "string", + "description": "The name of this person, which is suitable for display." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "gender": { + "type": "string", + "description": "The person's gender. Possible values include, but are not limited to, the following values: \n- \"male\" - Male gender. \n- \"female\" - Female gender. \n- \"other\" - Other." + }, + "id": { + "type": "string", + "description": "The ID of this person." + }, + "image": { + "type": "object", + "description": "The representation of the person's profile photo.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the person's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "isPlusUser": { + "type": "boolean", + "description": "Whether this user has signed up for Google+." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a person. Value: \"plus#person\".", + "default": "plus#person" + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of a person's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this person." + }, + "formatted": { + "type": "string", + "description": "The full name of this person, including middle names, suffixes, etc." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this person." + }, + "honorificPrefix": { + "type": "string", + "description": "The honorific prefixes (such as \"Dr.\" or \"Mrs.\") for this person." + }, + "honorificSuffix": { + "type": "string", + "description": "The honorific suffixes (such as \"Jr.\") for this person." + }, + "middleName": { + "type": "string", + "description": "The middle name of this person." + } + } + }, + "nickname": { + "type": "string", + "description": "The nickname of this person." + }, + "objectType": { + "type": "string", + "description": "Type of person within Google+. Possible values include, but are not limited to, the following values: \n- \"person\" - represents an actual person. \n- \"page\" - represents a page." + }, + "organizations": { + "type": "array", + "description": "A list of current or past organizations with which this person is associated.", + "items": { + "type": "object", + "properties": { + "department": { + "type": "string", + "description": "The department within the organization. Deprecated." + }, + "description": { + "type": "string", + "description": "A short description of the person's role in this organization. Deprecated." + }, + "endDate": { + "type": "string", + "description": "The date that the person left this organization." + }, + "location": { + "type": "string", + "description": "The location of this organization. Deprecated." + }, + "name": { + "type": "string", + "description": "The name of the organization." + }, + "primary": { + "type": "boolean", + "description": "If \"true\", indicates this organization is the person's primary one, which is typically interpreted as the current one." + }, + "startDate": { + "type": "string", + "description": "The date that the person joined this organization." + }, + "title": { + "type": "string", + "description": "The person's job title or role within the organization." + }, + "type": { + "type": "string", + "description": "The type of organization. Possible values include, but are not limited to, the following values: \n- \"work\" - Work. \n- \"school\" - School." + } + } + } + }, + "placesLived": { + "type": "array", + "description": "A list of places where this person has lived.", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "If \"true\", this place of residence is this person's primary residence." + }, + "value": { + "type": "string", + "description": "A place where this person has lived. For example: \"Seattle, WA\", \"Near Toronto\"." + } + } + } + }, + "plusOneCount": { + "type": "integer", + "description": "If a Google+ Page, the number of people who have +1'd this page.", + "format": "int32" + }, + "relationshipStatus": { + "type": "string", + "description": "The person's relationship status. Possible values include, but are not limited to, the following values: \n- \"single\" - Person is single. \n- \"in_a_relationship\" - Person is in a relationship. \n- \"engaged\" - Person is engaged. \n- \"married\" - Person is married. \n- \"its_complicated\" - The relationship is complicated. \n- \"open_relationship\" - Person is in an open relationship. \n- \"widowed\" - Person is widowed. \n- \"in_domestic_partnership\" - Person is in a domestic partnership. \n- \"in_civil_union\" - Person is in a civil union." + }, + "tagline": { + "type": "string", + "description": "The brief description (tagline) of this person." + }, + "url": { + "type": "string", + "description": "The URL of this person's profile." + }, + "urls": { + "type": "array", + "description": "A list of URLs for this person.", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The label of the URL." + }, + "type": { + "type": "string", + "description": "The type of URL. Possible values include, but are not limited to, the following values: \n- \"otherProfile\" - URL for another profile. \n- \"contributor\" - URL to a site for which this person is a contributor. \n- \"website\" - URL for this Google+ Page's primary website. \n- \"other\" - Other URL." + }, + "value": { + "type": "string", + "description": "The URL value." + } + } + } + }, + "verified": { + "type": "boolean", + "description": "Whether the person or Google+ Page has been verified." + } + } + }, + "Place": { + "id": "Place", + "type": "object", + "properties": { + "address": { + "type": "object", + "description": "The physical address of the place.", + "properties": { + "formatted": { + "type": "string", + "description": "The formatted address for display." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name of the place." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a place. Value: \"plus#place\".", + "default": "plus#place" + }, + "position": { + "type": "object", + "description": "The position of the place.", + "properties": { + "latitude": { + "type": "number", + "description": "The latitude of this position.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude of this position.", + "format": "double" + } + } + } + } + }, + "PlusAclentryResource": { + "id": "PlusAclentryResource", + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "A descriptive name for this entry. Suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the entry. For entries of type \"person\" or \"circle\", this is the ID of the resource. For other types, this property is not set." + }, + "type": { + "type": "string", + "description": "The type of entry describing to whom access is granted. Possible values are: \n- \"person\" - Access to an individual. \n- \"circle\" - Access to members of a circle. \n- \"myCircles\" - Access to members of all the person's circles. \n- \"extendedCircles\" - Access to members of all the person's circles, plus all of the people in their circles. \n- \"domain\" - Access to members of the person's Google Apps domain. \n- \"public\" - Access to anyone on the web." + } + } + }, + "Videostream": { + "id": "Videostream", + "type": "object", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the video resource.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "MIME type of the video stream." + }, + "url": { + "type": "string", + "description": "URL of the video stream." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the video resource.", + "format": "int32" + } + } + } + }, + "resources": { + "activities": { + "methods": { + "get": { + "id": "plus.activities.get", + "path": "activities/{activityId}", + "httpMethod": "GET", + "description": "Get an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "insert": { + "id": "plus.activities.insert", + "path": "people/{userId}/activities", + "httpMethod": "POST", + "description": "Create a new activity for the authenticated user.", + "parameters": { + "preview": { + "type": "boolean", + "description": "If \"true\", extract the potential media attachments for a URL. The response will include all possible attachments for a URL, including video, photos, and articles based on the content of the page.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to create the activity on behalf of. Its value should be \"me\", to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "request": { + "$ref": "Activity" + }, + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.write" + ] + }, + "list": { + "id": "plus.activities.list", + "path": "people/{userId}/activities/{collection}", + "httpMethod": "GET", + "description": "List all of the activities in the specified collection for a particular user.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of activities to list.", + "required": true, + "enum": [ + "user" + ], + "enumDescriptions": [ + "All activities created by the specified user that the authenticated user is authorized to view." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "ActivityFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.read" + ] + } + } + }, + "audiences": { + "methods": { + "list": { + "id": "plus.audiences.list", + "path": "people/{userId}/audiences", + "httpMethod": "GET", + "description": "List all of the audiences to which a user can share.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get audiences for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "AudiencesFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + } + } + }, + "circles": { + "methods": { + "addPeople": { + "id": "plus.circles.addPeople", + "path": "circles/{circleId}/people", + "httpMethod": "PUT", + "description": "Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to add the person to.", + "required": true, + "location": "path" + }, + "email": { + "type": "string", + "description": "Email of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "IDs of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "get": { + "id": "plus.circles.get", + "path": "circles/{circleId}", + "httpMethod": "GET", + "description": "Get a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "insert": { + "id": "plus.circles.insert", + "path": "people/{userId}/circles", + "httpMethod": "POST", + "description": "Create a new circle for the authenticated user.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to create the circle on behalf of. The value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "list": { + "id": "plus.circles.list", + "path": "people/{userId}/circles", + "httpMethod": "GET", + "description": "List all of the circles for a user.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get circles for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "CircleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "patch": { + "id": "plus.circles.patch", + "path": "circles/{circleId}", + "httpMethod": "PATCH", + "description": "Update a circle's description. This method supports patch semantics.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "remove": { + "id": "plus.circles.remove", + "path": "circles/{circleId}", + "httpMethod": "DELETE", + "description": "Delete a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "removePeople": { + "id": "plus.circles.removePeople", + "path": "circles/{circleId}/people", + "httpMethod": "DELETE", + "description": "Remove a person from a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to remove the person from.", + "required": true, + "location": "path" + }, + "email": { + "type": "string", + "description": "Email of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "IDs of the people to remove from the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "update": { + "id": "plus.circles.update", + "path": "circles/{circleId}", + "httpMethod": "PUT", + "description": "Update a circle's description.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "comments": { + "methods": { + "get": { + "id": "plus.comments.get", + "path": "comments/{commentId}", + "httpMethod": "GET", + "description": "Get a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "insert": { + "id": "plus.comments.insert", + "path": "activities/{activityId}/comments", + "httpMethod": "POST", + "description": "Create a new comment in reply to an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to reply to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.write" + ] + }, + "list": { + "id": "plus.comments.list", + "path": "activities/{activityId}/comments", + "httpMethod": "GET", + "description": "List all of the comments for an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get comments for.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "The order in which to sort the list of comments.", + "default": "ascending", + "enum": [ + "ascending", + "descending" + ], + "enumDescriptions": [ + "Sort oldest comments first.", + "Sort newest comments first." + ], + "location": "query" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "CommentFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + } + } + }, + "media": { + "methods": { + "insert": { + "id": "plus.media.insert", + "path": "people/{userId}/media/{collection}", + "httpMethod": "POST", + "description": "Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or videos are less than 15 minutes in length.", + "parameters": { + "collection": { + "type": "string", + "required": true, + "enum": [ + "cloud" + ], + "enumDescriptions": [ + "Upload the media to share on Google+." + ], + "location": "path" + }, + "userId": { + "type": "string", + "description": "The ID of the user to create the activity on behalf of.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "request": { + "$ref": "Media" + }, + "response": { + "$ref": "Media" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.media.upload" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "image/*", + "video/*" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/plus/v1domains/people/{userId}/media/{collection}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/plus/v1domains/people/{userId}/media/{collection}" + } + } + } + } + } + }, + "people": { + "methods": { + "get": { + "id": "plus.people.get", + "path": "people/{userId}", + "httpMethod": "GET", + "description": "Get a person's profile.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "Person" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.profiles.read" + ] + }, + "list": { + "id": "plus.people.list", + "path": "people/{userId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "circled" + ], + "enumDescriptions": [ + "The list of people who this user has added to one or more circles." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "100", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "The order to return people in.", + "enum": [ + "alphabetical", + "best" + ], + "enumDescriptions": [ + "Order the people by their display name.", + "Order people based on the relevence to the viewer." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "listByActivity": { + "id": "plus.people.listByActivity", + "path": "activities/{activityId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection for a particular activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get the list of people for.", + "required": true, + "location": "path" + }, + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "plusoners", + "resharers", + "sharedto" + ], + "enumDescriptions": [ + "List all people who have +1'd this activity.", + "List all people who have reshared this activity.", + "List all people who this activity was shared to." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "activityId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "listByCircle": { + "id": "plus.people.listByCircle", + "path": "circles/{circleId}/people", + "httpMethod": "GET", + "description": "List all of the people who are members of a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to get the members of.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-gen.go b/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-gen.go new file mode 100644 index 0000000000000..f35ef3e084b3a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1domains/plus-gen.go @@ -0,0 +1,3029 @@ +// Package plus provides access to the Google+ API. +// +// See https://developers.google.com/+/api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/plus/v1domains" +// ... +// plusService, err := plus.New(oauthHttpClient) +package plus + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "plus:v1domains" +const apiName = "plus" +const apiVersion = "v1domains" +const basePath = "https://www.googleapis.com/plus/v1domains/" + +// OAuth2 scopes used by this API. +const ( + // View your circles and people in them + PlusCirclesReadScope = "https://www.googleapis.com/auth/plus.circles.read" + + // Manage your circles and add people + PlusCirclesWriteScope = "https://www.googleapis.com/auth/plus.circles.write" + + // Know your name, basic info, and list of people you're connected to on + // Google+ + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" + + // Know who you are on Google + PlusMeScope = "https://www.googleapis.com/auth/plus.me" + + // Send your photos and videos to Google+ + PlusMediaUploadScope = "https://www.googleapis.com/auth/plus.media.upload" + + // View your own Google+ profile and profiles shared with you + PlusProfilesReadScope = "https://www.googleapis.com/auth/plus.profiles.read" + + // View your posts, comments, and stream + PlusStreamReadScope = "https://www.googleapis.com/auth/plus.stream.read" + + // Manage your posts, comments, and stream + PlusStreamWriteScope = "https://www.googleapis.com/auth/plus.stream.write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Activities = NewActivitiesService(s) + s.Audiences = NewAudiencesService(s) + s.Circles = NewCirclesService(s) + s.Comments = NewCommentsService(s) + s.Media = NewMediaService(s) + s.People = NewPeopleService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Activities *ActivitiesService + + Audiences *AudiencesService + + Circles *CirclesService + + Comments *CommentsService + + Media *MediaService + + People *PeopleService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewAudiencesService(s *Service) *AudiencesService { + rs := &AudiencesService{s: s} + return rs +} + +type AudiencesService struct { + s *Service +} + +func NewCirclesService(s *Service) *CirclesService { + rs := &CirclesService{s: s} + return rs +} + +type CirclesService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewMediaService(s *Service) *MediaService { + rs := &MediaService{s: s} + return rs +} + +type MediaService struct { + s *Service +} + +func NewPeopleService(s *Service) *PeopleService { + rs := &PeopleService{s: s} + return rs +} + +type PeopleService struct { + s *Service +} + +type Acl struct { + // Description: Description of the access granted, suitable for display. + Description string `json:"description,omitempty"` + + // DomainRestricted: Whether access is restricted to the domain. + DomainRestricted bool `json:"domainRestricted,omitempty"` + + // Items: The list of access entries. + Items []*PlusAclentryResource `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of access controls. + // Value: "plus#acl". + Kind string `json:"kind,omitempty"` +} + +type Activity struct { + // Access: Identifies who has access to see this activity. + Access *Acl `json:"access,omitempty"` + + // Actor: The person who performed this activity. + Actor *ActivityActor `json:"actor,omitempty"` + + // Address: Street address where this activity occurred. + Address string `json:"address,omitempty"` + + // Annotation: Additional content added by the person who shared this + // activity, applicable only when resharing an activity. + Annotation string `json:"annotation,omitempty"` + + // CrosspostSource: If this activity is a crosspost from another system, + // this property specifies the ID of the original activity. + CrosspostSource string `json:"crosspostSource,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Geocode: Latitude and longitude where this activity occurred. Format + // is latitude followed by longitude, space separated. + Geocode string `json:"geocode,omitempty"` + + // Id: The ID of this activity. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as an activity. Value: + // "plus#activity". + Kind string `json:"kind,omitempty"` + + // Location: The location where this activity occurred. + Location *Place `json:"location,omitempty"` + + // Object: The object of this activity. + Object *ActivityObject `json:"object,omitempty"` + + // PlaceId: ID of the place where this activity occurred. + PlaceId string `json:"placeId,omitempty"` + + // PlaceName: Name of the place where this activity occurred. + PlaceName string `json:"placeName,omitempty"` + + // Provider: The service provider that initially published this + // activity. + Provider *ActivityProvider `json:"provider,omitempty"` + + // Published: The time at which this activity was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // Radius: Radius, in meters, of the region where this activity + // occurred, centered at the latitude and longitude identified in + // geocode. + Radius string `json:"radius,omitempty"` + + // Title: Title of this activity. + Title string `json:"title,omitempty"` + + // Updated: The time at which this activity was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Url: The link to this activity. + Url string `json:"url,omitempty"` + + // Verb: This activity's verb, which indicates the action that was + // performed. Possible values include, but are not limited to, the + // following values: + // - "post" - Publish content to the stream. + // - + // "share" - Reshare an activity. + Verb string `json:"verb,omitempty"` +} + +type ActivityActor struct { + // DisplayName: The name of the actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor's Person resource. + Id string `json:"id,omitempty"` + + // Image: The image representation of the actor. + Image *ActivityActorImage `json:"image,omitempty"` + + // Name: An object representation of the individual components of name. + Name *ActivityActorName `json:"name,omitempty"` + + // Url: The link to the actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type ActivityActorName struct { + // FamilyName: The family name ("last name") of the actor. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name ("first name") of the actor. + GivenName string `json:"givenName,omitempty"` +} + +type ActivityObject struct { + // Actor: If this activity's object is itself another activity, such as + // when a person reshares an activity, this property specifies the + // original activity's actor. + Actor *ActivityObjectActor `json:"actor,omitempty"` + + // Attachments: The media objects attached to this activity. + Attachments []*ActivityObjectAttachments `json:"attachments,omitempty"` + + // Content: The HTML-formatted content, which is suitable for display. + Content string `json:"content,omitempty"` + + // Id: The ID of the object. When resharing an activity, this is the ID + // of the activity that is being reshared. + Id string `json:"id,omitempty"` + + // ObjectType: The type of the object. Possible values include, but are + // not limited to, the following values: + // - "note" - Textual content. + // + // - "activity" - A Google+ activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, which + // is stored without any HTML formatting. When creating or updating an + // activity, this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` + + // Plusoners: People who +1'd this activity. + Plusoners *ActivityObjectPlusoners `json:"plusoners,omitempty"` + + // Replies: Comments in reply to this activity. + Replies *ActivityObjectReplies `json:"replies,omitempty"` + + // Resharers: People who reshared this activity. + Resharers *ActivityObjectResharers `json:"resharers,omitempty"` + + // StatusForViewer: Status of the activity as seen by the viewer. + StatusForViewer *ActivityObjectStatusForViewer `json:"statusForViewer,omitempty"` + + // Url: The URL that points to the linked resource. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActor struct { + // DisplayName: The original actor's name, which is suitable for + // display. + DisplayName string `json:"displayName,omitempty"` + + // Id: ID of the original actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of the original actor. + Image *ActivityObjectActorImage `json:"image,omitempty"` + + // Url: A link to the original actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActorImage struct { + // Url: A URL that points to a thumbnail photo of the original actor. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachments struct { + // Content: If the attachment is an article, this property contains a + // snippet of text from the article. It can also include descriptions + // for other types. + Content string `json:"content,omitempty"` + + // DisplayName: The title of the attachment, such as a photo caption or + // an article title. + DisplayName string `json:"displayName,omitempty"` + + // Embed: If the attachment is a video, the embeddable link. + Embed *ActivityObjectAttachmentsEmbed `json:"embed,omitempty"` + + // FullImage: The full image URL for photo attachments. + FullImage *ActivityObjectAttachmentsFullImage `json:"fullImage,omitempty"` + + // Id: The ID of the attachment. + Id string `json:"id,omitempty"` + + // Image: The preview image for photos or videos. + Image *ActivityObjectAttachmentsImage `json:"image,omitempty"` + + // ObjectType: The type of media object. Possible values include, but + // are not limited to, the following values: + // - "photo" - A photo. + // - + // "album" - A photo album. + // - "video" - A video. + // - "article" - An + // article, specified by a link. + ObjectType string `json:"objectType,omitempty"` + + // PreviewThumbnails: When previewing, these are the optional thumbnails + // for the post. When posting an article, choose one by setting the + // attachment.image.url property. If you don't choose one, one will be + // chosen for you. + PreviewThumbnails []*ActivityObjectAttachmentsPreviewThumbnails `json:"previewThumbnails,omitempty"` + + // Thumbnails: If the attachment is an album, this property is a list of + // potential additional thumbnails from the album. + Thumbnails []*ActivityObjectAttachmentsThumbnails `json:"thumbnails,omitempty"` + + // Url: The link to the attachment; should be of type text/html. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsEmbed struct { + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the link. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsFullImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image URL. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsPreviewThumbnails struct { + // Url: URL of the thumbnail image. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsThumbnails struct { + // Description: Potential name of the thumbnail. + Description string `json:"description,omitempty"` + + // Image: Image resource. + Image *ActivityObjectAttachmentsThumbnailsImage `json:"image,omitempty"` + + // Url: URL of the webpage containing the image. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsThumbnailsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image url. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectPlusoners struct { + // SelfLink: The URL for the collection of people who +1'd this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who +1'd this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectReplies struct { + // SelfLink: The URL for the collection of comments in reply to this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of comments on this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectResharers struct { + // SelfLink: The URL for the collection of resharers. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who reshared this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectStatusForViewer struct { + // CanComment: Whether the viewer can comment on the activity. + CanComment bool `json:"canComment,omitempty"` + + // CanPlusone: Whether the viewer can +1 the activity. + CanPlusone bool `json:"canPlusone,omitempty"` + + // IsPlusOned: Whether the viewer has +1'd the activity. + IsPlusOned bool `json:"isPlusOned,omitempty"` + + // ResharingDisabled: Whether reshares are disabled for the activity. + ResharingDisabled bool `json:"resharingDisabled,omitempty"` +} + +type ActivityProvider struct { + // Title: Name of the service provider. + Title string `json:"title,omitempty"` +} + +type ActivityFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of activities. Deprecated. + Id string `json:"id,omitempty"` + + // Items: The activities in this page of results. + Items []*Activity `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of activities. Value: + // "plus#activityFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this activities resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of activities, which is a + // truncated portion of the content. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of activities was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type Audience struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Item: The access control list entry. + Item *PlusAclentryResource `json:"item,omitempty"` + + // Kind: Identifies this resource as an audience. Value: + // "plus#audience". + Kind string `json:"kind,omitempty"` + + // Visibility: The circle members' visibility as chosen by the owner of + // the circle. This only applies for items with "item.type" equals + // "circle". Possible values are: + // - "public" - Members are visible to + // the public. + // - "limited" - Members are visible to a limited audience. + // + // - "private" - Members are visible to the owner only. + Visibility string `json:"visibility,omitempty"` +} + +type AudiencesFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The audiences in this result. + Items []*Audience `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of audiences. Value: + // "plus#audienceFeed". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: The total number of ACL entries. The number of entries in + // this response may be smaller due to paging. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Circle struct { + // Description: The description of this circle. + Description string `json:"description,omitempty"` + + // DisplayName: The circle name. + DisplayName string `json:"displayName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of the circle. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as a circle. Value: "plus#circle". + Kind string `json:"kind,omitempty"` + + // People: The people in this circle. + People *CirclePeople `json:"people,omitempty"` + + // SelfLink: Link to this circle resource + SelfLink string `json:"selfLink,omitempty"` +} + +type CirclePeople struct { + // TotalItems: The total number of people in this circle. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type CircleFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The circles in this page of results. + Items []*Circle `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of circles. Value: + // "plus#circleFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of circles. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this page of circles. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this list of resources. + Title string `json:"title,omitempty"` + + // TotalItems: The total number of circles. The number of circles in + // this response may be smaller due to paging. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Comment struct { + // Actor: The person who posted this comment. + Actor *CommentActor `json:"actor,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this comment. + Id string `json:"id,omitempty"` + + // InReplyTo: The activity this comment replied to. + InReplyTo []*CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: Identifies this resource as a comment. Value: "plus#comment". + Kind string `json:"kind,omitempty"` + + // Object: The object of this comment. + Object *CommentObject `json:"object,omitempty"` + + // Plusoners: People who +1'd this comment. + Plusoners *CommentPlusoners `json:"plusoners,omitempty"` + + // Published: The time at which this comment was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // SelfLink: Link to this comment resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: The time at which this comment was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Verb: This comment's verb, indicating what action was performed. + // Possible values are: + // - "post" - Publish content to the stream. + Verb string `json:"verb,omitempty"` +} + +type CommentActor struct { + // DisplayName: The name of this actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of this actor. + Image *CommentActorImage `json:"image,omitempty"` + + // Url: A link to the Person resource for this actor. + Url string `json:"url,omitempty"` +} + +type CommentActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The ID of the activity. + Id string `json:"id,omitempty"` + + // Url: The URL of the activity. + Url string `json:"url,omitempty"` +} + +type CommentObject struct { + // Content: The HTML-formatted content, suitable for display. + Content string `json:"content,omitempty"` + + // ObjectType: The object type of this comment. Possible values are: + // - + // "comment" - A comment in reply to an activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, stored + // without any HTML formatting. When creating or updating a comment, + // this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` +} + +type CommentPlusoners struct { + // TotalItems: Total number of people who +1'd this comment. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type CommentFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of comments. + Id string `json:"id,omitempty"` + + // Items: The comments in this page of results. + Items []*Comment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of comments. Value: + // "plus#commentFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Title: The title of this collection of comments. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of comments was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type Media struct { + // Author: The person who uploaded this media. + Author *MediaAuthor `json:"author,omitempty"` + + // DisplayName: The display name for this media. + DisplayName string `json:"displayName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Exif: Exif information of the media item. + Exif *MediaExif `json:"exif,omitempty"` + + // Height: The height in pixels of the original image. + Height int64 `json:"height,omitempty"` + + // Id: ID of this media, which is generated by the API. + Id string `json:"id,omitempty"` + + // Kind: The type of resource. + Kind string `json:"kind,omitempty"` + + // MediaUrl: The URL of this photo or video's still image. + MediaUrl string `json:"mediaUrl,omitempty"` + + // Published: The time at which this media was uploaded. Formatted as an + // RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // SizeBytes: The size in bytes of this video. + SizeBytes int64 `json:"sizeBytes,omitempty,string"` + + // Streams: The list of video streams for this video. There might be + // several different streams available for a single video, either Flash + // or MPEG, of various sizes + Streams []*Videostream `json:"streams,omitempty"` + + // Summary: A description, or caption, for this media. + Summary string `json:"summary,omitempty"` + + // Updated: The time at which this media was last updated. This includes + // changes to media metadata. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Url: The URL for the page that hosts this media. + Url string `json:"url,omitempty"` + + // VideoDuration: The duration in milliseconds of this video. + VideoDuration int64 `json:"videoDuration,omitempty,string"` + + // VideoStatus: The encoding status of this video. Possible values are: + // + // - "PENDING" - Video not yet processed. + // - "FAILED" - Video + // processing failed. + // - "READY" - A single video stream is playable. + // - + // "FINAL" - All video streams are playable. + VideoStatus string `json:"videoStatus,omitempty"` + + // Width: The width in pixels of the original image. + Width int64 `json:"width,omitempty"` +} + +type MediaAuthor struct { + // DisplayName: The author's name. + DisplayName string `json:"displayName,omitempty"` + + // Id: ID of the author. + Id string `json:"id,omitempty"` + + // Image: The author's Google profile image. + Image *MediaAuthorImage `json:"image,omitempty"` + + // Url: A link to the author's Google profile. + Url string `json:"url,omitempty"` +} + +type MediaAuthorImage struct { + // Url: The URL of the author's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type MediaExif struct { + // Time: The time the media was captured. Formatted as an RFC 3339 + // timestamp. + Time string `json:"time,omitempty"` +} + +type PeopleFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The people in this page of results. Each item includes the id, + // displayName, image, and url for the person. To retrieve additional + // profile data, see the people.get method. + Items []*Person `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of people. Value: + // "plus#peopleFeed". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of people. + Title string `json:"title,omitempty"` + + // TotalItems: The total number of people available in this list. The + // number of people in a response might be smaller due to paging. This + // might not be set for all collections. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Person struct { + // AboutMe: A short biography for this person. + AboutMe string `json:"aboutMe,omitempty"` + + // Birthday: The person's date of birth, represented as YYYY-MM-DD. + Birthday string `json:"birthday,omitempty"` + + // BraggingRights: The "bragging rights" line of this person. + BraggingRights string `json:"braggingRights,omitempty"` + + // CircledByCount: If a Google+ Page and for followers who are visible, + // the number of people who have added this page to a circle. + CircledByCount int64 `json:"circledByCount,omitempty"` + + // Cover: The cover photo content. + Cover *PersonCover `json:"cover,omitempty"` + + // CurrentLocation: The current location for this person. + CurrentLocation string `json:"currentLocation,omitempty"` + + // DisplayName: The name of this person, which is suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Gender: The person's gender. Possible values include, but are not + // limited to, the following values: + // - "male" - Male gender. + // - + // "female" - Female gender. + // - "other" - Other. + Gender string `json:"gender,omitempty"` + + // Id: The ID of this person. + Id string `json:"id,omitempty"` + + // Image: The representation of the person's profile photo. + Image *PersonImage `json:"image,omitempty"` + + // IsPlusUser: Whether this user has signed up for Google+. + IsPlusUser bool `json:"isPlusUser,omitempty"` + + // Kind: Identifies this resource as a person. Value: "plus#person". + Kind string `json:"kind,omitempty"` + + // Name: An object representation of the individual components of a + // person's name. + Name *PersonName `json:"name,omitempty"` + + // Nickname: The nickname of this person. + Nickname string `json:"nickname,omitempty"` + + // ObjectType: Type of person within Google+. Possible values include, + // but are not limited to, the following values: + // - "person" - + // represents an actual person. + // - "page" - represents a page. + ObjectType string `json:"objectType,omitempty"` + + // Organizations: A list of current or past organizations with which + // this person is associated. + Organizations []*PersonOrganizations `json:"organizations,omitempty"` + + // PlacesLived: A list of places where this person has lived. + PlacesLived []*PersonPlacesLived `json:"placesLived,omitempty"` + + // PlusOneCount: If a Google+ Page, the number of people who have +1'd + // this page. + PlusOneCount int64 `json:"plusOneCount,omitempty"` + + // RelationshipStatus: The person's relationship status. Possible values + // include, but are not limited to, the following values: + // - "single" - + // Person is single. + // - "in_a_relationship" - Person is in a + // relationship. + // - "engaged" - Person is engaged. + // - "married" - Person + // is married. + // - "its_complicated" - The relationship is complicated. + // + // - "open_relationship" - Person is in an open relationship. + // - + // "widowed" - Person is widowed. + // - "in_domestic_partnership" - Person + // is in a domestic partnership. + // - "in_civil_union" - Person is in a + // civil union. + RelationshipStatus string `json:"relationshipStatus,omitempty"` + + // Tagline: The brief description (tagline) of this person. + Tagline string `json:"tagline,omitempty"` + + // Url: The URL of this person's profile. + Url string `json:"url,omitempty"` + + // Urls: A list of URLs for this person. + Urls []*PersonUrls `json:"urls,omitempty"` + + // Verified: Whether the person or Google+ Page has been verified. + Verified bool `json:"verified,omitempty"` +} + +type PersonCover struct { + // CoverInfo: Extra information about the cover photo. + CoverInfo *PersonCoverCoverInfo `json:"coverInfo,omitempty"` + + // CoverPhoto: The person's primary cover image. + CoverPhoto *PersonCoverCoverPhoto `json:"coverPhoto,omitempty"` + + // Layout: The layout of the cover art. Possible values include, but are + // not limited to, the following values: + // - "banner" - One large image + // banner. + Layout string `json:"layout,omitempty"` +} + +type PersonCoverCoverInfo struct { + // LeftImageOffset: The difference between the left position of the + // cover image and the actual displayed cover image. Only valid for + // banner layout. + LeftImageOffset int64 `json:"leftImageOffset,omitempty"` + + // TopImageOffset: The difference between the top position of the cover + // image and the actual displayed cover image. Only valid for banner + // layout. + TopImageOffset int64 `json:"topImageOffset,omitempty"` +} + +type PersonCoverCoverPhoto struct { + // Height: The height of the image. + Height int64 `json:"height,omitempty"` + + // Url: The URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width of the image. + Width int64 `json:"width,omitempty"` +} + +type PersonImage struct { + // Url: The URL of the person's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type PersonName struct { + // FamilyName: The family name (last name) of this person. + FamilyName string `json:"familyName,omitempty"` + + // Formatted: The full name of this person, including middle names, + // suffixes, etc. + Formatted string `json:"formatted,omitempty"` + + // GivenName: The given name (first name) of this person. + GivenName string `json:"givenName,omitempty"` + + // HonorificPrefix: The honorific prefixes (such as "Dr." or "Mrs.") for + // this person. + HonorificPrefix string `json:"honorificPrefix,omitempty"` + + // HonorificSuffix: The honorific suffixes (such as "Jr.") for this + // person. + HonorificSuffix string `json:"honorificSuffix,omitempty"` + + // MiddleName: The middle name of this person. + MiddleName string `json:"middleName,omitempty"` +} + +type PersonOrganizations struct { + // Department: The department within the organization. Deprecated. + Department string `json:"department,omitempty"` + + // Description: A short description of the person's role in this + // organization. Deprecated. + Description string `json:"description,omitempty"` + + // EndDate: The date that the person left this organization. + EndDate string `json:"endDate,omitempty"` + + // Location: The location of this organization. Deprecated. + Location string `json:"location,omitempty"` + + // Name: The name of the organization. + Name string `json:"name,omitempty"` + + // Primary: If "true", indicates this organization is the person's + // primary one, which is typically interpreted as the current one. + Primary bool `json:"primary,omitempty"` + + // StartDate: The date that the person joined this organization. + StartDate string `json:"startDate,omitempty"` + + // Title: The person's job title or role within the organization. + Title string `json:"title,omitempty"` + + // Type: The type of organization. Possible values include, but are not + // limited to, the following values: + // - "work" - Work. + // - "school" - + // School. + Type string `json:"type,omitempty"` +} + +type PersonPlacesLived struct { + // Primary: If "true", this place of residence is this person's primary + // residence. + Primary bool `json:"primary,omitempty"` + + // Value: A place where this person has lived. For example: "Seattle, + // WA", "Near Toronto". + Value string `json:"value,omitempty"` +} + +type PersonUrls struct { + // Label: The label of the URL. + Label string `json:"label,omitempty"` + + // Type: The type of URL. Possible values include, but are not limited + // to, the following values: + // - "otherProfile" - URL for another + // profile. + // - "contributor" - URL to a site for which this person is a + // contributor. + // - "website" - URL for this Google+ Page's primary + // website. + // - "other" - Other URL. + Type string `json:"type,omitempty"` + + // Value: The URL value. + Value string `json:"value,omitempty"` +} + +type Place struct { + // Address: The physical address of the place. + Address *PlaceAddress `json:"address,omitempty"` + + // DisplayName: The display name of the place. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Identifies this resource as a place. Value: "plus#place". + Kind string `json:"kind,omitempty"` + + // Position: The position of the place. + Position *PlacePosition `json:"position,omitempty"` +} + +type PlaceAddress struct { + // Formatted: The formatted address for display. + Formatted string `json:"formatted,omitempty"` +} + +type PlacePosition struct { + // Latitude: The latitude of this position. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude of this position. + Longitude float64 `json:"longitude,omitempty"` +} + +type PlusAclentryResource struct { + // DisplayName: A descriptive name for this entry. Suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the entry. For entries of type "person" or "circle", + // this is the ID of the resource. For other types, this property is not + // set. + Id string `json:"id,omitempty"` + + // Type: The type of entry describing to whom access is granted. + // Possible values are: + // - "person" - Access to an individual. + // - + // "circle" - Access to members of a circle. + // - "myCircles" - Access to + // members of all the person's circles. + // - "extendedCircles" - Access to + // members of all the person's circles, plus all of the people in their + // circles. + // - "domain" - Access to members of the person's Google Apps + // domain. + // - "public" - Access to anyone on the web. + Type string `json:"type,omitempty"` +} + +type Videostream struct { + // Height: The height, in pixels, of the video resource. + Height int64 `json:"height,omitempty"` + + // Type: MIME type of the video stream. + Type string `json:"type,omitempty"` + + // Url: URL of the video stream. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the video resource. + Width int64 `json:"width,omitempty"` +} + +// method id "plus.activities.get": + +type ActivitiesGetCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// Get: Get an activity. +func (r *ActivitiesService) Get(activityId string) *ActivitiesGetCall { + c := &ActivitiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +func (c *ActivitiesGetCall) Do() (*Activity, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "activities/{activityId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get an activity.", + // "httpMethod": "GET", + // "id": "plus.activities.get", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}", + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plus.activities.insert": + +type ActivitiesInsertCall struct { + s *Service + userId string + activity *Activity + opt_ map[string]interface{} +} + +// Insert: Create a new activity for the authenticated user. +func (r *ActivitiesService) Insert(userId string, activity *Activity) *ActivitiesInsertCall { + c := &ActivitiesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.activity = activity + return c +} + +// Preview sets the optional parameter "preview": If "true", extract the +// potential media attachments for a URL. The response will include all +// possible attachments for a URL, including video, photos, and articles +// based on the content of the page. +func (c *ActivitiesInsertCall) Preview(preview bool) *ActivitiesInsertCall { + c.opt_["preview"] = preview + return c +} + +func (c *ActivitiesInsertCall) Do() (*Activity, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.activity) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["preview"]; ok { + params.Set("preview", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/activities") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new activity for the authenticated user.", + // "httpMethod": "POST", + // "id": "plus.activities.insert", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "preview": { + // "description": "If \"true\", extract the potential media attachments for a URL. The response will include all possible attachments for a URL, including video, photos, and articles based on the content of the page.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "The ID of the user to create the activity on behalf of. Its value should be \"me\", to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities", + // "request": { + // "$ref": "Activity" + // }, + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.write" + // ] + // } + +} + +// method id "plus.activities.list": + +type ActivitiesListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the activities in the specified collection for a +// particular user. +func (r *ActivitiesService) List(userId string, collection string) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *ActivitiesListCall) PageToken(pageToken string) *ActivitiesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ActivitiesListCall) Do() (*ActivityFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/activities/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ActivityFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the activities in the specified collection for a particular user.", + // "httpMethod": "GET", + // "id": "plus.activities.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of activities to list.", + // "enum": [ + // "user" + // ], + // "enumDescriptions": [ + // "All activities created by the specified user that the authenticated user is authorized to view." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities/{collection}", + // "response": { + // "$ref": "ActivityFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plus.audiences.list": + +type AudiencesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: List all of the audiences to which a user can share. +func (r *AudiencesService) List(userId string) *AudiencesListCall { + c := &AudiencesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of circles to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *AudiencesListCall) MaxResults(maxResults int64) *AudiencesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *AudiencesListCall) PageToken(pageToken string) *AudiencesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AudiencesListCall) Do() (*AudiencesFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/audiences") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AudiencesFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the audiences to which a user can share.", + // "httpMethod": "GET", + // "id": "plus.audiences.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "maxResults": { + // "default": "20", + // "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get audiences for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/audiences", + // "response": { + // "$ref": "AudiencesFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.circles.addPeople": + +type CirclesAddPeopleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// AddPeople: Add a person to a circle. Google+ limits certain circle +// operations, including the number of circle adds. Learn More. +func (r *CirclesService) AddPeople(circleId string) *CirclesAddPeopleCall { + c := &CirclesAddPeopleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// Email sets the optional parameter "email": Email of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesAddPeopleCall) Email(email string) *CirclesAddPeopleCall { + c.opt_["email"] = email + return c +} + +// UserId sets the optional parameter "userId": IDs of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesAddPeopleCall) UserId(userId string) *CirclesAddPeopleCall { + c.opt_["userId"] = userId + return c +} + +func (c *CirclesAddPeopleCall) Do() (*Circle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["email"]; ok { + params.Set("email", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.", + // "httpMethod": "PUT", + // "id": "plus.circles.addPeople", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to add the person to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "email": { + // "description": "Email of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "IDs of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.circles.get": + +type CirclesGetCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// Get: Get a circle. +func (r *CirclesService) Get(circleId string) *CirclesGetCall { + c := &CirclesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +func (c *CirclesGetCall) Do() (*Circle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a circle.", + // "httpMethod": "GET", + // "id": "plus.circles.get", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.circles.insert": + +type CirclesInsertCall struct { + s *Service + userId string + circle *Circle + opt_ map[string]interface{} +} + +// Insert: Create a new circle for the authenticated user. +func (r *CirclesService) Insert(userId string, circle *Circle) *CirclesInsertCall { + c := &CirclesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.circle = circle + return c +} + +func (c *CirclesInsertCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/circles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new circle for the authenticated user.", + // "httpMethod": "POST", + // "id": "plus.circles.insert", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to create the circle on behalf of. The value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/circles", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.circles.list": + +type CirclesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: List all of the circles for a user. +func (r *CirclesService) List(userId string) *CirclesListCall { + c := &CirclesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of circles to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *CirclesListCall) MaxResults(maxResults int64) *CirclesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *CirclesListCall) PageToken(pageToken string) *CirclesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CirclesListCall) Do() (*CircleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/circles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CircleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the circles for a user.", + // "httpMethod": "GET", + // "id": "plus.circles.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "maxResults": { + // "default": "20", + // "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get circles for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/circles", + // "response": { + // "$ref": "CircleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.circles.patch": + +type CirclesPatchCall struct { + s *Service + circleId string + circle *Circle + opt_ map[string]interface{} +} + +// Patch: Update a circle's description. This method supports patch +// semantics. +func (r *CirclesService) Patch(circleId string, circle *Circle) *CirclesPatchCall { + c := &CirclesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + c.circle = circle + return c +} + +func (c *CirclesPatchCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a circle's description. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "plus.circles.patch", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.circles.remove": + +type CirclesRemoveCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// Remove: Delete a circle. +func (r *CirclesService) Remove(circleId string) *CirclesRemoveCall { + c := &CirclesRemoveCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +func (c *CirclesRemoveCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a circle.", + // "httpMethod": "DELETE", + // "id": "plus.circles.remove", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.circles.removePeople": + +type CirclesRemovePeopleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// RemovePeople: Remove a person from a circle. +func (r *CirclesService) RemovePeople(circleId string) *CirclesRemovePeopleCall { + c := &CirclesRemovePeopleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// Email sets the optional parameter "email": Email of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesRemovePeopleCall) Email(email string) *CirclesRemovePeopleCall { + c.opt_["email"] = email + return c +} + +// UserId sets the optional parameter "userId": IDs of the people to +// remove from the circle. Optional, can be repeated. +func (c *CirclesRemovePeopleCall) UserId(userId string) *CirclesRemovePeopleCall { + c.opt_["userId"] = userId + return c +} + +func (c *CirclesRemovePeopleCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["email"]; ok { + params.Set("email", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove a person from a circle.", + // "httpMethod": "DELETE", + // "id": "plus.circles.removePeople", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to remove the person from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "email": { + // "description": "Email of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "IDs of the people to remove from the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.circles.update": + +type CirclesUpdateCall struct { + s *Service + circleId string + circle *Circle + opt_ map[string]interface{} +} + +// Update: Update a circle's description. +func (r *CirclesService) Update(circleId string, circle *Circle) *CirclesUpdateCall { + c := &CirclesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + c.circle = circle + return c +} + +func (c *CirclesUpdateCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a circle's description.", + // "httpMethod": "PUT", + // "id": "plus.circles.update", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plus.comments.get": + +type CommentsGetCall struct { + s *Service + commentId string + opt_ map[string]interface{} +} + +// Get: Get a comment. +func (r *CommentsService) Get(commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a comment.", + // "httpMethod": "GET", + // "id": "plus.comments.get", + // "parameterOrder": [ + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plus.comments.insert": + +type CommentsInsertCall struct { + s *Service + activityId string + comment *Comment + opt_ map[string]interface{} +} + +// Insert: Create a new comment in reply to an activity. +func (r *CommentsService) Insert(activityId string, comment *Comment) *CommentsInsertCall { + c := &CommentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.comment = comment + return c +} + +func (c *CommentsInsertCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new comment in reply to an activity.", + // "httpMethod": "POST", + // "id": "plus.comments.insert", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to reply to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.write" + // ] + // } + +} + +// method id "plus.comments.list": + +type CommentsListCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// List: List all of the comments for an activity. +func (r *CommentsService) List(activityId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of comments to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortOrder sets the optional parameter "sortOrder": The order in which +// to sort the list of comments. +func (c *CommentsListCall) SortOrder(sortOrder string) *CommentsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *CommentsListCall) Do() (*CommentFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the comments for an activity.", + // "httpMethod": "GET", + // "id": "plus.comments.list", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get comments for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "ascending", + // "description": "The order in which to sort the list of comments.", + // "enum": [ + // "ascending", + // "descending" + // ], + // "enumDescriptions": [ + // "Sort oldest comments first.", + // "Sort newest comments first." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "response": { + // "$ref": "CommentFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plus.media.insert": + +type MediaInsertCall struct { + s *Service + userId string + collection string + media *Media + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Add a new media item to an album. The current upload size +// limitations are 36MB for a photo and 1GB for a video. Uploads do not +// count against quota if photos are less than 2048 pixels on their +// longest side or videos are less than 15 minutes in length. +func (r *MediaService) Insert(userId string, collection string, media *Media) *MediaInsertCall { + c := &MediaInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + c.media = media + return c +} +func (c *MediaInsertCall) Media(r io.Reader) *MediaInsertCall { + c.media_ = r + return c +} + +func (c *MediaInsertCall) Do() (*Media, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.media) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/media/{collection}") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Media) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or videos are less than 15 minutes in length.", + // "httpMethod": "POST", + // "id": "plus.media.insert", + // "mediaUpload": { + // "accept": [ + // "image/*", + // "video/*" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/plus/v1domains/people/{userId}/media/{collection}" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/plus/v1domains/people/{userId}/media/{collection}" + // } + // } + // }, + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "enum": [ + // "cloud" + // ], + // "enumDescriptions": [ + // "Upload the media to share on Google+." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to create the activity on behalf of.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/media/{collection}", + // "request": { + // "$ref": "Media" + // }, + // "response": { + // "$ref": "Media" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.media.upload" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "plus.people.get": + +type PeopleGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Get a person's profile. +func (r *PeopleService) Get(userId string) *PeopleGetCall { + c := &PeopleGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *PeopleGetCall) Do() (*Person, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Person) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a person's profile.", + // "httpMethod": "GET", + // "id": "plus.people.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}", + // "response": { + // "$ref": "Person" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.profiles.read" + // ] + // } + +} + +// method id "plus.people.list": + +type PeopleListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the people in the specified collection. +func (r *PeopleService) List(userId string, collection string) *PeopleListCall { + c := &PeopleListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListCall) MaxResults(maxResults int64) *PeopleListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": The order to return +// people in. +func (c *PeopleListCall) OrderBy(orderBy string) *PeopleListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListCall) PageToken(pageToken string) *PeopleListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "people/{userId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection.", + // "httpMethod": "GET", + // "id": "plus.people.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "circled" + // ], + // "enumDescriptions": [ + // "The list of people who this user has added to one or more circles." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "The order to return people in.", + // "enum": [ + // "alphabetical", + // "best" + // ], + // "enumDescriptions": [ + // "Order the people by their display name.", + // "Order people based on the relevence to the viewer." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plus.people.listByActivity": + +type PeopleListByActivityCall struct { + s *Service + activityId string + collection string + opt_ map[string]interface{} +} + +// ListByActivity: List all of the people in the specified collection +// for a particular activity. +func (r *PeopleService) ListByActivity(activityId string, collection string) *PeopleListByActivityCall { + c := &PeopleListByActivityCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListByActivityCall) MaxResults(maxResults int64) *PeopleListByActivityCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListByActivityCall) PageToken(pageToken string) *PeopleListByActivityCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListByActivityCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "activities/{activityId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection for a particular activity.", + // "httpMethod": "GET", + // "id": "plus.people.listByActivity", + // "parameterOrder": [ + // "activityId", + // "collection" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get the list of people for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "plusoners", + // "resharers", + // "sharedto" + // ], + // "enumDescriptions": [ + // "List all people who have +1'd this activity.", + // "List all people who have reshared this activity.", + // "List all people who this activity was shared to." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plus.people.listByCircle": + +type PeopleListByCircleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// ListByCircle: List all of the people who are members of a circle. +func (r *PeopleService) ListByCircle(circleId string) *PeopleListByCircleCall { + c := &PeopleListByCircleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListByCircleCall) MaxResults(maxResults int64) *PeopleListByCircleCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListByCircleCall) PageToken(pageToken string) *PeopleListByCircleCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListByCircleCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1domains/", "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer res.Body.Close() + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people who are members of a circle.", + // "httpMethod": "GET", + // "id": "plus.people.listByCircle", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to get the members of.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-api.json b/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-api.json new file mode 100644 index 0000000000000..19a5797800262 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-api.json @@ -0,0 +1,409 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"-vXktEC13RBC5q_wkxEsszrjKM4/fRqXZNx5yvahLJC3dn8LITx-zWM\"", + "discoveryVersion": "v1", + "id": "plus:v1moments", + "name": "plus", + "version": "v1moments", + "revision": "20121127", + "title": "Google+ API", + "description": "The Google+ API enables developers to build on top of the Google+ platform.", + "icons": { + "x16": "http://www.google.com/images/icons/product/gplus-16.png", + "x32": "http://www.google.com/images/icons/product/gplus-32.png" + }, + "documentationLink": "https://developers.google.com/+/history/", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/plus/v1moments/people/", + "basePath": "/plus/v1moments/people/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "plus/v1moments/people/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "ItemScope": { + "id": "ItemScope", + "type": "object", + "properties": { + "about": { + "$ref": "ItemScope", + "description": "The subject matter of the content." + }, + "additionalName": { + "type": "array", + "description": "An additional name for a Person, can be used for a middle name.", + "items": { + "type": "string" + } + }, + "address": { + "$ref": "ItemScope", + "description": "Postal address." + }, + "addressCountry": { + "type": "string", + "description": "Address country." + }, + "addressLocality": { + "type": "string", + "description": "Address locality." + }, + "addressRegion": { + "type": "string", + "description": "Address region." + }, + "associated_media": { + "type": "array", + "description": "The encoding.", + "items": { + "$ref": "ItemScope" + } + }, + "attendeeCount": { + "type": "integer", + "description": "Number of attendees.", + "format": "int32" + }, + "attendees": { + "type": "array", + "description": "A person attending the event.", + "items": { + "$ref": "ItemScope" + } + }, + "audio": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, the audio file." + }, + "author": { + "type": "array", + "description": "The person or persons who created this result. In the example of restaurant reviews, this might be the reviewer's name.", + "items": { + "$ref": "ItemScope" + } + }, + "bestRating": { + "type": "string", + "description": "Best possible rating value that a result might obtain. This property defines the upper bound for the ratingValue. For example, you might have a 5 star rating scale, you would provide 5 as the value for this property." + }, + "birthDate": { + "type": "string", + "description": "Date of birth." + }, + "byArtist": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, the artist that performed this recording." + }, + "caption": { + "type": "string", + "description": "The caption for this object." + }, + "contentSize": { + "type": "string", + "description": "File size in (mega/kilo) bytes." + }, + "contentUrl": { + "type": "string", + "description": "Actual bytes of the media object, for example the image file or video file." + }, + "contributor": { + "type": "array", + "description": "A list of contributors to this result.", + "items": { + "$ref": "ItemScope" + } + }, + "dateCreated": { + "type": "string", + "description": "The date the result was created such as the date that a review was first created." + }, + "dateModified": { + "type": "string", + "description": "The date the result was last modified such as the date that a review was last edited." + }, + "datePublished": { + "type": "string", + "description": "The initial date that the result was published. For example, a user writes a comment on a blog, which has a result.dateCreated of when they submit it. If the blog users comment moderation, the result.datePublished value would match the date when the owner approved the message." + }, + "description": { + "type": "string", + "description": "The string that describes the content of the result." + }, + "duration": { + "type": "string", + "description": "The duration of the item (movie, audio recording, event, etc.) in ISO 8601 date format." + }, + "embedUrl": { + "type": "string", + "description": "A URL pointing to a player for a specific video. In general, this is the information in the src element of an embed tag and should not be the same as the content of the loc tag." + }, + "endDate": { + "type": "string", + "description": "The end date and time of the event (in ISO 8601 date format)." + }, + "familyName": { + "type": "string", + "description": "Family name. This property can be used with givenName instead of the name property." + }, + "gender": { + "type": "string", + "description": "Gender of the person." + }, + "geo": { + "$ref": "ItemScope", + "description": "Geo coordinates." + }, + "givenName": { + "type": "string", + "description": "Given name. This property can be used with familyName instead of the name property." + }, + "height": { + "type": "string", + "description": "The height of the media object." + }, + "id": { + "type": "string", + "description": "An identifier for the target. Your app can choose how to identify targets. The target.id is required if you are writing an activity that does not have a corresponding web page or target.url property." + }, + "image": { + "type": "string", + "description": "A URL to the image that represents this result. For example, if a user writes a review of a restaurant and attaches a photo of their meal, you might use that photo as the result.image." + }, + "inAlbum": { + "$ref": "ItemScope", + "description": "From http://schema.org/MusicRecording, which album a song is in." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an itemScope.", + "default": "plus#itemScope" + }, + "latitude": { + "type": "number", + "description": "Latitude.", + "format": "double" + }, + "location": { + "$ref": "ItemScope", + "description": "The location of the event or organization." + }, + "longitude": { + "type": "number", + "description": "Longitude.", + "format": "double" + }, + "name": { + "type": "string", + "description": "The name of the result. In the example of a restaurant review, this might be the summary the user gave their review such as \"Great ambiance, but overpriced.\"" + }, + "partOfTVSeries": { + "$ref": "ItemScope", + "description": "Property of http://schema.org/TVEpisode indicating which series the episode belongs to." + }, + "performers": { + "type": "array", + "description": "The main performer or performers of the event-for example, a presenter, musician, or actor.", + "items": { + "$ref": "ItemScope" + } + }, + "playerType": { + "type": "string", + "description": "Player type that is required. For example: Flash or Silverlight." + }, + "postOfficeBoxNumber": { + "type": "string", + "description": "Post office box number." + }, + "postalCode": { + "type": "string", + "description": "Postal code." + }, + "ratingValue": { + "type": "string", + "description": "Rating value." + }, + "reviewRating": { + "$ref": "ItemScope", + "description": "Review rating." + }, + "startDate": { + "type": "string", + "description": "The start date and time of the event (in ISO 8601 date format)." + }, + "streetAddress": { + "type": "string", + "description": "Street address." + }, + "text": { + "type": "string", + "description": "The text that is the result of the app activity. For example, if a user leaves a review of a restaurant, this might be the text of the review." + }, + "thumbnail": { + "$ref": "ItemScope", + "description": "Thumbnail image for an image or video." + }, + "thumbnailUrl": { + "type": "string", + "description": "A URL to a thumbnail image that represents this result." + }, + "tickerSymbol": { + "type": "string", + "description": "The exchange traded instrument associated with a Corporation object. The tickerSymbol is expressed as an exchange and an instrument name separated by a space character. For the exchange component of the tickerSymbol attribute, we reccommend using the controlled vocaulary of Market Identifier Codes (MIC) specified in ISO15022." + }, + "type": { + "type": "string", + "description": "The schema.org URL that best describes the referenced target and matches the type of moment." + }, + "url": { + "type": "string", + "description": "The URL that points to the result object. For example, a permalink directly to a restaurant reviewer's comment." + }, + "width": { + "type": "string", + "description": "The width of the media object." + }, + "worstRating": { + "type": "string", + "description": "Worst possible rating value that a result might obtain. This property defines the lower bound for the ratingValue." + } + } + }, + "Moment": { + "id": "Moment", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The moment ID." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a moment.", + "default": "plus#moment" + }, + "result": { + "$ref": "ItemScope", + "description": "The object generated by performing the action on the target. For example, a user writes a review of a restaurant, the target is the restaurant and the result is the review." + }, + "startDate": { + "type": "string", + "description": "Time stamp of when the action occurred in RFC3339 format.", + "format": "date-time" + }, + "target": { + "$ref": "ItemScope", + "description": "The object on which the action was performed.", + "annotations": { + "required": [ + "plus.moments.insert" + ] + } + }, + "type": { + "type": "string", + "description": "The Google schema for the type of moment to write. For example, http://schemas.google.com/AddActivity.", + "annotations": { + "required": [ + "plus.moments.insert" + ] + } + } + } + } + }, + "resources": { + "moments": { + "methods": { + "insert": { + "id": "plus.moments.insert", + "path": "{userId}/moments/{collection}", + "httpMethod": "POST", + "description": "Record a moment representing a user's activity such as making a purchase or commenting on a blog.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection to which to write moments.", + "required": true, + "enum": [ + "vault" + ], + "enumDescriptions": [ + "The default collection for writing new moments." + ], + "location": "path" + }, + "debug": { + "type": "boolean", + "description": "Return the moment as written. Should be used only for debugging.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to record activities for. The only valid values are \"me\" and the ID of the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "request": { + "$ref": "Moment" + }, + "response": { + "$ref": "Moment" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-gen.go b/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-gen.go new file mode 100644 index 0000000000000..69a62f489cfdf --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plus/v1moments/plus-gen.go @@ -0,0 +1,397 @@ +// Package plus provides access to the Google+ API. +// +// See https://developers.google.com/+/history/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/plus/v1moments" +// ... +// plusService, err := plus.New(oauthHttpClient) +package plus + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New + +const apiId = "plus:v1moments" +const apiName = "plus" +const apiVersion = "v1moments" +const basePath = "https://www.googleapis.com/plus/v1moments/people/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Moments = &MomentsService{s: s} + return s, nil +} + +type Service struct { + client *http.Client + + Moments *MomentsService +} + +type MomentsService struct { + s *Service +} + +type ItemScope struct { + // About: The subject matter of the content. + About *ItemScope `json:"about,omitempty"` + + // AdditionalName: An additional name for a Person, can be used for a + // middle name. + AdditionalName []string `json:"additionalName,omitempty"` + + // Address: Postal address. + Address *ItemScope `json:"address,omitempty"` + + // AddressCountry: Address country. + AddressCountry string `json:"addressCountry,omitempty"` + + // AddressLocality: Address locality. + AddressLocality string `json:"addressLocality,omitempty"` + + // AddressRegion: Address region. + AddressRegion string `json:"addressRegion,omitempty"` + + // Associated_media: The encoding. + Associated_media []*ItemScope `json:"associated_media,omitempty"` + + // AttendeeCount: Number of attendees. + AttendeeCount int64 `json:"attendeeCount,omitempty"` + + // Attendees: A person attending the event. + Attendees []*ItemScope `json:"attendees,omitempty"` + + // Audio: From http://schema.org/MusicRecording, the audio file. + Audio *ItemScope `json:"audio,omitempty"` + + // Author: The person or persons who created this result. In the example + // of restaurant reviews, this might be the reviewer's name. + Author []*ItemScope `json:"author,omitempty"` + + // BestRating: Best possible rating value that a result might obtain. + // This property defines the upper bound for the ratingValue. For + // example, you might have a 5 star rating scale, you would provide 5 as + // the value for this property. + BestRating string `json:"bestRating,omitempty"` + + // BirthDate: Date of birth. + BirthDate string `json:"birthDate,omitempty"` + + // ByArtist: From http://schema.org/MusicRecording, the artist that + // performed this recording. + ByArtist *ItemScope `json:"byArtist,omitempty"` + + // Caption: The caption for this object. + Caption string `json:"caption,omitempty"` + + // ContentSize: File size in (mega/kilo) bytes. + ContentSize string `json:"contentSize,omitempty"` + + // ContentUrl: Actual bytes of the media object, for example the image + // file or video file. + ContentUrl string `json:"contentUrl,omitempty"` + + // Contributor: A list of contributors to this result. + Contributor []*ItemScope `json:"contributor,omitempty"` + + // DateCreated: The date the result was created such as the date that a + // review was first created. + DateCreated string `json:"dateCreated,omitempty"` + + // DateModified: The date the result was last modified such as the date + // that a review was last edited. + DateModified string `json:"dateModified,omitempty"` + + // DatePublished: The initial date that the result was published. For + // example, a user writes a comment on a blog, which has a + // result.dateCreated of when they submit it. If the blog users comment + // moderation, the result.datePublished value would match the date when + // the owner approved the message. + DatePublished string `json:"datePublished,omitempty"` + + // Description: The string that describes the content of the result. + Description string `json:"description,omitempty"` + + // Duration: The duration of the item (movie, audio recording, event, + // etc.) in ISO 8601 date format. + Duration string `json:"duration,omitempty"` + + // EmbedUrl: A URL pointing to a player for a specific video. In + // general, this is the information in the src element of an embed tag + // and should not be the same as the content of the loc tag. + EmbedUrl string `json:"embedUrl,omitempty"` + + // EndDate: The end date and time of the event (in ISO 8601 date + // format). + EndDate string `json:"endDate,omitempty"` + + // FamilyName: Family name. This property can be used with givenName + // instead of the name property. + FamilyName string `json:"familyName,omitempty"` + + // Gender: Gender of the person. + Gender string `json:"gender,omitempty"` + + // Geo: Geo coordinates. + Geo *ItemScope `json:"geo,omitempty"` + + // GivenName: Given name. This property can be used with familyName + // instead of the name property. + GivenName string `json:"givenName,omitempty"` + + // Height: The height of the media object. + Height string `json:"height,omitempty"` + + // Id: An identifier for the target. Your app can choose how to identify + // targets. The target.id is required if you are writing an activity + // that does not have a corresponding web page or target.url property. + Id string `json:"id,omitempty"` + + // Image: A URL to the image that represents this result. For example, + // if a user writes a review of a restaurant and attaches a photo of + // their meal, you might use that photo as the result.image. + Image string `json:"image,omitempty"` + + // InAlbum: From http://schema.org/MusicRecording, which album a song is + // in. + InAlbum *ItemScope `json:"inAlbum,omitempty"` + + // Kind: Identifies this resource as an itemScope. + Kind string `json:"kind,omitempty"` + + // Latitude: Latitude. + Latitude float64 `json:"latitude,omitempty"` + + // Location: The location of the event or organization. + Location *ItemScope `json:"location,omitempty"` + + // Longitude: Longitude. + Longitude float64 `json:"longitude,omitempty"` + + // Name: The name of the result. In the example of a restaurant review, + // this might be the summary the user gave their review such as "Great + // ambiance, but overpriced." + Name string `json:"name,omitempty"` + + // PartOfTVSeries: Property of http://schema.org/TVEpisode indicating + // which series the episode belongs to. + PartOfTVSeries *ItemScope `json:"partOfTVSeries,omitempty"` + + // Performers: The main performer or performers of the event-for + // example, a presenter, musician, or actor. + Performers []*ItemScope `json:"performers,omitempty"` + + // PlayerType: Player type that is required. For example: Flash or + // Silverlight. + PlayerType string `json:"playerType,omitempty"` + + // PostOfficeBoxNumber: Post office box number. + PostOfficeBoxNumber string `json:"postOfficeBoxNumber,omitempty"` + + // PostalCode: Postal code. + PostalCode string `json:"postalCode,omitempty"` + + // RatingValue: Rating value. + RatingValue string `json:"ratingValue,omitempty"` + + // ReviewRating: Review rating. + ReviewRating *ItemScope `json:"reviewRating,omitempty"` + + // StartDate: The start date and time of the event (in ISO 8601 date + // format). + StartDate string `json:"startDate,omitempty"` + + // StreetAddress: Street address. + StreetAddress string `json:"streetAddress,omitempty"` + + // Text: The text that is the result of the app activity. For example, + // if a user leaves a review of a restaurant, this might be the text of + // the review. + Text string `json:"text,omitempty"` + + // Thumbnail: Thumbnail image for an image or video. + Thumbnail *ItemScope `json:"thumbnail,omitempty"` + + // ThumbnailUrl: A URL to a thumbnail image that represents this result. + ThumbnailUrl string `json:"thumbnailUrl,omitempty"` + + // TickerSymbol: The exchange traded instrument associated with a + // Corporation object. The tickerSymbol is expressed as an exchange and + // an instrument name separated by a space character. For the exchange + // component of the tickerSymbol attribute, we reccommend using the + // controlled vocaulary of Market Identifier Codes (MIC) specified in + // ISO15022. + TickerSymbol string `json:"tickerSymbol,omitempty"` + + // Type: The schema.org URL that best describes the referenced target + // and matches the type of moment. + Type string `json:"type,omitempty"` + + // Url: The URL that points to the result object. For example, a + // permalink directly to a restaurant reviewer's comment. + Url string `json:"url,omitempty"` + + // Width: The width of the media object. + Width string `json:"width,omitempty"` + + // WorstRating: Worst possible rating value that a result might obtain. + // This property defines the lower bound for the ratingValue. + WorstRating string `json:"worstRating,omitempty"` +} + +type Moment struct { + // Id: The moment ID. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as a moment. + Kind string `json:"kind,omitempty"` + + // Result: The object generated by performing the action on the target. + // For example, a user writes a review of a restaurant, the target is + // the restaurant and the result is the review. + Result *ItemScope `json:"result,omitempty"` + + // StartDate: Time stamp of when the action occurred in RFC3339 format. + StartDate string `json:"startDate,omitempty"` + + // Target: The object on which the action was performed. + Target *ItemScope `json:"target,omitempty"` + + // Type: The Google schema for the type of moment to write. For example, + // http://schemas.google.com/AddActivity. + Type string `json:"type,omitempty"` +} + +// method id "plus.moments.insert": + +type MomentsInsertCall struct { + s *Service + userId string + collection string + moment *Moment + opt_ map[string]interface{} +} + +// Insert: Record a moment representing a user's activity such as making +// a purchase or commenting on a blog. +func (r *MomentsService) Insert(userId string, collection string, moment *Moment) *MomentsInsertCall { + c := &MomentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + c.moment = moment + return c +} + +// Debug sets the optional parameter "debug": Return the moment as +// written. Should be used only for debugging. +func (c *MomentsInsertCall) Debug(debug bool) *MomentsInsertCall { + c.opt_["debug"] = debug + return c +} + +func (c *MomentsInsertCall) Do() (*Moment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.moment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["debug"]; ok { + params.Set("debug", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/plus/v1moments/people/", "{userId}/moments/{collection}") + urls = strings.Replace(urls, "{userId}", cleanPathString(c.userId), 1) + urls = strings.Replace(urls, "{collection}", cleanPathString(c.collection), 1) + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Moment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Record a moment representing a user's activity such as making a purchase or commenting on a blog.", + // "httpMethod": "POST", + // "id": "plus.moments.insert", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection to which to write moments.", + // "enum": [ + // "vault" + // ], + // "enumDescriptions": [ + // "The default collection for writing new moments." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "debug": { + // "description": "Return the moment as written. Should be used only for debugging.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "The ID of the user to record activities for. The only valid values are \"me\" and the ID of the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{userId}/moments/{collection}", + // "request": { + // "$ref": "Moment" + // }, + // "response": { + // "$ref": "Moment" + // } + // } + +} + +func cleanPathString(s string) string { + return strings.Map(func(r rune) rune { + if r >= 0x2d && r <= 0x7a || r == '~' { + return r + } + return -1 + }, s) +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-api.json b/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-api.json new file mode 100644 index 0000000000000..e0b7fe2e08d94 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-api.json @@ -0,0 +1,2153 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/WecM2nVo3OjpAn6UNY8qcfnUtHQ\"", + "discoveryVersion": "v1", + "id": "plusDomains:v1", + "name": "plusDomains", + "version": "v1", + "title": "Google+ Domains API", + "description": "The Google+ API enables developers to build on top of the Google+ platform.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/gplus-16.png", + "x32": "http://www.google.com/images/icons/product/gplus-32.png" + }, + "documentationLink": "https://developers.google.com/+/domains/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/plusDomains/v1/", + "basePath": "/plusDomains/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "plusDomains/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/plus.circles.read": { + "description": "View your circles and the people and pages in them" + }, + "https://www.googleapis.com/auth/plus.circles.write": { + "description": "Manage your circles and add people and pages, who will be notified and may appear on your public Google+ profile" + }, + "https://www.googleapis.com/auth/plus.login": { + "description": "Know your basic profile info and list of people in your circles." + }, + "https://www.googleapis.com/auth/plus.me": { + "description": "Know who you are on Google" + }, + "https://www.googleapis.com/auth/plus.media.upload": { + "description": "Send your photos and videos to Google+" + }, + "https://www.googleapis.com/auth/plus.profiles.read": { + "description": "View your own Google+ profile and profiles visible to you" + }, + "https://www.googleapis.com/auth/plus.stream.read": { + "description": "View your Google+ posts, comments, and stream" + }, + "https://www.googleapis.com/auth/plus.stream.write": { + "description": "Manage your Google+ posts, comments, and stream" + }, + "https://www.googleapis.com/auth/userinfo.email": { + "description": "View your email address" + }, + "https://www.googleapis.com/auth/userinfo.profile": { + "description": "View basic information about your account" + } + } + } + }, + "schemas": { + "Acl": { + "id": "Acl", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Description of the access granted, suitable for display." + }, + "domainRestricted": { + "type": "boolean", + "description": "Whether access is restricted to the domain." + }, + "items": { + "type": "array", + "description": "The list of access entries.", + "items": { + "$ref": "PlusDomainsAclentryResource" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of access controls. Value: \"plus#acl\".", + "default": "plus#acl" + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "properties": { + "access": { + "$ref": "Acl", + "description": "Identifies who has access to see this activity." + }, + "actor": { + "type": "object", + "description": "The person who performed this activity.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of the actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor's Person resource." + }, + "image": { + "type": "object", + "description": "The image representation of the actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (\"last name\") of the actor." + }, + "givenName": { + "type": "string", + "description": "The given name (\"first name\") of the actor." + } + } + }, + "url": { + "type": "string", + "description": "The link to the actor's Google profile." + } + } + }, + "address": { + "type": "string", + "description": "Street address where this activity occurred." + }, + "annotation": { + "type": "string", + "description": "Additional content added by the person who shared this activity, applicable only when resharing an activity." + }, + "crosspostSource": { + "type": "string", + "description": "If this activity is a crosspost from another system, this property specifies the ID of the original activity." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "geocode": { + "type": "string", + "description": "Latitude and longitude where this activity occurred. Format is latitude followed by longitude, space separated." + }, + "id": { + "type": "string", + "description": "The ID of this activity." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an activity. Value: \"plus#activity\".", + "default": "plus#activity" + }, + "location": { + "$ref": "Place", + "description": "The location where this activity occurred." + }, + "object": { + "type": "object", + "description": "The object of this activity.", + "properties": { + "actor": { + "type": "object", + "description": "If this activity's object is itself another activity, such as when a person reshares an activity, this property specifies the original activity's actor.", + "properties": { + "displayName": { + "type": "string", + "description": "The original actor's name, which is suitable for display." + }, + "id": { + "type": "string", + "description": "ID of the original actor." + }, + "image": { + "type": "object", + "description": "The image representation of the original actor.", + "properties": { + "url": { + "type": "string", + "description": "A URL that points to a thumbnail photo of the original actor." + } + } + }, + "url": { + "type": "string", + "description": "A link to the original actor's Google profile." + } + } + }, + "attachments": { + "type": "array", + "description": "The media objects attached to this activity.", + "items": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "If the attachment is an article, this property contains a snippet of text from the article. It can also include descriptions for other types." + }, + "displayName": { + "type": "string", + "description": "The title of the attachment, such as a photo caption or an article title." + }, + "embed": { + "type": "object", + "description": "If the attachment is a video, the embeddable link.", + "properties": { + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the link." + } + } + }, + "fullImage": { + "type": "object", + "description": "The full image URL for photo attachments.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "URL of the image." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "id": { + "type": "string", + "description": "The ID of the attachment." + }, + "image": { + "type": "object", + "description": "The preview image for photos or videos.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image URL." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "objectType": { + "type": "string", + "description": "The type of media object. Possible values include, but are not limited to, the following values: \n- \"photo\" - A photo. \n- \"album\" - A photo album. \n- \"video\" - A video. \n- \"article\" - An article, specified by a link." + }, + "previewThumbnails": { + "type": "array", + "description": "When previewing, these are the optional thumbnails for the post. When posting an article, choose one by setting the attachment.image.url property. If you don't choose one, one will be chosen for you.", + "items": { + "type": "object", + "properties": { + "url": { + "type": "string", + "description": "URL of the thumbnail image." + } + } + } + }, + "thumbnails": { + "type": "array", + "description": "If the attachment is an album, this property is a list of potential additional thumbnails from the album.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "Potential name of the thumbnail." + }, + "image": { + "type": "object", + "description": "Image resource.", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the linked resource.", + "format": "uint32" + }, + "type": { + "type": "string", + "description": "Media type of the link." + }, + "url": { + "type": "string", + "description": "Image url." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the linked resource.", + "format": "uint32" + } + } + }, + "url": { + "type": "string", + "description": "URL of the webpage containing the image." + } + } + } + }, + "url": { + "type": "string", + "description": "The link to the attachment, which should be of type text/html." + } + } + } + }, + "content": { + "type": "string", + "description": "The HTML-formatted content, which is suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the object. When resharing an activity, this is the ID of the activity that is being reshared." + }, + "objectType": { + "type": "string", + "description": "The type of the object. Possible values include, but are not limited to, the following values: \n- \"note\" - Textual content. \n- \"activity\" - A Google+ activity." + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, which is stored without any HTML formatting. When creating or updating an activity, this value must be supplied as plain text in the request." + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of people who +1'd this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this activity.", + "format": "uint32" + } + } + }, + "replies": { + "type": "object", + "description": "Comments in reply to this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of comments in reply to this activity." + }, + "totalItems": { + "type": "integer", + "description": "Total number of comments on this activity.", + "format": "uint32" + } + } + }, + "resharers": { + "type": "object", + "description": "People who reshared this activity.", + "properties": { + "selfLink": { + "type": "string", + "description": "The URL for the collection of resharers." + }, + "totalItems": { + "type": "integer", + "description": "Total number of people who reshared this activity.", + "format": "uint32" + } + } + }, + "statusForViewer": { + "type": "object", + "description": "Status of the activity as seen by the viewer.", + "properties": { + "canComment": { + "type": "boolean", + "description": "Whether the viewer can comment on the activity." + }, + "canPlusone": { + "type": "boolean", + "description": "Whether the viewer can +1 the activity." + }, + "canUpdate": { + "type": "boolean", + "description": "Whether the viewer can edit or delete the activity." + }, + "isPlusOned": { + "type": "boolean", + "description": "Whether the viewer has +1'd the activity." + }, + "resharingDisabled": { + "type": "boolean", + "description": "Whether reshares are disabled for the activity." + } + } + }, + "url": { + "type": "string", + "description": "The URL that points to the linked resource." + } + } + }, + "placeId": { + "type": "string", + "description": "ID of the place where this activity occurred." + }, + "placeName": { + "type": "string", + "description": "Name of the place where this activity occurred." + }, + "provider": { + "type": "object", + "description": "The service provider that initially published this activity.", + "properties": { + "title": { + "type": "string", + "description": "Name of the service provider." + } + } + }, + "published": { + "type": "string", + "description": "The time at which this activity was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "radius": { + "type": "string", + "description": "Radius, in meters, of the region where this activity occurred, centered at the latitude and longitude identified in geocode." + }, + "title": { + "type": "string", + "description": "Title of this activity." + }, + "updated": { + "type": "string", + "description": "The time at which this activity was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The link to this activity." + }, + "verb": { + "type": "string", + "description": "This activity's verb, which indicates the action that was performed. Possible values include, but are not limited to, the following values: \n- \"post\" - Publish content to the stream. \n- \"share\" - Reshare an activity." + } + } + }, + "ActivityFeed": { + "id": "ActivityFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of activities. Deprecated." + }, + "items": { + "type": "array", + "description": "The activities in this page of results.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of activities. Value: \"plus#activityFeed\".", + "default": "plus#activityFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this activity resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of activities, which is a truncated portion of the content." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of activities was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "Audience": { + "id": "Audience", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "item": { + "$ref": "PlusDomainsAclentryResource", + "description": "The access control list entry." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as an audience. Value: \"plus#audience\".", + "default": "plus#audience" + }, + "memberCount": { + "type": "integer", + "description": "The number of people in this circle. This only applies if entity_type is CIRCLE.", + "format": "uint32" + }, + "visibility": { + "type": "string", + "description": "The circle members' visibility as chosen by the owner of the circle. This only applies for items with \"item.type\" equals \"circle\". Possible values are: \n- \"public\" - Members are visible to the public. \n- \"limited\" - Members are visible to a limited audience. \n- \"private\" - Members are visible to the owner only." + } + } + }, + "AudiencesFeed": { + "id": "AudiencesFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The audiences in this result.", + "items": { + "$ref": "Audience" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of audiences. Value: \"plus#audienceFeed\".", + "default": "plus#audiencesFeed" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "totalItems": { + "type": "integer", + "description": "The total number of ACL entries. The number of entries in this response may be smaller due to paging.", + "format": "int32" + } + } + }, + "Circle": { + "id": "Circle", + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The description of this circle." + }, + "displayName": { + "type": "string", + "description": "The circle name." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of the circle." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a circle. Value: \"plus#circle\".", + "default": "plus#circle" + }, + "people": { + "type": "object", + "description": "The people in this circle.", + "properties": { + "totalItems": { + "type": "integer", + "description": "The total number of people in this circle.", + "format": "uint32" + } + } + }, + "selfLink": { + "type": "string", + "description": "Link to this circle resource" + } + } + }, + "CircleFeed": { + "id": "CircleFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The circles in this page of results.", + "items": { + "$ref": "Circle" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of circles. Value: \"plus#circleFeed\".", + "default": "plus#circleFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of circles." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this page of circles." + }, + "title": { + "type": "string", + "description": "The title of this list of resources." + }, + "totalItems": { + "type": "integer", + "description": "The total number of circles. The number of circles in this response may be smaller due to paging.", + "format": "int32" + } + } + }, + "Comment": { + "id": "Comment", + "type": "object", + "properties": { + "actor": { + "type": "object", + "description": "The person who posted this comment.", + "properties": { + "displayName": { + "type": "string", + "description": "The name of this actor, suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the actor." + }, + "image": { + "type": "object", + "description": "The image representation of this actor.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the actor's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "url": { + "type": "string", + "description": "A link to the Person resource for this actor." + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this comment." + }, + "inReplyTo": { + "type": "array", + "description": "The activity this comment replied to.", + "items": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The ID of the activity." + }, + "url": { + "type": "string", + "description": "The URL of the activity." + } + } + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a comment. Value: \"plus#comment\".", + "default": "plus#comment" + }, + "object": { + "type": "object", + "description": "The object of this comment.", + "properties": { + "content": { + "type": "string", + "description": "The HTML-formatted content, suitable for display." + }, + "objectType": { + "type": "string", + "description": "The object type of this comment. Possible values are: \n- \"comment\" - A comment in reply to an activity.", + "default": "comment" + }, + "originalContent": { + "type": "string", + "description": "The content (text) as provided by the author, stored without any HTML formatting. When creating or updating a comment, this value must be supplied as plain text in the request." + } + } + }, + "plusoners": { + "type": "object", + "description": "People who +1'd this comment.", + "properties": { + "totalItems": { + "type": "integer", + "description": "Total number of people who +1'd this comment.", + "format": "uint32" + } + } + }, + "published": { + "type": "string", + "description": "The time at which this comment was initially published. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "selfLink": { + "type": "string", + "description": "Link to this comment resource." + }, + "updated": { + "type": "string", + "description": "The time at which this comment was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "verb": { + "type": "string", + "description": "This comment's verb, indicating what action was performed. Possible values are: \n- \"post\" - Publish content to the stream.", + "default": "post" + } + } + }, + "CommentFeed": { + "id": "CommentFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "id": { + "type": "string", + "description": "The ID of this collection of comments." + }, + "items": { + "type": "array", + "description": "The comments in this page of results.", + "items": { + "$ref": "Comment" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of comments. Value: \"plus#commentFeed\".", + "default": "plus#commentFeed" + }, + "nextLink": { + "type": "string", + "description": "Link to the next page of activities." + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "title": { + "type": "string", + "description": "The title of this collection of comments." + }, + "updated": { + "type": "string", + "description": "The time at which this collection of comments was last updated. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "Media": { + "id": "Media", + "type": "object", + "properties": { + "author": { + "type": "object", + "description": "The person who uploaded this media.", + "properties": { + "displayName": { + "type": "string", + "description": "The author's name." + }, + "id": { + "type": "string", + "description": "ID of the author." + }, + "image": { + "type": "object", + "description": "The author's Google profile image.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the author's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "url": { + "type": "string", + "description": "A link to the author's Google profile." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name for this media." + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "exif": { + "type": "object", + "description": "Exif information of the media item.", + "properties": { + "time": { + "type": "string", + "description": "The time the media was captured. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + } + } + }, + "height": { + "type": "integer", + "description": "The height in pixels of the original image.", + "format": "uint32" + }, + "id": { + "type": "string", + "description": "ID of this media, which is generated by the API." + }, + "kind": { + "type": "string", + "description": "The type of resource.", + "default": "plus#media" + }, + "mediaCreatedTime": { + "type": "string", + "description": "The time at which this media was originally created in UTC. Formatted as an RFC 3339 timestamp that matches this example: 2010-11-25T14:30:27.655Z", + "format": "date-time" + }, + "mediaUrl": { + "type": "string", + "description": "The URL of this photo or video's still image." + }, + "published": { + "type": "string", + "description": "The time at which this media was uploaded. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "sizeBytes": { + "type": "string", + "description": "The size in bytes of this video.", + "format": "int64" + }, + "streams": { + "type": "array", + "description": "The list of video streams for this video. There might be several different streams available for a single video, either Flash or MPEG, of various sizes", + "items": { + "$ref": "Videostream" + } + }, + "summary": { + "type": "string", + "description": "A description, or caption, for this media." + }, + "updated": { + "type": "string", + "description": "The time at which this media was last updated. This includes changes to media metadata. Formatted as an RFC 3339 timestamp.", + "format": "date-time" + }, + "url": { + "type": "string", + "description": "The URL for the page that hosts this media." + }, + "videoDuration": { + "type": "string", + "description": "The duration in milliseconds of this video.", + "format": "int64" + }, + "videoStatus": { + "type": "string", + "description": "The encoding status of this video. Possible values are: \n- \"UPLOADING\" - Not all the video bytes have been received. \n- \"PENDING\" - Video not yet processed. \n- \"FAILED\" - Video processing failed. \n- \"READY\" - A single video stream is playable. \n- \"FINAL\" - All video streams are playable." + }, + "width": { + "type": "integer", + "description": "The width in pixels of the original image.", + "format": "uint32" + } + } + }, + "PeopleFeed": { + "id": "PeopleFeed", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "items": { + "type": "array", + "description": "The people in this page of results. Each item includes the id, displayName, image, and url for the person. To retrieve additional profile data, see the people.get method.", + "items": { + "$ref": "Person" + } + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a collection of people. Value: \"plus#peopleFeed\".", + "default": "plus#peopleFeed" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "selfLink": { + "type": "string", + "description": "Link to this resource." + }, + "title": { + "type": "string", + "description": "The title of this collection of people." + }, + "totalItems": { + "type": "integer", + "description": "The total number of people available in this list. The number of people in a response might be smaller due to paging. This might not be set for all collections.", + "format": "int32" + } + } + }, + "Person": { + "id": "Person", + "type": "object", + "properties": { + "aboutMe": { + "type": "string", + "description": "A short biography for this person." + }, + "birthday": { + "type": "string", + "description": "The person's date of birth, represented as YYYY-MM-DD." + }, + "braggingRights": { + "type": "string", + "description": "The \"bragging rights\" line of this person." + }, + "circledByCount": { + "type": "integer", + "description": "For followers who are visible, the number of people who have added this person or page to a circle.", + "format": "int32" + }, + "cover": { + "type": "object", + "description": "The cover photo content.", + "properties": { + "coverInfo": { + "type": "object", + "description": "Extra information about the cover photo.", + "properties": { + "leftImageOffset": { + "type": "integer", + "description": "The difference between the left position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + }, + "topImageOffset": { + "type": "integer", + "description": "The difference between the top position of the cover image and the actual displayed cover image. Only valid for banner layout.", + "format": "int32" + } + } + }, + "coverPhoto": { + "type": "object", + "description": "The person's primary cover image.", + "properties": { + "height": { + "type": "integer", + "description": "The height of the image.", + "format": "int32" + }, + "url": { + "type": "string", + "description": "The URL of the image." + }, + "width": { + "type": "integer", + "description": "The width of the image.", + "format": "int32" + } + } + }, + "layout": { + "type": "string", + "description": "The layout of the cover art. Possible values include, but are not limited to, the following values: \n- \"banner\" - One large image banner." + } + } + }, + "currentLocation": { + "type": "string", + "description": "The current location for this person." + }, + "displayName": { + "type": "string", + "description": "The name of this person, which is suitable for display." + }, + "domain": { + "type": "string", + "description": "The hosted domain name for the user's Google Apps account. For instance, example.com. The plus.profile.emails.read or email scope is needed to get this domain name." + }, + "emails": { + "type": "array", + "description": "A list of email addresses that this person has, including their Google account email address, and the public verified email addresses on their Google+ profile. The plus.profile.emails.read scope is needed to retrieve these email addresses, or the email scope can be used to retrieve just the Google account email address.", + "items": { + "type": "object", + "properties": { + "type": { + "type": "string", + "description": "The type of address. Possible values include, but are not limited to, the following values: \n- \"account\" - Google account email address. \n- \"home\" - Home email address. \n- \"work\" - Work email address. \n- \"other\" - Other." + }, + "value": { + "type": "string", + "description": "The email address." + } + } + } + }, + "etag": { + "type": "string", + "description": "ETag of this response for caching purposes." + }, + "gender": { + "type": "string", + "description": "The person's gender. Possible values include, but are not limited to, the following values: \n- \"male\" - Male gender. \n- \"female\" - Female gender. \n- \"other\" - Other." + }, + "id": { + "type": "string", + "description": "The ID of this person." + }, + "image": { + "type": "object", + "description": "The representation of the person's profile photo.", + "properties": { + "url": { + "type": "string", + "description": "The URL of the person's profile photo. To resize the image and crop it to a square, append the query string ?sz=x, where x is the dimension in pixels of each side." + } + } + }, + "isPlusUser": { + "type": "boolean", + "description": "Whether this user has signed up for Google+." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a person. Value: \"plus#person\".", + "default": "plus#person" + }, + "name": { + "type": "object", + "description": "An object representation of the individual components of a person's name.", + "properties": { + "familyName": { + "type": "string", + "description": "The family name (last name) of this person." + }, + "formatted": { + "type": "string", + "description": "The full name of this person, including middle names, suffixes, etc." + }, + "givenName": { + "type": "string", + "description": "The given name (first name) of this person." + }, + "honorificPrefix": { + "type": "string", + "description": "The honorific prefixes (such as \"Dr.\" or \"Mrs.\") for this person." + }, + "honorificSuffix": { + "type": "string", + "description": "The honorific suffixes (such as \"Jr.\") for this person." + }, + "middleName": { + "type": "string", + "description": "The middle name of this person." + } + } + }, + "nickname": { + "type": "string", + "description": "The nickname of this person." + }, + "objectType": { + "type": "string", + "description": "Type of person within Google+. Possible values include, but are not limited to, the following values: \n- \"person\" - represents an actual person. \n- \"page\" - represents a page." + }, + "occupation": { + "type": "string", + "description": "The occupation of this person." + }, + "organizations": { + "type": "array", + "description": "A list of current or past organizations with which this person is associated.", + "items": { + "type": "object", + "properties": { + "department": { + "type": "string", + "description": "The department within the organization. Deprecated." + }, + "description": { + "type": "string", + "description": "A short description of the person's role in this organization. Deprecated." + }, + "endDate": { + "type": "string", + "description": "The date that the person left this organization." + }, + "location": { + "type": "string", + "description": "The location of this organization. Deprecated." + }, + "name": { + "type": "string", + "description": "The name of the organization." + }, + "primary": { + "type": "boolean", + "description": "If \"true\", indicates this organization is the person's primary one, which is typically interpreted as the current one." + }, + "startDate": { + "type": "string", + "description": "The date that the person joined this organization." + }, + "title": { + "type": "string", + "description": "The person's job title or role within the organization." + }, + "type": { + "type": "string", + "description": "The type of organization. Possible values include, but are not limited to, the following values: \n- \"work\" - Work. \n- \"school\" - School." + } + } + } + }, + "placesLived": { + "type": "array", + "description": "A list of places where this person has lived.", + "items": { + "type": "object", + "properties": { + "primary": { + "type": "boolean", + "description": "If \"true\", this place of residence is this person's primary residence." + }, + "value": { + "type": "string", + "description": "A place where this person has lived. For example: \"Seattle, WA\", \"Near Toronto\"." + } + } + } + }, + "plusOneCount": { + "type": "integer", + "description": "If a Google+ Page, the number of people who have +1'd this page.", + "format": "int32" + }, + "relationshipStatus": { + "type": "string", + "description": "The person's relationship status. Possible values include, but are not limited to, the following values: \n- \"single\" - Person is single. \n- \"in_a_relationship\" - Person is in a relationship. \n- \"engaged\" - Person is engaged. \n- \"married\" - Person is married. \n- \"its_complicated\" - The relationship is complicated. \n- \"open_relationship\" - Person is in an open relationship. \n- \"widowed\" - Person is widowed. \n- \"in_domestic_partnership\" - Person is in a domestic partnership. \n- \"in_civil_union\" - Person is in a civil union." + }, + "skills": { + "type": "string", + "description": "The person's skills." + }, + "tagline": { + "type": "string", + "description": "The brief description (tagline) of this person." + }, + "url": { + "type": "string", + "description": "The URL of this person's profile." + }, + "urls": { + "type": "array", + "description": "A list of URLs for this person.", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The label of the URL." + }, + "type": { + "type": "string", + "description": "The type of URL. Possible values include, but are not limited to, the following values: \n- \"otherProfile\" - URL for another profile. \n- \"contributor\" - URL to a site for which this person is a contributor. \n- \"website\" - URL for this Google+ Page's primary website. \n- \"other\" - Other URL." + }, + "value": { + "type": "string", + "description": "The URL value." + } + } + } + }, + "verified": { + "type": "boolean", + "description": "Whether the person or Google+ Page has been verified." + } + } + }, + "Place": { + "id": "Place", + "type": "object", + "properties": { + "address": { + "type": "object", + "description": "The physical address of the place.", + "properties": { + "formatted": { + "type": "string", + "description": "The formatted address for display." + } + } + }, + "displayName": { + "type": "string", + "description": "The display name of the place." + }, + "kind": { + "type": "string", + "description": "Identifies this resource as a place. Value: \"plus#place\".", + "default": "plus#place" + }, + "position": { + "type": "object", + "description": "The position of the place.", + "properties": { + "latitude": { + "type": "number", + "description": "The latitude of this position.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "The longitude of this position.", + "format": "double" + } + } + } + } + }, + "PlusDomainsAclentryResource": { + "id": "PlusDomainsAclentryResource", + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "A descriptive name for this entry. Suitable for display." + }, + "id": { + "type": "string", + "description": "The ID of the entry. For entries of type \"person\" or \"circle\", this is the ID of the resource. For other types, this property is not set." + }, + "type": { + "type": "string", + "description": "The type of entry describing to whom access is granted. Possible values are: \n- \"person\" - Access to an individual. \n- \"circle\" - Access to members of a circle. \n- \"myCircles\" - Access to members of all the person's circles. \n- \"extendedCircles\" - Access to members of all the person's circles, plus all of the people in their circles. \n- \"domain\" - Access to members of the person's Google Apps domain. \n- \"public\" - Access to anyone on the web." + } + } + }, + "Videostream": { + "id": "Videostream", + "type": "object", + "properties": { + "height": { + "type": "integer", + "description": "The height, in pixels, of the video resource.", + "format": "int32" + }, + "type": { + "type": "string", + "description": "MIME type of the video stream." + }, + "url": { + "type": "string", + "description": "URL of the video stream." + }, + "width": { + "type": "integer", + "description": "The width, in pixels, of the video resource.", + "format": "int32" + } + } + } + }, + "resources": { + "activities": { + "methods": { + "get": { + "id": "plusDomains.activities.get", + "path": "activities/{activityId}", + "httpMethod": "GET", + "description": "Get an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "insert": { + "id": "plusDomains.activities.insert", + "path": "people/{userId}/activities", + "httpMethod": "POST", + "description": "Create a new activity for the authenticated user.", + "parameters": { + "preview": { + "type": "boolean", + "description": "If \"true\", extract the potential media attachments for a URL. The response will include all possible attachments for a URL, including video, photos, and articles based on the content of the page.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to create the activity on behalf of. Its value should be \"me\", to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "request": { + "$ref": "Activity" + }, + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.write" + ] + }, + "list": { + "id": "plusDomains.activities.list", + "path": "people/{userId}/activities/{collection}", + "httpMethod": "GET", + "description": "List all of the activities in the specified collection for a particular user.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of activities to list.", + "required": true, + "enum": [ + "user" + ], + "enumDescriptions": [ + "All activities created by the specified user that the authenticated user is authorized to view." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "ActivityFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.stream.read" + ] + } + } + }, + "audiences": { + "methods": { + "list": { + "id": "plusDomains.audiences.list", + "path": "people/{userId}/audiences", + "httpMethod": "GET", + "description": "List all of the audiences to which a user can share.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get audiences for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "AudiencesFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + } + } + }, + "circles": { + "methods": { + "addPeople": { + "id": "plusDomains.circles.addPeople", + "path": "circles/{circleId}/people", + "httpMethod": "PUT", + "description": "Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to add the person to.", + "required": true, + "location": "path" + }, + "email": { + "type": "string", + "description": "Email of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "IDs of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "get": { + "id": "plusDomains.circles.get", + "path": "circles/{circleId}", + "httpMethod": "GET", + "description": "Get a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "insert": { + "id": "plusDomains.circles.insert", + "path": "people/{userId}/circles", + "httpMethod": "POST", + "description": "Create a new circle for the authenticated user.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the user to create the circle on behalf of. The value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "list": { + "id": "plusDomains.circles.list", + "path": "people/{userId}/circles", + "httpMethod": "GET", + "description": "List all of the circles for a user.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "The ID of the user to get circles for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "CircleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "patch": { + "id": "plusDomains.circles.patch", + "path": "circles/{circleId}", + "httpMethod": "PATCH", + "description": "Update a circle's description. This method supports patch semantics.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "remove": { + "id": "plusDomains.circles.remove", + "path": "circles/{circleId}", + "httpMethod": "DELETE", + "description": "Delete a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to delete.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "removePeople": { + "id": "plusDomains.circles.removePeople", + "path": "circles/{circleId}/people", + "httpMethod": "DELETE", + "description": "Remove a person from a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to remove the person from.", + "required": true, + "location": "path" + }, + "email": { + "type": "string", + "description": "Email of the people to add to the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + }, + "userId": { + "type": "string", + "description": "IDs of the people to remove from the circle. Optional, can be repeated.", + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + }, + "update": { + "id": "plusDomains.circles.update", + "path": "circles/{circleId}", + "httpMethod": "PUT", + "description": "Update a circle's description.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to update.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "circleId" + ], + "request": { + "$ref": "Circle" + }, + "response": { + "$ref": "Circle" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.write", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + }, + "comments": { + "methods": { + "get": { + "id": "plusDomains.comments.get", + "path": "comments/{commentId}", + "httpMethod": "GET", + "description": "Get a comment.", + "parameters": { + "commentId": { + "type": "string", + "description": "The ID of the comment to get.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "commentId" + ], + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "insert": { + "id": "plusDomains.comments.insert", + "path": "activities/{activityId}/comments", + "httpMethod": "POST", + "description": "Create a new comment in reply to an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to reply to.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "activityId" + ], + "request": { + "$ref": "Comment" + }, + "response": { + "$ref": "Comment" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.write" + ] + }, + "list": { + "id": "plusDomains.comments.list", + "path": "activities/{activityId}/comments", + "httpMethod": "GET", + "description": "List all of the comments for an activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get comments for.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "0", + "maximum": "500", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "sortOrder": { + "type": "string", + "description": "The order in which to sort the list of comments.", + "default": "ascending", + "enum": [ + "ascending", + "descending" + ], + "enumDescriptions": [ + "Sort oldest comments first.", + "Sort newest comments first." + ], + "location": "query" + } + }, + "parameterOrder": [ + "activityId" + ], + "response": { + "$ref": "CommentFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + } + } + }, + "media": { + "methods": { + "insert": { + "id": "plusDomains.media.insert", + "path": "people/{userId}/media/{collection}", + "httpMethod": "POST", + "description": "Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or videos are less than 15 minutes in length.", + "parameters": { + "collection": { + "type": "string", + "required": true, + "enum": [ + "cloud" + ], + "enumDescriptions": [ + "Upload the media to share on Google+." + ], + "location": "path" + }, + "userId": { + "type": "string", + "description": "The ID of the user to create the activity on behalf of.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "request": { + "$ref": "Media" + }, + "response": { + "$ref": "Media" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.media.upload" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "image/*", + "video/*" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/plusDomains/v1/people/{userId}/media/{collection}" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/plusDomains/v1/people/{userId}/media/{collection}" + } + } + } + } + } + }, + "people": { + "methods": { + "get": { + "id": "plusDomains.people.get", + "path": "people/{userId}", + "httpMethod": "GET", + "description": "Get a person's profile.", + "parameters": { + "userId": { + "type": "string", + "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId" + ], + "response": { + "$ref": "Person" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me", + "https://www.googleapis.com/auth/plus.profiles.read", + "https://www.googleapis.com/auth/userinfo.email", + "https://www.googleapis.com/auth/userinfo.profile" + ] + }, + "list": { + "id": "plusDomains.people.list", + "path": "people/{userId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection.", + "parameters": { + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "circled" + ], + "enumDescriptions": [ + "The list of people who this user has added to one or more circles." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "100", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "orderBy": { + "type": "string", + "description": "The order to return people in.", + "enum": [ + "alphabetical", + "best" + ], + "enumDescriptions": [ + "Order the people by their display name.", + "Order people based on the relevence to the viewer." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + }, + "userId": { + "type": "string", + "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "userId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.me" + ] + }, + "listByActivity": { + "id": "plusDomains.people.listByActivity", + "path": "activities/{activityId}/people/{collection}", + "httpMethod": "GET", + "description": "List all of the people in the specified collection for a particular activity.", + "parameters": { + "activityId": { + "type": "string", + "description": "The ID of the activity to get the list of people for.", + "required": true, + "location": "path" + }, + "collection": { + "type": "string", + "description": "The collection of people to list.", + "required": true, + "enum": [ + "plusoners", + "resharers", + "sharedto" + ], + "enumDescriptions": [ + "List all people who have +1'd this activity.", + "List all people who have reshared this activity.", + "List all people who this activity was shared to." + ], + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "activityId", + "collection" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.login", + "https://www.googleapis.com/auth/plus.stream.read" + ] + }, + "listByCircle": { + "id": "plusDomains.people.listByCircle", + "path": "circles/{circleId}/people", + "httpMethod": "GET", + "description": "List all of the people who are members of a circle.", + "parameters": { + "circleId": { + "type": "string", + "description": "The ID of the circle to get the members of.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + "default": "20", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + "location": "query" + } + }, + "parameterOrder": [ + "circleId" + ], + "response": { + "$ref": "PeopleFeed" + }, + "scopes": [ + "https://www.googleapis.com/auth/plus.circles.read", + "https://www.googleapis.com/auth/plus.login" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-gen.go b/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-gen.go new file mode 100644 index 0000000000000..c91327f615723 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/plusdomains/v1/plusdomains-gen.go @@ -0,0 +1,3085 @@ +// Package plusdomains provides access to the Google+ Domains API. +// +// See https://developers.google.com/+/domains/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/plusdomains/v1" +// ... +// plusdomainsService, err := plusdomains.New(oauthHttpClient) +package plusdomains + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "plusDomains:v1" +const apiName = "plusDomains" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/plusDomains/v1/" + +// OAuth2 scopes used by this API. +const ( + // View your circles and the people and pages in them + PlusCirclesReadScope = "https://www.googleapis.com/auth/plus.circles.read" + + // Manage your circles and add people and pages, who will be notified + // and may appear on your public Google+ profile + PlusCirclesWriteScope = "https://www.googleapis.com/auth/plus.circles.write" + + // Know your basic profile info and list of people in your circles. + PlusLoginScope = "https://www.googleapis.com/auth/plus.login" + + // Know who you are on Google + PlusMeScope = "https://www.googleapis.com/auth/plus.me" + + // Send your photos and videos to Google+ + PlusMediaUploadScope = "https://www.googleapis.com/auth/plus.media.upload" + + // View your own Google+ profile and profiles visible to you + PlusProfilesReadScope = "https://www.googleapis.com/auth/plus.profiles.read" + + // View your Google+ posts, comments, and stream + PlusStreamReadScope = "https://www.googleapis.com/auth/plus.stream.read" + + // Manage your Google+ posts, comments, and stream + PlusStreamWriteScope = "https://www.googleapis.com/auth/plus.stream.write" + + // View your email address + UserinfoEmailScope = "https://www.googleapis.com/auth/userinfo.email" + + // View basic information about your account + UserinfoProfileScope = "https://www.googleapis.com/auth/userinfo.profile" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Activities = NewActivitiesService(s) + s.Audiences = NewAudiencesService(s) + s.Circles = NewCirclesService(s) + s.Comments = NewCommentsService(s) + s.Media = NewMediaService(s) + s.People = NewPeopleService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Activities *ActivitiesService + + Audiences *AudiencesService + + Circles *CirclesService + + Comments *CommentsService + + Media *MediaService + + People *PeopleService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewAudiencesService(s *Service) *AudiencesService { + rs := &AudiencesService{s: s} + return rs +} + +type AudiencesService struct { + s *Service +} + +func NewCirclesService(s *Service) *CirclesService { + rs := &CirclesService{s: s} + return rs +} + +type CirclesService struct { + s *Service +} + +func NewCommentsService(s *Service) *CommentsService { + rs := &CommentsService{s: s} + return rs +} + +type CommentsService struct { + s *Service +} + +func NewMediaService(s *Service) *MediaService { + rs := &MediaService{s: s} + return rs +} + +type MediaService struct { + s *Service +} + +func NewPeopleService(s *Service) *PeopleService { + rs := &PeopleService{s: s} + return rs +} + +type PeopleService struct { + s *Service +} + +type Acl struct { + // Description: Description of the access granted, suitable for display. + Description string `json:"description,omitempty"` + + // DomainRestricted: Whether access is restricted to the domain. + DomainRestricted bool `json:"domainRestricted,omitempty"` + + // Items: The list of access entries. + Items []*PlusDomainsAclentryResource `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of access controls. + // Value: "plus#acl". + Kind string `json:"kind,omitempty"` +} + +type Activity struct { + // Access: Identifies who has access to see this activity. + Access *Acl `json:"access,omitempty"` + + // Actor: The person who performed this activity. + Actor *ActivityActor `json:"actor,omitempty"` + + // Address: Street address where this activity occurred. + Address string `json:"address,omitempty"` + + // Annotation: Additional content added by the person who shared this + // activity, applicable only when resharing an activity. + Annotation string `json:"annotation,omitempty"` + + // CrosspostSource: If this activity is a crosspost from another system, + // this property specifies the ID of the original activity. + CrosspostSource string `json:"crosspostSource,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Geocode: Latitude and longitude where this activity occurred. Format + // is latitude followed by longitude, space separated. + Geocode string `json:"geocode,omitempty"` + + // Id: The ID of this activity. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as an activity. Value: + // "plus#activity". + Kind string `json:"kind,omitempty"` + + // Location: The location where this activity occurred. + Location *Place `json:"location,omitempty"` + + // Object: The object of this activity. + Object *ActivityObject `json:"object,omitempty"` + + // PlaceId: ID of the place where this activity occurred. + PlaceId string `json:"placeId,omitempty"` + + // PlaceName: Name of the place where this activity occurred. + PlaceName string `json:"placeName,omitempty"` + + // Provider: The service provider that initially published this + // activity. + Provider *ActivityProvider `json:"provider,omitempty"` + + // Published: The time at which this activity was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // Radius: Radius, in meters, of the region where this activity + // occurred, centered at the latitude and longitude identified in + // geocode. + Radius string `json:"radius,omitempty"` + + // Title: Title of this activity. + Title string `json:"title,omitempty"` + + // Updated: The time at which this activity was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Url: The link to this activity. + Url string `json:"url,omitempty"` + + // Verb: This activity's verb, which indicates the action that was + // performed. Possible values include, but are not limited to, the + // following values: + // - "post" - Publish content to the stream. + // - + // "share" - Reshare an activity. + Verb string `json:"verb,omitempty"` +} + +type ActivityActor struct { + // DisplayName: The name of the actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor's Person resource. + Id string `json:"id,omitempty"` + + // Image: The image representation of the actor. + Image *ActivityActorImage `json:"image,omitempty"` + + // Name: An object representation of the individual components of name. + Name *ActivityActorName `json:"name,omitempty"` + + // Url: The link to the actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type ActivityActorName struct { + // FamilyName: The family name ("last name") of the actor. + FamilyName string `json:"familyName,omitempty"` + + // GivenName: The given name ("first name") of the actor. + GivenName string `json:"givenName,omitempty"` +} + +type ActivityObject struct { + // Actor: If this activity's object is itself another activity, such as + // when a person reshares an activity, this property specifies the + // original activity's actor. + Actor *ActivityObjectActor `json:"actor,omitempty"` + + // Attachments: The media objects attached to this activity. + Attachments []*ActivityObjectAttachments `json:"attachments,omitempty"` + + // Content: The HTML-formatted content, which is suitable for display. + Content string `json:"content,omitempty"` + + // Id: The ID of the object. When resharing an activity, this is the ID + // of the activity that is being reshared. + Id string `json:"id,omitempty"` + + // ObjectType: The type of the object. Possible values include, but are + // not limited to, the following values: + // - "note" - Textual content. + // + // - "activity" - A Google+ activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, which + // is stored without any HTML formatting. When creating or updating an + // activity, this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` + + // Plusoners: People who +1'd this activity. + Plusoners *ActivityObjectPlusoners `json:"plusoners,omitempty"` + + // Replies: Comments in reply to this activity. + Replies *ActivityObjectReplies `json:"replies,omitempty"` + + // Resharers: People who reshared this activity. + Resharers *ActivityObjectResharers `json:"resharers,omitempty"` + + // StatusForViewer: Status of the activity as seen by the viewer. + StatusForViewer *ActivityObjectStatusForViewer `json:"statusForViewer,omitempty"` + + // Url: The URL that points to the linked resource. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActor struct { + // DisplayName: The original actor's name, which is suitable for + // display. + DisplayName string `json:"displayName,omitempty"` + + // Id: ID of the original actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of the original actor. + Image *ActivityObjectActorImage `json:"image,omitempty"` + + // Url: A link to the original actor's Google profile. + Url string `json:"url,omitempty"` +} + +type ActivityObjectActorImage struct { + // Url: A URL that points to a thumbnail photo of the original actor. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachments struct { + // Content: If the attachment is an article, this property contains a + // snippet of text from the article. It can also include descriptions + // for other types. + Content string `json:"content,omitempty"` + + // DisplayName: The title of the attachment, such as a photo caption or + // an article title. + DisplayName string `json:"displayName,omitempty"` + + // Embed: If the attachment is a video, the embeddable link. + Embed *ActivityObjectAttachmentsEmbed `json:"embed,omitempty"` + + // FullImage: The full image URL for photo attachments. + FullImage *ActivityObjectAttachmentsFullImage `json:"fullImage,omitempty"` + + // Id: The ID of the attachment. + Id string `json:"id,omitempty"` + + // Image: The preview image for photos or videos. + Image *ActivityObjectAttachmentsImage `json:"image,omitempty"` + + // ObjectType: The type of media object. Possible values include, but + // are not limited to, the following values: + // - "photo" - A photo. + // - + // "album" - A photo album. + // - "video" - A video. + // - "article" - An + // article, specified by a link. + ObjectType string `json:"objectType,omitempty"` + + // PreviewThumbnails: When previewing, these are the optional thumbnails + // for the post. When posting an article, choose one by setting the + // attachment.image.url property. If you don't choose one, one will be + // chosen for you. + PreviewThumbnails []*ActivityObjectAttachmentsPreviewThumbnails `json:"previewThumbnails,omitempty"` + + // Thumbnails: If the attachment is an album, this property is a list of + // potential additional thumbnails from the album. + Thumbnails []*ActivityObjectAttachmentsThumbnails `json:"thumbnails,omitempty"` + + // Url: The link to the attachment, which should be of type text/html. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsEmbed struct { + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the link. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsFullImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image URL. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectAttachmentsPreviewThumbnails struct { + // Url: URL of the thumbnail image. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsThumbnails struct { + // Description: Potential name of the thumbnail. + Description string `json:"description,omitempty"` + + // Image: Image resource. + Image *ActivityObjectAttachmentsThumbnailsImage `json:"image,omitempty"` + + // Url: URL of the webpage containing the image. + Url string `json:"url,omitempty"` +} + +type ActivityObjectAttachmentsThumbnailsImage struct { + // Height: The height, in pixels, of the linked resource. + Height int64 `json:"height,omitempty"` + + // Type: Media type of the link. + Type string `json:"type,omitempty"` + + // Url: Image url. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the linked resource. + Width int64 `json:"width,omitempty"` +} + +type ActivityObjectPlusoners struct { + // SelfLink: The URL for the collection of people who +1'd this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who +1'd this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectReplies struct { + // SelfLink: The URL for the collection of comments in reply to this + // activity. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of comments on this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectResharers struct { + // SelfLink: The URL for the collection of resharers. + SelfLink string `json:"selfLink,omitempty"` + + // TotalItems: Total number of people who reshared this activity. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ActivityObjectStatusForViewer struct { + // CanComment: Whether the viewer can comment on the activity. + CanComment bool `json:"canComment,omitempty"` + + // CanPlusone: Whether the viewer can +1 the activity. + CanPlusone bool `json:"canPlusone,omitempty"` + + // CanUpdate: Whether the viewer can edit or delete the activity. + CanUpdate bool `json:"canUpdate,omitempty"` + + // IsPlusOned: Whether the viewer has +1'd the activity. + IsPlusOned bool `json:"isPlusOned,omitempty"` + + // ResharingDisabled: Whether reshares are disabled for the activity. + ResharingDisabled bool `json:"resharingDisabled,omitempty"` +} + +type ActivityProvider struct { + // Title: Name of the service provider. + Title string `json:"title,omitempty"` +} + +type ActivityFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of activities. Deprecated. + Id string `json:"id,omitempty"` + + // Items: The activities in this page of results. + Items []*Activity `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of activities. Value: + // "plus#activityFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this activity resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of activities, which is a + // truncated portion of the content. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of activities was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type Audience struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Item: The access control list entry. + Item *PlusDomainsAclentryResource `json:"item,omitempty"` + + // Kind: Identifies this resource as an audience. Value: + // "plus#audience". + Kind string `json:"kind,omitempty"` + + // MemberCount: The number of people in this circle. This only applies + // if entity_type is CIRCLE. + MemberCount int64 `json:"memberCount,omitempty"` + + // Visibility: The circle members' visibility as chosen by the owner of + // the circle. This only applies for items with "item.type" equals + // "circle". Possible values are: + // - "public" - Members are visible to + // the public. + // - "limited" - Members are visible to a limited audience. + // + // - "private" - Members are visible to the owner only. + Visibility string `json:"visibility,omitempty"` +} + +type AudiencesFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The audiences in this result. + Items []*Audience `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of audiences. Value: + // "plus#audienceFeed". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: The total number of ACL entries. The number of entries in + // this response may be smaller due to paging. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Circle struct { + // Description: The description of this circle. + Description string `json:"description,omitempty"` + + // DisplayName: The circle name. + DisplayName string `json:"displayName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of the circle. + Id string `json:"id,omitempty"` + + // Kind: Identifies this resource as a circle. Value: "plus#circle". + Kind string `json:"kind,omitempty"` + + // People: The people in this circle. + People *CirclePeople `json:"people,omitempty"` + + // SelfLink: Link to this circle resource + SelfLink string `json:"selfLink,omitempty"` +} + +type CirclePeople struct { + // TotalItems: The total number of people in this circle. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type CircleFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The circles in this page of results. + Items []*Circle `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of circles. Value: + // "plus#circleFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of circles. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this page of circles. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this list of resources. + Title string `json:"title,omitempty"` + + // TotalItems: The total number of circles. The number of circles in + // this response may be smaller due to paging. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Comment struct { + // Actor: The person who posted this comment. + Actor *CommentActor `json:"actor,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this comment. + Id string `json:"id,omitempty"` + + // InReplyTo: The activity this comment replied to. + InReplyTo []*CommentInReplyTo `json:"inReplyTo,omitempty"` + + // Kind: Identifies this resource as a comment. Value: "plus#comment". + Kind string `json:"kind,omitempty"` + + // Object: The object of this comment. + Object *CommentObject `json:"object,omitempty"` + + // Plusoners: People who +1'd this comment. + Plusoners *CommentPlusoners `json:"plusoners,omitempty"` + + // Published: The time at which this comment was initially published. + // Formatted as an RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // SelfLink: Link to this comment resource. + SelfLink string `json:"selfLink,omitempty"` + + // Updated: The time at which this comment was last updated. Formatted + // as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Verb: This comment's verb, indicating what action was performed. + // Possible values are: + // - "post" - Publish content to the stream. + Verb string `json:"verb,omitempty"` +} + +type CommentActor struct { + // DisplayName: The name of this actor, suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the actor. + Id string `json:"id,omitempty"` + + // Image: The image representation of this actor. + Image *CommentActorImage `json:"image,omitempty"` + + // Url: A link to the Person resource for this actor. + Url string `json:"url,omitempty"` +} + +type CommentActorImage struct { + // Url: The URL of the actor's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type CommentInReplyTo struct { + // Id: The ID of the activity. + Id string `json:"id,omitempty"` + + // Url: The URL of the activity. + Url string `json:"url,omitempty"` +} + +type CommentObject struct { + // Content: The HTML-formatted content, suitable for display. + Content string `json:"content,omitempty"` + + // ObjectType: The object type of this comment. Possible values are: + // - + // "comment" - A comment in reply to an activity. + ObjectType string `json:"objectType,omitempty"` + + // OriginalContent: The content (text) as provided by the author, stored + // without any HTML formatting. When creating or updating a comment, + // this value must be supplied as plain text in the request. + OriginalContent string `json:"originalContent,omitempty"` +} + +type CommentPlusoners struct { + // TotalItems: Total number of people who +1'd this comment. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type CommentFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Id: The ID of this collection of comments. + Id string `json:"id,omitempty"` + + // Items: The comments in this page of results. + Items []*Comment `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of comments. Value: + // "plus#commentFeed". + Kind string `json:"kind,omitempty"` + + // NextLink: Link to the next page of activities. + NextLink string `json:"nextLink,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Title: The title of this collection of comments. + Title string `json:"title,omitempty"` + + // Updated: The time at which this collection of comments was last + // updated. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` +} + +type Media struct { + // Author: The person who uploaded this media. + Author *MediaAuthor `json:"author,omitempty"` + + // DisplayName: The display name for this media. + DisplayName string `json:"displayName,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Exif: Exif information of the media item. + Exif *MediaExif `json:"exif,omitempty"` + + // Height: The height in pixels of the original image. + Height int64 `json:"height,omitempty"` + + // Id: ID of this media, which is generated by the API. + Id string `json:"id,omitempty"` + + // Kind: The type of resource. + Kind string `json:"kind,omitempty"` + + // MediaCreatedTime: The time at which this media was originally created + // in UTC. Formatted as an RFC 3339 timestamp that matches this example: + // 2010-11-25T14:30:27.655Z + MediaCreatedTime string `json:"mediaCreatedTime,omitempty"` + + // MediaUrl: The URL of this photo or video's still image. + MediaUrl string `json:"mediaUrl,omitempty"` + + // Published: The time at which this media was uploaded. Formatted as an + // RFC 3339 timestamp. + Published string `json:"published,omitempty"` + + // SizeBytes: The size in bytes of this video. + SizeBytes int64 `json:"sizeBytes,omitempty,string"` + + // Streams: The list of video streams for this video. There might be + // several different streams available for a single video, either Flash + // or MPEG, of various sizes + Streams []*Videostream `json:"streams,omitempty"` + + // Summary: A description, or caption, for this media. + Summary string `json:"summary,omitempty"` + + // Updated: The time at which this media was last updated. This includes + // changes to media metadata. Formatted as an RFC 3339 timestamp. + Updated string `json:"updated,omitempty"` + + // Url: The URL for the page that hosts this media. + Url string `json:"url,omitempty"` + + // VideoDuration: The duration in milliseconds of this video. + VideoDuration int64 `json:"videoDuration,omitempty,string"` + + // VideoStatus: The encoding status of this video. Possible values are: + // + // - "UPLOADING" - Not all the video bytes have been received. + // - + // "PENDING" - Video not yet processed. + // - "FAILED" - Video processing + // failed. + // - "READY" - A single video stream is playable. + // - "FINAL" - + // All video streams are playable. + VideoStatus string `json:"videoStatus,omitempty"` + + // Width: The width in pixels of the original image. + Width int64 `json:"width,omitempty"` +} + +type MediaAuthor struct { + // DisplayName: The author's name. + DisplayName string `json:"displayName,omitempty"` + + // Id: ID of the author. + Id string `json:"id,omitempty"` + + // Image: The author's Google profile image. + Image *MediaAuthorImage `json:"image,omitempty"` + + // Url: A link to the author's Google profile. + Url string `json:"url,omitempty"` +} + +type MediaAuthorImage struct { + // Url: The URL of the author's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type MediaExif struct { + // Time: The time the media was captured. Formatted as an RFC 3339 + // timestamp. + Time string `json:"time,omitempty"` +} + +type PeopleFeed struct { + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Items: The people in this page of results. Each item includes the id, + // displayName, image, and url for the person. To retrieve additional + // profile data, see the people.get method. + Items []*Person `json:"items,omitempty"` + + // Kind: Identifies this resource as a collection of people. Value: + // "plus#peopleFeed". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, which is used to page through + // large result sets. Provide this value in a subsequent request to + // return the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: Link to this resource. + SelfLink string `json:"selfLink,omitempty"` + + // Title: The title of this collection of people. + Title string `json:"title,omitempty"` + + // TotalItems: The total number of people available in this list. The + // number of people in a response might be smaller due to paging. This + // might not be set for all collections. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type Person struct { + // AboutMe: A short biography for this person. + AboutMe string `json:"aboutMe,omitempty"` + + // Birthday: The person's date of birth, represented as YYYY-MM-DD. + Birthday string `json:"birthday,omitempty"` + + // BraggingRights: The "bragging rights" line of this person. + BraggingRights string `json:"braggingRights,omitempty"` + + // CircledByCount: For followers who are visible, the number of people + // who have added this person or page to a circle. + CircledByCount int64 `json:"circledByCount,omitempty"` + + // Cover: The cover photo content. + Cover *PersonCover `json:"cover,omitempty"` + + // CurrentLocation: The current location for this person. + CurrentLocation string `json:"currentLocation,omitempty"` + + // DisplayName: The name of this person, which is suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Domain: The hosted domain name for the user's Google Apps account. + // For instance, example.com. The plus.profile.emails.read or email + // scope is needed to get this domain name. + Domain string `json:"domain,omitempty"` + + // Emails: A list of email addresses that this person has, including + // their Google account email address, and the public verified email + // addresses on their Google+ profile. The plus.profile.emails.read + // scope is needed to retrieve these email addresses, or the email scope + // can be used to retrieve just the Google account email address. + Emails []*PersonEmails `json:"emails,omitempty"` + + // Etag: ETag of this response for caching purposes. + Etag string `json:"etag,omitempty"` + + // Gender: The person's gender. Possible values include, but are not + // limited to, the following values: + // - "male" - Male gender. + // - + // "female" - Female gender. + // - "other" - Other. + Gender string `json:"gender,omitempty"` + + // Id: The ID of this person. + Id string `json:"id,omitempty"` + + // Image: The representation of the person's profile photo. + Image *PersonImage `json:"image,omitempty"` + + // IsPlusUser: Whether this user has signed up for Google+. + IsPlusUser bool `json:"isPlusUser,omitempty"` + + // Kind: Identifies this resource as a person. Value: "plus#person". + Kind string `json:"kind,omitempty"` + + // Name: An object representation of the individual components of a + // person's name. + Name *PersonName `json:"name,omitempty"` + + // Nickname: The nickname of this person. + Nickname string `json:"nickname,omitempty"` + + // ObjectType: Type of person within Google+. Possible values include, + // but are not limited to, the following values: + // - "person" - + // represents an actual person. + // - "page" - represents a page. + ObjectType string `json:"objectType,omitempty"` + + // Occupation: The occupation of this person. + Occupation string `json:"occupation,omitempty"` + + // Organizations: A list of current or past organizations with which + // this person is associated. + Organizations []*PersonOrganizations `json:"organizations,omitempty"` + + // PlacesLived: A list of places where this person has lived. + PlacesLived []*PersonPlacesLived `json:"placesLived,omitempty"` + + // PlusOneCount: If a Google+ Page, the number of people who have +1'd + // this page. + PlusOneCount int64 `json:"plusOneCount,omitempty"` + + // RelationshipStatus: The person's relationship status. Possible values + // include, but are not limited to, the following values: + // - "single" - + // Person is single. + // - "in_a_relationship" - Person is in a + // relationship. + // - "engaged" - Person is engaged. + // - "married" - Person + // is married. + // - "its_complicated" - The relationship is complicated. + // + // - "open_relationship" - Person is in an open relationship. + // - + // "widowed" - Person is widowed. + // - "in_domestic_partnership" - Person + // is in a domestic partnership. + // - "in_civil_union" - Person is in a + // civil union. + RelationshipStatus string `json:"relationshipStatus,omitempty"` + + // Skills: The person's skills. + Skills string `json:"skills,omitempty"` + + // Tagline: The brief description (tagline) of this person. + Tagline string `json:"tagline,omitempty"` + + // Url: The URL of this person's profile. + Url string `json:"url,omitempty"` + + // Urls: A list of URLs for this person. + Urls []*PersonUrls `json:"urls,omitempty"` + + // Verified: Whether the person or Google+ Page has been verified. + Verified bool `json:"verified,omitempty"` +} + +type PersonCover struct { + // CoverInfo: Extra information about the cover photo. + CoverInfo *PersonCoverCoverInfo `json:"coverInfo,omitempty"` + + // CoverPhoto: The person's primary cover image. + CoverPhoto *PersonCoverCoverPhoto `json:"coverPhoto,omitempty"` + + // Layout: The layout of the cover art. Possible values include, but are + // not limited to, the following values: + // - "banner" - One large image + // banner. + Layout string `json:"layout,omitempty"` +} + +type PersonCoverCoverInfo struct { + // LeftImageOffset: The difference between the left position of the + // cover image and the actual displayed cover image. Only valid for + // banner layout. + LeftImageOffset int64 `json:"leftImageOffset,omitempty"` + + // TopImageOffset: The difference between the top position of the cover + // image and the actual displayed cover image. Only valid for banner + // layout. + TopImageOffset int64 `json:"topImageOffset,omitempty"` +} + +type PersonCoverCoverPhoto struct { + // Height: The height of the image. + Height int64 `json:"height,omitempty"` + + // Url: The URL of the image. + Url string `json:"url,omitempty"` + + // Width: The width of the image. + Width int64 `json:"width,omitempty"` +} + +type PersonEmails struct { + // Type: The type of address. Possible values include, but are not + // limited to, the following values: + // - "account" - Google account + // email address. + // - "home" - Home email address. + // - "work" - Work email + // address. + // - "other" - Other. + Type string `json:"type,omitempty"` + + // Value: The email address. + Value string `json:"value,omitempty"` +} + +type PersonImage struct { + // Url: The URL of the person's profile photo. To resize the image and + // crop it to a square, append the query string ?sz=x, where x is the + // dimension in pixels of each side. + Url string `json:"url,omitempty"` +} + +type PersonName struct { + // FamilyName: The family name (last name) of this person. + FamilyName string `json:"familyName,omitempty"` + + // Formatted: The full name of this person, including middle names, + // suffixes, etc. + Formatted string `json:"formatted,omitempty"` + + // GivenName: The given name (first name) of this person. + GivenName string `json:"givenName,omitempty"` + + // HonorificPrefix: The honorific prefixes (such as "Dr." or "Mrs.") for + // this person. + HonorificPrefix string `json:"honorificPrefix,omitempty"` + + // HonorificSuffix: The honorific suffixes (such as "Jr.") for this + // person. + HonorificSuffix string `json:"honorificSuffix,omitempty"` + + // MiddleName: The middle name of this person. + MiddleName string `json:"middleName,omitempty"` +} + +type PersonOrganizations struct { + // Department: The department within the organization. Deprecated. + Department string `json:"department,omitempty"` + + // Description: A short description of the person's role in this + // organization. Deprecated. + Description string `json:"description,omitempty"` + + // EndDate: The date that the person left this organization. + EndDate string `json:"endDate,omitempty"` + + // Location: The location of this organization. Deprecated. + Location string `json:"location,omitempty"` + + // Name: The name of the organization. + Name string `json:"name,omitempty"` + + // Primary: If "true", indicates this organization is the person's + // primary one, which is typically interpreted as the current one. + Primary bool `json:"primary,omitempty"` + + // StartDate: The date that the person joined this organization. + StartDate string `json:"startDate,omitempty"` + + // Title: The person's job title or role within the organization. + Title string `json:"title,omitempty"` + + // Type: The type of organization. Possible values include, but are not + // limited to, the following values: + // - "work" - Work. + // - "school" - + // School. + Type string `json:"type,omitempty"` +} + +type PersonPlacesLived struct { + // Primary: If "true", this place of residence is this person's primary + // residence. + Primary bool `json:"primary,omitempty"` + + // Value: A place where this person has lived. For example: "Seattle, + // WA", "Near Toronto". + Value string `json:"value,omitempty"` +} + +type PersonUrls struct { + // Label: The label of the URL. + Label string `json:"label,omitempty"` + + // Type: The type of URL. Possible values include, but are not limited + // to, the following values: + // - "otherProfile" - URL for another + // profile. + // - "contributor" - URL to a site for which this person is a + // contributor. + // - "website" - URL for this Google+ Page's primary + // website. + // - "other" - Other URL. + Type string `json:"type,omitempty"` + + // Value: The URL value. + Value string `json:"value,omitempty"` +} + +type Place struct { + // Address: The physical address of the place. + Address *PlaceAddress `json:"address,omitempty"` + + // DisplayName: The display name of the place. + DisplayName string `json:"displayName,omitempty"` + + // Kind: Identifies this resource as a place. Value: "plus#place". + Kind string `json:"kind,omitempty"` + + // Position: The position of the place. + Position *PlacePosition `json:"position,omitempty"` +} + +type PlaceAddress struct { + // Formatted: The formatted address for display. + Formatted string `json:"formatted,omitempty"` +} + +type PlacePosition struct { + // Latitude: The latitude of this position. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: The longitude of this position. + Longitude float64 `json:"longitude,omitempty"` +} + +type PlusDomainsAclentryResource struct { + // DisplayName: A descriptive name for this entry. Suitable for display. + DisplayName string `json:"displayName,omitempty"` + + // Id: The ID of the entry. For entries of type "person" or "circle", + // this is the ID of the resource. For other types, this property is not + // set. + Id string `json:"id,omitempty"` + + // Type: The type of entry describing to whom access is granted. + // Possible values are: + // - "person" - Access to an individual. + // - + // "circle" - Access to members of a circle. + // - "myCircles" - Access to + // members of all the person's circles. + // - "extendedCircles" - Access to + // members of all the person's circles, plus all of the people in their + // circles. + // - "domain" - Access to members of the person's Google Apps + // domain. + // - "public" - Access to anyone on the web. + Type string `json:"type,omitempty"` +} + +type Videostream struct { + // Height: The height, in pixels, of the video resource. + Height int64 `json:"height,omitempty"` + + // Type: MIME type of the video stream. + Type string `json:"type,omitempty"` + + // Url: URL of the video stream. + Url string `json:"url,omitempty"` + + // Width: The width, in pixels, of the video resource. + Width int64 `json:"width,omitempty"` +} + +// method id "plusDomains.activities.get": + +type ActivitiesGetCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// Get: Get an activity. +func (r *ActivitiesService) Get(activityId string) *ActivitiesGetCall { + c := &ActivitiesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +func (c *ActivitiesGetCall) Do() (*Activity, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get an activity.", + // "httpMethod": "GET", + // "id": "plusDomains.activities.get", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}", + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plusDomains.activities.insert": + +type ActivitiesInsertCall struct { + s *Service + userId string + activity *Activity + opt_ map[string]interface{} +} + +// Insert: Create a new activity for the authenticated user. +func (r *ActivitiesService) Insert(userId string, activity *Activity) *ActivitiesInsertCall { + c := &ActivitiesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.activity = activity + return c +} + +// Preview sets the optional parameter "preview": If "true", extract the +// potential media attachments for a URL. The response will include all +// possible attachments for a URL, including video, photos, and articles +// based on the content of the page. +func (c *ActivitiesInsertCall) Preview(preview bool) *ActivitiesInsertCall { + c.opt_["preview"] = preview + return c +} + +func (c *ActivitiesInsertCall) Do() (*Activity, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.activity) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["preview"]; ok { + params.Set("preview", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/activities") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Activity) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new activity for the authenticated user.", + // "httpMethod": "POST", + // "id": "plusDomains.activities.insert", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "preview": { + // "description": "If \"true\", extract the potential media attachments for a URL. The response will include all possible attachments for a URL, including video, photos, and articles based on the content of the page.", + // "location": "query", + // "type": "boolean" + // }, + // "userId": { + // "description": "The ID of the user to create the activity on behalf of. Its value should be \"me\", to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities", + // "request": { + // "$ref": "Activity" + // }, + // "response": { + // "$ref": "Activity" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.write" + // ] + // } + +} + +// method id "plusDomains.activities.list": + +type ActivitiesListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the activities in the specified collection for a +// particular user. +func (r *ActivitiesService) List(userId string, collection string) *ActivitiesListCall { + c := &ActivitiesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of activities to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *ActivitiesListCall) MaxResults(maxResults int64) *ActivitiesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *ActivitiesListCall) PageToken(pageToken string) *ActivitiesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *ActivitiesListCall) Do() (*ActivityFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/activities/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ActivityFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the activities in the specified collection for a particular user.", + // "httpMethod": "GET", + // "id": "plusDomains.activities.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of activities to list.", + // "enum": [ + // "user" + // ], + // "enumDescriptions": [ + // "All activities created by the specified user that the authenticated user is authorized to view." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of activities to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get activities for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/activities/{collection}", + // "response": { + // "$ref": "ActivityFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plusDomains.audiences.list": + +type AudiencesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: List all of the audiences to which a user can share. +func (r *AudiencesService) List(userId string) *AudiencesListCall { + c := &AudiencesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of circles to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *AudiencesListCall) MaxResults(maxResults int64) *AudiencesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *AudiencesListCall) PageToken(pageToken string) *AudiencesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *AudiencesListCall) Do() (*AudiencesFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/audiences") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(AudiencesFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the audiences to which a user can share.", + // "httpMethod": "GET", + // "id": "plusDomains.audiences.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "maxResults": { + // "default": "20", + // "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get audiences for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/audiences", + // "response": { + // "$ref": "AudiencesFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plusDomains.circles.addPeople": + +type CirclesAddPeopleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// AddPeople: Add a person to a circle. Google+ limits certain circle +// operations, including the number of circle adds. Learn More. +func (r *CirclesService) AddPeople(circleId string) *CirclesAddPeopleCall { + c := &CirclesAddPeopleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// Email sets the optional parameter "email": Email of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesAddPeopleCall) Email(email string) *CirclesAddPeopleCall { + c.opt_["email"] = email + return c +} + +// UserId sets the optional parameter "userId": IDs of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesAddPeopleCall) UserId(userId string) *CirclesAddPeopleCall { + c.opt_["userId"] = userId + return c +} + +func (c *CirclesAddPeopleCall) Do() (*Circle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["email"]; ok { + params.Set("email", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a person to a circle. Google+ limits certain circle operations, including the number of circle adds. Learn More.", + // "httpMethod": "PUT", + // "id": "plusDomains.circles.addPeople", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to add the person to.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "email": { + // "description": "Email of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "IDs of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.circles.get": + +type CirclesGetCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// Get: Get a circle. +func (r *CirclesService) Get(circleId string) *CirclesGetCall { + c := &CirclesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +func (c *CirclesGetCall) Do() (*Circle, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a circle.", + // "httpMethod": "GET", + // "id": "plusDomains.circles.get", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.circles.insert": + +type CirclesInsertCall struct { + s *Service + userId string + circle *Circle + opt_ map[string]interface{} +} + +// Insert: Create a new circle for the authenticated user. +func (r *CirclesService) Insert(userId string, circle *Circle) *CirclesInsertCall { + c := &CirclesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.circle = circle + return c +} + +func (c *CirclesInsertCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/circles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new circle for the authenticated user.", + // "httpMethod": "POST", + // "id": "plusDomains.circles.insert", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the user to create the circle on behalf of. The value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/circles", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plusDomains.circles.list": + +type CirclesListCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// List: List all of the circles for a user. +func (r *CirclesService) List(userId string) *CirclesListCall { + c := &CirclesListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of circles to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *CirclesListCall) MaxResults(maxResults int64) *CirclesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *CirclesListCall) PageToken(pageToken string) *CirclesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *CirclesListCall) Do() (*CircleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/circles") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CircleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the circles for a user.", + // "httpMethod": "GET", + // "id": "plusDomains.circles.list", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "maxResults": { + // "default": "20", + // "description": "The maximum number of circles to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to get circles for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/circles", + // "response": { + // "$ref": "CircleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plusDomains.circles.patch": + +type CirclesPatchCall struct { + s *Service + circleId string + circle *Circle + opt_ map[string]interface{} +} + +// Patch: Update a circle's description. This method supports patch +// semantics. +func (r *CirclesService) Patch(circleId string, circle *Circle) *CirclesPatchCall { + c := &CirclesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + c.circle = circle + return c +} + +func (c *CirclesPatchCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a circle's description. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "plusDomains.circles.patch", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.circles.remove": + +type CirclesRemoveCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// Remove: Delete a circle. +func (r *CirclesService) Remove(circleId string) *CirclesRemoveCall { + c := &CirclesRemoveCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +func (c *CirclesRemoveCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a circle.", + // "httpMethod": "DELETE", + // "id": "plusDomains.circles.remove", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.circles.removePeople": + +type CirclesRemovePeopleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// RemovePeople: Remove a person from a circle. +func (r *CirclesService) RemovePeople(circleId string) *CirclesRemovePeopleCall { + c := &CirclesRemovePeopleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// Email sets the optional parameter "email": Email of the people to add +// to the circle. Optional, can be repeated. +func (c *CirclesRemovePeopleCall) Email(email string) *CirclesRemovePeopleCall { + c.opt_["email"] = email + return c +} + +// UserId sets the optional parameter "userId": IDs of the people to +// remove from the circle. Optional, can be repeated. +func (c *CirclesRemovePeopleCall) UserId(userId string) *CirclesRemovePeopleCall { + c.opt_["userId"] = userId + return c +} + +func (c *CirclesRemovePeopleCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["email"]; ok { + params.Set("email", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["userId"]; ok { + params.Set("userId", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Remove a person from a circle.", + // "httpMethod": "DELETE", + // "id": "plusDomains.circles.removePeople", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to remove the person from.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "email": { + // "description": "Email of the people to add to the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "userId": { + // "description": "IDs of the people to remove from the circle. Optional, can be repeated.", + // "location": "query", + // "repeated": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.circles.update": + +type CirclesUpdateCall struct { + s *Service + circleId string + circle *Circle + opt_ map[string]interface{} +} + +// Update: Update a circle's description. +func (r *CirclesService) Update(circleId string, circle *Circle) *CirclesUpdateCall { + c := &CirclesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + c.circle = circle + return c +} + +func (c *CirclesUpdateCall) Do() (*Circle, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.circle) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Circle) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a circle's description.", + // "httpMethod": "PUT", + // "id": "plusDomains.circles.update", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to update.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "circles/{circleId}", + // "request": { + // "$ref": "Circle" + // }, + // "response": { + // "$ref": "Circle" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.write", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} + +// method id "plusDomains.comments.get": + +type CommentsGetCall struct { + s *Service + commentId string + opt_ map[string]interface{} +} + +// Get: Get a comment. +func (r *CommentsService) Get(commentId string) *CommentsGetCall { + c := &CommentsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.commentId = commentId + return c +} + +func (c *CommentsGetCall) Do() (*Comment, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "comments/{commentId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{commentId}", url.QueryEscape(c.commentId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a comment.", + // "httpMethod": "GET", + // "id": "plusDomains.comments.get", + // "parameterOrder": [ + // "commentId" + // ], + // "parameters": { + // "commentId": { + // "description": "The ID of the comment to get.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "comments/{commentId}", + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plusDomains.comments.insert": + +type CommentsInsertCall struct { + s *Service + activityId string + comment *Comment + opt_ map[string]interface{} +} + +// Insert: Create a new comment in reply to an activity. +func (r *CommentsService) Insert(activityId string, comment *Comment) *CommentsInsertCall { + c := &CommentsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.comment = comment + return c +} + +func (c *CommentsInsertCall) Do() (*Comment, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.comment) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Comment) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Create a new comment in reply to an activity.", + // "httpMethod": "POST", + // "id": "plusDomains.comments.insert", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to reply to.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "request": { + // "$ref": "Comment" + // }, + // "response": { + // "$ref": "Comment" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.write" + // ] + // } + +} + +// method id "plusDomains.comments.list": + +type CommentsListCall struct { + s *Service + activityId string + opt_ map[string]interface{} +} + +// List: List all of the comments for an activity. +func (r *CommentsService) List(activityId string) *CommentsListCall { + c := &CommentsListCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of comments to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *CommentsListCall) MaxResults(maxResults int64) *CommentsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *CommentsListCall) PageToken(pageToken string) *CommentsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// SortOrder sets the optional parameter "sortOrder": The order in which +// to sort the list of comments. +func (c *CommentsListCall) SortOrder(sortOrder string) *CommentsListCall { + c.opt_["sortOrder"] = sortOrder + return c +} + +func (c *CommentsListCall) Do() (*CommentFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sortOrder"]; ok { + params.Set("sortOrder", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/comments") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(CommentFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the comments for an activity.", + // "httpMethod": "GET", + // "id": "plusDomains.comments.list", + // "parameterOrder": [ + // "activityId" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get comments for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of comments to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "500", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "sortOrder": { + // "default": "ascending", + // "description": "The order in which to sort the list of comments.", + // "enum": [ + // "ascending", + // "descending" + // ], + // "enumDescriptions": [ + // "Sort oldest comments first.", + // "Sort newest comments first." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/comments", + // "response": { + // "$ref": "CommentFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plusDomains.media.insert": + +type MediaInsertCall struct { + s *Service + userId string + collection string + media *Media + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Add a new media item to an album. The current upload size +// limitations are 36MB for a photo and 1GB for a video. Uploads do not +// count against quota if photos are less than 2048 pixels on their +// longest side or videos are less than 15 minutes in length. +func (r *MediaService) Insert(userId string, collection string, media *Media) *MediaInsertCall { + c := &MediaInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + c.media = media + return c +} +func (c *MediaInsertCall) Media(r io.Reader) *MediaInsertCall { + c.media_ = r + return c +} + +func (c *MediaInsertCall) Do() (*Media, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.media) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/media/{collection}") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Media) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add a new media item to an album. The current upload size limitations are 36MB for a photo and 1GB for a video. Uploads do not count against quota if photos are less than 2048 pixels on their longest side or videos are less than 15 minutes in length.", + // "httpMethod": "POST", + // "id": "plusDomains.media.insert", + // "mediaUpload": { + // "accept": [ + // "image/*", + // "video/*" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/plusDomains/v1/people/{userId}/media/{collection}" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/plusDomains/v1/people/{userId}/media/{collection}" + // } + // } + // }, + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "enum": [ + // "cloud" + // ], + // "enumDescriptions": [ + // "Upload the media to share on Google+." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "userId": { + // "description": "The ID of the user to create the activity on behalf of.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/media/{collection}", + // "request": { + // "$ref": "Media" + // }, + // "response": { + // "$ref": "Media" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.media.upload" + // ], + // "supportsMediaUpload": true + // } + +} + +// method id "plusDomains.people.get": + +type PeopleGetCall struct { + s *Service + userId string + opt_ map[string]interface{} +} + +// Get: Get a person's profile. +func (r *PeopleService) Get(userId string) *PeopleGetCall { + c := &PeopleGetCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + return c +} + +func (c *PeopleGetCall) Do() (*Person, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Person) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a person's profile.", + // "httpMethod": "GET", + // "id": "plusDomains.people.get", + // "parameterOrder": [ + // "userId" + // ], + // "parameters": { + // "userId": { + // "description": "The ID of the person to get the profile for. The special value \"me\" can be used to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}", + // "response": { + // "$ref": "Person" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me", + // "https://www.googleapis.com/auth/plus.profiles.read", + // "https://www.googleapis.com/auth/userinfo.email", + // "https://www.googleapis.com/auth/userinfo.profile" + // ] + // } + +} + +// method id "plusDomains.people.list": + +type PeopleListCall struct { + s *Service + userId string + collection string + opt_ map[string]interface{} +} + +// List: List all of the people in the specified collection. +func (r *PeopleService) List(userId string, collection string) *PeopleListCall { + c := &PeopleListCall{s: r.s, opt_: make(map[string]interface{})} + c.userId = userId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListCall) MaxResults(maxResults int64) *PeopleListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// OrderBy sets the optional parameter "orderBy": The order to return +// people in. +func (c *PeopleListCall) OrderBy(orderBy string) *PeopleListCall { + c.opt_["orderBy"] = orderBy + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListCall) PageToken(pageToken string) *PeopleListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["orderBy"]; ok { + params.Set("orderBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "people/{userId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{userId}", url.QueryEscape(c.userId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection.", + // "httpMethod": "GET", + // "id": "plusDomains.people.list", + // "parameterOrder": [ + // "userId", + // "collection" + // ], + // "parameters": { + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "circled" + // ], + // "enumDescriptions": [ + // "The list of people who this user has added to one or more circles." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "100", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "orderBy": { + // "description": "The order to return people in.", + // "enum": [ + // "alphabetical", + // "best" + // ], + // "enumDescriptions": [ + // "Order the people by their display name.", + // "Order people based on the relevence to the viewer." + // ], + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // }, + // "userId": { + // "description": "Get the collection of people for the person identified. Use \"me\" to indicate the authenticated user.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "people/{userId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.me" + // ] + // } + +} + +// method id "plusDomains.people.listByActivity": + +type PeopleListByActivityCall struct { + s *Service + activityId string + collection string + opt_ map[string]interface{} +} + +// ListByActivity: List all of the people in the specified collection +// for a particular activity. +func (r *PeopleService) ListByActivity(activityId string, collection string) *PeopleListByActivityCall { + c := &PeopleListByActivityCall{s: r.s, opt_: make(map[string]interface{})} + c.activityId = activityId + c.collection = collection + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListByActivityCall) MaxResults(maxResults int64) *PeopleListByActivityCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListByActivityCall) PageToken(pageToken string) *PeopleListByActivityCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListByActivityCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "activities/{activityId}/people/{collection}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{activityId}", url.QueryEscape(c.activityId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{collection}", url.QueryEscape(c.collection), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people in the specified collection for a particular activity.", + // "httpMethod": "GET", + // "id": "plusDomains.people.listByActivity", + // "parameterOrder": [ + // "activityId", + // "collection" + // ], + // "parameters": { + // "activityId": { + // "description": "The ID of the activity to get the list of people for.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "collection": { + // "description": "The collection of people to list.", + // "enum": [ + // "plusoners", + // "resharers", + // "sharedto" + // ], + // "enumDescriptions": [ + // "List all people who have +1'd this activity.", + // "List all people who have reshared this activity.", + // "List all people who this activity was shared to." + // ], + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "activities/{activityId}/people/{collection}", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.login", + // "https://www.googleapis.com/auth/plus.stream.read" + // ] + // } + +} + +// method id "plusDomains.people.listByCircle": + +type PeopleListByCircleCall struct { + s *Service + circleId string + opt_ map[string]interface{} +} + +// ListByCircle: List all of the people who are members of a circle. +func (r *PeopleService) ListByCircle(circleId string) *PeopleListByCircleCall { + c := &PeopleListByCircleCall{s: r.s, opt_: make(map[string]interface{})} + c.circleId = circleId + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of people to include in the response, which is used for +// paging. For any response, the actual number returned might be less +// than the specified maxResults. +func (c *PeopleListByCircleCall) MaxResults(maxResults int64) *PeopleListByCircleCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": The continuation +// token, which is used to page through large result sets. To get the +// next page of results, set this parameter to the value of +// "nextPageToken" from the previous response. +func (c *PeopleListByCircleCall) PageToken(pageToken string) *PeopleListByCircleCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *PeopleListByCircleCall) Do() (*PeopleFeed, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "circles/{circleId}/people") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{circleId}", url.QueryEscape(c.circleId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PeopleFeed) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all of the people who are members of a circle.", + // "httpMethod": "GET", + // "id": "plusDomains.people.listByCircle", + // "parameterOrder": [ + // "circleId" + // ], + // "parameters": { + // "circleId": { + // "description": "The ID of the circle to get the members of.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "default": "20", + // "description": "The maximum number of people to include in the response, which is used for paging. For any response, the actual number returned might be less than the specified maxResults.", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "The continuation token, which is used to page through large result sets. To get the next page of results, set this parameter to the value of \"nextPageToken\" from the previous response.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "circles/{circleId}/people", + // "response": { + // "$ref": "PeopleFeed" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/plus.circles.read", + // "https://www.googleapis.com/auth/plus.login" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-api.json b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-api.json new file mode 100644 index 0000000000000..2f587c579797c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-api.json @@ -0,0 +1,353 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/09e1Ml5Gun7YuEJCdDnZKGXCSr8\"", + "discoveryVersion": "v1", + "id": "prediction:v1.2", + "name": "prediction", + "version": "v1.2", + "title": "Prediction API", + "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/predictionapi-16.png", + "x32": "http://www.google.com/images/icons/feature/predictionapi-32.png" + }, + "documentationLink": "https://developers.google.com/prediction/docs/developer-guide", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/prediction/v1.2/", + "basePath": "/prediction/v1.2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "prediction/v1.2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/prediction": { + "description": "Manage your data in the Google Prediction API" + } + } + } + }, + "schemas": { + "Input": { + "id": "Input", + "type": "object", + "properties": { + "input": { + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "items": { + "type": "any" + } + } + } + } + } + }, + "Output": { + "id": "Output", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "kind": { + "type": "string", + "default": "prediction#output" + }, + "outputLabel": { + "type": "string" + }, + "outputMulti": { + "type": "array", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string" + }, + "score": { + "type": "number", + "format": "double" + } + } + } + }, + "outputValue": { + "type": "number", + "format": "double" + }, + "selfLink": { + "type": "string" + } + } + }, + "Training": { + "id": "Training", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "kind": { + "type": "string", + "default": "prediction#training" + }, + "modelInfo": { + "type": "object", + "properties": { + "classificationAccuracy": { + "type": "number", + "format": "double" + }, + "meanSquaredError": { + "type": "number", + "format": "double" + }, + "modelType": { + "type": "string" + } + } + }, + "selfLink": { + "type": "string" + }, + "trainingStatus": { + "type": "string" + } + } + }, + "Update": { + "id": "Update", + "type": "object", + "properties": { + "classLabel": { + "type": "string", + "description": "The true class label of this instance" + }, + "csvInstance": { + "type": "array", + "description": "The input features for this instance", + "items": { + "type": "any" + } + } + } + } + }, + "methods": { + "predict": { + "id": "prediction.predict", + "path": "training/{data}/predict", + "httpMethod": "POST", + "description": "Submit data and request a prediction", + "parameters": { + "data": { + "type": "string", + "description": "mybucket%2Fmydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + }, + "resources": { + "hostedmodels": { + "methods": { + "predict": { + "id": "prediction.hostedmodels.predict", + "path": "hostedmodels/{hostedModelName}/predict", + "httpMethod": "POST", + "description": "Submit input and request an output against a hosted model", + "parameters": { + "hostedModelName": { + "type": "string", + "description": "The name of a hosted model", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "hostedModelName" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + }, + "training": { + "methods": { + "delete": { + "id": "prediction.training.delete", + "path": "training/{data}", + "httpMethod": "DELETE", + "description": "Delete a trained model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "get": { + "id": "prediction.training.get", + "path": "training/{data}", + "httpMethod": "GET", + "description": "Check training status of your model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "insert": { + "id": "prediction.training.insert", + "path": "training", + "httpMethod": "POST", + "description": "Begin training your model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "location": "query" + } + }, + "request": { + "$ref": "Training" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write", + "https://www.googleapis.com/auth/prediction" + ] + }, + "update": { + "id": "prediction.training.update", + "path": "training/{data}", + "httpMethod": "PUT", + "description": "Add new data to a trained model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "request": { + "$ref": "Update" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-gen.go b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-gen.go new file mode 100644 index 0000000000000..79de40ad4791c --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.2/prediction-gen.go @@ -0,0 +1,575 @@ +// Package prediction provides access to the Prediction API. +// +// See https://developers.google.com/prediction/docs/developer-guide +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/prediction/v1.2" +// ... +// predictionService, err := prediction.New(oauthHttpClient) +package prediction + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "prediction:v1.2" +const apiName = "prediction" +const apiVersion = "v1.2" +const basePath = "https://www.googleapis.com/prediction/v1.2/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" + + // Manage your data in the Google Prediction API + PredictionScope = "https://www.googleapis.com/auth/prediction" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Hostedmodels = NewHostedmodelsService(s) + s.Training = NewTrainingService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Hostedmodels *HostedmodelsService + + Training *TrainingService +} + +func NewHostedmodelsService(s *Service) *HostedmodelsService { + rs := &HostedmodelsService{s: s} + return rs +} + +type HostedmodelsService struct { + s *Service +} + +func NewTrainingService(s *Service) *TrainingService { + rs := &TrainingService{s: s} + return rs +} + +type TrainingService struct { + s *Service +} + +type Input struct { + Input *InputInput `json:"input,omitempty"` +} + +type InputInput struct { + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +type Output struct { + Id string `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + OutputLabel string `json:"outputLabel,omitempty"` + + OutputMulti []*OutputOutputMulti `json:"outputMulti,omitempty"` + + OutputValue float64 `json:"outputValue,omitempty"` + + SelfLink string `json:"selfLink,omitempty"` +} + +type OutputOutputMulti struct { + Label string `json:"label,omitempty"` + + Score float64 `json:"score,omitempty"` +} + +type Training struct { + Id string `json:"id,omitempty"` + + Kind string `json:"kind,omitempty"` + + ModelInfo *TrainingModelInfo `json:"modelInfo,omitempty"` + + SelfLink string `json:"selfLink,omitempty"` + + TrainingStatus string `json:"trainingStatus,omitempty"` +} + +type TrainingModelInfo struct { + ClassificationAccuracy float64 `json:"classificationAccuracy,omitempty"` + + MeanSquaredError float64 `json:"meanSquaredError,omitempty"` + + ModelType string `json:"modelType,omitempty"` +} + +type Update struct { + // ClassLabel: The true class label of this instance + ClassLabel string `json:"classLabel,omitempty"` + + // CsvInstance: The input features for this instance + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +// method id "prediction.predict": + +type PredictCall struct { + s *Service + data string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit data and request a prediction +func (s *Service) Predict(data string, input *Input) *PredictCall { + c := &PredictCall{s: s, opt_: make(map[string]interface{})} + c.data = data + c.input = input + return c +} + +func (c *PredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit data and request a prediction", + // "httpMethod": "POST", + // "id": "prediction.predict", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket%2Fmydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.hostedmodels.predict": + +type HostedmodelsPredictCall struct { + s *Service + hostedModelName string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit input and request an output against a hosted model +func (r *HostedmodelsService) Predict(hostedModelName string, input *Input) *HostedmodelsPredictCall { + c := &HostedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.hostedModelName = hostedModelName + c.input = input + return c +} + +func (c *HostedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "hostedmodels/{hostedModelName}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{hostedModelName}", url.QueryEscape(c.hostedModelName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit input and request an output against a hosted model", + // "httpMethod": "POST", + // "id": "prediction.hostedmodels.predict", + // "parameterOrder": [ + // "hostedModelName" + // ], + // "parameters": { + // "hostedModelName": { + // "description": "The name of a hosted model", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "hostedmodels/{hostedModelName}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.delete": + +type TrainingDeleteCall struct { + s *Service + data string + opt_ map[string]interface{} +} + +// Delete: Delete a trained model +func (r *TrainingService) Delete(data string) *TrainingDeleteCall { + c := &TrainingDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + return c +} + +func (c *TrainingDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a trained model", + // "httpMethod": "DELETE", + // "id": "prediction.training.delete", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.get": + +type TrainingGetCall struct { + s *Service + data string + opt_ map[string]interface{} +} + +// Get: Check training status of your model +func (r *TrainingService) Get(data string) *TrainingGetCall { + c := &TrainingGetCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + return c +} + +func (c *TrainingGetCall) Do() (*Training, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Check training status of your model", + // "httpMethod": "GET", + // "id": "prediction.training.get", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.insert": + +type TrainingInsertCall struct { + s *Service + training *Training + opt_ map[string]interface{} +} + +// Insert: Begin training your model +func (r *TrainingService) Insert(training *Training) *TrainingInsertCall { + c := &TrainingInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.training = training + return c +} + +// Data sets the optional parameter "data": mybucket/mydata resource in +// Google Storage +func (c *TrainingInsertCall) Data(data string) *TrainingInsertCall { + c.opt_["data"] = data + return c +} + +func (c *TrainingInsertCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.training) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["data"]; ok { + params.Set("data", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "training") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin training your model", + // "httpMethod": "POST", + // "id": "prediction.training.insert", + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "training", + // "request": { + // "$ref": "Training" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write", + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.update": + +type TrainingUpdateCall struct { + s *Service + data string + update *Update + opt_ map[string]interface{} +} + +// Update: Add new data to a trained model +func (r *TrainingService) Update(data string, update *Update) *TrainingUpdateCall { + c := &TrainingUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + c.update = update + return c +} + +func (c *TrainingUpdateCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.update) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add new data to a trained model", + // "httpMethod": "PUT", + // "id": "prediction.training.update", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "request": { + // "$ref": "Update" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-api.json b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-api.json new file mode 100644 index 0000000000000..cbcdd7338aa92 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-api.json @@ -0,0 +1,411 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/LnKBxoqCwKX9VdR55fP9N9U7tho\"", + "discoveryVersion": "v1", + "id": "prediction:v1.3", + "name": "prediction", + "version": "v1.3", + "title": "Prediction API", + "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/predictionapi-16.png", + "x32": "http://www.google.com/images/icons/feature/predictionapi-32.png" + }, + "documentationLink": "https://developers.google.com/prediction/docs/developer-guide", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/prediction/v1.3/", + "basePath": "/prediction/v1.3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "prediction/v1.3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/prediction": { + "description": "Manage your data in the Google Prediction API" + } + } + } + }, + "schemas": { + "Input": { + "id": "Input", + "type": "object", + "properties": { + "input": { + "type": "object", + "description": "Input to the model for a prediction", + "properties": { + "csvInstance": { + "type": "array", + "description": "A list of input features, these can be strings or doubles.", + "items": { + "type": "any" + } + } + } + } + } + }, + "Output": { + "id": "Output", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#output" + }, + "outputLabel": { + "type": "string", + "description": "The most likely class [Categorical models only]." + }, + "outputMulti": { + "type": "array", + "description": "A list of classes with their estimated probabilities [Categorical models only].", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The class label." + }, + "score": { + "type": "number", + "description": "The probability of the class.", + "format": "double" + } + } + } + }, + "outputValue": { + "type": "number", + "description": "The estimated regression value [Regression models only].", + "format": "double" + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Training": { + "id": "Training", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#training" + }, + "modelInfo": { + "type": "object", + "description": "Model metadata.", + "properties": { + "classWeightedAccuracy": { + "type": "number", + "description": "Estimated accuracy of model taking utility weights into account [Categorical models only].", + "format": "double" + }, + "classificationAccuracy": { + "type": "number", + "description": "A number between 0.0 and 1.0, where 1.0 is 100% accurate. This is an estimate, based on the amount and quality of the training data, of the estimated prediction accuracy. You can use this is a guide to decide whether the results are accurate enough for your needs. This estimate will be more reliable if your real input data is similar to your training data [Categorical models only].", + "format": "double" + }, + "confusionMatrix": { + "type": "object", + "description": "An output confusion matrix. This shows an estimate for how this model will do in predictions. This is first indexed by the true class label. For each true class label, this provides a pair {predicted_label, count}, where count is the estimated number of times the model will predict the predicted label given the true label. Will not output if more then 100 classes [Categorical models only].", + "additionalProperties": { + "type": "object", + "description": "The true class label.", + "additionalProperties": { + "type": "number", + "description": "The pair {predicted_label, count}.", + "format": "double" + } + } + }, + "confusionMatrixRowTotals": { + "type": "object", + "description": "A list of the confusion matrix row totals", + "additionalProperties": { + "type": "number", + "description": "The true class associated with how many instances it had", + "format": "double" + } + }, + "meanSquaredError": { + "type": "number", + "description": "An estimated mean squared error. The can be used to measure the quality of the predicted model [Regression models only].", + "format": "double" + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (CLASSIFICATION or REGRESSION)" + }, + "numberClasses": { + "type": "string", + "description": "Number of classes in the trained model [Categorical models only].", + "format": "int64" + }, + "numberInstances": { + "type": "string", + "description": "Number of valid data instances used in the trained model.", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + }, + "trainingStatus": { + "type": "string", + "description": "The current status of the training job. This can be one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND" + }, + "utility": { + "type": "array", + "description": "A class weighting function, which allows the importance weights for classes to be specified [Categorical models only].", + "items": { + "type": "object", + "description": "Class label (string).", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + } + } + }, + "Update": { + "id": "Update", + "type": "object", + "properties": { + "classLabel": { + "type": "string", + "description": "The true class label of this instance" + }, + "csvInstance": { + "type": "array", + "description": "The input features for this instance", + "items": { + "type": "any" + } + } + } + } + }, + "resources": { + "hostedmodels": { + "methods": { + "predict": { + "id": "prediction.hostedmodels.predict", + "path": "hostedmodels/{hostedModelName}/predict", + "httpMethod": "POST", + "description": "Submit input and request an output against a hosted model", + "parameters": { + "hostedModelName": { + "type": "string", + "description": "The name of a hosted model", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "hostedModelName" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + }, + "training": { + "methods": { + "delete": { + "id": "prediction.training.delete", + "path": "training/{data}", + "httpMethod": "DELETE", + "description": "Delete a trained model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "get": { + "id": "prediction.training.get", + "path": "training/{data}", + "httpMethod": "GET", + "description": "Check training status of your model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "insert": { + "id": "prediction.training.insert", + "path": "training", + "httpMethod": "POST", + "description": "Begin training your model", + "request": { + "$ref": "Training" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write", + "https://www.googleapis.com/auth/prediction" + ] + }, + "predict": { + "id": "prediction.training.predict", + "path": "training/{data}/predict", + "httpMethod": "POST", + "description": "Submit data and request a prediction", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "update": { + "id": "prediction.training.update", + "path": "training/{data}", + "httpMethod": "PUT", + "description": "Add new data to a trained model", + "parameters": { + "data": { + "type": "string", + "description": "mybucket/mydata resource in Google Storage", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "data" + ], + "request": { + "$ref": "Update" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-gen.go b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-gen.go new file mode 100644 index 0000000000000..e359ef9cf403f --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.3/prediction-gen.go @@ -0,0 +1,623 @@ +// Package prediction provides access to the Prediction API. +// +// See https://developers.google.com/prediction/docs/developer-guide +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/prediction/v1.3" +// ... +// predictionService, err := prediction.New(oauthHttpClient) +package prediction + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "prediction:v1.3" +const apiName = "prediction" +const apiVersion = "v1.3" +const basePath = "https://www.googleapis.com/prediction/v1.3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" + + // Manage your data in the Google Prediction API + PredictionScope = "https://www.googleapis.com/auth/prediction" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Hostedmodels = NewHostedmodelsService(s) + s.Training = NewTrainingService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Hostedmodels *HostedmodelsService + + Training *TrainingService +} + +func NewHostedmodelsService(s *Service) *HostedmodelsService { + rs := &HostedmodelsService{s: s} + return rs +} + +type HostedmodelsService struct { + s *Service +} + +func NewTrainingService(s *Service) *TrainingService { + rs := &TrainingService{s: s} + return rs +} + +type TrainingService struct { + s *Service +} + +type Input struct { + // Input: Input to the model for a prediction + Input *InputInput `json:"input,omitempty"` +} + +type InputInput struct { + // CsvInstance: A list of input features, these can be strings or + // doubles. + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +type Output struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OutputLabel: The most likely class [Categorical models only]. + OutputLabel string `json:"outputLabel,omitempty"` + + // OutputMulti: A list of classes with their estimated probabilities + // [Categorical models only]. + OutputMulti []*OutputOutputMulti `json:"outputMulti,omitempty"` + + // OutputValue: The estimated regression value [Regression models only]. + OutputValue float64 `json:"outputValue,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type OutputOutputMulti struct { + // Label: The class label. + Label string `json:"label,omitempty"` + + // Score: The probability of the class. + Score float64 `json:"score,omitempty"` +} + +type Training struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelInfo: Model metadata. + ModelInfo *TrainingModelInfo `json:"modelInfo,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` + + // TrainingStatus: The current status of the training job. This can be + // one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND + TrainingStatus string `json:"trainingStatus,omitempty"` + + // Utility: A class weighting function, which allows the importance + // weights for classes to be specified [Categorical models only]. + Utility []*TrainingUtility `json:"utility,omitempty"` +} + +type TrainingModelInfo struct { + // ClassWeightedAccuracy: Estimated accuracy of model taking utility + // weights into account [Categorical models only]. + ClassWeightedAccuracy float64 `json:"classWeightedAccuracy,omitempty"` + + // ClassificationAccuracy: A number between 0.0 and 1.0, where 1.0 is + // 100% accurate. This is an estimate, based on the amount and quality + // of the training data, of the estimated prediction accuracy. You can + // use this is a guide to decide whether the results are accurate enough + // for your needs. This estimate will be more reliable if your real + // input data is similar to your training data [Categorical models + // only]. + ClassificationAccuracy float64 `json:"classificationAccuracy,omitempty"` + + // ConfusionMatrix: An output confusion matrix. This shows an estimate + // for how this model will do in predictions. This is first indexed by + // the true class label. For each true class label, this provides a pair + // {predicted_label, count}, where count is the estimated number of + // times the model will predict the predicted label given the true + // label. Will not output if more then 100 classes [Categorical models + // only]. + ConfusionMatrix *TrainingModelInfoConfusionMatrix `json:"confusionMatrix,omitempty"` + + // ConfusionMatrixRowTotals: A list of the confusion matrix row totals + ConfusionMatrixRowTotals *TrainingModelInfoConfusionMatrixRowTotals `json:"confusionMatrixRowTotals,omitempty"` + + // MeanSquaredError: An estimated mean squared error. The can be used to + // measure the quality of the predicted model [Regression models only]. + MeanSquaredError float64 `json:"meanSquaredError,omitempty"` + + // ModelType: Type of predictive model (CLASSIFICATION or REGRESSION) + ModelType string `json:"modelType,omitempty"` + + // NumberClasses: Number of classes in the trained model [Categorical + // models only]. + NumberClasses int64 `json:"numberClasses,omitempty,string"` + + // NumberInstances: Number of valid data instances used in the trained + // model. + NumberInstances int64 `json:"numberInstances,omitempty,string"` +} + +type TrainingModelInfoConfusionMatrix struct { +} + +type TrainingModelInfoConfusionMatrixRowTotals struct { +} + +type TrainingUtility struct { +} + +type Update struct { + // ClassLabel: The true class label of this instance + ClassLabel string `json:"classLabel,omitempty"` + + // CsvInstance: The input features for this instance + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +// method id "prediction.hostedmodels.predict": + +type HostedmodelsPredictCall struct { + s *Service + hostedModelName string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit input and request an output against a hosted model +func (r *HostedmodelsService) Predict(hostedModelName string, input *Input) *HostedmodelsPredictCall { + c := &HostedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.hostedModelName = hostedModelName + c.input = input + return c +} + +func (c *HostedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "hostedmodels/{hostedModelName}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{hostedModelName}", url.QueryEscape(c.hostedModelName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit input and request an output against a hosted model", + // "httpMethod": "POST", + // "id": "prediction.hostedmodels.predict", + // "parameterOrder": [ + // "hostedModelName" + // ], + // "parameters": { + // "hostedModelName": { + // "description": "The name of a hosted model", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "hostedmodels/{hostedModelName}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.delete": + +type TrainingDeleteCall struct { + s *Service + data string + opt_ map[string]interface{} +} + +// Delete: Delete a trained model +func (r *TrainingService) Delete(data string) *TrainingDeleteCall { + c := &TrainingDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + return c +} + +func (c *TrainingDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a trained model", + // "httpMethod": "DELETE", + // "id": "prediction.training.delete", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.get": + +type TrainingGetCall struct { + s *Service + data string + opt_ map[string]interface{} +} + +// Get: Check training status of your model +func (r *TrainingService) Get(data string) *TrainingGetCall { + c := &TrainingGetCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + return c +} + +func (c *TrainingGetCall) Do() (*Training, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Check training status of your model", + // "httpMethod": "GET", + // "id": "prediction.training.get", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.insert": + +type TrainingInsertCall struct { + s *Service + training *Training + opt_ map[string]interface{} +} + +// Insert: Begin training your model +func (r *TrainingService) Insert(training *Training) *TrainingInsertCall { + c := &TrainingInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.training = training + return c +} + +func (c *TrainingInsertCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.training) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin training your model", + // "httpMethod": "POST", + // "id": "prediction.training.insert", + // "path": "training", + // "request": { + // "$ref": "Training" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write", + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.predict": + +type TrainingPredictCall struct { + s *Service + data string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit data and request a prediction +func (r *TrainingService) Predict(data string, input *Input) *TrainingPredictCall { + c := &TrainingPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + c.input = input + return c +} + +func (c *TrainingPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit data and request a prediction", + // "httpMethod": "POST", + // "id": "prediction.training.predict", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.training.update": + +type TrainingUpdateCall struct { + s *Service + data string + update *Update + opt_ map[string]interface{} +} + +// Update: Add new data to a trained model +func (r *TrainingService) Update(data string, update *Update) *TrainingUpdateCall { + c := &TrainingUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.data = data + c.update = update + return c +} + +func (c *TrainingUpdateCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.update) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "training/{data}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{data}", url.QueryEscape(c.data), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add new data to a trained model", + // "httpMethod": "PUT", + // "id": "prediction.training.update", + // "parameterOrder": [ + // "data" + // ], + // "parameters": { + // "data": { + // "description": "mybucket/mydata resource in Google Storage", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "training/{data}", + // "request": { + // "$ref": "Update" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-api.json b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-api.json new file mode 100644 index 0000000000000..9796320eb8371 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-api.json @@ -0,0 +1,436 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/UHTvp9INyqQZLFiUGGWOxf3PFTA\"", + "discoveryVersion": "v1", + "id": "prediction:v1.4", + "name": "prediction", + "version": "v1.4", + "title": "Prediction API", + "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/predictionapi-16.png", + "x32": "http://www.google.com/images/icons/feature/predictionapi-32.png" + }, + "documentationLink": "https://developers.google.com/prediction/docs/developer-guide", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/prediction/v1.4/", + "basePath": "/prediction/v1.4/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "prediction/v1.4/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/prediction": { + "description": "Manage your data in the Google Prediction API" + } + } + } + }, + "schemas": { + "Input": { + "id": "Input", + "type": "object", + "properties": { + "input": { + "type": "object", + "description": "Input to the model for a prediction", + "properties": { + "csvInstance": { + "type": "array", + "description": "A list of input features, these can be strings or doubles.", + "items": { + "type": "any" + } + } + } + } + } + }, + "Output": { + "id": "Output", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#output" + }, + "outputLabel": { + "type": "string", + "description": "The most likely class label [Categorical models only]." + }, + "outputMulti": { + "type": "array", + "description": "A list of class labels with their estimated probabilities [Categorical models only].", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The class label." + }, + "score": { + "type": "number", + "description": "The probability of the class label.", + "format": "double" + } + } + } + }, + "outputValue": { + "type": "number", + "description": "The estimated regression value [Regression models only].", + "format": "double" + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Training": { + "id": "Training", + "type": "object", + "properties": { + "dataAnalysis": { + "type": "object", + "description": "Data Analysis.", + "properties": { + "warnings": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#training" + }, + "modelInfo": { + "type": "object", + "description": "Model metadata.", + "properties": { + "classWeightedAccuracy": { + "type": "number", + "description": "Estimated accuracy of model taking utility weights into account [Categorical models only].", + "format": "double" + }, + "classificationAccuracy": { + "type": "number", + "description": "A number between 0.0 and 1.0, where 1.0 is 100% accurate. This is an estimate, based on the amount and quality of the training data, of the estimated prediction accuracy. You can use this is a guide to decide whether the results are accurate enough for your needs. This estimate will be more reliable if your real input data is similar to your training data [Categorical models only].", + "format": "double" + }, + "confusionMatrix": { + "type": "object", + "description": "An output confusion matrix. This shows an estimate for how this model will do in predictions. This is first indexed by the true class label. For each true class label, this provides a pair {predicted_label, count}, where count is the estimated number of times the model will predict the predicted label given the true label. Will not output if more then 100 classes [Categorical models only].", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + }, + "confusionMatrixRowTotals": { + "type": "object", + "description": "A list of the confusion matrix row totals", + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "meanSquaredError": { + "type": "number", + "description": "An estimated mean squared error. The can be used to measure the quality of the predicted model [Regression models only].", + "format": "double" + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (CLASSIFICATION or REGRESSION)" + }, + "numberInstances": { + "type": "string", + "description": "Number of valid data instances used in the trained model.", + "format": "int64" + }, + "numberLabels": { + "type": "string", + "description": "Number of class labels in the trained model [Categorical models only].", + "format": "int64" + } + } + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + }, + "storageDataLocation": { + "type": "string", + "description": "Google storage location of the training data file." + }, + "storagePMMLLocation": { + "type": "string", + "description": "Google storage location of the preprocessing pmml file." + }, + "storagePMMLModelLocation": { + "type": "string", + "description": "Google storage location of the pmml model file." + }, + "trainingStatus": { + "type": "string", + "description": "The current status of the training job. This can be one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND" + }, + "utility": { + "type": "array", + "description": "A class weighting function, which allows the importance weights for class labels to be specified [Categorical models only].", + "items": { + "type": "object", + "description": "Class label (string).", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + } + } + }, + "Update": { + "id": "Update", + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "description": "The input features for this instance", + "items": { + "type": "any" + } + }, + "label": { + "type": "string", + "description": "The class label of this instance" + }, + "output": { + "type": "string", + "description": "The generic output value - could be regression value or class label" + } + } + } + }, + "resources": { + "hostedmodels": { + "methods": { + "predict": { + "id": "prediction.hostedmodels.predict", + "path": "hostedmodels/{hostedModelName}/predict", + "httpMethod": "POST", + "description": "Submit input and request an output against a hosted model.", + "parameters": { + "hostedModelName": { + "type": "string", + "description": "The name of a hosted model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "hostedModelName" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + }, + "trainedmodels": { + "methods": { + "delete": { + "id": "prediction.trainedmodels.delete", + "path": "trainedmodels/{id}", + "httpMethod": "DELETE", + "description": "Delete a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "get": { + "id": "prediction.trainedmodels.get", + "path": "trainedmodels/{id}", + "httpMethod": "GET", + "description": "Check training status of your model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "insert": { + "id": "prediction.trainedmodels.insert", + "path": "trainedmodels", + "httpMethod": "POST", + "description": "Begin training your model.", + "request": { + "$ref": "Training" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write", + "https://www.googleapis.com/auth/prediction" + ] + }, + "predict": { + "id": "prediction.trainedmodels.predict", + "path": "trainedmodels/{id}/predict", + "httpMethod": "POST", + "description": "Submit model id and request a prediction", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "update": { + "id": "prediction.trainedmodels.update", + "path": "trainedmodels/{id}", + "httpMethod": "PUT", + "description": "Add new data to a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Update" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-gen.go b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-gen.go new file mode 100644 index 0000000000000..1081a0004f8a9 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.4/prediction-gen.go @@ -0,0 +1,646 @@ +// Package prediction provides access to the Prediction API. +// +// See https://developers.google.com/prediction/docs/developer-guide +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/prediction/v1.4" +// ... +// predictionService, err := prediction.New(oauthHttpClient) +package prediction + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "prediction:v1.4" +const apiName = "prediction" +const apiVersion = "v1.4" +const basePath = "https://www.googleapis.com/prediction/v1.4/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" + + // Manage your data in the Google Prediction API + PredictionScope = "https://www.googleapis.com/auth/prediction" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Hostedmodels = NewHostedmodelsService(s) + s.Trainedmodels = NewTrainedmodelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Hostedmodels *HostedmodelsService + + Trainedmodels *TrainedmodelsService +} + +func NewHostedmodelsService(s *Service) *HostedmodelsService { + rs := &HostedmodelsService{s: s} + return rs +} + +type HostedmodelsService struct { + s *Service +} + +func NewTrainedmodelsService(s *Service) *TrainedmodelsService { + rs := &TrainedmodelsService{s: s} + return rs +} + +type TrainedmodelsService struct { + s *Service +} + +type Input struct { + // Input: Input to the model for a prediction + Input *InputInput `json:"input,omitempty"` +} + +type InputInput struct { + // CsvInstance: A list of input features, these can be strings or + // doubles. + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +type Output struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OutputLabel: The most likely class label [Categorical models only]. + OutputLabel string `json:"outputLabel,omitempty"` + + // OutputMulti: A list of class labels with their estimated + // probabilities [Categorical models only]. + OutputMulti []*OutputOutputMulti `json:"outputMulti,omitempty"` + + // OutputValue: The estimated regression value [Regression models only]. + OutputValue float64 `json:"outputValue,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type OutputOutputMulti struct { + // Label: The class label. + Label string `json:"label,omitempty"` + + // Score: The probability of the class label. + Score float64 `json:"score,omitempty"` +} + +type Training struct { + // DataAnalysis: Data Analysis. + DataAnalysis *TrainingDataAnalysis `json:"dataAnalysis,omitempty"` + + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelInfo: Model metadata. + ModelInfo *TrainingModelInfo `json:"modelInfo,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` + + // StorageDataLocation: Google storage location of the training data + // file. + StorageDataLocation string `json:"storageDataLocation,omitempty"` + + // StoragePMMLLocation: Google storage location of the preprocessing + // pmml file. + StoragePMMLLocation string `json:"storagePMMLLocation,omitempty"` + + // StoragePMMLModelLocation: Google storage location of the pmml model + // file. + StoragePMMLModelLocation string `json:"storagePMMLModelLocation,omitempty"` + + // TrainingStatus: The current status of the training job. This can be + // one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND + TrainingStatus string `json:"trainingStatus,omitempty"` + + // Utility: A class weighting function, which allows the importance + // weights for class labels to be specified [Categorical models only]. + Utility []*TrainingUtility `json:"utility,omitempty"` +} + +type TrainingDataAnalysis struct { + Warnings []string `json:"warnings,omitempty"` +} + +type TrainingModelInfo struct { + // ClassWeightedAccuracy: Estimated accuracy of model taking utility + // weights into account [Categorical models only]. + ClassWeightedAccuracy float64 `json:"classWeightedAccuracy,omitempty"` + + // ClassificationAccuracy: A number between 0.0 and 1.0, where 1.0 is + // 100% accurate. This is an estimate, based on the amount and quality + // of the training data, of the estimated prediction accuracy. You can + // use this is a guide to decide whether the results are accurate enough + // for your needs. This estimate will be more reliable if your real + // input data is similar to your training data [Categorical models + // only]. + ClassificationAccuracy float64 `json:"classificationAccuracy,omitempty"` + + // ConfusionMatrix: An output confusion matrix. This shows an estimate + // for how this model will do in predictions. This is first indexed by + // the true class label. For each true class label, this provides a pair + // {predicted_label, count}, where count is the estimated number of + // times the model will predict the predicted label given the true + // label. Will not output if more then 100 classes [Categorical models + // only]. + ConfusionMatrix *TrainingModelInfoConfusionMatrix `json:"confusionMatrix,omitempty"` + + // ConfusionMatrixRowTotals: A list of the confusion matrix row totals + ConfusionMatrixRowTotals *TrainingModelInfoConfusionMatrixRowTotals `json:"confusionMatrixRowTotals,omitempty"` + + // MeanSquaredError: An estimated mean squared error. The can be used to + // measure the quality of the predicted model [Regression models only]. + MeanSquaredError float64 `json:"meanSquaredError,omitempty"` + + // ModelType: Type of predictive model (CLASSIFICATION or REGRESSION) + ModelType string `json:"modelType,omitempty"` + + // NumberInstances: Number of valid data instances used in the trained + // model. + NumberInstances int64 `json:"numberInstances,omitempty,string"` + + // NumberLabels: Number of class labels in the trained model + // [Categorical models only]. + NumberLabels int64 `json:"numberLabels,omitempty,string"` +} + +type TrainingModelInfoConfusionMatrix struct { +} + +type TrainingModelInfoConfusionMatrixRowTotals struct { +} + +type TrainingUtility struct { +} + +type Update struct { + // CsvInstance: The input features for this instance + CsvInstance []interface{} `json:"csvInstance,omitempty"` + + // Label: The class label of this instance + Label string `json:"label,omitempty"` + + // Output: The generic output value - could be regression value or class + // label + Output string `json:"output,omitempty"` +} + +// method id "prediction.hostedmodels.predict": + +type HostedmodelsPredictCall struct { + s *Service + hostedModelName string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit input and request an output against a hosted model. +func (r *HostedmodelsService) Predict(hostedModelName string, input *Input) *HostedmodelsPredictCall { + c := &HostedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.hostedModelName = hostedModelName + c.input = input + return c +} + +func (c *HostedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "hostedmodels/{hostedModelName}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{hostedModelName}", url.QueryEscape(c.hostedModelName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit input and request an output against a hosted model.", + // "httpMethod": "POST", + // "id": "prediction.hostedmodels.predict", + // "parameterOrder": [ + // "hostedModelName" + // ], + // "parameters": { + // "hostedModelName": { + // "description": "The name of a hosted model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "hostedmodels/{hostedModelName}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.delete": + +type TrainedmodelsDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Delete a trained model. +func (r *TrainedmodelsService) Delete(id string) *TrainedmodelsDeleteCall { + c := &TrainedmodelsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TrainedmodelsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a trained model.", + // "httpMethod": "DELETE", + // "id": "prediction.trainedmodels.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.get": + +type TrainedmodelsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Check training status of your model. +func (r *TrainedmodelsService) Get(id string) *TrainedmodelsGetCall { + c := &TrainedmodelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TrainedmodelsGetCall) Do() (*Training, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Check training status of your model.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.insert": + +type TrainedmodelsInsertCall struct { + s *Service + training *Training + opt_ map[string]interface{} +} + +// Insert: Begin training your model. +func (r *TrainedmodelsService) Insert(training *Training) *TrainedmodelsInsertCall { + c := &TrainedmodelsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.training = training + return c +} + +func (c *TrainedmodelsInsertCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.training) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin training your model.", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.insert", + // "path": "trainedmodels", + // "request": { + // "$ref": "Training" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write", + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.predict": + +type TrainedmodelsPredictCall struct { + s *Service + id string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit model id and request a prediction +func (r *TrainedmodelsService) Predict(id string, input *Input) *TrainedmodelsPredictCall { + c := &TrainedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.input = input + return c +} + +func (c *TrainedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit model id and request a prediction", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.predict", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.update": + +type TrainedmodelsUpdateCall struct { + s *Service + id string + update *Update + opt_ map[string]interface{} +} + +// Update: Add new data to a trained model. +func (r *TrainedmodelsService) Update(id string, update *Update) *TrainedmodelsUpdateCall { + c := &TrainedmodelsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.update = update + return c +} + +func (c *TrainedmodelsUpdateCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.update) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add new data to a trained model.", + // "httpMethod": "PUT", + // "id": "prediction.trainedmodels.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "request": { + // "$ref": "Update" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-api.json b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-api.json new file mode 100644 index 0000000000000..630bc357e236e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-api.json @@ -0,0 +1,699 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/ym-BJa5yGEZsHgX-PiovxSth2PY\"", + "discoveryVersion": "v1", + "id": "prediction:v1.5", + "name": "prediction", + "version": "v1.5", + "title": "Prediction API", + "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/predictionapi-16.png", + "x32": "http://www.google.com/images/icons/feature/predictionapi-32.png" + }, + "documentationLink": "https://developers.google.com/prediction/docs/developer-guide", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/prediction/v1.5/", + "basePath": "/prediction/v1.5/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "prediction/v1.5/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/prediction": { + "description": "Manage your data in the Google Prediction API" + } + } + } + }, + "schemas": { + "Analyze": { + "id": "Analyze", + "type": "object", + "properties": { + "dataDescription": { + "type": "object", + "description": "Description of the data the model was trained on.", + "properties": { + "features": { + "type": "array", + "description": "Description of the input features in the data set.", + "items": { + "type": "object", + "properties": { + "categorical": { + "type": "object", + "description": "Description of the categorical values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of categorical values for this feature in the data.", + "format": "int64" + }, + "values": { + "type": "array", + "description": "List of all the categories for this feature in the data set.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Number of times this feature had this value.", + "format": "int64" + }, + "value": { + "type": "string", + "description": "The category name." + } + } + } + } + } + }, + "index": { + "type": "string", + "description": "The feature index.", + "format": "int64" + }, + "numeric": { + "type": "object", + "description": "Description of the numeric values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of numeric values for this feature in the data set.", + "format": "int64" + }, + "mean": { + "type": "number", + "description": "Mean of the numeric values of this feature in the data set.", + "format": "double" + }, + "variance": { + "type": "number", + "description": "Variance of the numeric values of this feature in the data set.", + "format": "double" + } + } + }, + "text": { + "type": "object", + "description": "Description of multiple-word text values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of multiple-word text values for this feature.", + "format": "int64" + } + } + } + } + } + }, + "outputFeature": { + "type": "object", + "description": "Description of the output value or label.", + "properties": { + "numeric": { + "type": "object", + "description": "Description of the output values in the data set.", + "properties": { + "count": { + "type": "string", + "description": "Number of numeric output values in the data set.", + "format": "int64" + }, + "mean": { + "type": "number", + "description": "Mean of the output values in the data set.", + "format": "double" + }, + "variance": { + "type": "number", + "description": "Variance of the output values in the data set.", + "format": "double" + } + } + }, + "text": { + "type": "array", + "description": "Description of the output labels in the data set.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Number of times the output label occurred in the data set.", + "format": "int64" + }, + "value": { + "type": "string", + "description": "The output label." + } + } + } + } + } + } + } + }, + "errors": { + "type": "array", + "description": "List of errors with the data.", + "items": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Error level followed by a detailed error message." + } + } + }, + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#analyze" + }, + "modelDescription": { + "type": "object", + "description": "Description of the model.", + "properties": { + "confusionMatrix": { + "type": "object", + "description": "An output confusion matrix. This shows an estimate for how this model will do in predictions. This is first indexed by the true class label. For each true class label, this provides a pair {predicted_label, count}, where count is the estimated number of times the model will predict the predicted label given the true label. Will not output if more then 100 classes [Categorical models only].", + "additionalProperties": { + "type": "object", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + }, + "confusionMatrixRowTotals": { + "type": "object", + "description": "A list of the confusion matrix row totals", + "additionalProperties": { + "type": "number", + "format": "double" + } + }, + "modelinfo": { + "$ref": "Training", + "description": "Basic information about the model." + } + } + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Input": { + "id": "Input", + "type": "object", + "properties": { + "input": { + "type": "object", + "description": "Input to the model for a prediction", + "properties": { + "csvInstance": { + "type": "array", + "description": "A list of input features, these can be strings or doubles.", + "items": { + "type": "any" + } + } + } + } + } + }, + "List": { + "id": "List", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of models.", + "items": { + "$ref": "Training" + } + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#list" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Output": { + "id": "Output", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#output" + }, + "outputLabel": { + "type": "string", + "description": "The most likely class label [Categorical models only]." + }, + "outputMulti": { + "type": "array", + "description": "A list of class labels with their estimated probabilities [Categorical models only].", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The class label." + }, + "score": { + "type": "number", + "description": "The probability of the class label.", + "format": "double" + } + } + } + }, + "outputValue": { + "type": "number", + "description": "The estimated regression value [Regression models only].", + "format": "double" + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Training": { + "id": "Training", + "type": "object", + "properties": { + "created": { + "type": "string", + "description": "Insert time of the model (as a RFC 3339 timestamp).", + "format": "date-time" + }, + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#training" + }, + "modelInfo": { + "type": "object", + "description": "Model metadata.", + "properties": { + "classWeightedAccuracy": { + "type": "number", + "description": "Estimated accuracy of model taking utility weights into account [Categorical models only].", + "format": "double" + }, + "classificationAccuracy": { + "type": "number", + "description": "A number between 0.0 and 1.0, where 1.0 is 100% accurate. This is an estimate, based on the amount and quality of the training data, of the estimated prediction accuracy. You can use this is a guide to decide whether the results are accurate enough for your needs. This estimate will be more reliable if your real input data is similar to your training data [Categorical models only].", + "format": "double" + }, + "meanSquaredError": { + "type": "number", + "description": "An estimated mean squared error. The can be used to measure the quality of the predicted model [Regression models only].", + "format": "double" + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (CLASSIFICATION or REGRESSION)" + }, + "numberInstances": { + "type": "string", + "description": "Number of valid data instances used in the trained model.", + "format": "int64" + }, + "numberLabels": { + "type": "string", + "description": "Number of class labels in the trained model [Categorical models only].", + "format": "int64" + } + } + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (classification or regression)" + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + }, + "storageDataLocation": { + "type": "string", + "description": "Google storage location of the training data file." + }, + "storagePMMLLocation": { + "type": "string", + "description": "Google storage location of the preprocessing pmml file." + }, + "storagePMMLModelLocation": { + "type": "string", + "description": "Google storage location of the pmml model file." + }, + "trainingComplete": { + "type": "string", + "description": "Training completion time (as a RFC 3339 timestamp).", + "format": "date-time" + }, + "trainingInstances": { + "type": "array", + "description": "Instances to train model on.", + "items": { + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "description": "The input features for this instance", + "items": { + "type": "any" + } + }, + "output": { + "type": "string", + "description": "The generic output value - could be regression or class label" + } + } + } + }, + "trainingStatus": { + "type": "string", + "description": "The current status of the training job. This can be one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND" + }, + "utility": { + "type": "array", + "description": "A class weighting function, which allows the importance weights for class labels to be specified [Categorical models only].", + "items": { + "type": "object", + "description": "Class label (string).", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + } + } + }, + "Update": { + "id": "Update", + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "description": "The input features for this instance", + "items": { + "type": "any" + } + }, + "label": { + "type": "string", + "description": "The class label of this instance" + }, + "output": { + "type": "string", + "description": "The generic output value - could be regression value or class label" + } + } + } + }, + "resources": { + "hostedmodels": { + "methods": { + "predict": { + "id": "prediction.hostedmodels.predict", + "path": "hostedmodels/{hostedModelName}/predict", + "httpMethod": "POST", + "description": "Submit input and request an output against a hosted model.", + "parameters": { + "hostedModelName": { + "type": "string", + "description": "The name of a hosted model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "hostedModelName" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + }, + "trainedmodels": { + "methods": { + "analyze": { + "id": "prediction.trainedmodels.analyze", + "path": "trainedmodels/{id}/analyze", + "httpMethod": "GET", + "description": "Get analysis of the model and the data the model was trained on.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Analyze" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "delete": { + "id": "prediction.trainedmodels.delete", + "path": "trainedmodels/{id}", + "httpMethod": "DELETE", + "description": "Delete a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "get": { + "id": "prediction.trainedmodels.get", + "path": "trainedmodels/{id}", + "httpMethod": "GET", + "description": "Check training status of your model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "insert": { + "id": "prediction.trainedmodels.insert", + "path": "trainedmodels", + "httpMethod": "POST", + "description": "Begin training your model.", + "request": { + "$ref": "Training" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write", + "https://www.googleapis.com/auth/prediction" + ] + }, + "list": { + "id": "prediction.trainedmodels.list", + "path": "trainedmodels/list", + "httpMethod": "GET", + "description": "List available models.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Pagination token", + "location": "query" + } + }, + "response": { + "$ref": "List" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "predict": { + "id": "prediction.trainedmodels.predict", + "path": "trainedmodels/{id}/predict", + "httpMethod": "POST", + "description": "Submit model id and request a prediction.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "update": { + "id": "prediction.trainedmodels.update", + "path": "trainedmodels/{id}", + "httpMethod": "PUT", + "description": "Add new data to a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "Update" + }, + "response": { + "$ref": "Training" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-gen.go b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-gen.go new file mode 100644 index 0000000000000..09ac794abc2c5 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.5/prediction-gen.go @@ -0,0 +1,929 @@ +// Package prediction provides access to the Prediction API. +// +// See https://developers.google.com/prediction/docs/developer-guide +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/prediction/v1.5" +// ... +// predictionService, err := prediction.New(oauthHttpClient) +package prediction + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "prediction:v1.5" +const apiName = "prediction" +const apiVersion = "v1.5" +const basePath = "https://www.googleapis.com/prediction/v1.5/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" + + // Manage your data in the Google Prediction API + PredictionScope = "https://www.googleapis.com/auth/prediction" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Hostedmodels = NewHostedmodelsService(s) + s.Trainedmodels = NewTrainedmodelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Hostedmodels *HostedmodelsService + + Trainedmodels *TrainedmodelsService +} + +func NewHostedmodelsService(s *Service) *HostedmodelsService { + rs := &HostedmodelsService{s: s} + return rs +} + +type HostedmodelsService struct { + s *Service +} + +func NewTrainedmodelsService(s *Service) *TrainedmodelsService { + rs := &TrainedmodelsService{s: s} + return rs +} + +type TrainedmodelsService struct { + s *Service +} + +type Analyze struct { + // DataDescription: Description of the data the model was trained on. + DataDescription *AnalyzeDataDescription `json:"dataDescription,omitempty"` + + // Errors: List of errors with the data. + Errors []map[string]string `json:"errors,omitempty"` + + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelDescription: Description of the model. + ModelDescription *AnalyzeModelDescription `json:"modelDescription,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type AnalyzeDataDescription struct { + // Features: Description of the input features in the data set. + Features []*AnalyzeDataDescriptionFeatures `json:"features,omitempty"` + + // OutputFeature: Description of the output value or label. + OutputFeature *AnalyzeDataDescriptionOutputFeature `json:"outputFeature,omitempty"` +} + +type AnalyzeDataDescriptionFeatures struct { + // Categorical: Description of the categorical values of this feature. + Categorical *AnalyzeDataDescriptionFeaturesCategorical `json:"categorical,omitempty"` + + // Index: The feature index. + Index int64 `json:"index,omitempty,string"` + + // Numeric: Description of the numeric values of this feature. + Numeric *AnalyzeDataDescriptionFeaturesNumeric `json:"numeric,omitempty"` + + // Text: Description of multiple-word text values of this feature. + Text *AnalyzeDataDescriptionFeaturesText `json:"text,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesCategorical struct { + // Count: Number of categorical values for this feature in the data. + Count int64 `json:"count,omitempty,string"` + + // Values: List of all the categories for this feature in the data set. + Values []*AnalyzeDataDescriptionFeaturesCategoricalValues `json:"values,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesCategoricalValues struct { + // Count: Number of times this feature had this value. + Count int64 `json:"count,omitempty,string"` + + // Value: The category name. + Value string `json:"value,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesNumeric struct { + // Count: Number of numeric values for this feature in the data set. + Count int64 `json:"count,omitempty,string"` + + // Mean: Mean of the numeric values of this feature in the data set. + Mean float64 `json:"mean,omitempty"` + + // Variance: Variance of the numeric values of this feature in the data + // set. + Variance float64 `json:"variance,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesText struct { + // Count: Number of multiple-word text values for this feature. + Count int64 `json:"count,omitempty,string"` +} + +type AnalyzeDataDescriptionOutputFeature struct { + // Numeric: Description of the output values in the data set. + Numeric *AnalyzeDataDescriptionOutputFeatureNumeric `json:"numeric,omitempty"` + + // Text: Description of the output labels in the data set. + Text []*AnalyzeDataDescriptionOutputFeatureText `json:"text,omitempty"` +} + +type AnalyzeDataDescriptionOutputFeatureNumeric struct { + // Count: Number of numeric output values in the data set. + Count int64 `json:"count,omitempty,string"` + + // Mean: Mean of the output values in the data set. + Mean float64 `json:"mean,omitempty"` + + // Variance: Variance of the output values in the data set. + Variance float64 `json:"variance,omitempty"` +} + +type AnalyzeDataDescriptionOutputFeatureText struct { + // Count: Number of times the output label occurred in the data set. + Count int64 `json:"count,omitempty,string"` + + // Value: The output label. + Value string `json:"value,omitempty"` +} + +type AnalyzeModelDescription struct { + // ConfusionMatrix: An output confusion matrix. This shows an estimate + // for how this model will do in predictions. This is first indexed by + // the true class label. For each true class label, this provides a pair + // {predicted_label, count}, where count is the estimated number of + // times the model will predict the predicted label given the true + // label. Will not output if more then 100 classes [Categorical models + // only]. + ConfusionMatrix *AnalyzeModelDescriptionConfusionMatrix `json:"confusionMatrix,omitempty"` + + // ConfusionMatrixRowTotals: A list of the confusion matrix row totals + ConfusionMatrixRowTotals *AnalyzeModelDescriptionConfusionMatrixRowTotals `json:"confusionMatrixRowTotals,omitempty"` + + // Modelinfo: Basic information about the model. + Modelinfo *Training `json:"modelinfo,omitempty"` +} + +type AnalyzeModelDescriptionConfusionMatrix struct { +} + +type AnalyzeModelDescriptionConfusionMatrixRowTotals struct { +} + +type Input struct { + // Input: Input to the model for a prediction + Input *InputInput `json:"input,omitempty"` +} + +type InputInput struct { + // CsvInstance: A list of input features, these can be strings or + // doubles. + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +type List struct { + // Items: List of models. + Items []*Training `json:"items,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type Output struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OutputLabel: The most likely class label [Categorical models only]. + OutputLabel string `json:"outputLabel,omitempty"` + + // OutputMulti: A list of class labels with their estimated + // probabilities [Categorical models only]. + OutputMulti []*OutputOutputMulti `json:"outputMulti,omitempty"` + + // OutputValue: The estimated regression value [Regression models only]. + OutputValue float64 `json:"outputValue,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type OutputOutputMulti struct { + // Label: The class label. + Label string `json:"label,omitempty"` + + // Score: The probability of the class label. + Score float64 `json:"score,omitempty"` +} + +type Training struct { + // Created: Insert time of the model (as a RFC 3339 timestamp). + Created string `json:"created,omitempty"` + + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelInfo: Model metadata. + ModelInfo *TrainingModelInfo `json:"modelInfo,omitempty"` + + // ModelType: Type of predictive model (classification or regression) + ModelType string `json:"modelType,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` + + // StorageDataLocation: Google storage location of the training data + // file. + StorageDataLocation string `json:"storageDataLocation,omitempty"` + + // StoragePMMLLocation: Google storage location of the preprocessing + // pmml file. + StoragePMMLLocation string `json:"storagePMMLLocation,omitempty"` + + // StoragePMMLModelLocation: Google storage location of the pmml model + // file. + StoragePMMLModelLocation string `json:"storagePMMLModelLocation,omitempty"` + + // TrainingComplete: Training completion time (as a RFC 3339 timestamp). + TrainingComplete string `json:"trainingComplete,omitempty"` + + // TrainingInstances: Instances to train model on. + TrainingInstances []*TrainingTrainingInstances `json:"trainingInstances,omitempty"` + + // TrainingStatus: The current status of the training job. This can be + // one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND + TrainingStatus string `json:"trainingStatus,omitempty"` + + // Utility: A class weighting function, which allows the importance + // weights for class labels to be specified [Categorical models only]. + Utility []*TrainingUtility `json:"utility,omitempty"` +} + +type TrainingModelInfo struct { + // ClassWeightedAccuracy: Estimated accuracy of model taking utility + // weights into account [Categorical models only]. + ClassWeightedAccuracy float64 `json:"classWeightedAccuracy,omitempty"` + + // ClassificationAccuracy: A number between 0.0 and 1.0, where 1.0 is + // 100% accurate. This is an estimate, based on the amount and quality + // of the training data, of the estimated prediction accuracy. You can + // use this is a guide to decide whether the results are accurate enough + // for your needs. This estimate will be more reliable if your real + // input data is similar to your training data [Categorical models + // only]. + ClassificationAccuracy float64 `json:"classificationAccuracy,omitempty"` + + // MeanSquaredError: An estimated mean squared error. The can be used to + // measure the quality of the predicted model [Regression models only]. + MeanSquaredError float64 `json:"meanSquaredError,omitempty"` + + // ModelType: Type of predictive model (CLASSIFICATION or REGRESSION) + ModelType string `json:"modelType,omitempty"` + + // NumberInstances: Number of valid data instances used in the trained + // model. + NumberInstances int64 `json:"numberInstances,omitempty,string"` + + // NumberLabels: Number of class labels in the trained model + // [Categorical models only]. + NumberLabels int64 `json:"numberLabels,omitempty,string"` +} + +type TrainingTrainingInstances struct { + // CsvInstance: The input features for this instance + CsvInstance []interface{} `json:"csvInstance,omitempty"` + + // Output: The generic output value - could be regression or class label + Output string `json:"output,omitempty"` +} + +type TrainingUtility struct { +} + +type Update struct { + // CsvInstance: The input features for this instance + CsvInstance []interface{} `json:"csvInstance,omitempty"` + + // Label: The class label of this instance + Label string `json:"label,omitempty"` + + // Output: The generic output value - could be regression value or class + // label + Output string `json:"output,omitempty"` +} + +// method id "prediction.hostedmodels.predict": + +type HostedmodelsPredictCall struct { + s *Service + hostedModelName string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit input and request an output against a hosted model. +func (r *HostedmodelsService) Predict(hostedModelName string, input *Input) *HostedmodelsPredictCall { + c := &HostedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.hostedModelName = hostedModelName + c.input = input + return c +} + +func (c *HostedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "hostedmodels/{hostedModelName}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{hostedModelName}", url.QueryEscape(c.hostedModelName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit input and request an output against a hosted model.", + // "httpMethod": "POST", + // "id": "prediction.hostedmodels.predict", + // "parameterOrder": [ + // "hostedModelName" + // ], + // "parameters": { + // "hostedModelName": { + // "description": "The name of a hosted model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "hostedmodels/{hostedModelName}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.analyze": + +type TrainedmodelsAnalyzeCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Analyze: Get analysis of the model and the data the model was trained +// on. +func (r *TrainedmodelsService) Analyze(id string) *TrainedmodelsAnalyzeCall { + c := &TrainedmodelsAnalyzeCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TrainedmodelsAnalyzeCall) Do() (*Analyze, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}/analyze") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Analyze) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get analysis of the model and the data the model was trained on.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.analyze", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}/analyze", + // "response": { + // "$ref": "Analyze" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.delete": + +type TrainedmodelsDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Delete a trained model. +func (r *TrainedmodelsService) Delete(id string) *TrainedmodelsDeleteCall { + c := &TrainedmodelsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TrainedmodelsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a trained model.", + // "httpMethod": "DELETE", + // "id": "prediction.trainedmodels.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.get": + +type TrainedmodelsGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Check training status of your model. +func (r *TrainedmodelsService) Get(id string) *TrainedmodelsGetCall { + c := &TrainedmodelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *TrainedmodelsGetCall) Do() (*Training, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Check training status of your model.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.insert": + +type TrainedmodelsInsertCall struct { + s *Service + training *Training + opt_ map[string]interface{} +} + +// Insert: Begin training your model. +func (r *TrainedmodelsService) Insert(training *Training) *TrainedmodelsInsertCall { + c := &TrainedmodelsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.training = training + return c +} + +func (c *TrainedmodelsInsertCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.training) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Begin training your model.", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.insert", + // "path": "trainedmodels", + // "request": { + // "$ref": "Training" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write", + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.list": + +type TrainedmodelsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List available models. +func (r *TrainedmodelsService) List() *TrainedmodelsListCall { + c := &TrainedmodelsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *TrainedmodelsListCall) MaxResults(maxResults int64) *TrainedmodelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Pagination token +func (c *TrainedmodelsListCall) PageToken(pageToken string) *TrainedmodelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TrainedmodelsListCall) Do() (*List, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/list") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(List) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List available models.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Pagination token", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "trainedmodels/list", + // "response": { + // "$ref": "List" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.predict": + +type TrainedmodelsPredictCall struct { + s *Service + id string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit model id and request a prediction. +func (r *TrainedmodelsService) Predict(id string, input *Input) *TrainedmodelsPredictCall { + c := &TrainedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.input = input + return c +} + +func (c *TrainedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit model id and request a prediction.", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.predict", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.update": + +type TrainedmodelsUpdateCall struct { + s *Service + id string + update *Update + opt_ map[string]interface{} +} + +// Update: Add new data to a trained model. +func (r *TrainedmodelsService) Update(id string, update *Update) *TrainedmodelsUpdateCall { + c := &TrainedmodelsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.update = update + return c +} + +func (c *TrainedmodelsUpdateCall) Do() (*Training, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.update) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Training) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add new data to a trained model.", + // "httpMethod": "PUT", + // "id": "prediction.trainedmodels.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "trainedmodels/{id}", + // "request": { + // "$ref": "Update" + // }, + // "response": { + // "$ref": "Training" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-api.json b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-api.json new file mode 100644 index 0000000000000..578ad345a297a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-api.json @@ -0,0 +1,779 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"5M1WkxnZyJhziV-cW1kdtwscs8E/OO_GKMAGtBvU1jvBgZif5MTf2iA\"", + "discoveryVersion": "v1", + "id": "prediction:v1.6", + "name": "prediction", + "version": "v1.6", + "title": "Prediction API", + "description": "Lets you access a cloud hosted machine learning service that makes it easy to build smart apps", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/predictionapi-16.png", + "x32": "http://www.google.com/images/icons/feature/predictionapi-32.png" + }, + "documentationLink": "https://developers.google.com/prediction/docs/developer-guide", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/prediction/v1.6/projects/", + "basePath": "/prediction/v1.6/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "prediction/v1.6/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/prediction": { + "description": "Manage your data in the Google Prediction API" + } + } + } + }, + "schemas": { + "Analyze": { + "id": "Analyze", + "type": "object", + "properties": { + "dataDescription": { + "type": "object", + "description": "Description of the data the model was trained on.", + "properties": { + "features": { + "type": "array", + "description": "Description of the input features in the data set.", + "items": { + "type": "object", + "properties": { + "categorical": { + "type": "object", + "description": "Description of the categorical values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of categorical values for this feature in the data.", + "format": "int64" + }, + "values": { + "type": "array", + "description": "List of all the categories for this feature in the data set.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Number of times this feature had this value.", + "format": "int64" + }, + "value": { + "type": "string", + "description": "The category name." + } + } + } + } + } + }, + "index": { + "type": "string", + "description": "The feature index.", + "format": "int64" + }, + "numeric": { + "type": "object", + "description": "Description of the numeric values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of numeric values for this feature in the data set.", + "format": "int64" + }, + "mean": { + "type": "string", + "description": "Mean of the numeric values of this feature in the data set." + }, + "variance": { + "type": "string", + "description": "Variance of the numeric values of this feature in the data set." + } + } + }, + "text": { + "type": "object", + "description": "Description of multiple-word text values of this feature.", + "properties": { + "count": { + "type": "string", + "description": "Number of multiple-word text values for this feature.", + "format": "int64" + } + } + } + } + } + }, + "outputFeature": { + "type": "object", + "description": "Description of the output value or label.", + "properties": { + "numeric": { + "type": "object", + "description": "Description of the output values in the data set.", + "properties": { + "count": { + "type": "string", + "description": "Number of numeric output values in the data set.", + "format": "int64" + }, + "mean": { + "type": "string", + "description": "Mean of the output values in the data set." + }, + "variance": { + "type": "string", + "description": "Variance of the output values in the data set." + } + } + }, + "text": { + "type": "array", + "description": "Description of the output labels in the data set.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Number of times the output label occurred in the data set.", + "format": "int64" + }, + "value": { + "type": "string", + "description": "The output label." + } + } + } + } + } + } + } + }, + "errors": { + "type": "array", + "description": "List of errors with the data.", + "items": { + "type": "object", + "additionalProperties": { + "type": "string", + "description": "Error level followed by a detailed error message." + } + } + }, + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#analyze" + }, + "modelDescription": { + "type": "object", + "description": "Description of the model.", + "properties": { + "confusionMatrix": { + "type": "object", + "description": "An output confusion matrix. This shows an estimate for how this model will do in predictions. This is first indexed by the true class label. For each true class label, this provides a pair {predicted_label, count}, where count is the estimated number of times the model will predict the predicted label given the true label. Will not output if more then 100 classes (Categorical models only).", + "additionalProperties": { + "type": "object", + "description": "Confusion matrix information for the true class label.", + "additionalProperties": { + "type": "string", + "description": "Average number of times an instance with correct class label modelDescription.confusionMatrix.(key) was wrongfully classified as this label." + } + } + }, + "confusionMatrixRowTotals": { + "type": "object", + "description": "A list of the confusion matrix row totals.", + "additionalProperties": { + "type": "string" + } + }, + "modelinfo": { + "$ref": "Insert2", + "description": "Basic information about the model." + } + } + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Input": { + "id": "Input", + "type": "object", + "properties": { + "input": { + "type": "object", + "description": "Input to the model for a prediction.", + "properties": { + "csvInstance": { + "type": "array", + "description": "A list of input features, these can be strings or doubles.", + "items": { + "type": "any" + } + } + } + } + } + }, + "Insert": { + "id": "Insert", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (classification or regression)." + }, + "sourceModel": { + "type": "string", + "description": "The Id of the model to be copied over." + }, + "storageDataLocation": { + "type": "string", + "description": "Google storage location of the training data file." + }, + "storagePMMLLocation": { + "type": "string", + "description": "Google storage location of the preprocessing pmml file." + }, + "storagePMMLModelLocation": { + "type": "string", + "description": "Google storage location of the pmml model file." + }, + "trainingInstances": { + "type": "array", + "description": "Instances to train model on.", + "items": { + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "description": "The input features for this instance.", + "items": { + "type": "any" + } + }, + "output": { + "type": "string", + "description": "The generic output value - could be regression or class label." + } + } + } + }, + "utility": { + "type": "array", + "description": "A class weighting function, which allows the importance weights for class labels to be specified (Categorical models only).", + "items": { + "type": "object", + "description": "Class label (string).", + "additionalProperties": { + "type": "number", + "format": "double" + } + } + } + } + }, + "Insert2": { + "id": "Insert2", + "type": "object", + "properties": { + "created": { + "type": "string", + "description": "Insert time of the model (as a RFC 3339 timestamp).", + "format": "date-time" + }, + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#training" + }, + "modelInfo": { + "type": "object", + "description": "Model metadata.", + "properties": { + "classWeightedAccuracy": { + "type": "string", + "description": "Estimated accuracy of model taking utility weights into account (Categorical models only)." + }, + "classificationAccuracy": { + "type": "string", + "description": "A number between 0.0 and 1.0, where 1.0 is 100% accurate. This is an estimate, based on the amount and quality of the training data, of the estimated prediction accuracy. You can use this is a guide to decide whether the results are accurate enough for your needs. This estimate will be more reliable if your real input data is similar to your training data (Categorical models only)." + }, + "meanSquaredError": { + "type": "string", + "description": "An estimated mean squared error. The can be used to measure the quality of the predicted model (Regression models only)." + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (CLASSIFICATION or REGRESSION)." + }, + "numberInstances": { + "type": "string", + "description": "Number of valid data instances used in the trained model.", + "format": "int64" + }, + "numberLabels": { + "type": "string", + "description": "Number of class labels in the trained model (Categorical models only).", + "format": "int64" + } + } + }, + "modelType": { + "type": "string", + "description": "Type of predictive model (CLASSIFICATION or REGRESSION)." + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + }, + "storageDataLocation": { + "type": "string", + "description": "Google storage location of the training data file." + }, + "storagePMMLLocation": { + "type": "string", + "description": "Google storage location of the preprocessing pmml file." + }, + "storagePMMLModelLocation": { + "type": "string", + "description": "Google storage location of the pmml model file." + }, + "trainingComplete": { + "type": "string", + "description": "Training completion time (as a RFC 3339 timestamp).", + "format": "date-time" + }, + "trainingStatus": { + "type": "string", + "description": "The current status of the training job. This can be one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND" + } + } + }, + "List": { + "id": "List", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "List of models.", + "items": { + "$ref": "Insert2" + } + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#list" + }, + "nextPageToken": { + "type": "string", + "description": "Pagination token to fetch the next page, if one exists." + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Output": { + "id": "Output", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The unique name for the predictive model." + }, + "kind": { + "type": "string", + "description": "What kind of resource this is.", + "default": "prediction#output" + }, + "outputLabel": { + "type": "string", + "description": "The most likely class label (Categorical models only)." + }, + "outputMulti": { + "type": "array", + "description": "A list of class labels with their estimated probabilities (Categorical models only).", + "items": { + "type": "object", + "properties": { + "label": { + "type": "string", + "description": "The class label." + }, + "score": { + "type": "string", + "description": "The probability of the class label." + } + } + } + }, + "outputValue": { + "type": "number", + "description": "The estimated regression value (Regression models only).", + "format": "double" + }, + "selfLink": { + "type": "string", + "description": "A URL to re-request this resource." + } + } + }, + "Update": { + "id": "Update", + "type": "object", + "properties": { + "csvInstance": { + "type": "array", + "description": "The input features for this instance.", + "items": { + "type": "any" + } + }, + "output": { + "type": "string", + "description": "The generic output value - could be regression or class label." + } + } + } + }, + "resources": { + "hostedmodels": { + "methods": { + "predict": { + "id": "prediction.hostedmodels.predict", + "path": "{project}/hostedmodels/{hostedModelName}/predict", + "httpMethod": "POST", + "description": "Submit input and request an output against a hosted model.", + "parameters": { + "hostedModelName": { + "type": "string", + "description": "The name of a hosted model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "hostedModelName" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + }, + "trainedmodels": { + "methods": { + "analyze": { + "id": "prediction.trainedmodels.analyze", + "path": "{project}/trainedmodels/{id}/analyze", + "httpMethod": "GET", + "description": "Get analysis of the model and the data the model was trained on.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "id" + ], + "response": { + "$ref": "Analyze" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "delete": { + "id": "prediction.trainedmodels.delete", + "path": "{project}/trainedmodels/{id}", + "httpMethod": "DELETE", + "description": "Delete a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "get": { + "id": "prediction.trainedmodels.get", + "path": "{project}/trainedmodels/{id}", + "httpMethod": "GET", + "description": "Check training status of your model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "id" + ], + "response": { + "$ref": "Insert2" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "insert": { + "id": "prediction.trainedmodels.insert", + "path": "{project}/trainedmodels", + "httpMethod": "POST", + "description": "Train a Prediction API model.", + "parameters": { + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Insert" + }, + "response": { + "$ref": "Insert2" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write", + "https://www.googleapis.com/auth/prediction" + ] + }, + "list": { + "id": "prediction.trainedmodels.list", + "path": "{project}/trainedmodels/list", + "httpMethod": "GET", + "description": "List available models.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Pagination token.", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "List" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "predict": { + "id": "prediction.trainedmodels.predict", + "path": "{project}/trainedmodels/{id}/predict", + "httpMethod": "POST", + "description": "Submit model id and request a prediction.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "id" + ], + "request": { + "$ref": "Input" + }, + "response": { + "$ref": "Output" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + }, + "update": { + "id": "prediction.trainedmodels.update", + "path": "{project}/trainedmodels/{id}", + "httpMethod": "PUT", + "description": "Add new data to a trained model.", + "parameters": { + "id": { + "type": "string", + "description": "The unique name for the predictive model.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "The project associated with the model.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "id" + ], + "request": { + "$ref": "Update" + }, + "response": { + "$ref": "Insert2" + }, + "scopes": [ + "https://www.googleapis.com/auth/prediction" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-gen.go b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-gen.go new file mode 100644 index 0000000000000..f11d3d5522df8 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/prediction/v1.6/prediction-gen.go @@ -0,0 +1,1033 @@ +// Package prediction provides access to the Prediction API. +// +// See https://developers.google.com/prediction/docs/developer-guide +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/prediction/v1.6" +// ... +// predictionService, err := prediction.New(oauthHttpClient) +package prediction + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "prediction:v1.6" +const apiName = "prediction" +const apiVersion = "v1.6" +const basePath = "https://www.googleapis.com/prediction/v1.6/projects/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" + + // Manage your data in the Google Prediction API + PredictionScope = "https://www.googleapis.com/auth/prediction" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Hostedmodels = NewHostedmodelsService(s) + s.Trainedmodels = NewTrainedmodelsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Hostedmodels *HostedmodelsService + + Trainedmodels *TrainedmodelsService +} + +func NewHostedmodelsService(s *Service) *HostedmodelsService { + rs := &HostedmodelsService{s: s} + return rs +} + +type HostedmodelsService struct { + s *Service +} + +func NewTrainedmodelsService(s *Service) *TrainedmodelsService { + rs := &TrainedmodelsService{s: s} + return rs +} + +type TrainedmodelsService struct { + s *Service +} + +type Analyze struct { + // DataDescription: Description of the data the model was trained on. + DataDescription *AnalyzeDataDescription `json:"dataDescription,omitempty"` + + // Errors: List of errors with the data. + Errors []map[string]string `json:"errors,omitempty"` + + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelDescription: Description of the model. + ModelDescription *AnalyzeModelDescription `json:"modelDescription,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type AnalyzeDataDescription struct { + // Features: Description of the input features in the data set. + Features []*AnalyzeDataDescriptionFeatures `json:"features,omitempty"` + + // OutputFeature: Description of the output value or label. + OutputFeature *AnalyzeDataDescriptionOutputFeature `json:"outputFeature,omitempty"` +} + +type AnalyzeDataDescriptionFeatures struct { + // Categorical: Description of the categorical values of this feature. + Categorical *AnalyzeDataDescriptionFeaturesCategorical `json:"categorical,omitempty"` + + // Index: The feature index. + Index int64 `json:"index,omitempty,string"` + + // Numeric: Description of the numeric values of this feature. + Numeric *AnalyzeDataDescriptionFeaturesNumeric `json:"numeric,omitempty"` + + // Text: Description of multiple-word text values of this feature. + Text *AnalyzeDataDescriptionFeaturesText `json:"text,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesCategorical struct { + // Count: Number of categorical values for this feature in the data. + Count int64 `json:"count,omitempty,string"` + + // Values: List of all the categories for this feature in the data set. + Values []*AnalyzeDataDescriptionFeaturesCategoricalValues `json:"values,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesCategoricalValues struct { + // Count: Number of times this feature had this value. + Count int64 `json:"count,omitempty,string"` + + // Value: The category name. + Value string `json:"value,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesNumeric struct { + // Count: Number of numeric values for this feature in the data set. + Count int64 `json:"count,omitempty,string"` + + // Mean: Mean of the numeric values of this feature in the data set. + Mean string `json:"mean,omitempty"` + + // Variance: Variance of the numeric values of this feature in the data + // set. + Variance string `json:"variance,omitempty"` +} + +type AnalyzeDataDescriptionFeaturesText struct { + // Count: Number of multiple-word text values for this feature. + Count int64 `json:"count,omitempty,string"` +} + +type AnalyzeDataDescriptionOutputFeature struct { + // Numeric: Description of the output values in the data set. + Numeric *AnalyzeDataDescriptionOutputFeatureNumeric `json:"numeric,omitempty"` + + // Text: Description of the output labels in the data set. + Text []*AnalyzeDataDescriptionOutputFeatureText `json:"text,omitempty"` +} + +type AnalyzeDataDescriptionOutputFeatureNumeric struct { + // Count: Number of numeric output values in the data set. + Count int64 `json:"count,omitempty,string"` + + // Mean: Mean of the output values in the data set. + Mean string `json:"mean,omitempty"` + + // Variance: Variance of the output values in the data set. + Variance string `json:"variance,omitempty"` +} + +type AnalyzeDataDescriptionOutputFeatureText struct { + // Count: Number of times the output label occurred in the data set. + Count int64 `json:"count,omitempty,string"` + + // Value: The output label. + Value string `json:"value,omitempty"` +} + +type AnalyzeModelDescription struct { + // ConfusionMatrix: An output confusion matrix. This shows an estimate + // for how this model will do in predictions. This is first indexed by + // the true class label. For each true class label, this provides a pair + // {predicted_label, count}, where count is the estimated number of + // times the model will predict the predicted label given the true + // label. Will not output if more then 100 classes (Categorical models + // only). + ConfusionMatrix *AnalyzeModelDescriptionConfusionMatrix `json:"confusionMatrix,omitempty"` + + // ConfusionMatrixRowTotals: A list of the confusion matrix row totals. + ConfusionMatrixRowTotals map[string]string `json:"confusionMatrixRowTotals,omitempty"` + + // Modelinfo: Basic information about the model. + Modelinfo *Insert2 `json:"modelinfo,omitempty"` +} + +type AnalyzeModelDescriptionConfusionMatrix struct { +} + +type Input struct { + // Input: Input to the model for a prediction. + Input *InputInput `json:"input,omitempty"` +} + +type InputInput struct { + // CsvInstance: A list of input features, these can be strings or + // doubles. + CsvInstance []interface{} `json:"csvInstance,omitempty"` +} + +type Insert struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // ModelType: Type of predictive model (classification or regression). + ModelType string `json:"modelType,omitempty"` + + // SourceModel: The Id of the model to be copied over. + SourceModel string `json:"sourceModel,omitempty"` + + // StorageDataLocation: Google storage location of the training data + // file. + StorageDataLocation string `json:"storageDataLocation,omitempty"` + + // StoragePMMLLocation: Google storage location of the preprocessing + // pmml file. + StoragePMMLLocation string `json:"storagePMMLLocation,omitempty"` + + // StoragePMMLModelLocation: Google storage location of the pmml model + // file. + StoragePMMLModelLocation string `json:"storagePMMLModelLocation,omitempty"` + + // TrainingInstances: Instances to train model on. + TrainingInstances []*InsertTrainingInstances `json:"trainingInstances,omitempty"` + + // Utility: A class weighting function, which allows the importance + // weights for class labels to be specified (Categorical models only). + Utility []*InsertUtility `json:"utility,omitempty"` +} + +type InsertTrainingInstances struct { + // CsvInstance: The input features for this instance. + CsvInstance []interface{} `json:"csvInstance,omitempty"` + + // Output: The generic output value - could be regression or class + // label. + Output string `json:"output,omitempty"` +} + +type InsertUtility struct { +} + +type Insert2 struct { + // Created: Insert time of the model (as a RFC 3339 timestamp). + Created string `json:"created,omitempty"` + + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // ModelInfo: Model metadata. + ModelInfo *Insert2ModelInfo `json:"modelInfo,omitempty"` + + // ModelType: Type of predictive model (CLASSIFICATION or REGRESSION). + ModelType string `json:"modelType,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` + + // StorageDataLocation: Google storage location of the training data + // file. + StorageDataLocation string `json:"storageDataLocation,omitempty"` + + // StoragePMMLLocation: Google storage location of the preprocessing + // pmml file. + StoragePMMLLocation string `json:"storagePMMLLocation,omitempty"` + + // StoragePMMLModelLocation: Google storage location of the pmml model + // file. + StoragePMMLModelLocation string `json:"storagePMMLModelLocation,omitempty"` + + // TrainingComplete: Training completion time (as a RFC 3339 timestamp). + TrainingComplete string `json:"trainingComplete,omitempty"` + + // TrainingStatus: The current status of the training job. This can be + // one of following: RUNNING; DONE; ERROR; ERROR: TRAINING JOB NOT FOUND + TrainingStatus string `json:"trainingStatus,omitempty"` +} + +type Insert2ModelInfo struct { + // ClassWeightedAccuracy: Estimated accuracy of model taking utility + // weights into account (Categorical models only). + ClassWeightedAccuracy string `json:"classWeightedAccuracy,omitempty"` + + // ClassificationAccuracy: A number between 0.0 and 1.0, where 1.0 is + // 100% accurate. This is an estimate, based on the amount and quality + // of the training data, of the estimated prediction accuracy. You can + // use this is a guide to decide whether the results are accurate enough + // for your needs. This estimate will be more reliable if your real + // input data is similar to your training data (Categorical models + // only). + ClassificationAccuracy string `json:"classificationAccuracy,omitempty"` + + // MeanSquaredError: An estimated mean squared error. The can be used to + // measure the quality of the predicted model (Regression models only). + MeanSquaredError string `json:"meanSquaredError,omitempty"` + + // ModelType: Type of predictive model (CLASSIFICATION or REGRESSION). + ModelType string `json:"modelType,omitempty"` + + // NumberInstances: Number of valid data instances used in the trained + // model. + NumberInstances int64 `json:"numberInstances,omitempty,string"` + + // NumberLabels: Number of class labels in the trained model + // (Categorical models only). + NumberLabels int64 `json:"numberLabels,omitempty,string"` +} + +type List struct { + // Items: List of models. + Items []*Insert2 `json:"items,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // NextPageToken: Pagination token to fetch the next page, if one + // exists. + NextPageToken string `json:"nextPageToken,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type Output struct { + // Id: The unique name for the predictive model. + Id string `json:"id,omitempty"` + + // Kind: What kind of resource this is. + Kind string `json:"kind,omitempty"` + + // OutputLabel: The most likely class label (Categorical models only). + OutputLabel string `json:"outputLabel,omitempty"` + + // OutputMulti: A list of class labels with their estimated + // probabilities (Categorical models only). + OutputMulti []*OutputOutputMulti `json:"outputMulti,omitempty"` + + // OutputValue: The estimated regression value (Regression models only). + OutputValue float64 `json:"outputValue,omitempty"` + + // SelfLink: A URL to re-request this resource. + SelfLink string `json:"selfLink,omitempty"` +} + +type OutputOutputMulti struct { + // Label: The class label. + Label string `json:"label,omitempty"` + + // Score: The probability of the class label. + Score string `json:"score,omitempty"` +} + +type Update struct { + // CsvInstance: The input features for this instance. + CsvInstance []interface{} `json:"csvInstance,omitempty"` + + // Output: The generic output value - could be regression or class + // label. + Output string `json:"output,omitempty"` +} + +// method id "prediction.hostedmodels.predict": + +type HostedmodelsPredictCall struct { + s *Service + project string + hostedModelName string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit input and request an output against a hosted model. +func (r *HostedmodelsService) Predict(project string, hostedModelName string, input *Input) *HostedmodelsPredictCall { + c := &HostedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.hostedModelName = hostedModelName + c.input = input + return c +} + +func (c *HostedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/hostedmodels/{hostedModelName}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{hostedModelName}", url.QueryEscape(c.hostedModelName), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit input and request an output against a hosted model.", + // "httpMethod": "POST", + // "id": "prediction.hostedmodels.predict", + // "parameterOrder": [ + // "project", + // "hostedModelName" + // ], + // "parameters": { + // "hostedModelName": { + // "description": "The name of a hosted model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/hostedmodels/{hostedModelName}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.analyze": + +type TrainedmodelsAnalyzeCall struct { + s *Service + project string + id string + opt_ map[string]interface{} +} + +// Analyze: Get analysis of the model and the data the model was trained +// on. +func (r *TrainedmodelsService) Analyze(project string, id string) *TrainedmodelsAnalyzeCall { + c := &TrainedmodelsAnalyzeCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.id = id + return c +} + +func (c *TrainedmodelsAnalyzeCall) Do() (*Analyze, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}/analyze") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Analyze) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get analysis of the model and the data the model was trained on.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.analyze", + // "parameterOrder": [ + // "project", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/{id}/analyze", + // "response": { + // "$ref": "Analyze" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.delete": + +type TrainedmodelsDeleteCall struct { + s *Service + project string + id string + opt_ map[string]interface{} +} + +// Delete: Delete a trained model. +func (r *TrainedmodelsService) Delete(project string, id string) *TrainedmodelsDeleteCall { + c := &TrainedmodelsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.id = id + return c +} + +func (c *TrainedmodelsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a trained model.", + // "httpMethod": "DELETE", + // "id": "prediction.trainedmodels.delete", + // "parameterOrder": [ + // "project", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.get": + +type TrainedmodelsGetCall struct { + s *Service + project string + id string + opt_ map[string]interface{} +} + +// Get: Check training status of your model. +func (r *TrainedmodelsService) Get(project string, id string) *TrainedmodelsGetCall { + c := &TrainedmodelsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.id = id + return c +} + +func (c *TrainedmodelsGetCall) Do() (*Insert2, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Insert2) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Check training status of your model.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.get", + // "parameterOrder": [ + // "project", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/{id}", + // "response": { + // "$ref": "Insert2" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.insert": + +type TrainedmodelsInsertCall struct { + s *Service + project string + insert *Insert + opt_ map[string]interface{} +} + +// Insert: Train a Prediction API model. +func (r *TrainedmodelsService) Insert(project string, insert *Insert) *TrainedmodelsInsertCall { + c := &TrainedmodelsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.insert = insert + return c +} + +func (c *TrainedmodelsInsertCall) Do() (*Insert2, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.insert) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Insert2) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Train a Prediction API model.", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels", + // "request": { + // "$ref": "Insert" + // }, + // "response": { + // "$ref": "Insert2" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write", + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.list": + +type TrainedmodelsListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: List available models. +func (r *TrainedmodelsService) List(project string) *TrainedmodelsListCall { + c := &TrainedmodelsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return. +func (c *TrainedmodelsListCall) MaxResults(maxResults int64) *TrainedmodelsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Pagination token. +func (c *TrainedmodelsListCall) PageToken(pageToken string) *TrainedmodelsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TrainedmodelsListCall) Do() (*List, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/list") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(List) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List available models.", + // "httpMethod": "GET", + // "id": "prediction.trainedmodels.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of results to return.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Pagination token.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/list", + // "response": { + // "$ref": "List" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.predict": + +type TrainedmodelsPredictCall struct { + s *Service + project string + id string + input *Input + opt_ map[string]interface{} +} + +// Predict: Submit model id and request a prediction. +func (r *TrainedmodelsService) Predict(project string, id string, input *Input) *TrainedmodelsPredictCall { + c := &TrainedmodelsPredictCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.id = id + c.input = input + return c +} + +func (c *TrainedmodelsPredictCall) Do() (*Output, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.input) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}/predict") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Output) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Submit model id and request a prediction.", + // "httpMethod": "POST", + // "id": "prediction.trainedmodels.predict", + // "parameterOrder": [ + // "project", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/{id}/predict", + // "request": { + // "$ref": "Input" + // }, + // "response": { + // "$ref": "Output" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} + +// method id "prediction.trainedmodels.update": + +type TrainedmodelsUpdateCall struct { + s *Service + project string + id string + update *Update + opt_ map[string]interface{} +} + +// Update: Add new data to a trained model. +func (r *TrainedmodelsService) Update(project string, id string, update *Update) *TrainedmodelsUpdateCall { + c := &TrainedmodelsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.id = id + c.update = update + return c +} + +func (c *TrainedmodelsUpdateCall) Do() (*Insert2, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.update) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/trainedmodels/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Insert2) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Add new data to a trained model.", + // "httpMethod": "PUT", + // "id": "prediction.trainedmodels.update", + // "parameterOrder": [ + // "project", + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The unique name for the predictive model.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "The project associated with the model.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/trainedmodels/{id}", + // "request": { + // "$ref": "Update" + // }, + // "response": { + // "$ref": "Insert2" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/prediction" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-api.json b/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-api.json new file mode 100644 index 0000000000000..47b5a774e639e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-api.json @@ -0,0 +1,894 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Z2cCLQpb_4OOaORWyNRnzCLe6ag\"", + "discoveryVersion": "v1", + "id": "qpxExpress:v1", + "name": "qpxExpress", + "canonicalName": "QPX Express", + "version": "v1", + "title": "QPX Express API", + "description": "Lets you find the least expensive flights between an origin and a destination.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "http://developers.google.com/qpx-express", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/qpxExpress/v1/trips/", + "basePath": "/qpxExpress/v1/trips/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "qpxExpress/v1/trips/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "AircraftData": { + "id": "AircraftData", + "type": "object", + "description": "The make, model, and type of an aircraft.", + "properties": { + "code": { + "type": "string", + "description": "The aircraft code. For example, for a Boeing 777 the code would be 777." + }, + "kind": { + "type": "string", + "description": "Identifies this as an aircraftData object. Value: the fixed string qpxexpress#aircraftData", + "default": "qpxexpress#aircraftData" + }, + "name": { + "type": "string", + "description": "The name of an aircraft, for example Boeing 777." + } + } + }, + "AirportData": { + "id": "AirportData", + "type": "object", + "description": "An airport.", + "properties": { + "city": { + "type": "string", + "description": "The city code an airport is located in. For example, for JFK airport, this is NYC." + }, + "code": { + "type": "string", + "description": "An airport's code. For example, for Boston Logan airport, this is BOS." + }, + "kind": { + "type": "string", + "description": "Identifies this as an airport object. Value: the fixed string qpxexpress#airportData.", + "default": "qpxexpress#airportData" + }, + "name": { + "type": "string", + "description": "The name of an airport. For example, for airport BOS the name is \"Boston Logan International\"." + } + } + }, + "BagDescriptor": { + "id": "BagDescriptor", + "type": "object", + "description": "Information about an item of baggage.", + "properties": { + "commercialName": { + "type": "string", + "description": "Provides the commercial name for an optional service." + }, + "count": { + "type": "integer", + "description": "How many of this type of bag will be checked on this flight.", + "format": "int32" + }, + "description": { + "type": "array", + "description": "A description of the baggage.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "Identifies this as a baggage object. Value: the fixed string qpxexpress#bagDescriptor.", + "default": "qpxexpress#bagDescriptor" + }, + "subcode": { + "type": "string", + "description": "The standard IATA subcode used to identify this optional service." + } + } + }, + "CarrierData": { + "id": "CarrierData", + "type": "object", + "description": "Information about a carrier (ie. an airline, bus line, railroad, etc) that might be useful to display to an end-user.", + "properties": { + "code": { + "type": "string", + "description": "The IATA designator of a carrier (airline, etc). For example, for American Airlines, the code is AA." + }, + "kind": { + "type": "string", + "description": "Identifies this as a kind of carrier (ie. an airline, bus line, railroad, etc). Value: the fixed string qpxexpress#carrierData.", + "default": "qpxexpress#carrierData" + }, + "name": { + "type": "string", + "description": "The long, full name of a carrier. For example: American Airlines." + } + } + }, + "CityData": { + "id": "CityData", + "type": "object", + "description": "Information about a city that might be useful to an end-user; typically the city of an airport.", + "properties": { + "code": { + "type": "string", + "description": "The IATA character ID of a city. For example, for Boston this is BOS." + }, + "country": { + "type": "string", + "description": "The two-character country code of the country the city is located in. For example, US for the United States of America." + }, + "kind": { + "type": "string", + "description": "Identifies this as a city, typically with one or more airports. Value: the fixed string qpxexpress#cityData.", + "default": "qpxexpress#cityData" + }, + "name": { + "type": "string", + "description": "The full name of a city. An example would be: New York." + } + } + }, + "Data": { + "id": "Data", + "type": "object", + "description": "Detailed information about components found in the solutions of this response, including a trip's airport, city, taxes, airline, and aircraft.", + "properties": { + "aircraft": { + "type": "array", + "description": "The aircraft that is flying between an origin and destination.", + "items": { + "$ref": "AircraftData" + } + }, + "airport": { + "type": "array", + "description": "The airport of an origin or destination.", + "items": { + "$ref": "AirportData" + } + }, + "carrier": { + "type": "array", + "description": "The airline carrier of the aircraft flying between an origin and destination. Allowed values are IATA carrier codes.", + "items": { + "$ref": "CarrierData" + } + }, + "city": { + "type": "array", + "description": "The city that is either the origin or destination of part of a trip.", + "items": { + "$ref": "CityData" + } + }, + "kind": { + "type": "string", + "description": "Identifies this as QPX Express response resource, including a trip's airport, city, taxes, airline, and aircraft. Value: the fixed string qpxexpress#data.", + "default": "qpxexpress#data" + }, + "tax": { + "type": "array", + "description": "The taxes due for flying between an origin and a destination.", + "items": { + "$ref": "TaxData" + } + } + } + }, + "FareInfo": { + "id": "FareInfo", + "type": "object", + "description": "Complete information about a fare used in the solution to a low-fare search query. In the airline industry a fare is a price an airline charges for one-way travel between two points. A fare typically contains a carrier code, two city codes, a price, and a fare basis. (A fare basis is a one-to-eight character alphanumeric code used to identify a fare.)", + "properties": { + "basisCode": { + "type": "string" + }, + "carrier": { + "type": "string", + "description": "The carrier of the aircraft or other vehicle commuting between two points." + }, + "destination": { + "type": "string", + "description": "The city code of the city the trip ends at." + }, + "id": { + "type": "string", + "description": "A unique identifier of the fare." + }, + "kind": { + "type": "string", + "description": "Identifies this as a fare object. Value: the fixed string qpxexpress#fareInfo.", + "default": "qpxexpress#fareInfo" + }, + "origin": { + "type": "string", + "description": "The city code of the city the trip begins at." + }, + "private": { + "type": "boolean", + "description": "Whether this is a private fare, for example one offered only to select customers rather than the general public." + } + } + }, + "FlightInfo": { + "id": "FlightInfo", + "type": "object", + "description": "A flight is a sequence of legs with the same airline carrier and flight number. (A leg is the smallest unit of travel, in the case of a flight a takeoff immediately followed by a landing at two set points on a particular carrier with a particular flight number.) The naive view is that a flight is scheduled travel of an aircraft between two points, with possibly intermediate stops, but carriers will frequently list flights that require a change of aircraft between legs.", + "properties": { + "carrier": { + "type": "string" + }, + "number": { + "type": "string", + "description": "The flight number." + } + } + }, + "FreeBaggageAllowance": { + "id": "FreeBaggageAllowance", + "type": "object", + "description": "Information about free baggage allowed on one segment of a trip.", + "properties": { + "bagDescriptor": { + "type": "array", + "description": "A representation of a type of bag, such as an ATPCo subcode, Commercial Name, or other description.", + "items": { + "$ref": "BagDescriptor" + } + }, + "kilos": { + "type": "integer", + "description": "The maximum number of kilos all the free baggage together may weigh.", + "format": "int32" + }, + "kilosPerPiece": { + "type": "integer", + "description": "The maximum number of kilos any one piece of baggage may weigh.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Identifies this as free baggage object, allowed on one segment of a trip. Value: the fixed string qpxexpress#freeBaggageAllowance.", + "default": "qpxexpress#freeBaggageAllowance" + }, + "pieces": { + "type": "integer", + "description": "The number of free pieces of baggage allowed.", + "format": "int32" + }, + "pounds": { + "type": "integer", + "description": "The number of pounds of free baggage allowed.", + "format": "int32" + } + } + }, + "LegInfo": { + "id": "LegInfo", + "type": "object", + "description": "Information about a leg. (A leg is the smallest unit of travel, in the case of a flight a takeoff immediately followed by a landing at two set points on a particular carrier with a particular flight number.)", + "properties": { + "aircraft": { + "type": "string", + "description": "The aircraft (or bus, ferry, railcar, etc) travelling between the two points of this leg." + }, + "arrivalTime": { + "type": "string", + "description": "The scheduled time of arrival at the destination of the leg, local to the point of arrival." + }, + "changePlane": { + "type": "boolean", + "description": "Whether you have to change planes following this leg. Only applies to the next leg." + }, + "connectionDuration": { + "type": "integer", + "description": "Duration of a connection following this leg, in minutes.", + "format": "int32" + }, + "departureTime": { + "type": "string", + "description": "The scheduled departure time of the leg, local to the point of departure." + }, + "destination": { + "type": "string", + "description": "The leg destination as a city and airport." + }, + "destinationTerminal": { + "type": "string", + "description": "The terminal the flight is scheduled to arrive at." + }, + "duration": { + "type": "integer", + "description": "The scheduled travelling time from the origin to the destination.", + "format": "int32" + }, + "id": { + "type": "string", + "description": "An identifier that uniquely identifies this leg in the solution." + }, + "kind": { + "type": "string", + "description": "Identifies this as a leg object. A leg is the smallest unit of travel, in the case of a flight a takeoff immediately followed by a landing at two set points on a particular carrier with a particular flight number. Value: the fixed string qpxexpress#legInfo.", + "default": "qpxexpress#legInfo" + }, + "meal": { + "type": "string", + "description": "A simple, general description of the meal(s) served on the flight, for example: \"Hot meal\"." + }, + "mileage": { + "type": "integer", + "description": "The number of miles in this leg.", + "format": "int32" + }, + "onTimePerformance": { + "type": "integer", + "description": "In percent, the published on time performance on this leg.", + "format": "int32" + }, + "operatingDisclosure": { + "type": "string", + "description": "Department of Transportation disclosure information on the actual operator of a flight in a code share. (A code share refers to a marketing agreement between two carriers, where one carrier will list in its schedules (and take bookings for) flights that are actually operated by another carrier.)" + }, + "origin": { + "type": "string", + "description": "The leg origin as a city and airport." + }, + "originTerminal": { + "type": "string", + "description": "The terminal the flight is scheduled to depart from." + }, + "secure": { + "type": "boolean", + "description": "Whether passenger information must be furnished to the United States Transportation Security Administration (TSA) prior to departure." + } + } + }, + "PassengerCounts": { + "id": "PassengerCounts", + "type": "object", + "description": "The number and type of passengers. Unfortunately the definition of an infant, child, adult, and senior citizen varies across carriers and reservation systems.", + "properties": { + "adultCount": { + "type": "integer", + "description": "The number of passengers that are adults.", + "format": "int32" + }, + "childCount": { + "type": "integer", + "description": "The number of passengers that are children.", + "format": "int32" + }, + "infantInLapCount": { + "type": "integer", + "description": "The number of passengers that are infants travelling in the lap of an adult.", + "format": "int32" + }, + "infantInSeatCount": { + "type": "integer", + "description": "The number of passengers that are infants each assigned a seat.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Identifies this as a passenger count object, representing the number of passengers. Value: the fixed string qpxexpress#passengerCounts.", + "default": "qpxexpress#passengerCounts" + }, + "seniorCount": { + "type": "integer", + "description": "The number of passengers that are senior citizens.", + "format": "int32" + } + } + }, + "PricingInfo": { + "id": "PricingInfo", + "type": "object", + "description": "The price of one or more travel segments. The currency used to purchase tickets is usually determined by the sale/ticketing city or the sale/ticketing country, unless none are specified, in which case it defaults to that of the journey origin country.", + "properties": { + "baseFareTotal": { + "type": "string", + "description": "The total fare in the base fare currency (the currency of the country of origin). This element is only present when the sales currency and the currency of the country of commencement are different." + }, + "fare": { + "type": "array", + "description": "The fare used to price one or more segments.", + "items": { + "$ref": "FareInfo" + } + }, + "fareCalculation": { + "type": "string", + "description": "The horizontal fare calculation. This is a field on a ticket that displays all of the relevant items that go into the calculation of the fare." + }, + "kind": { + "type": "string", + "description": "Identifies this as a pricing object, representing the price of one or more travel segments. Value: the fixed string qpxexpress#pricingInfo.", + "default": "qpxexpress#pricingInfo" + }, + "latestTicketingTime": { + "type": "string", + "description": "The latest ticketing time for this pricing assuming the reservation occurs at ticketing time and there is no change in fares/rules. The time is local to the point of sale (POS)." + }, + "passengers": { + "$ref": "PassengerCounts", + "description": "The number of passengers to which this price applies." + }, + "ptc": { + "type": "string", + "description": "The passenger type code for this pricing. An alphanumeric code used by a carrier to restrict fares to certain categories of passenger. For instance, a fare might be valid only for senior citizens." + }, + "refundable": { + "type": "boolean", + "description": "Whether the fares on this pricing are refundable." + }, + "saleFareTotal": { + "type": "string", + "description": "The total fare in the sale or equivalent currency." + }, + "saleTaxTotal": { + "type": "string", + "description": "The taxes in the sale or equivalent currency." + }, + "saleTotal": { + "type": "string", + "description": "Total per-passenger price (fare and tax) in the sale or equivalent currency." + }, + "segmentPricing": { + "type": "array", + "description": "The per-segment price and baggage information.", + "items": { + "$ref": "SegmentPricing" + } + }, + "tax": { + "type": "array", + "description": "The taxes used to calculate the tax total per ticket.", + "items": { + "$ref": "TaxInfo" + } + } + } + }, + "SegmentInfo": { + "id": "SegmentInfo", + "type": "object", + "description": "Details of a segment of a flight; a segment is one or more consecutive legs on the same flight. For example a hypothetical flight ZZ001, from DFW to OGG, would have one segment with two legs: DFW to HNL (leg 1), HNL to OGG (leg 2), and DFW to OGG (legs 1 and 2).", + "properties": { + "bookingCode": { + "type": "string", + "description": "The booking code or class for this segment." + }, + "bookingCodeCount": { + "type": "integer", + "description": "The number of seats available in this booking code on this segment.", + "format": "int32" + }, + "cabin": { + "type": "string", + "description": "The cabin booked for this segment." + }, + "connectionDuration": { + "type": "integer", + "description": "In minutes, the duration of the connection following this segment.", + "format": "int32" + }, + "duration": { + "type": "integer", + "description": "The duration of the flight segment in minutes.", + "format": "int32" + }, + "flight": { + "$ref": "FlightInfo", + "description": "The flight this is a segment of." + }, + "id": { + "type": "string", + "description": "An id uniquely identifying the segment in the solution." + }, + "kind": { + "type": "string", + "description": "Identifies this as a segment object. A segment is one or more consecutive legs on the same flight. For example a hypothetical flight ZZ001, from DFW to OGG, could have one segment with two legs: DFW to HNL (leg 1), HNL to OGG (leg 2). Value: the fixed string qpxexpress#segmentInfo.", + "default": "qpxexpress#segmentInfo" + }, + "leg": { + "type": "array", + "description": "The legs composing this segment.", + "items": { + "$ref": "LegInfo" + } + }, + "marriedSegmentGroup": { + "type": "string", + "description": "The solution-based index of a segment in a married segment group. Married segments can only be booked together. For example, an airline might report a certain booking code as sold out from Boston to Pittsburgh, but as available as part of two married segments Boston to Chicago connecting through Pittsburgh. For example content of this field, consider the round-trip flight ZZ1 PHX-PHL ZZ2 PHL-CLT ZZ3 CLT-PHX. This has three segments, with the two outbound ones (ZZ1 ZZ2) married. In this case, the two outbound segments belong to married segment group 0, and the return segment belongs to married segment group 1." + }, + "subjectToGovernmentApproval": { + "type": "boolean", + "description": "Whether the operation of this segment remains subject to government approval." + } + } + }, + "SegmentPricing": { + "id": "SegmentPricing", + "type": "object", + "description": "The price of this segment.", + "properties": { + "fareId": { + "type": "string", + "description": "A segment identifier unique within a single solution. It is used to refer to different parts of the same solution." + }, + "freeBaggageOption": { + "type": "array", + "description": "Details of the free baggage allowance on this segment.", + "items": { + "$ref": "FreeBaggageAllowance" + } + }, + "kind": { + "type": "string", + "description": "Identifies this as a segment pricing object, representing the price of this segment. Value: the fixed string qpxexpress#segmentPricing.", + "default": "qpxexpress#segmentPricing" + }, + "segmentId": { + "type": "string", + "description": "Unique identifier in the response of this segment." + } + } + }, + "SliceInfo": { + "id": "SliceInfo", + "type": "object", + "description": "Information about a slice. A slice represents a traveller's intent, the portion of a low-fare search corresponding to a traveler's request to get between two points. One-way journeys are generally expressed using 1 slice, round-trips using 2. For example, if a traveler specifies the following trip in a user interface:\n| Origin | Destination | Departure Date | | BOS | LAX | March 10, 2007 | | LAX | SYD | March 17, 2007 | | SYD | BOS | March 22, 2007 |\nthen this is a three slice trip.", + "properties": { + "duration": { + "type": "integer", + "description": "The duration of the slice in minutes.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "Identifies this as a slice object. A slice represents a traveller's intent, the portion of a low-fare search corresponding to a traveler's request to get between two points. One-way journeys are generally expressed using 1 slice, round-trips using 2. Value: the fixed string qpxexpress#sliceInfo.", + "default": "qpxexpress#sliceInfo" + }, + "segment": { + "type": "array", + "description": "The segment(s) constituting the slice.", + "items": { + "$ref": "SegmentInfo" + } + } + } + }, + "SliceInput": { + "id": "SliceInput", + "type": "object", + "description": "Criteria a desired slice must satisfy.", + "properties": { + "alliance": { + "type": "string", + "description": "Slices with only the carriers in this alliance should be returned; do not use this field with permittedCarrier. Allowed values are ONEWORLD, SKYTEAM, and STAR." + }, + "date": { + "type": "string", + "description": "Departure date in YYYY-MM-DD format." + }, + "destination": { + "type": "string", + "description": "Airport or city IATA designator of the destination." + }, + "kind": { + "type": "string", + "description": "Identifies this as a slice input object, representing the criteria a desired slice must satisfy. Value: the fixed string qpxexpress#sliceInput.", + "default": "qpxexpress#sliceInput" + }, + "maxConnectionDuration": { + "type": "integer", + "description": "The longest connection between two legs, in minutes, you are willing to accept.", + "format": "int32" + }, + "maxStops": { + "type": "integer", + "description": "The maximum number of stops you are willing to accept in this slice.", + "format": "int32" + }, + "origin": { + "type": "string", + "description": "Airport or city IATA designator of the origin." + }, + "permittedCarrier": { + "type": "array", + "description": "A list of 2-letter IATA airline designators. Slices with only these carriers should be returned.", + "items": { + "type": "string" + } + }, + "permittedDepartureTime": { + "$ref": "TimeOfDayRange", + "description": "Slices must depart in this time of day range, local to the point of departure." + }, + "preferredCabin": { + "type": "string", + "description": "Prefer solutions that book in this cabin for this slice. Allowed values are COACH, PREMIUM_COACH, BUSINESS, and FIRST." + }, + "prohibitedCarrier": { + "type": "array", + "description": "A list of 2-letter IATA airline designators. Exclude slices that use these carriers.", + "items": { + "type": "string" + } + } + } + }, + "TaxData": { + "id": "TaxData", + "type": "object", + "description": "Tax data.", + "properties": { + "id": { + "type": "string", + "description": "An identifier uniquely identifying a tax in a response." + }, + "kind": { + "type": "string", + "description": "Identifies this as a tax data object, representing some tax. Value: the fixed string qpxexpress#taxData.", + "default": "qpxexpress#taxData" + }, + "name": { + "type": "string", + "description": "The name of a tax." + } + } + }, + "TaxInfo": { + "id": "TaxInfo", + "type": "object", + "description": "Tax information.", + "properties": { + "chargeType": { + "type": "string", + "description": "Whether this is a government charge or a carrier surcharge." + }, + "code": { + "type": "string", + "description": "The code to enter in the ticket's tax box." + }, + "country": { + "type": "string", + "description": "For government charges, the country levying the charge." + }, + "id": { + "type": "string", + "description": "Identifier uniquely identifying this tax in a response. Not present for unnamed carrier surcharges." + }, + "kind": { + "type": "string", + "description": "Identifies this as a tax information object. Value: the fixed string qpxexpress#taxInfo.", + "default": "qpxexpress#taxInfo" + }, + "salePrice": { + "type": "string", + "description": "The price of the tax in the sales or equivalent currency." + } + } + }, + "TimeOfDayRange": { + "id": "TimeOfDayRange", + "type": "object", + "description": "Two times in a single day defining a time range.", + "properties": { + "earliestTime": { + "type": "string", + "description": "The earliest time of day in HH:MM format." + }, + "kind": { + "type": "string", + "description": "Identifies this as a time of day range object, representing two times in a single day defining a time range. Value: the fixed string qpxexpress#timeOfDayRange.", + "default": "qpxexpress#timeOfDayRange" + }, + "latestTime": { + "type": "string", + "description": "The latest time of day in HH:MM format." + } + } + }, + "TripOption": { + "id": "TripOption", + "type": "object", + "description": "Trip information.", + "properties": { + "id": { + "type": "string", + "description": "Identifier uniquely identifying this trip in a response." + }, + "kind": { + "type": "string", + "description": "Identifies this as a trip information object. Value: the fixed string qpxexpress#tripOption.", + "default": "qpxexpress#tripOption" + }, + "pricing": { + "type": "array", + "description": "Per passenger pricing information.", + "items": { + "$ref": "PricingInfo" + } + }, + "saleTotal": { + "type": "string", + "description": "The total price for all passengers on the trip, in the form of a currency followed by an amount, e.g. USD253.35." + }, + "slice": { + "type": "array", + "description": "The slices that make up this trip's itinerary.", + "items": { + "$ref": "SliceInfo" + } + } + } + }, + "TripOptionsRequest": { + "id": "TripOptionsRequest", + "type": "object", + "description": "A QPX Express search request, which will yield one or more solutions.", + "properties": { + "maxPrice": { + "type": "string", + "description": "Do not return solutions that cost more than this price. The alphabetical part of the price is in ISO 4217. The format, in regex, is [A-Z]{3}\\d+(\\.\\d+)? Example: $102.07" + }, + "passengers": { + "$ref": "PassengerCounts", + "description": "Counts for each passenger type in the request." + }, + "refundable": { + "type": "boolean", + "description": "Return only solutions with refundable fares." + }, + "saleCountry": { + "type": "string", + "description": "IATA country code representing the point of sale. This determines the \"equivalent amount paid\" currency for the ticket." + }, + "slice": { + "type": "array", + "description": "The slices that make up the itinerary of this trip. A slice represents a traveler's intent, the portion of a low-fare search corresponding to a traveler's request to get between two points. One-way journeys are generally expressed using one slice, round-trips using two. An example of a one slice trip with three segments might be BOS-SYD, SYD-LAX, LAX-BOS if the traveler only stopped in SYD and LAX just long enough to change planes.", + "items": { + "$ref": "SliceInput" + } + }, + "solutions": { + "type": "integer", + "description": "The number of solutions to return, maximum 500.", + "format": "int32" + } + } + }, + "TripOptionsResponse": { + "id": "TripOptionsResponse", + "type": "object", + "description": "A QPX Express search response.", + "properties": { + "data": { + "$ref": "Data", + "description": "Informational data global to list of solutions." + }, + "kind": { + "type": "string", + "description": "Identifies this as a QPX Express trip response object, which consists of zero or more solutions. Value: the fixed string qpxexpress#tripOptions.", + "default": "qpxexpress#tripOptions" + }, + "requestId": { + "type": "string", + "description": "An identifier uniquely identifying this response." + }, + "tripOption": { + "type": "array", + "description": "A list of priced itinerary solutions to the QPX Express query.", + "items": { + "$ref": "TripOption" + } + } + } + }, + "TripsSearchRequest": { + "id": "TripsSearchRequest", + "type": "object", + "description": "A QPX Express search request.", + "properties": { + "request": { + "$ref": "TripOptionsRequest", + "description": "A QPX Express search request. Required values are at least one adult or senior passenger, an origin, a destination, and a date." + } + } + }, + "TripsSearchResponse": { + "id": "TripsSearchResponse", + "type": "object", + "description": "A QPX Express search response.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies this as a QPX Express API search response resource. Value: the fixed string qpxExpress#tripsSearch.", + "default": "qpxExpress#tripsSearch" + }, + "trips": { + "$ref": "TripOptionsResponse", + "description": "All possible solutions to the QPX Express search request." + } + } + } + }, + "resources": { + "trips": { + "methods": { + "search": { + "id": "qpxExpress.trips.search", + "path": "search", + "httpMethod": "POST", + "description": "Returns a list of flights.", + "request": { + "$ref": "TripsSearchRequest" + }, + "response": { + "$ref": "TripsSearchResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-gen.go b/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-gen.go new file mode 100644 index 0000000000000..57bdfd8fcbeff --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/qpxexpress/v1/qpxexpress-gen.go @@ -0,0 +1,691 @@ +// Package qpxexpress provides access to the QPX Express API. +// +// See http://developers.google.com/qpx-express +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/qpxexpress/v1" +// ... +// qpxexpressService, err := qpxexpress.New(oauthHttpClient) +package qpxexpress + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "qpxExpress:v1" +const apiName = "qpxExpress" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/qpxExpress/v1/trips/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Trips = NewTripsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Trips *TripsService +} + +func NewTripsService(s *Service) *TripsService { + rs := &TripsService{s: s} + return rs +} + +type TripsService struct { + s *Service +} + +type AircraftData struct { + // Code: The aircraft code. For example, for a Boeing 777 the code would + // be 777. + Code string `json:"code,omitempty"` + + // Kind: Identifies this as an aircraftData object. Value: the fixed + // string qpxexpress#aircraftData + Kind string `json:"kind,omitempty"` + + // Name: The name of an aircraft, for example Boeing 777. + Name string `json:"name,omitempty"` +} + +type AirportData struct { + // City: The city code an airport is located in. For example, for JFK + // airport, this is NYC. + City string `json:"city,omitempty"` + + // Code: An airport's code. For example, for Boston Logan airport, this + // is BOS. + Code string `json:"code,omitempty"` + + // Kind: Identifies this as an airport object. Value: the fixed string + // qpxexpress#airportData. + Kind string `json:"kind,omitempty"` + + // Name: The name of an airport. For example, for airport BOS the name + // is "Boston Logan International". + Name string `json:"name,omitempty"` +} + +type BagDescriptor struct { + // CommercialName: Provides the commercial name for an optional service. + CommercialName string `json:"commercialName,omitempty"` + + // Count: How many of this type of bag will be checked on this flight. + Count int64 `json:"count,omitempty"` + + // Description: A description of the baggage. + Description []string `json:"description,omitempty"` + + // Kind: Identifies this as a baggage object. Value: the fixed string + // qpxexpress#bagDescriptor. + Kind string `json:"kind,omitempty"` + + // Subcode: The standard IATA subcode used to identify this optional + // service. + Subcode string `json:"subcode,omitempty"` +} + +type CarrierData struct { + // Code: The IATA designator of a carrier (airline, etc). For example, + // for American Airlines, the code is AA. + Code string `json:"code,omitempty"` + + // Kind: Identifies this as a kind of carrier (ie. an airline, bus line, + // railroad, etc). Value: the fixed string qpxexpress#carrierData. + Kind string `json:"kind,omitempty"` + + // Name: The long, full name of a carrier. For example: American + // Airlines. + Name string `json:"name,omitempty"` +} + +type CityData struct { + // Code: The IATA character ID of a city. For example, for Boston this + // is BOS. + Code string `json:"code,omitempty"` + + // Country: The two-character country code of the country the city is + // located in. For example, US for the United States of America. + Country string `json:"country,omitempty"` + + // Kind: Identifies this as a city, typically with one or more airports. + // Value: the fixed string qpxexpress#cityData. + Kind string `json:"kind,omitempty"` + + // Name: The full name of a city. An example would be: New York. + Name string `json:"name,omitempty"` +} + +type Data struct { + // Aircraft: The aircraft that is flying between an origin and + // destination. + Aircraft []*AircraftData `json:"aircraft,omitempty"` + + // Airport: The airport of an origin or destination. + Airport []*AirportData `json:"airport,omitempty"` + + // Carrier: The airline carrier of the aircraft flying between an origin + // and destination. Allowed values are IATA carrier codes. + Carrier []*CarrierData `json:"carrier,omitempty"` + + // City: The city that is either the origin or destination of part of a + // trip. + City []*CityData `json:"city,omitempty"` + + // Kind: Identifies this as QPX Express response resource, including a + // trip's airport, city, taxes, airline, and aircraft. Value: the fixed + // string qpxexpress#data. + Kind string `json:"kind,omitempty"` + + // Tax: The taxes due for flying between an origin and a destination. + Tax []*TaxData `json:"tax,omitempty"` +} + +type FareInfo struct { + BasisCode string `json:"basisCode,omitempty"` + + // Carrier: The carrier of the aircraft or other vehicle commuting + // between two points. + Carrier string `json:"carrier,omitempty"` + + // Destination: The city code of the city the trip ends at. + Destination string `json:"destination,omitempty"` + + // Id: A unique identifier of the fare. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a fare object. Value: the fixed string + // qpxexpress#fareInfo. + Kind string `json:"kind,omitempty"` + + // Origin: The city code of the city the trip begins at. + Origin string `json:"origin,omitempty"` + + // Private: Whether this is a private fare, for example one offered only + // to select customers rather than the general public. + Private bool `json:"private,omitempty"` +} + +type FlightInfo struct { + Carrier string `json:"carrier,omitempty"` + + // Number: The flight number. + Number string `json:"number,omitempty"` +} + +type FreeBaggageAllowance struct { + // BagDescriptor: A representation of a type of bag, such as an ATPCo + // subcode, Commercial Name, or other description. + BagDescriptor []*BagDescriptor `json:"bagDescriptor,omitempty"` + + // Kilos: The maximum number of kilos all the free baggage together may + // weigh. + Kilos int64 `json:"kilos,omitempty"` + + // KilosPerPiece: The maximum number of kilos any one piece of baggage + // may weigh. + KilosPerPiece int64 `json:"kilosPerPiece,omitempty"` + + // Kind: Identifies this as free baggage object, allowed on one segment + // of a trip. Value: the fixed string qpxexpress#freeBaggageAllowance. + Kind string `json:"kind,omitempty"` + + // Pieces: The number of free pieces of baggage allowed. + Pieces int64 `json:"pieces,omitempty"` + + // Pounds: The number of pounds of free baggage allowed. + Pounds int64 `json:"pounds,omitempty"` +} + +type LegInfo struct { + // Aircraft: The aircraft (or bus, ferry, railcar, etc) travelling + // between the two points of this leg. + Aircraft string `json:"aircraft,omitempty"` + + // ArrivalTime: The scheduled time of arrival at the destination of the + // leg, local to the point of arrival. + ArrivalTime string `json:"arrivalTime,omitempty"` + + // ChangePlane: Whether you have to change planes following this leg. + // Only applies to the next leg. + ChangePlane bool `json:"changePlane,omitempty"` + + // ConnectionDuration: Duration of a connection following this leg, in + // minutes. + ConnectionDuration int64 `json:"connectionDuration,omitempty"` + + // DepartureTime: The scheduled departure time of the leg, local to the + // point of departure. + DepartureTime string `json:"departureTime,omitempty"` + + // Destination: The leg destination as a city and airport. + Destination string `json:"destination,omitempty"` + + // DestinationTerminal: The terminal the flight is scheduled to arrive + // at. + DestinationTerminal string `json:"destinationTerminal,omitempty"` + + // Duration: The scheduled travelling time from the origin to the + // destination. + Duration int64 `json:"duration,omitempty"` + + // Id: An identifier that uniquely identifies this leg in the solution. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a leg object. A leg is the smallest unit of + // travel, in the case of a flight a takeoff immediately followed by a + // landing at two set points on a particular carrier with a particular + // flight number. Value: the fixed string qpxexpress#legInfo. + Kind string `json:"kind,omitempty"` + + // Meal: A simple, general description of the meal(s) served on the + // flight, for example: "Hot meal". + Meal string `json:"meal,omitempty"` + + // Mileage: The number of miles in this leg. + Mileage int64 `json:"mileage,omitempty"` + + // OnTimePerformance: In percent, the published on time performance on + // this leg. + OnTimePerformance int64 `json:"onTimePerformance,omitempty"` + + // OperatingDisclosure: Department of Transportation disclosure + // information on the actual operator of a flight in a code share. (A + // code share refers to a marketing agreement between two carriers, + // where one carrier will list in its schedules (and take bookings for) + // flights that are actually operated by another carrier.) + OperatingDisclosure string `json:"operatingDisclosure,omitempty"` + + // Origin: The leg origin as a city and airport. + Origin string `json:"origin,omitempty"` + + // OriginTerminal: The terminal the flight is scheduled to depart from. + OriginTerminal string `json:"originTerminal,omitempty"` + + // Secure: Whether passenger information must be furnished to the United + // States Transportation Security Administration (TSA) prior to + // departure. + Secure bool `json:"secure,omitempty"` +} + +type PassengerCounts struct { + // AdultCount: The number of passengers that are adults. + AdultCount int64 `json:"adultCount,omitempty"` + + // ChildCount: The number of passengers that are children. + ChildCount int64 `json:"childCount,omitempty"` + + // InfantInLapCount: The number of passengers that are infants + // travelling in the lap of an adult. + InfantInLapCount int64 `json:"infantInLapCount,omitempty"` + + // InfantInSeatCount: The number of passengers that are infants each + // assigned a seat. + InfantInSeatCount int64 `json:"infantInSeatCount,omitempty"` + + // Kind: Identifies this as a passenger count object, representing the + // number of passengers. Value: the fixed string + // qpxexpress#passengerCounts. + Kind string `json:"kind,omitempty"` + + // SeniorCount: The number of passengers that are senior citizens. + SeniorCount int64 `json:"seniorCount,omitempty"` +} + +type PricingInfo struct { + // BaseFareTotal: The total fare in the base fare currency (the currency + // of the country of origin). This element is only present when the + // sales currency and the currency of the country of commencement are + // different. + BaseFareTotal string `json:"baseFareTotal,omitempty"` + + // Fare: The fare used to price one or more segments. + Fare []*FareInfo `json:"fare,omitempty"` + + // FareCalculation: The horizontal fare calculation. This is a field on + // a ticket that displays all of the relevant items that go into the + // calculation of the fare. + FareCalculation string `json:"fareCalculation,omitempty"` + + // Kind: Identifies this as a pricing object, representing the price of + // one or more travel segments. Value: the fixed string + // qpxexpress#pricingInfo. + Kind string `json:"kind,omitempty"` + + // LatestTicketingTime: The latest ticketing time for this pricing + // assuming the reservation occurs at ticketing time and there is no + // change in fares/rules. The time is local to the point of sale (POS). + LatestTicketingTime string `json:"latestTicketingTime,omitempty"` + + // Passengers: The number of passengers to which this price applies. + Passengers *PassengerCounts `json:"passengers,omitempty"` + + // Ptc: The passenger type code for this pricing. An alphanumeric code + // used by a carrier to restrict fares to certain categories of + // passenger. For instance, a fare might be valid only for senior + // citizens. + Ptc string `json:"ptc,omitempty"` + + // Refundable: Whether the fares on this pricing are refundable. + Refundable bool `json:"refundable,omitempty"` + + // SaleFareTotal: The total fare in the sale or equivalent currency. + SaleFareTotal string `json:"saleFareTotal,omitempty"` + + // SaleTaxTotal: The taxes in the sale or equivalent currency. + SaleTaxTotal string `json:"saleTaxTotal,omitempty"` + + // SaleTotal: Total per-passenger price (fare and tax) in the sale or + // equivalent currency. + SaleTotal string `json:"saleTotal,omitempty"` + + // SegmentPricing: The per-segment price and baggage information. + SegmentPricing []*SegmentPricing `json:"segmentPricing,omitempty"` + + // Tax: The taxes used to calculate the tax total per ticket. + Tax []*TaxInfo `json:"tax,omitempty"` +} + +type SegmentInfo struct { + // BookingCode: The booking code or class for this segment. + BookingCode string `json:"bookingCode,omitempty"` + + // BookingCodeCount: The number of seats available in this booking code + // on this segment. + BookingCodeCount int64 `json:"bookingCodeCount,omitempty"` + + // Cabin: The cabin booked for this segment. + Cabin string `json:"cabin,omitempty"` + + // ConnectionDuration: In minutes, the duration of the connection + // following this segment. + ConnectionDuration int64 `json:"connectionDuration,omitempty"` + + // Duration: The duration of the flight segment in minutes. + Duration int64 `json:"duration,omitempty"` + + // Flight: The flight this is a segment of. + Flight *FlightInfo `json:"flight,omitempty"` + + // Id: An id uniquely identifying the segment in the solution. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a segment object. A segment is one or more + // consecutive legs on the same flight. For example a hypothetical + // flight ZZ001, from DFW to OGG, could have one segment with two legs: + // DFW to HNL (leg 1), HNL to OGG (leg 2). Value: the fixed string + // qpxexpress#segmentInfo. + Kind string `json:"kind,omitempty"` + + // Leg: The legs composing this segment. + Leg []*LegInfo `json:"leg,omitempty"` + + // MarriedSegmentGroup: The solution-based index of a segment in a + // married segment group. Married segments can only be booked together. + // For example, an airline might report a certain booking code as sold + // out from Boston to Pittsburgh, but as available as part of two + // married segments Boston to Chicago connecting through Pittsburgh. For + // example content of this field, consider the round-trip flight ZZ1 + // PHX-PHL ZZ2 PHL-CLT ZZ3 CLT-PHX. This has three segments, with the + // two outbound ones (ZZ1 ZZ2) married. In this case, the two outbound + // segments belong to married segment group 0, and the return segment + // belongs to married segment group 1. + MarriedSegmentGroup string `json:"marriedSegmentGroup,omitempty"` + + // SubjectToGovernmentApproval: Whether the operation of this segment + // remains subject to government approval. + SubjectToGovernmentApproval bool `json:"subjectToGovernmentApproval,omitempty"` +} + +type SegmentPricing struct { + // FareId: A segment identifier unique within a single solution. It is + // used to refer to different parts of the same solution. + FareId string `json:"fareId,omitempty"` + + // FreeBaggageOption: Details of the free baggage allowance on this + // segment. + FreeBaggageOption []*FreeBaggageAllowance `json:"freeBaggageOption,omitempty"` + + // Kind: Identifies this as a segment pricing object, representing the + // price of this segment. Value: the fixed string + // qpxexpress#segmentPricing. + Kind string `json:"kind,omitempty"` + + // SegmentId: Unique identifier in the response of this segment. + SegmentId string `json:"segmentId,omitempty"` +} + +type SliceInfo struct { + // Duration: The duration of the slice in minutes. + Duration int64 `json:"duration,omitempty"` + + // Kind: Identifies this as a slice object. A slice represents a + // traveller's intent, the portion of a low-fare search corresponding to + // a traveler's request to get between two points. One-way journeys are + // generally expressed using 1 slice, round-trips using 2. Value: the + // fixed string qpxexpress#sliceInfo. + Kind string `json:"kind,omitempty"` + + // Segment: The segment(s) constituting the slice. + Segment []*SegmentInfo `json:"segment,omitempty"` +} + +type SliceInput struct { + // Alliance: Slices with only the carriers in this alliance should be + // returned; do not use this field with permittedCarrier. Allowed values + // are ONEWORLD, SKYTEAM, and STAR. + Alliance string `json:"alliance,omitempty"` + + // Date: Departure date in YYYY-MM-DD format. + Date string `json:"date,omitempty"` + + // Destination: Airport or city IATA designator of the destination. + Destination string `json:"destination,omitempty"` + + // Kind: Identifies this as a slice input object, representing the + // criteria a desired slice must satisfy. Value: the fixed string + // qpxexpress#sliceInput. + Kind string `json:"kind,omitempty"` + + // MaxConnectionDuration: The longest connection between two legs, in + // minutes, you are willing to accept. + MaxConnectionDuration int64 `json:"maxConnectionDuration,omitempty"` + + // MaxStops: The maximum number of stops you are willing to accept in + // this slice. + MaxStops int64 `json:"maxStops,omitempty"` + + // Origin: Airport or city IATA designator of the origin. + Origin string `json:"origin,omitempty"` + + // PermittedCarrier: A list of 2-letter IATA airline designators. Slices + // with only these carriers should be returned. + PermittedCarrier []string `json:"permittedCarrier,omitempty"` + + // PermittedDepartureTime: Slices must depart in this time of day range, + // local to the point of departure. + PermittedDepartureTime *TimeOfDayRange `json:"permittedDepartureTime,omitempty"` + + // PreferredCabin: Prefer solutions that book in this cabin for this + // slice. Allowed values are COACH, PREMIUM_COACH, BUSINESS, and FIRST. + PreferredCabin string `json:"preferredCabin,omitempty"` + + // ProhibitedCarrier: A list of 2-letter IATA airline designators. + // Exclude slices that use these carriers. + ProhibitedCarrier []string `json:"prohibitedCarrier,omitempty"` +} + +type TaxData struct { + // Id: An identifier uniquely identifying a tax in a response. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a tax data object, representing some tax. + // Value: the fixed string qpxexpress#taxData. + Kind string `json:"kind,omitempty"` + + // Name: The name of a tax. + Name string `json:"name,omitempty"` +} + +type TaxInfo struct { + // ChargeType: Whether this is a government charge or a carrier + // surcharge. + ChargeType string `json:"chargeType,omitempty"` + + // Code: The code to enter in the ticket's tax box. + Code string `json:"code,omitempty"` + + // Country: For government charges, the country levying the charge. + Country string `json:"country,omitempty"` + + // Id: Identifier uniquely identifying this tax in a response. Not + // present for unnamed carrier surcharges. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a tax information object. Value: the fixed + // string qpxexpress#taxInfo. + Kind string `json:"kind,omitempty"` + + // SalePrice: The price of the tax in the sales or equivalent currency. + SalePrice string `json:"salePrice,omitempty"` +} + +type TimeOfDayRange struct { + // EarliestTime: The earliest time of day in HH:MM format. + EarliestTime string `json:"earliestTime,omitempty"` + + // Kind: Identifies this as a time of day range object, representing two + // times in a single day defining a time range. Value: the fixed string + // qpxexpress#timeOfDayRange. + Kind string `json:"kind,omitempty"` + + // LatestTime: The latest time of day in HH:MM format. + LatestTime string `json:"latestTime,omitempty"` +} + +type TripOption struct { + // Id: Identifier uniquely identifying this trip in a response. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a trip information object. Value: the fixed + // string qpxexpress#tripOption. + Kind string `json:"kind,omitempty"` + + // Pricing: Per passenger pricing information. + Pricing []*PricingInfo `json:"pricing,omitempty"` + + // SaleTotal: The total price for all passengers on the trip, in the + // form of a currency followed by an amount, e.g. USD253.35. + SaleTotal string `json:"saleTotal,omitempty"` + + // Slice: The slices that make up this trip's itinerary. + Slice []*SliceInfo `json:"slice,omitempty"` +} + +type TripOptionsRequest struct { + // MaxPrice: Do not return solutions that cost more than this price. The + // alphabetical part of the price is in ISO 4217. The format, in regex, + // is [A-Z]{3}\d+(\.\d+)? Example: $102.07 + MaxPrice string `json:"maxPrice,omitempty"` + + // Passengers: Counts for each passenger type in the request. + Passengers *PassengerCounts `json:"passengers,omitempty"` + + // Refundable: Return only solutions with refundable fares. + Refundable bool `json:"refundable,omitempty"` + + // SaleCountry: IATA country code representing the point of sale. This + // determines the "equivalent amount paid" currency for the ticket. + SaleCountry string `json:"saleCountry,omitempty"` + + // Slice: The slices that make up the itinerary of this trip. A slice + // represents a traveler's intent, the portion of a low-fare search + // corresponding to a traveler's request to get between two points. + // One-way journeys are generally expressed using one slice, round-trips + // using two. An example of a one slice trip with three segments might + // be BOS-SYD, SYD-LAX, LAX-BOS if the traveler only stopped in SYD and + // LAX just long enough to change planes. + Slice []*SliceInput `json:"slice,omitempty"` + + // Solutions: The number of solutions to return, maximum 500. + Solutions int64 `json:"solutions,omitempty"` +} + +type TripOptionsResponse struct { + // Data: Informational data global to list of solutions. + Data *Data `json:"data,omitempty"` + + // Kind: Identifies this as a QPX Express trip response object, which + // consists of zero or more solutions. Value: the fixed string + // qpxexpress#tripOptions. + Kind string `json:"kind,omitempty"` + + // RequestId: An identifier uniquely identifying this response. + RequestId string `json:"requestId,omitempty"` + + // TripOption: A list of priced itinerary solutions to the QPX Express + // query. + TripOption []*TripOption `json:"tripOption,omitempty"` +} + +type TripsSearchRequest struct { + // Request: A QPX Express search request. Required values are at least + // one adult or senior passenger, an origin, a destination, and a date. + Request *TripOptionsRequest `json:"request,omitempty"` +} + +type TripsSearchResponse struct { + // Kind: Identifies this as a QPX Express API search response resource. + // Value: the fixed string qpxExpress#tripsSearch. + Kind string `json:"kind,omitempty"` + + // Trips: All possible solutions to the QPX Express search request. + Trips *TripOptionsResponse `json:"trips,omitempty"` +} + +// method id "qpxExpress.trips.search": + +type TripsSearchCall struct { + s *Service + tripssearchrequest *TripsSearchRequest + opt_ map[string]interface{} +} + +// Search: Returns a list of flights. +func (r *TripsService) Search(tripssearchrequest *TripsSearchRequest) *TripsSearchCall { + c := &TripsSearchCall{s: r.s, opt_: make(map[string]interface{})} + c.tripssearchrequest = tripssearchrequest + return c +} + +func (c *TripsSearchCall) Do() (*TripsSearchResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tripssearchrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "search") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TripsSearchResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a list of flights.", + // "httpMethod": "POST", + // "id": "qpxExpress.trips.search", + // "path": "search", + // "request": { + // "$ref": "TripsSearchRequest" + // }, + // "response": { + // "$ref": "TripsSearchResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-api.json b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-api.json new file mode 100644 index 0000000000000..2607dc6c7c3a7 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-api.json @@ -0,0 +1,749 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/Qaw4O4xIZ1X1A6NR-C3D43AiI0M\"", + "discoveryVersion": "v1", + "id": "reseller:v1", + "name": "reseller", + "version": "v1", + "title": "Enterprise Apps Reseller API", + "description": "Lets you create and manage your customers and their subscriptions.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/reseller/", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/apps/reseller/v1/", + "basePath": "/apps/reseller/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "apps/reseller/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/apps.order": { + "description": "Manage users on your domain" + }, + "https://www.googleapis.com/auth/apps.order.readonly": { + "description": "Manage users on your domain" + } + } + } + }, + "schemas": { + "Address": { + "id": "Address", + "type": "object", + "description": "JSON template for address of a customer.", + "properties": { + "addressLine1": { + "type": "string", + "description": "Address line 1 of the address." + }, + "addressLine2": { + "type": "string", + "description": "Address line 2 of the address." + }, + "addressLine3": { + "type": "string", + "description": "Address line 3 of the address." + }, + "contactName": { + "type": "string", + "description": "Name of the contact person." + }, + "countryCode": { + "type": "string", + "description": "ISO 3166 country code." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a customer address.", + "default": "customers#address" + }, + "locality": { + "type": "string", + "description": "Name of the locality. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + }, + "organizationName": { + "type": "string", + "description": "Name of the organization." + }, + "postalCode": { + "type": "string", + "description": "The postal code. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + }, + "region": { + "type": "string", + "description": "Name of the region. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + } + } + }, + "ChangePlanRequest": { + "id": "ChangePlanRequest", + "type": "object", + "description": "JSON template for the ChangePlan rpc request.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription change plan request.", + "default": "subscriptions#changePlanRequest" + }, + "planName": { + "type": "string", + "description": "Name of the plan to change to." + }, + "purchaseOrderId": { + "type": "string", + "description": "Purchase order id for your order tracking purposes." + }, + "seats": { + "$ref": "Seats", + "description": "Number/Limit of seats in the new plan." + } + } + }, + "Customer": { + "id": "Customer", + "type": "object", + "description": "JSON template for a customer.", + "properties": { + "alternateEmail": { + "type": "string", + "description": "The alternate email of the customer." + }, + "customerDomain": { + "type": "string", + "description": "The domain name of the customer." + }, + "customerId": { + "type": "string", + "description": "The id of the customer." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a customer.", + "default": "reseller#customer" + }, + "phoneNumber": { + "type": "string", + "description": "The phone number of the customer." + }, + "postalAddress": { + "$ref": "Address", + "description": "The postal address of the customer." + }, + "resourceUiUrl": { + "type": "string", + "description": "Ui url for customer resource." + } + } + }, + "RenewalSettings": { + "id": "RenewalSettings", + "type": "object", + "description": "JSON template for a subscription renewal settings.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription renewal setting.", + "default": "subscriptions#renewalSettings" + }, + "renewalType": { + "type": "string", + "description": "Subscription renewal type." + } + } + }, + "Seats": { + "id": "Seats", + "type": "object", + "description": "JSON template for subscription seats.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription change plan request.", + "default": "subscriptions#seats" + }, + "maximumNumberOfSeats": { + "type": "integer", + "description": "Maximum number of seats that can be purchased. This needs to be provided only for a non-commitment plan. For a commitment plan it is decided by the contract.", + "format": "int32" + }, + "numberOfSeats": { + "type": "integer", + "description": "Number of seats to purchase. This is applicable only for a commitment plan.", + "format": "int32" + } + } + }, + "Subscription": { + "id": "Subscription", + "type": "object", + "description": "JSON template for a subscription.", + "properties": { + "creationTime": { + "type": "string", + "description": "Creation time of this subscription in milliseconds since Unix epoch.", + "format": "int64" + }, + "customerId": { + "type": "string", + "description": "The id of the customer to whom the subscription belongs." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a Subscription.", + "default": "reseller#subscription" + }, + "plan": { + "type": "object", + "description": "Plan details of the subscription", + "properties": { + "commitmentInterval": { + "type": "object", + "description": "Interval of the commitment if it is a commitment plan.", + "properties": { + "endTime": { + "type": "string", + "description": "End time of the commitment interval in milliseconds since Unix epoch.", + "format": "int64" + }, + "startTime": { + "type": "string", + "description": "Start time of the commitment interval in milliseconds since Unix epoch.", + "format": "int64" + } + } + }, + "isCommitmentPlan": { + "type": "boolean", + "description": "Whether the plan is a commitment plan or not." + }, + "planName": { + "type": "string", + "description": "The plan name of this subscription's plan." + } + } + }, + "purchaseOrderId": { + "type": "string", + "description": "Purchase order id for your order tracking purposes." + }, + "renewalSettings": { + "$ref": "RenewalSettings", + "description": "Renewal settings of the subscription." + }, + "resourceUiUrl": { + "type": "string", + "description": "Ui url for subscription resource." + }, + "seats": { + "$ref": "Seats", + "description": "Number/Limit of seats in the new plan." + }, + "skuId": { + "type": "string", + "description": "Name of the sku for which this subscription is purchased." + }, + "status": { + "type": "string", + "description": "Status of the subscription." + }, + "subscriptionId": { + "type": "string", + "description": "The id of the subscription." + }, + "transferInfo": { + "type": "object", + "description": "Transfer related information for the subscription.", + "properties": { + "minimumTransferableSeats": { + "type": "integer", + "format": "int32" + }, + "transferabilityExpirationTime": { + "type": "string", + "description": "Time when transfer token or intent to transfer will expire.", + "format": "int64" + } + } + }, + "trialSettings": { + "type": "object", + "description": "Trial Settings of the subscription.", + "properties": { + "isInTrial": { + "type": "boolean", + "description": "Whether the subscription is in trial." + }, + "trialEndTime": { + "type": "string", + "description": "End time of the trial in milliseconds since Unix epoch.", + "format": "int64" + } + } + } + } + }, + "Subscriptions": { + "id": "Subscriptions", + "type": "object", + "description": "JSON template for a subscription list.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a collection of subscriptions.", + "default": "reseller#subscriptions" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "subscriptions": { + "type": "array", + "description": "The subscriptions in this page of results.", + "items": { + "$ref": "Subscription" + } + } + } + } + }, + "resources": { + "customers": { + "methods": { + "get": { + "id": "reseller.customers.get", + "path": "customers/{customerId}", + "httpMethod": "GET", + "description": "Gets a customer resource if one exists and is owned by the reseller.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "insert": { + "id": "reseller.customers.insert", + "path": "customers", + "httpMethod": "POST", + "description": "Creates a customer resource if one does not already exist.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed for inserting a customer for which domain already exists. Can be generated at https://www.google.com/a/cpanel//TransferToken. Optional.", + "location": "query" + } + }, + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "patch": { + "id": "reseller.customers.patch", + "path": "customers/{customerId}", + "httpMethod": "PATCH", + "description": "Update a customer resource if one it exists and is owned by the reseller. This method supports patch semantics.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "update": { + "id": "reseller.customers.update", + "path": "customers/{customerId}", + "httpMethod": "PUT", + "description": "Update a customer resource if one it exists and is owned by the reseller.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + } + } + }, + "subscriptions": { + "methods": { + "changePlan": { + "id": "reseller.subscriptions.changePlan", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changePlan", + "httpMethod": "POST", + "description": "Changes the plan of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "ChangePlanRequest" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "changeRenewalSettings": { + "id": "reseller.subscriptions.changeRenewalSettings", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings", + "httpMethod": "POST", + "description": "Changes the renewal settings of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "RenewalSettings" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "changeSeats": { + "id": "reseller.subscriptions.changeSeats", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats", + "httpMethod": "POST", + "description": "Changes the seats configuration of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "Seats" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "delete": { + "id": "reseller.subscriptions.delete", + "path": "customers/{customerId}/subscriptions/{subscriptionId}", + "httpMethod": "DELETE", + "description": "Cancels/Downgrades a subscription.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "deletionType": { + "type": "string", + "description": "Whether the subscription is to be fully cancelled or downgraded", + "required": true, + "enum": [ + "cancel", + "downgrade", + "suspend" + ], + "enumDescriptions": [ + "Cancels the subscription immediately", + "Downgrades a Google Apps for Business subscription to Google Apps", + "Suspends the subscriptions for 4 days before cancelling it" + ], + "location": "query" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId", + "deletionType" + ], + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "get": { + "id": "reseller.subscriptions.get", + "path": "customers/{customerId}/subscriptions/{subscriptionId}", + "httpMethod": "GET", + "description": "Gets a subscription of the customer.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "insert": { + "id": "reseller.subscriptions.insert", + "path": "customers/{customerId}/subscriptions", + "httpMethod": "POST", + "description": "Creates/Transfers a subscription for the customer.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed for transferring a subscription. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken. Optional.", + "location": "query" + }, + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Subscription" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "list": { + "id": "reseller.subscriptions.list", + "path": "subscriptions", + "httpMethod": "GET", + "description": "Lists subscriptions of a reseller, optionally filtered by a customer name prefix.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed if the customer is not a resold customer of this reseller. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken.Optional.", + "location": "query" + }, + "customerId": { + "type": "string", + "description": "Id of the Customer", + "location": "query" + }, + "customerNamePrefix": { + "type": "string", + "description": "Prefix of the customer's domain name by which the subscriptions should be filtered. Optional", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + } + }, + "response": { + "$ref": "Subscriptions" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "startPaidService": { + "id": "reseller.subscriptions.startPaidService", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService", + "httpMethod": "POST", + "description": "Starts paid service of a trial subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-gen.go b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-gen.go new file mode 100644 index 0000000000000..8ce4fd1b7a564 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1/reseller-gen.go @@ -0,0 +1,1288 @@ +// Package reseller provides access to the Enterprise Apps Reseller API. +// +// See https://developers.google.com/google-apps/reseller/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/reseller/v1" +// ... +// resellerService, err := reseller.New(oauthHttpClient) +package reseller + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "reseller:v1" +const apiName = "reseller" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/apps/reseller/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage users on your domain + AppsOrderScope = "https://www.googleapis.com/auth/apps.order" + + // Manage users on your domain + AppsOrderReadonlyScope = "https://www.googleapis.com/auth/apps.order.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Customers = NewCustomersService(s) + s.Subscriptions = NewSubscriptionsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Customers *CustomersService + + Subscriptions *SubscriptionsService +} + +func NewCustomersService(s *Service) *CustomersService { + rs := &CustomersService{s: s} + return rs +} + +type CustomersService struct { + s *Service +} + +func NewSubscriptionsService(s *Service) *SubscriptionsService { + rs := &SubscriptionsService{s: s} + return rs +} + +type SubscriptionsService struct { + s *Service +} + +type Address struct { + // AddressLine1: Address line 1 of the address. + AddressLine1 string `json:"addressLine1,omitempty"` + + // AddressLine2: Address line 2 of the address. + AddressLine2 string `json:"addressLine2,omitempty"` + + // AddressLine3: Address line 3 of the address. + AddressLine3 string `json:"addressLine3,omitempty"` + + // ContactName: Name of the contact person. + ContactName string `json:"contactName,omitempty"` + + // CountryCode: ISO 3166 country code. + CountryCode string `json:"countryCode,omitempty"` + + // Kind: Identifies the resource as a customer address. + Kind string `json:"kind,omitempty"` + + // Locality: Name of the locality. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + Locality string `json:"locality,omitempty"` + + // OrganizationName: Name of the organization. + OrganizationName string `json:"organizationName,omitempty"` + + // PostalCode: The postal code. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + PostalCode string `json:"postalCode,omitempty"` + + // Region: Name of the region. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + Region string `json:"region,omitempty"` +} + +type ChangePlanRequest struct { + // Kind: Identifies the resource as a subscription change plan request. + Kind string `json:"kind,omitempty"` + + // PlanName: Name of the plan to change to. + PlanName string `json:"planName,omitempty"` + + // PurchaseOrderId: Purchase order id for your order tracking purposes. + PurchaseOrderId string `json:"purchaseOrderId,omitempty"` + + // Seats: Number/Limit of seats in the new plan. + Seats *Seats `json:"seats,omitempty"` +} + +type Customer struct { + // AlternateEmail: The alternate email of the customer. + AlternateEmail string `json:"alternateEmail,omitempty"` + + // CustomerDomain: The domain name of the customer. + CustomerDomain string `json:"customerDomain,omitempty"` + + // CustomerId: The id of the customer. + CustomerId string `json:"customerId,omitempty"` + + // Kind: Identifies the resource as a customer. + Kind string `json:"kind,omitempty"` + + // PhoneNumber: The phone number of the customer. + PhoneNumber string `json:"phoneNumber,omitempty"` + + // PostalAddress: The postal address of the customer. + PostalAddress *Address `json:"postalAddress,omitempty"` + + // ResourceUiUrl: Ui url for customer resource. + ResourceUiUrl string `json:"resourceUiUrl,omitempty"` +} + +type RenewalSettings struct { + // Kind: Identifies the resource as a subscription renewal setting. + Kind string `json:"kind,omitempty"` + + // RenewalType: Subscription renewal type. + RenewalType string `json:"renewalType,omitempty"` +} + +type Seats struct { + // Kind: Identifies the resource as a subscription change plan request. + Kind string `json:"kind,omitempty"` + + // MaximumNumberOfSeats: Maximum number of seats that can be purchased. + // This needs to be provided only for a non-commitment plan. For a + // commitment plan it is decided by the contract. + MaximumNumberOfSeats int64 `json:"maximumNumberOfSeats,omitempty"` + + // NumberOfSeats: Number of seats to purchase. This is applicable only + // for a commitment plan. + NumberOfSeats int64 `json:"numberOfSeats,omitempty"` +} + +type Subscription struct { + // CreationTime: Creation time of this subscription in milliseconds + // since Unix epoch. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // CustomerId: The id of the customer to whom the subscription belongs. + CustomerId string `json:"customerId,omitempty"` + + // Kind: Identifies the resource as a Subscription. + Kind string `json:"kind,omitempty"` + + // Plan: Plan details of the subscription + Plan *SubscriptionPlan `json:"plan,omitempty"` + + // PurchaseOrderId: Purchase order id for your order tracking purposes. + PurchaseOrderId string `json:"purchaseOrderId,omitempty"` + + // RenewalSettings: Renewal settings of the subscription. + RenewalSettings *RenewalSettings `json:"renewalSettings,omitempty"` + + // ResourceUiUrl: Ui url for subscription resource. + ResourceUiUrl string `json:"resourceUiUrl,omitempty"` + + // Seats: Number/Limit of seats in the new plan. + Seats *Seats `json:"seats,omitempty"` + + // SkuId: Name of the sku for which this subscription is purchased. + SkuId string `json:"skuId,omitempty"` + + // Status: Status of the subscription. + Status string `json:"status,omitempty"` + + // SubscriptionId: The id of the subscription. + SubscriptionId string `json:"subscriptionId,omitempty"` + + // TransferInfo: Transfer related information for the subscription. + TransferInfo *SubscriptionTransferInfo `json:"transferInfo,omitempty"` + + // TrialSettings: Trial Settings of the subscription. + TrialSettings *SubscriptionTrialSettings `json:"trialSettings,omitempty"` +} + +type SubscriptionPlan struct { + // CommitmentInterval: Interval of the commitment if it is a commitment + // plan. + CommitmentInterval *SubscriptionPlanCommitmentInterval `json:"commitmentInterval,omitempty"` + + // IsCommitmentPlan: Whether the plan is a commitment plan or not. + IsCommitmentPlan bool `json:"isCommitmentPlan,omitempty"` + + // PlanName: The plan name of this subscription's plan. + PlanName string `json:"planName,omitempty"` +} + +type SubscriptionPlanCommitmentInterval struct { + // EndTime: End time of the commitment interval in milliseconds since + // Unix epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // StartTime: Start time of the commitment interval in milliseconds + // since Unix epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type SubscriptionTransferInfo struct { + MinimumTransferableSeats int64 `json:"minimumTransferableSeats,omitempty"` + + // TransferabilityExpirationTime: Time when transfer token or intent to + // transfer will expire. + TransferabilityExpirationTime int64 `json:"transferabilityExpirationTime,omitempty,string"` +} + +type SubscriptionTrialSettings struct { + // IsInTrial: Whether the subscription is in trial. + IsInTrial bool `json:"isInTrial,omitempty"` + + // TrialEndTime: End time of the trial in milliseconds since Unix epoch. + TrialEndTime int64 `json:"trialEndTime,omitempty,string"` +} + +type Subscriptions struct { + // Kind: Identifies the resource as a collection of subscriptions. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Subscriptions: The subscriptions in this page of results. + Subscriptions []*Subscription `json:"subscriptions,omitempty"` +} + +// method id "reseller.customers.get": + +type CustomersGetCall struct { + s *Service + customerId string + opt_ map[string]interface{} +} + +// Get: Gets a customer resource if one exists and is owned by the +// reseller. +func (r *CustomersService) Get(customerId string) *CustomersGetCall { + c := &CustomersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + return c +} + +func (c *CustomersGetCall) Do() (*Customer, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a customer resource if one exists and is owned by the reseller.", + // "httpMethod": "GET", + // "id": "reseller.customers.get", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.customers.insert": + +type CustomersInsertCall struct { + s *Service + customer *Customer + opt_ map[string]interface{} +} + +// Insert: Creates a customer resource if one does not already exist. +func (r *CustomersService) Insert(customer *Customer) *CustomersInsertCall { + c := &CustomersInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed for inserting a customer for which domain already +// exists. Can be generated at +// https://www.google.com/a/cpanel//TransferToken. +func (c *CustomersInsertCall) CustomerAuthToken(customerAuthToken string) *CustomersInsertCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +func (c *CustomersInsertCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a customer resource if one does not already exist.", + // "httpMethod": "POST", + // "id": "reseller.customers.insert", + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed for inserting a customer for which domain already exists. Can be generated at https://www.google.com/a/cpanel//TransferToken. Optional.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customers", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.customers.patch": + +type CustomersPatchCall struct { + s *Service + customerId string + customer *Customer + opt_ map[string]interface{} +} + +// Patch: Update a customer resource if one it exists and is owned by +// the reseller. This method supports patch semantics. +func (r *CustomersService) Patch(customerId string, customer *Customer) *CustomersPatchCall { + c := &CustomersPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.customer = customer + return c +} + +func (c *CustomersPatchCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a customer resource if one it exists and is owned by the reseller. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "reseller.customers.patch", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.customers.update": + +type CustomersUpdateCall struct { + s *Service + customerId string + customer *Customer + opt_ map[string]interface{} +} + +// Update: Update a customer resource if one it exists and is owned by +// the reseller. +func (r *CustomersService) Update(customerId string, customer *Customer) *CustomersUpdateCall { + c := &CustomersUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.customer = customer + return c +} + +func (c *CustomersUpdateCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a customer resource if one it exists and is owned by the reseller.", + // "httpMethod": "PUT", + // "id": "reseller.customers.update", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changePlan": + +type SubscriptionsChangePlanCall struct { + s *Service + customerId string + subscriptionId string + changeplanrequest *ChangePlanRequest + opt_ map[string]interface{} +} + +// ChangePlan: Changes the plan of a subscription +func (r *SubscriptionsService) ChangePlan(customerId string, subscriptionId string, changeplanrequest *ChangePlanRequest) *SubscriptionsChangePlanCall { + c := &SubscriptionsChangePlanCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.changeplanrequest = changeplanrequest + return c +} + +func (c *SubscriptionsChangePlanCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.changeplanrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changePlan") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the plan of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changePlan", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changePlan", + // "request": { + // "$ref": "ChangePlanRequest" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changeRenewalSettings": + +type SubscriptionsChangeRenewalSettingsCall struct { + s *Service + customerId string + subscriptionId string + renewalsettings *RenewalSettings + opt_ map[string]interface{} +} + +// ChangeRenewalSettings: Changes the renewal settings of a subscription +func (r *SubscriptionsService) ChangeRenewalSettings(customerId string, subscriptionId string, renewalsettings *RenewalSettings) *SubscriptionsChangeRenewalSettingsCall { + c := &SubscriptionsChangeRenewalSettingsCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.renewalsettings = renewalsettings + return c +} + +func (c *SubscriptionsChangeRenewalSettingsCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.renewalsettings) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the renewal settings of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changeRenewalSettings", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings", + // "request": { + // "$ref": "RenewalSettings" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changeSeats": + +type SubscriptionsChangeSeatsCall struct { + s *Service + customerId string + subscriptionId string + seats *Seats + opt_ map[string]interface{} +} + +// ChangeSeats: Changes the seats configuration of a subscription +func (r *SubscriptionsService) ChangeSeats(customerId string, subscriptionId string, seats *Seats) *SubscriptionsChangeSeatsCall { + c := &SubscriptionsChangeSeatsCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.seats = seats + return c +} + +func (c *SubscriptionsChangeSeatsCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.seats) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the seats configuration of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changeSeats", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats", + // "request": { + // "$ref": "Seats" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.delete": + +type SubscriptionsDeleteCall struct { + s *Service + customerId string + subscriptionId string + deletionType string + opt_ map[string]interface{} +} + +// Delete: Cancels/Downgrades a subscription. +func (r *SubscriptionsService) Delete(customerId string, subscriptionId string, deletionType string) *SubscriptionsDeleteCall { + c := &SubscriptionsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.deletionType = deletionType + return c +} + +func (c *SubscriptionsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("deletionType", fmt.Sprintf("%v", c.deletionType)) + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Cancels/Downgrades a subscription.", + // "httpMethod": "DELETE", + // "id": "reseller.subscriptions.delete", + // "parameterOrder": [ + // "customerId", + // "subscriptionId", + // "deletionType" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deletionType": { + // "description": "Whether the subscription is to be fully cancelled or downgraded", + // "enum": [ + // "cancel", + // "downgrade", + // "suspend" + // ], + // "enumDescriptions": [ + // "Cancels the subscription immediately", + // "Downgrades a Google Apps for Business subscription to Google Apps", + // "Suspends the subscriptions for 4 days before cancelling it" + // ], + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}", + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.get": + +type SubscriptionsGetCall struct { + s *Service + customerId string + subscriptionId string + opt_ map[string]interface{} +} + +// Get: Gets a subscription of the customer. +func (r *SubscriptionsService) Get(customerId string, subscriptionId string) *SubscriptionsGetCall { + c := &SubscriptionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + return c +} + +func (c *SubscriptionsGetCall) Do() (*Subscription, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a subscription of the customer.", + // "httpMethod": "GET", + // "id": "reseller.subscriptions.get", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}", + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.subscriptions.insert": + +type SubscriptionsInsertCall struct { + s *Service + customerId string + subscription *Subscription + opt_ map[string]interface{} +} + +// Insert: Creates/Transfers a subscription for the customer. +func (r *SubscriptionsService) Insert(customerId string, subscription *Subscription) *SubscriptionsInsertCall { + c := &SubscriptionsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscription = subscription + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed for transferring a subscription. Can be generated +// at https://www.google.com/a/cpanel/customer-domain/TransferToken. +func (c *SubscriptionsInsertCall) CustomerAuthToken(customerAuthToken string) *SubscriptionsInsertCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +func (c *SubscriptionsInsertCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates/Transfers a subscription for the customer.", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.insert", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed for transferring a subscription. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken. Optional.", + // "location": "query", + // "type": "string" + // }, + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions", + // "request": { + // "$ref": "Subscription" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.list": + +type SubscriptionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists subscriptions of a reseller, optionally filtered by a +// customer name prefix. +func (r *SubscriptionsService) List() *SubscriptionsListCall { + c := &SubscriptionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed if the customer is not a resold customer of this +// reseller. Can be generated at +// https://www.google.com/a/cpanel/customer-domain/TransferToken. +func (c *SubscriptionsListCall) CustomerAuthToken(customerAuthToken string) *SubscriptionsListCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +// CustomerId sets the optional parameter "customerId": Id of the +// Customer +func (c *SubscriptionsListCall) CustomerId(customerId string) *SubscriptionsListCall { + c.opt_["customerId"] = customerId + return c +} + +// CustomerNamePrefix sets the optional parameter "customerNamePrefix": +// Prefix of the customer's domain name by which the subscriptions +// should be filtered. Optional +func (c *SubscriptionsListCall) CustomerNamePrefix(customerNamePrefix string) *SubscriptionsListCall { + c.opt_["customerNamePrefix"] = customerNamePrefix + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *SubscriptionsListCall) MaxResults(maxResults int64) *SubscriptionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *SubscriptionsListCall) PageToken(pageToken string) *SubscriptionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SubscriptionsListCall) Do() (*Subscriptions, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerNamePrefix"]; ok { + params.Set("customerNamePrefix", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscriptions) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists subscriptions of a reseller, optionally filtered by a customer name prefix.", + // "httpMethod": "GET", + // "id": "reseller.subscriptions.list", + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed if the customer is not a resold customer of this reseller. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken.Optional.", + // "location": "query", + // "type": "string" + // }, + // "customerId": { + // "description": "Id of the Customer", + // "location": "query", + // "type": "string" + // }, + // "customerNamePrefix": { + // "description": "Prefix of the customer's domain name by which the subscriptions should be filtered. Optional", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "subscriptions", + // "response": { + // "$ref": "Subscriptions" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.subscriptions.startPaidService": + +type SubscriptionsStartPaidServiceCall struct { + s *Service + customerId string + subscriptionId string + opt_ map[string]interface{} +} + +// StartPaidService: Starts paid service of a trial subscription +func (r *SubscriptionsService) StartPaidService(customerId string, subscriptionId string) *SubscriptionsStartPaidServiceCall { + c := &SubscriptionsStartPaidServiceCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + return c +} + +func (c *SubscriptionsStartPaidServiceCall) Do() (*Subscription, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts paid service of a trial subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.startPaidService", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService", + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-api.json b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-api.json new file mode 100644 index 0000000000000..29d71cbee5ca7 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-api.json @@ -0,0 +1,749 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/lCOFlgVtGlgupSVNF85eEEfwphE\"", + "discoveryVersion": "v1", + "id": "reseller:v1sandbox", + "name": "reseller", + "version": "v1sandbox", + "title": "Enterprise Apps Reseller API", + "description": "Lets you create and manage your customers and their subscriptions.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/google-apps/reseller/", + "labels": [ + "limited_availability" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/apps/reseller/v1sandbox/", + "basePath": "/apps/reseller/v1sandbox/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "apps/reseller/v1sandbox/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/apps.order": { + "description": "Manage users on your domain" + }, + "https://www.googleapis.com/auth/apps.order.readonly": { + "description": "Manage users on your domain" + } + } + } + }, + "schemas": { + "Address": { + "id": "Address", + "type": "object", + "description": "JSON template for address of a customer.", + "properties": { + "addressLine1": { + "type": "string", + "description": "Address line 1 of the address." + }, + "addressLine2": { + "type": "string", + "description": "Address line 2 of the address." + }, + "addressLine3": { + "type": "string", + "description": "Address line 3 of the address." + }, + "contactName": { + "type": "string", + "description": "Name of the contact person." + }, + "countryCode": { + "type": "string", + "description": "ISO 3166 country code." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a customer address.", + "default": "customers#address" + }, + "locality": { + "type": "string", + "description": "Name of the locality. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + }, + "organizationName": { + "type": "string", + "description": "Name of the organization." + }, + "postalCode": { + "type": "string", + "description": "The postal code. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + }, + "region": { + "type": "string", + "description": "Name of the region. This is in accordance with - http://portablecontacts.net/draft-spec.html#address_element." + } + } + }, + "ChangePlanRequest": { + "id": "ChangePlanRequest", + "type": "object", + "description": "JSON template for the ChangePlan rpc request.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription change plan request.", + "default": "subscriptions#changePlanRequest" + }, + "planName": { + "type": "string", + "description": "Name of the plan to change to." + }, + "purchaseOrderId": { + "type": "string", + "description": "Purchase order id for your order tracking purposes." + }, + "seats": { + "$ref": "Seats", + "description": "Number/Limit of seats in the new plan." + } + } + }, + "Customer": { + "id": "Customer", + "type": "object", + "description": "JSON template for a customer.", + "properties": { + "alternateEmail": { + "type": "string", + "description": "The alternate email of the customer." + }, + "customerDomain": { + "type": "string", + "description": "The domain name of the customer." + }, + "customerId": { + "type": "string", + "description": "The id of the customer." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a customer.", + "default": "reseller#customer" + }, + "phoneNumber": { + "type": "string", + "description": "The phone number of the customer." + }, + "postalAddress": { + "$ref": "Address", + "description": "The postal address of the customer." + }, + "resourceUiUrl": { + "type": "string", + "description": "Ui url for customer resource." + } + } + }, + "RenewalSettings": { + "id": "RenewalSettings", + "type": "object", + "description": "JSON template for a subscription renewal settings.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription renewal setting.", + "default": "subscriptions#renewalSettings" + }, + "renewalType": { + "type": "string", + "description": "Subscription renewal type." + } + } + }, + "Seats": { + "id": "Seats", + "type": "object", + "description": "JSON template for subscription seats.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a subscription change plan request.", + "default": "subscriptions#seats" + }, + "maximumNumberOfSeats": { + "type": "integer", + "description": "Maximum number of seats that can be purchased. This needs to be provided only for a non-commitment plan. For a commitment plan it is decided by the contract.", + "format": "int32" + }, + "numberOfSeats": { + "type": "integer", + "description": "Number of seats to purchase. This is applicable only for a commitment plan.", + "format": "int32" + } + } + }, + "Subscription": { + "id": "Subscription", + "type": "object", + "description": "JSON template for a subscription.", + "properties": { + "creationTime": { + "type": "string", + "description": "Creation time of this subscription in milliseconds since Unix epoch.", + "format": "int64" + }, + "customerId": { + "type": "string", + "description": "The id of the customer to whom the subscription belongs." + }, + "kind": { + "type": "string", + "description": "Identifies the resource as a Subscription.", + "default": "reseller#subscription" + }, + "plan": { + "type": "object", + "description": "Plan details of the subscription", + "properties": { + "commitmentInterval": { + "type": "object", + "description": "Interval of the commitment if it is a commitment plan.", + "properties": { + "endTime": { + "type": "string", + "description": "End time of the commitment interval in milliseconds since Unix epoch.", + "format": "int64" + }, + "startTime": { + "type": "string", + "description": "Start time of the commitment interval in milliseconds since Unix epoch.", + "format": "int64" + } + } + }, + "isCommitmentPlan": { + "type": "boolean", + "description": "Whether the plan is a commitment plan or not." + }, + "planName": { + "type": "string", + "description": "The plan name of this subscription's plan." + } + } + }, + "purchaseOrderId": { + "type": "string", + "description": "Purchase order id for your order tracking purposes." + }, + "renewalSettings": { + "$ref": "RenewalSettings", + "description": "Renewal settings of the subscription." + }, + "resourceUiUrl": { + "type": "string", + "description": "Ui url for subscription resource." + }, + "seats": { + "$ref": "Seats", + "description": "Number/Limit of seats in the new plan." + }, + "skuId": { + "type": "string", + "description": "Name of the sku for which this subscription is purchased." + }, + "status": { + "type": "string", + "description": "Status of the subscription." + }, + "subscriptionId": { + "type": "string", + "description": "The id of the subscription." + }, + "transferInfo": { + "type": "object", + "description": "Transfer related information for the subscription.", + "properties": { + "minimumTransferableSeats": { + "type": "integer", + "format": "int32" + }, + "transferabilityExpirationTime": { + "type": "string", + "description": "Time when transfer token or intent to transfer will expire.", + "format": "int64" + } + } + }, + "trialSettings": { + "type": "object", + "description": "Trial Settings of the subscription.", + "properties": { + "isInTrial": { + "type": "boolean", + "description": "Whether the subscription is in trial." + }, + "trialEndTime": { + "type": "string", + "description": "End time of the trial in milliseconds since Unix epoch.", + "format": "int64" + } + } + } + } + }, + "Subscriptions": { + "id": "Subscriptions", + "type": "object", + "description": "JSON template for a subscription list.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies the resource as a collection of subscriptions.", + "default": "reseller#subscriptions" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "subscriptions": { + "type": "array", + "description": "The subscriptions in this page of results.", + "items": { + "$ref": "Subscription" + } + } + } + } + }, + "resources": { + "customers": { + "methods": { + "get": { + "id": "reseller.customers.get", + "path": "customers/{customerId}", + "httpMethod": "GET", + "description": "Gets a customer resource if one exists and is owned by the reseller.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "insert": { + "id": "reseller.customers.insert", + "path": "customers", + "httpMethod": "POST", + "description": "Creates a customer resource if one does not already exist.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed for inserting a customer for which domain already exists. Can be generated at https://www.google.com/a/cpanel//TransferToken. Optional.", + "location": "query" + } + }, + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "patch": { + "id": "reseller.customers.patch", + "path": "customers/{customerId}", + "httpMethod": "PATCH", + "description": "Update a customer resource if one it exists and is owned by the reseller. This method supports patch semantics.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "update": { + "id": "reseller.customers.update", + "path": "customers/{customerId}", + "httpMethod": "PUT", + "description": "Update a customer resource if one it exists and is owned by the reseller.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Customer" + }, + "response": { + "$ref": "Customer" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + } + } + }, + "subscriptions": { + "methods": { + "changePlan": { + "id": "reseller.subscriptions.changePlan", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changePlan", + "httpMethod": "POST", + "description": "Changes the plan of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "ChangePlanRequest" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "changeRenewalSettings": { + "id": "reseller.subscriptions.changeRenewalSettings", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings", + "httpMethod": "POST", + "description": "Changes the renewal settings of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "RenewalSettings" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "changeSeats": { + "id": "reseller.subscriptions.changeSeats", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats", + "httpMethod": "POST", + "description": "Changes the seats configuration of a subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "request": { + "$ref": "Seats" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "delete": { + "id": "reseller.subscriptions.delete", + "path": "customers/{customerId}/subscriptions/{subscriptionId}", + "httpMethod": "DELETE", + "description": "Cancels/Downgrades a subscription.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "deletionType": { + "type": "string", + "description": "Whether the subscription is to be fully cancelled or downgraded", + "required": true, + "enum": [ + "cancel", + "downgrade", + "suspend" + ], + "enumDescriptions": [ + "Cancels the subscription immediately", + "Downgrades a Google Apps for Business subscription to Google Apps", + "Suspends the subscriptions for 4 days before cancelling it" + ], + "location": "query" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId", + "deletionType" + ], + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "get": { + "id": "reseller.subscriptions.get", + "path": "customers/{customerId}/subscriptions/{subscriptionId}", + "httpMethod": "GET", + "description": "Gets a subscription of the customer.", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "insert": { + "id": "reseller.subscriptions.insert", + "path": "customers/{customerId}/subscriptions", + "httpMethod": "POST", + "description": "Creates/Transfers a subscription for the customer.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed for transferring a subscription. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken. Optional.", + "location": "query" + }, + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId" + ], + "request": { + "$ref": "Subscription" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + }, + "list": { + "id": "reseller.subscriptions.list", + "path": "subscriptions", + "httpMethod": "GET", + "description": "Lists subscriptions of a reseller, optionally filtered by a customer name prefix.", + "parameters": { + "customerAuthToken": { + "type": "string", + "description": "An auth token needed if the customer is not a resold customer of this reseller. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken.Optional.", + "location": "query" + }, + "customerId": { + "type": "string", + "description": "Id of the Customer", + "location": "query" + }, + "customerNamePrefix": { + "type": "string", + "description": "Prefix of the customer's domain name by which the subscriptions should be filtered. Optional", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "minimum": "1", + "maximum": "100", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token to specify next page in the list", + "location": "query" + } + }, + "response": { + "$ref": "Subscriptions" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order", + "https://www.googleapis.com/auth/apps.order.readonly" + ] + }, + "startPaidService": { + "id": "reseller.subscriptions.startPaidService", + "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService", + "httpMethod": "POST", + "description": "Starts paid service of a trial subscription", + "parameters": { + "customerId": { + "type": "string", + "description": "Id of the Customer", + "required": true, + "location": "path" + }, + "subscriptionId": { + "type": "string", + "description": "Id of the subscription, which is unique for a customer", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "customerId", + "subscriptionId" + ], + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/apps.order" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-gen.go b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-gen.go new file mode 100644 index 0000000000000..8f4d1ec9db04a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/reseller/v1sandbox/reseller-gen.go @@ -0,0 +1,1288 @@ +// Package reseller provides access to the Enterprise Apps Reseller API. +// +// See https://developers.google.com/google-apps/reseller/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/reseller/v1sandbox" +// ... +// resellerService, err := reseller.New(oauthHttpClient) +package reseller + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "reseller:v1sandbox" +const apiName = "reseller" +const apiVersion = "v1sandbox" +const basePath = "https://www.googleapis.com/apps/reseller/v1sandbox/" + +// OAuth2 scopes used by this API. +const ( + // Manage users on your domain + AppsOrderScope = "https://www.googleapis.com/auth/apps.order" + + // Manage users on your domain + AppsOrderReadonlyScope = "https://www.googleapis.com/auth/apps.order.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Customers = NewCustomersService(s) + s.Subscriptions = NewSubscriptionsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Customers *CustomersService + + Subscriptions *SubscriptionsService +} + +func NewCustomersService(s *Service) *CustomersService { + rs := &CustomersService{s: s} + return rs +} + +type CustomersService struct { + s *Service +} + +func NewSubscriptionsService(s *Service) *SubscriptionsService { + rs := &SubscriptionsService{s: s} + return rs +} + +type SubscriptionsService struct { + s *Service +} + +type Address struct { + // AddressLine1: Address line 1 of the address. + AddressLine1 string `json:"addressLine1,omitempty"` + + // AddressLine2: Address line 2 of the address. + AddressLine2 string `json:"addressLine2,omitempty"` + + // AddressLine3: Address line 3 of the address. + AddressLine3 string `json:"addressLine3,omitempty"` + + // ContactName: Name of the contact person. + ContactName string `json:"contactName,omitempty"` + + // CountryCode: ISO 3166 country code. + CountryCode string `json:"countryCode,omitempty"` + + // Kind: Identifies the resource as a customer address. + Kind string `json:"kind,omitempty"` + + // Locality: Name of the locality. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + Locality string `json:"locality,omitempty"` + + // OrganizationName: Name of the organization. + OrganizationName string `json:"organizationName,omitempty"` + + // PostalCode: The postal code. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + PostalCode string `json:"postalCode,omitempty"` + + // Region: Name of the region. This is in accordance with - + // http://portablecontacts.net/draft-spec.html#address_element. + Region string `json:"region,omitempty"` +} + +type ChangePlanRequest struct { + // Kind: Identifies the resource as a subscription change plan request. + Kind string `json:"kind,omitempty"` + + // PlanName: Name of the plan to change to. + PlanName string `json:"planName,omitempty"` + + // PurchaseOrderId: Purchase order id for your order tracking purposes. + PurchaseOrderId string `json:"purchaseOrderId,omitempty"` + + // Seats: Number/Limit of seats in the new plan. + Seats *Seats `json:"seats,omitempty"` +} + +type Customer struct { + // AlternateEmail: The alternate email of the customer. + AlternateEmail string `json:"alternateEmail,omitempty"` + + // CustomerDomain: The domain name of the customer. + CustomerDomain string `json:"customerDomain,omitempty"` + + // CustomerId: The id of the customer. + CustomerId string `json:"customerId,omitempty"` + + // Kind: Identifies the resource as a customer. + Kind string `json:"kind,omitempty"` + + // PhoneNumber: The phone number of the customer. + PhoneNumber string `json:"phoneNumber,omitempty"` + + // PostalAddress: The postal address of the customer. + PostalAddress *Address `json:"postalAddress,omitempty"` + + // ResourceUiUrl: Ui url for customer resource. + ResourceUiUrl string `json:"resourceUiUrl,omitempty"` +} + +type RenewalSettings struct { + // Kind: Identifies the resource as a subscription renewal setting. + Kind string `json:"kind,omitempty"` + + // RenewalType: Subscription renewal type. + RenewalType string `json:"renewalType,omitempty"` +} + +type Seats struct { + // Kind: Identifies the resource as a subscription change plan request. + Kind string `json:"kind,omitempty"` + + // MaximumNumberOfSeats: Maximum number of seats that can be purchased. + // This needs to be provided only for a non-commitment plan. For a + // commitment plan it is decided by the contract. + MaximumNumberOfSeats int64 `json:"maximumNumberOfSeats,omitempty"` + + // NumberOfSeats: Number of seats to purchase. This is applicable only + // for a commitment plan. + NumberOfSeats int64 `json:"numberOfSeats,omitempty"` +} + +type Subscription struct { + // CreationTime: Creation time of this subscription in milliseconds + // since Unix epoch. + CreationTime int64 `json:"creationTime,omitempty,string"` + + // CustomerId: The id of the customer to whom the subscription belongs. + CustomerId string `json:"customerId,omitempty"` + + // Kind: Identifies the resource as a Subscription. + Kind string `json:"kind,omitempty"` + + // Plan: Plan details of the subscription + Plan *SubscriptionPlan `json:"plan,omitempty"` + + // PurchaseOrderId: Purchase order id for your order tracking purposes. + PurchaseOrderId string `json:"purchaseOrderId,omitempty"` + + // RenewalSettings: Renewal settings of the subscription. + RenewalSettings *RenewalSettings `json:"renewalSettings,omitempty"` + + // ResourceUiUrl: Ui url for subscription resource. + ResourceUiUrl string `json:"resourceUiUrl,omitempty"` + + // Seats: Number/Limit of seats in the new plan. + Seats *Seats `json:"seats,omitempty"` + + // SkuId: Name of the sku for which this subscription is purchased. + SkuId string `json:"skuId,omitempty"` + + // Status: Status of the subscription. + Status string `json:"status,omitempty"` + + // SubscriptionId: The id of the subscription. + SubscriptionId string `json:"subscriptionId,omitempty"` + + // TransferInfo: Transfer related information for the subscription. + TransferInfo *SubscriptionTransferInfo `json:"transferInfo,omitempty"` + + // TrialSettings: Trial Settings of the subscription. + TrialSettings *SubscriptionTrialSettings `json:"trialSettings,omitempty"` +} + +type SubscriptionPlan struct { + // CommitmentInterval: Interval of the commitment if it is a commitment + // plan. + CommitmentInterval *SubscriptionPlanCommitmentInterval `json:"commitmentInterval,omitempty"` + + // IsCommitmentPlan: Whether the plan is a commitment plan or not. + IsCommitmentPlan bool `json:"isCommitmentPlan,omitempty"` + + // PlanName: The plan name of this subscription's plan. + PlanName string `json:"planName,omitempty"` +} + +type SubscriptionPlanCommitmentInterval struct { + // EndTime: End time of the commitment interval in milliseconds since + // Unix epoch. + EndTime int64 `json:"endTime,omitempty,string"` + + // StartTime: Start time of the commitment interval in milliseconds + // since Unix epoch. + StartTime int64 `json:"startTime,omitempty,string"` +} + +type SubscriptionTransferInfo struct { + MinimumTransferableSeats int64 `json:"minimumTransferableSeats,omitempty"` + + // TransferabilityExpirationTime: Time when transfer token or intent to + // transfer will expire. + TransferabilityExpirationTime int64 `json:"transferabilityExpirationTime,omitempty,string"` +} + +type SubscriptionTrialSettings struct { + // IsInTrial: Whether the subscription is in trial. + IsInTrial bool `json:"isInTrial,omitempty"` + + // TrialEndTime: End time of the trial in milliseconds since Unix epoch. + TrialEndTime int64 `json:"trialEndTime,omitempty,string"` +} + +type Subscriptions struct { + // Kind: Identifies the resource as a collection of subscriptions. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Subscriptions: The subscriptions in this page of results. + Subscriptions []*Subscription `json:"subscriptions,omitempty"` +} + +// method id "reseller.customers.get": + +type CustomersGetCall struct { + s *Service + customerId string + opt_ map[string]interface{} +} + +// Get: Gets a customer resource if one exists and is owned by the +// reseller. +func (r *CustomersService) Get(customerId string) *CustomersGetCall { + c := &CustomersGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + return c +} + +func (c *CustomersGetCall) Do() (*Customer, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a customer resource if one exists and is owned by the reseller.", + // "httpMethod": "GET", + // "id": "reseller.customers.get", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.customers.insert": + +type CustomersInsertCall struct { + s *Service + customer *Customer + opt_ map[string]interface{} +} + +// Insert: Creates a customer resource if one does not already exist. +func (r *CustomersService) Insert(customer *Customer) *CustomersInsertCall { + c := &CustomersInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.customer = customer + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed for inserting a customer for which domain already +// exists. Can be generated at +// https://www.google.com/a/cpanel//TransferToken. +func (c *CustomersInsertCall) CustomerAuthToken(customerAuthToken string) *CustomersInsertCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +func (c *CustomersInsertCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a customer resource if one does not already exist.", + // "httpMethod": "POST", + // "id": "reseller.customers.insert", + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed for inserting a customer for which domain already exists. Can be generated at https://www.google.com/a/cpanel//TransferToken. Optional.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "customers", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.customers.patch": + +type CustomersPatchCall struct { + s *Service + customerId string + customer *Customer + opt_ map[string]interface{} +} + +// Patch: Update a customer resource if one it exists and is owned by +// the reseller. This method supports patch semantics. +func (r *CustomersService) Patch(customerId string, customer *Customer) *CustomersPatchCall { + c := &CustomersPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.customer = customer + return c +} + +func (c *CustomersPatchCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a customer resource if one it exists and is owned by the reseller. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "reseller.customers.patch", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.customers.update": + +type CustomersUpdateCall struct { + s *Service + customerId string + customer *Customer + opt_ map[string]interface{} +} + +// Update: Update a customer resource if one it exists and is owned by +// the reseller. +func (r *CustomersService) Update(customerId string, customer *Customer) *CustomersUpdateCall { + c := &CustomersUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.customer = customer + return c +} + +func (c *CustomersUpdateCall) Do() (*Customer, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.customer) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Customer) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update a customer resource if one it exists and is owned by the reseller.", + // "httpMethod": "PUT", + // "id": "reseller.customers.update", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}", + // "request": { + // "$ref": "Customer" + // }, + // "response": { + // "$ref": "Customer" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changePlan": + +type SubscriptionsChangePlanCall struct { + s *Service + customerId string + subscriptionId string + changeplanrequest *ChangePlanRequest + opt_ map[string]interface{} +} + +// ChangePlan: Changes the plan of a subscription +func (r *SubscriptionsService) ChangePlan(customerId string, subscriptionId string, changeplanrequest *ChangePlanRequest) *SubscriptionsChangePlanCall { + c := &SubscriptionsChangePlanCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.changeplanrequest = changeplanrequest + return c +} + +func (c *SubscriptionsChangePlanCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.changeplanrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changePlan") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the plan of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changePlan", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changePlan", + // "request": { + // "$ref": "ChangePlanRequest" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changeRenewalSettings": + +type SubscriptionsChangeRenewalSettingsCall struct { + s *Service + customerId string + subscriptionId string + renewalsettings *RenewalSettings + opt_ map[string]interface{} +} + +// ChangeRenewalSettings: Changes the renewal settings of a subscription +func (r *SubscriptionsService) ChangeRenewalSettings(customerId string, subscriptionId string, renewalsettings *RenewalSettings) *SubscriptionsChangeRenewalSettingsCall { + c := &SubscriptionsChangeRenewalSettingsCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.renewalsettings = renewalsettings + return c +} + +func (c *SubscriptionsChangeRenewalSettingsCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.renewalsettings) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the renewal settings of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changeRenewalSettings", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeRenewalSettings", + // "request": { + // "$ref": "RenewalSettings" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.changeSeats": + +type SubscriptionsChangeSeatsCall struct { + s *Service + customerId string + subscriptionId string + seats *Seats + opt_ map[string]interface{} +} + +// ChangeSeats: Changes the seats configuration of a subscription +func (r *SubscriptionsService) ChangeSeats(customerId string, subscriptionId string, seats *Seats) *SubscriptionsChangeSeatsCall { + c := &SubscriptionsChangeSeatsCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.seats = seats + return c +} + +func (c *SubscriptionsChangeSeatsCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.seats) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Changes the seats configuration of a subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.changeSeats", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/changeSeats", + // "request": { + // "$ref": "Seats" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.delete": + +type SubscriptionsDeleteCall struct { + s *Service + customerId string + subscriptionId string + deletionType string + opt_ map[string]interface{} +} + +// Delete: Cancels/Downgrades a subscription. +func (r *SubscriptionsService) Delete(customerId string, subscriptionId string, deletionType string) *SubscriptionsDeleteCall { + c := &SubscriptionsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + c.deletionType = deletionType + return c +} + +func (c *SubscriptionsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("deletionType", fmt.Sprintf("%v", c.deletionType)) + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Cancels/Downgrades a subscription.", + // "httpMethod": "DELETE", + // "id": "reseller.subscriptions.delete", + // "parameterOrder": [ + // "customerId", + // "subscriptionId", + // "deletionType" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "deletionType": { + // "description": "Whether the subscription is to be fully cancelled or downgraded", + // "enum": [ + // "cancel", + // "downgrade", + // "suspend" + // ], + // "enumDescriptions": [ + // "Cancels the subscription immediately", + // "Downgrades a Google Apps for Business subscription to Google Apps", + // "Suspends the subscriptions for 4 days before cancelling it" + // ], + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}", + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.get": + +type SubscriptionsGetCall struct { + s *Service + customerId string + subscriptionId string + opt_ map[string]interface{} +} + +// Get: Gets a subscription of the customer. +func (r *SubscriptionsService) Get(customerId string, subscriptionId string) *SubscriptionsGetCall { + c := &SubscriptionsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + return c +} + +func (c *SubscriptionsGetCall) Do() (*Subscription, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Gets a subscription of the customer.", + // "httpMethod": "GET", + // "id": "reseller.subscriptions.get", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}", + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.subscriptions.insert": + +type SubscriptionsInsertCall struct { + s *Service + customerId string + subscription *Subscription + opt_ map[string]interface{} +} + +// Insert: Creates/Transfers a subscription for the customer. +func (r *SubscriptionsService) Insert(customerId string, subscription *Subscription) *SubscriptionsInsertCall { + c := &SubscriptionsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscription = subscription + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed for transferring a subscription. Can be generated +// at https://www.google.com/a/cpanel/customer-domain/TransferToken. +func (c *SubscriptionsInsertCall) CustomerAuthToken(customerAuthToken string) *SubscriptionsInsertCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +func (c *SubscriptionsInsertCall) Do() (*Subscription, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.subscription) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates/Transfers a subscription for the customer.", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.insert", + // "parameterOrder": [ + // "customerId" + // ], + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed for transferring a subscription. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken. Optional.", + // "location": "query", + // "type": "string" + // }, + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions", + // "request": { + // "$ref": "Subscription" + // }, + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} + +// method id "reseller.subscriptions.list": + +type SubscriptionsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists subscriptions of a reseller, optionally filtered by a +// customer name prefix. +func (r *SubscriptionsService) List() *SubscriptionsListCall { + c := &SubscriptionsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// CustomerAuthToken sets the optional parameter "customerAuthToken": An +// auth token needed if the customer is not a resold customer of this +// reseller. Can be generated at +// https://www.google.com/a/cpanel/customer-domain/TransferToken. +func (c *SubscriptionsListCall) CustomerAuthToken(customerAuthToken string) *SubscriptionsListCall { + c.opt_["customerAuthToken"] = customerAuthToken + return c +} + +// CustomerId sets the optional parameter "customerId": Id of the +// Customer +func (c *SubscriptionsListCall) CustomerId(customerId string) *SubscriptionsListCall { + c.opt_["customerId"] = customerId + return c +} + +// CustomerNamePrefix sets the optional parameter "customerNamePrefix": +// Prefix of the customer's domain name by which the subscriptions +// should be filtered. Optional +func (c *SubscriptionsListCall) CustomerNamePrefix(customerNamePrefix string) *SubscriptionsListCall { + c.opt_["customerNamePrefix"] = customerNamePrefix + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *SubscriptionsListCall) MaxResults(maxResults int64) *SubscriptionsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token to specify +// next page in the list +func (c *SubscriptionsListCall) PageToken(pageToken string) *SubscriptionsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *SubscriptionsListCall) Do() (*Subscriptions, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["customerAuthToken"]; ok { + params.Set("customerAuthToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerId"]; ok { + params.Set("customerId", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["customerNamePrefix"]; ok { + params.Set("customerNamePrefix", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "subscriptions") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscriptions) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists subscriptions of a reseller, optionally filtered by a customer name prefix.", + // "httpMethod": "GET", + // "id": "reseller.subscriptions.list", + // "parameters": { + // "customerAuthToken": { + // "description": "An auth token needed if the customer is not a resold customer of this reseller. Can be generated at https://www.google.com/a/cpanel/customer-domain/TransferToken.Optional.", + // "location": "query", + // "type": "string" + // }, + // "customerId": { + // "description": "Id of the Customer", + // "location": "query", + // "type": "string" + // }, + // "customerNamePrefix": { + // "description": "Prefix of the customer's domain name by which the subscriptions should be filtered. Optional", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "maximum": "100", + // "minimum": "1", + // "type": "integer" + // }, + // "pageToken": { + // "description": "Token to specify next page in the list", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "subscriptions", + // "response": { + // "$ref": "Subscriptions" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order", + // "https://www.googleapis.com/auth/apps.order.readonly" + // ] + // } + +} + +// method id "reseller.subscriptions.startPaidService": + +type SubscriptionsStartPaidServiceCall struct { + s *Service + customerId string + subscriptionId string + opt_ map[string]interface{} +} + +// StartPaidService: Starts paid service of a trial subscription +func (r *SubscriptionsService) StartPaidService(customerId string, subscriptionId string) *SubscriptionsStartPaidServiceCall { + c := &SubscriptionsStartPaidServiceCall{s: r.s, opt_: make(map[string]interface{})} + c.customerId = customerId + c.subscriptionId = subscriptionId + return c +} + +func (c *SubscriptionsStartPaidServiceCall) Do() (*Subscription, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{customerId}", url.QueryEscape(c.customerId), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{subscriptionId}", url.QueryEscape(c.subscriptionId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Subscription) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Starts paid service of a trial subscription", + // "httpMethod": "POST", + // "id": "reseller.subscriptions.startPaidService", + // "parameterOrder": [ + // "customerId", + // "subscriptionId" + // ], + // "parameters": { + // "customerId": { + // "description": "Id of the Customer", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "subscriptionId": { + // "description": "Id of the subscription, which is unique for a customer", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "customers/{customerId}/subscriptions/{subscriptionId}/startPaidService", + // "response": { + // "$ref": "Subscription" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/apps.order" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-api.json b/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-api.json new file mode 100644 index 0000000000000..96fd064caa270 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-api.json @@ -0,0 +1,1141 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"R6H4aXXmd1SZaWpEcGSkC2StmNw/ALLsz63BjCgWbD_pUtK6JxVYi8Y\"", + "discoveryVersion": "v1", + "id": "shopping:v1", + "name": "shopping", + "version": "v1", + "title": "Search API For Shopping", + "description": "Lets you search over product data.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/shopping-search/v1/getting_started", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/shopping/search/v1/", + "basePath": "/shopping/search/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "shopping/search/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "atom", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/atom+xml", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/shoppingapi": { + "description": "View your product data" + } + } + } + }, + "schemas": { + "Product": { + "id": "Product", + "type": "object", + "properties": { + "categories": { + "type": "array", + "description": "List of categories for product.", + "items": { + "$ref": "ShoppingModelCategoryJsonV1" + } + }, + "debug": { + "$ref": "ShoppingModelDebugJsonV1", + "description": "Google internal." + }, + "id": { + "type": "string", + "description": "Id of product." + }, + "kind": { + "type": "string", + "description": "The kind of item, always shopping#product.", + "default": "shopping#product" + }, + "product": { + "$ref": "ShoppingModelProductJsonV1", + "description": "Product." + }, + "recommendations": { + "type": "array", + "description": "Recommendations for product.", + "items": { + "$ref": "ShoppingModelRecommendationsJsonV1" + } + }, + "requestId": { + "type": "string", + "description": "Unique identifier for this request." + }, + "selfLink": { + "type": "string", + "description": "Self link of product when generated for a lookup request. Self link of product when generated for a search request." + } + } + }, + "Products": { + "id": "Products", + "type": "object", + "properties": { + "categories": { + "type": "array", + "description": "List of categories.", + "items": { + "$ref": "ShoppingModelCategoryJsonV1" + } + }, + "categoryRecommendations": { + "type": "array", + "description": "Recommendations for category.", + "items": { + "$ref": "ShoppingModelRecommendationsJsonV1" + } + }, + "currentItemCount": { + "type": "integer", + "description": "Current item count.", + "format": "int32" + }, + "debug": { + "$ref": "ShoppingModelDebugJsonV1", + "description": "Google internal." + }, + "etag": { + "type": "string", + "description": "Etag of feed." + }, + "extras": { + "$ref": "ShoppingModelExtrasJsonV1", + "description": "List of extras." + }, + "facets": { + "type": "array", + "description": "List of facets.", + "items": { + "type": "object", + "properties": { + "buckets": { + "type": "array", + "description": "List of Buckets within facet.", + "items": { + "type": "object", + "properties": { + "count": { + "type": "integer", + "description": "Number of products matching the query that have a value for the facet's property or attribute that matches the bucket.", + "format": "int32" + }, + "max": { + "type": "any", + "description": "Upper bound of the bucket (omitted for value buckets or if the range has no upper bound)." + }, + "maxExclusive": { + "type": "boolean", + "description": "Whether the upper bound of the bucket is exclusive (omitted for value buckets or if the range has no upper bound)." + }, + "min": { + "type": "any", + "description": "Lower bound of the bucket (omitted for value buckets or if the range has no lower bound)." + }, + "minExclusive": { + "type": "boolean", + "description": "Whether the lower bound of the bucket is exclusive (omitted for value buckets or if the range has no lower bound)." + }, + "value": { + "type": "any", + "description": "Value of the bucket (omitted for range buckets)." + } + } + } + }, + "count": { + "type": "integer", + "description": "Number of products matching the query that have a value for the facet's property or attribute.", + "format": "int32" + }, + "displayName": { + "type": "string", + "description": "Display name of facet." + }, + "name": { + "type": "string", + "description": "Name of the facet's attribute (omitted for property facets)." + }, + "property": { + "type": "string", + "description": "Property of facet (omitted for attribute facets)." + }, + "type": { + "type": "string", + "description": "Type of facet's attribute (omitted for property facets, one of: text, bool, int, float)." + }, + "unit": { + "type": "string", + "description": "Unit of the facet's property or attribute (omitted if the facet's property or attribute has no unit)." + } + } + } + }, + "id": { + "type": "string", + "description": "Id of feed.", + "default": "tag:google.com,2010:shopping/products" + }, + "items": { + "type": "array", + "description": "List of returned products.", + "items": { + "$ref": "Product" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "Number of items per page of results.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "The fixed string \"shopping#products\". The kind of feed returned.", + "default": "shopping#products" + }, + "nextLink": { + "type": "string", + "description": "Next link of feed." + }, + "previousLink": { + "type": "string", + "description": "Previous link of feed." + }, + "promotions": { + "type": "array", + "description": "List of promotions.", + "items": { + "type": "object", + "properties": { + "customFields": { + "type": "array", + "description": "List of custom fields of promotion.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of field." + }, + "value": { + "type": "string", + "description": "Value of field." + } + } + } + }, + "customHtml": { + "type": "string", + "description": "Custom HTML of promotion (omitted if type is not custom)." + }, + "description": { + "type": "string", + "description": "Description of promotion (omitted if type is not standard)." + }, + "destLink": { + "type": "string", + "description": "Link to promotion (omitted if type is not standard)." + }, + "imageLink": { + "type": "string", + "description": "Link to promotion image (omitted if type is not standard)." + }, + "name": { + "type": "string", + "description": "Name of promotion (omitted if type is not standard)." + }, + "product": { + "$ref": "ShoppingModelProductJsonV1", + "description": "Product of promotion (omitted if type is not product)." + }, + "type": { + "type": "string", + "description": "Type of promotion (one of: standard, product, custom)." + } + } + } + }, + "redirects": { + "type": "array", + "description": "Redirects.", + "items": { + "type": "string" + } + }, + "requestId": { + "type": "string", + "description": "Unique identifier for this request." + }, + "selfLink": { + "type": "string", + "description": "Self link of feed." + }, + "spelling": { + "type": "object", + "description": "Spelling.", + "properties": { + "suggestion": { + "type": "string", + "description": "Suggestion for spelling." + } + } + }, + "startIndex": { + "type": "integer", + "description": "1-based index of the first item in the search results.", + "format": "int32" + }, + "stores": { + "type": "array", + "description": "List of returned stores.", + "items": { + "type": "object", + "properties": { + "address": { + "type": "string", + "description": "Address of store." + }, + "location": { + "type": "string", + "description": "Location of store." + }, + "name": { + "type": "string", + "description": "Name of merchant." + }, + "storeCode": { + "type": "string", + "description": "Merchant-supplied store code." + }, + "storeId": { + "type": "string", + "description": "Id of store." + }, + "storeName": { + "type": "string", + "description": "Name of store." + }, + "telephone": { + "type": "string", + "description": "Telephone number of store." + } + } + } + }, + "totalItems": { + "type": "integer", + "description": "Total number of search results.", + "format": "int32" + } + } + }, + "ShoppingModelCategoryJsonV1": { + "id": "ShoppingModelCategoryJsonV1", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "Id of category." + }, + "parents": { + "type": "array", + "description": "Ids of the parents of the category.", + "items": { + "type": "string" + } + }, + "shortName": { + "type": "string", + "description": "Short name of category." + }, + "url": { + "type": "string", + "description": "URL of category." + } + } + }, + "ShoppingModelDebugJsonV1": { + "id": "ShoppingModelDebugJsonV1", + "type": "object", + "properties": { + "backendTimes": { + "type": "array", + "description": "Google internal", + "items": { + "type": "object", + "properties": { + "elapsedMillis": { + "type": "string", + "description": "Google internal", + "format": "int64" + }, + "hostName": { + "type": "string", + "description": "Google internal" + }, + "name": { + "type": "string", + "description": "Google internal" + }, + "serverMillis": { + "type": "string", + "description": "Google internal", + "format": "int64" + } + } + } + }, + "elapsedMillis": { + "type": "string", + "description": "Google internal.", + "format": "int64" + }, + "facetsRequest": { + "type": "string", + "description": "Google internal." + }, + "facetsResponse": { + "type": "string", + "description": "Google internal." + }, + "rdcResponse": { + "type": "string", + "description": "Google internal." + }, + "recommendedItemsRequest": { + "type": "string", + "description": "Google internal." + }, + "recommendedItemsResponse": { + "type": "string", + "description": "Google internal." + }, + "searchRequest": { + "type": "string", + "description": "Google internal." + }, + "searchResponse": { + "type": "string", + "description": "Google internal." + } + } + }, + "ShoppingModelExtrasJsonV1": { + "id": "ShoppingModelExtrasJsonV1", + "type": "object", + "properties": { + "facetRules": { + "type": "array", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + }, + "rankingRules": { + "type": "array", + "description": "Names of boost (ranking) rules applicable to this search.", + "items": { + "type": "object", + "properties": { + "name": { + "type": "string" + } + } + } + } + } + }, + "ShoppingModelProductJsonV1": { + "id": "ShoppingModelProductJsonV1", + "type": "object", + "properties": { + "attributes": { + "type": "array", + "description": "Attributes of product (available only with a cx source).", + "items": { + "type": "object", + "properties": { + "displayName": { + "type": "string", + "description": "Display Name of prodct attribute." + }, + "name": { + "type": "string", + "description": "Name of product attribute." + }, + "type": { + "type": "string", + "description": "Type of product attribute (one of: text, bool, int, float, dateRange, url)." + }, + "unit": { + "type": "string", + "description": "Unit of product attribute." + }, + "value": { + "type": "any", + "description": "Value of product attribute." + } + } + } + }, + "author": { + "type": "object", + "description": "Author of product.", + "properties": { + "accountId": { + "type": "string", + "description": "Account id of product author.", + "format": "uint64" + }, + "name": { + "type": "string", + "description": "Name of product author." + } + } + }, + "brand": { + "type": "string", + "description": "Brand of product." + }, + "categories": { + "type": "array", + "description": "Categories of product according to the selected taxonomy, omitted if no taxonomy is selected.", + "items": { + "type": "string" + } + }, + "condition": { + "type": "string", + "description": "Condition of product (one of: new, refurbished, used)." + }, + "country": { + "type": "string", + "description": "ISO 3166 code of target country of product." + }, + "creationTime": { + "type": "string", + "description": "RFC 3339 formatted creation time and date of product.", + "format": "date-time" + }, + "description": { + "type": "string", + "description": "Description of product." + }, + "googleId": { + "type": "string", + "description": "Google id of product.", + "format": "uint64" + }, + "gtin": { + "type": "string", + "description": "The first GTIN of the product. Deprecated in favor of \"gtins\"." + }, + "gtins": { + "type": "array", + "description": "List of all the product's GTINs (in GTIN-14 format).", + "items": { + "type": "string" + } + }, + "images": { + "type": "array", + "description": "Images of product.", + "items": { + "type": "object", + "properties": { + "link": { + "type": "string", + "description": "Link to product image." + }, + "status": { + "type": "string" + }, + "thumbnails": { + "type": "array", + "description": "Thumbnails of product image.", + "items": { + "type": "object", + "properties": { + "content": { + "type": "string", + "description": "Content of thumbnail (only available for the first thumbnail of the top results if SAYT is enabled)." + }, + "height": { + "type": "integer", + "description": "Height of thumbnail (omitted if not specified in the request).", + "format": "int32" + }, + "link": { + "type": "string", + "description": "Link to thumbnail." + }, + "width": { + "type": "integer", + "description": "Width of thumbnail (omitted if not specified in the request).", + "format": "int32" + } + } + } + } + } + } + }, + "internal16": { + "type": "object", + "description": "Google Internal. Attribute names are deliberately vague.", + "properties": { + "length": { + "type": "integer", + "format": "int32" + }, + "number": { + "type": "integer", + "format": "int32" + }, + "size": { + "type": "string", + "format": "int64" + } + } + }, + "inventories": { + "type": "array", + "description": "Inventories of product.", + "items": { + "type": "object", + "properties": { + "availability": { + "type": "string", + "description": "Availability of product inventory." + }, + "channel": { + "type": "string", + "description": "Channel of product inventory (one of: online, local)." + }, + "currency": { + "type": "string", + "description": "Currency of product inventory (an ISO 4217 alphabetic code)." + }, + "distance": { + "type": "number", + "description": "Distance of product inventory.", + "format": "float" + }, + "distanceUnit": { + "type": "string", + "description": "Distance unit of product inventory." + }, + "installmentMonths": { + "type": "integer", + "description": "Number of months for installment price.", + "format": "int32" + }, + "installmentPrice": { + "type": "number", + "description": "Installment price of product inventory.", + "format": "float" + }, + "originalPrice": { + "type": "number", + "description": "Original price of product inventory. Only returned for products that are on sale.", + "format": "float" + }, + "price": { + "type": "number", + "description": "Price of product inventory.", + "format": "float" + }, + "saleEndDate": { + "type": "string", + "description": "Sale end date.", + "format": "date-time" + }, + "salePrice": { + "type": "number", + "description": "Sale price of product inventory.", + "format": "float" + }, + "saleStartDate": { + "type": "string", + "description": "Sale start date.", + "format": "date-time" + }, + "shipping": { + "type": "number", + "description": "Shipping cost of product inventory.", + "format": "float" + }, + "storeId": { + "type": "string", + "description": "Store ID of product inventory." + }, + "tax": { + "type": "number", + "description": "Tax of product inventory.", + "format": "float" + } + } + } + }, + "language": { + "type": "string", + "description": "BCP 47 language tag of language of product." + }, + "link": { + "type": "string", + "description": "Link to product." + }, + "modificationTime": { + "type": "string", + "description": "RFC 3339 formatted modification time and date of product.", + "format": "date-time" + }, + "mpns": { + "type": "array", + "description": "List of all the product's MPNs.", + "items": { + "type": "string" + } + }, + "providedId": { + "type": "string", + "description": "Merchant-provided id of product (available only with a cx source)." + }, + "queryMatched": { + "type": "boolean", + "description": "Whether this product matched the user query. Only set for the variant offers (if any) attached to a product offer." + }, + "score": { + "type": "number", + "description": "Google Internal", + "format": "float" + }, + "title": { + "type": "string", + "description": "Title of product." + }, + "totalMatchingVariants": { + "type": "integer", + "description": "The number of variant offers returned that matched the query.", + "format": "int32" + }, + "variants": { + "type": "array", + "description": "A list of variant offers associated with this product.", + "items": { + "type": "object", + "properties": { + "variant": { + "$ref": "ShoppingModelProductJsonV1", + "description": "The detailed offer data for a particular variant offer." + } + } + } + } + } + }, + "ShoppingModelRecommendationsJsonV1": { + "id": "ShoppingModelRecommendationsJsonV1", + "type": "object", + "properties": { + "recommendationList": { + "type": "array", + "description": "List of recommendations.", + "items": { + "type": "object", + "properties": { + "product": { + "$ref": "ShoppingModelProductJsonV1", + "description": "Recommended product." + } + } + } + }, + "type": { + "type": "string", + "description": "Type of recommendation list (for offer-based recommendations, one of: all, purchaseToPurchase, visitToVisit, visitToPurchase, relatedItems, visuallySimilarItems; for category-based recommendations, one of: all, categoryMostVisited, categoryBestSeller)." + } + } + } + }, + "resources": { + "products": { + "methods": { + "get": { + "id": "shopping.products.get", + "path": "{source}/products/{accountId}/{productIdType}/{productId}", + "httpMethod": "GET", + "description": "Returns a single product", + "parameters": { + "accountId": { + "type": "integer", + "description": "Merchant center account id", + "required": true, + "format": "uint32", + "location": "path" + }, + "attributeFilter": { + "type": "string", + "description": "Comma separated list of attributes to return", + "location": "query" + }, + "categories.enabled": { + "type": "boolean", + "description": "Whether to return category information", + "location": "query" + }, + "categories.include": { + "type": "string", + "description": "Category specification", + "location": "query" + }, + "categories.useGcsConfig": { + "type": "boolean", + "description": "This parameter is currently ignored", + "location": "query" + }, + "location": { + "type": "string", + "description": "Location used to determine tax and shipping", + "location": "query" + }, + "productId": { + "type": "string", + "description": "Id of product", + "required": true, + "location": "path" + }, + "productIdType": { + "type": "string", + "description": "Type of productId", + "required": true, + "location": "path" + }, + "recommendations.enabled": { + "type": "boolean", + "description": "Whether to return recommendation information", + "location": "query" + }, + "recommendations.include": { + "type": "string", + "description": "Recommendation specification", + "location": "query" + }, + "recommendations.useGcsConfig": { + "type": "boolean", + "description": "This parameter is currently ignored", + "location": "query" + }, + "source": { + "type": "string", + "description": "Query source", + "required": true, + "location": "path" + }, + "taxonomy": { + "type": "string", + "description": "Merchant taxonomy", + "location": "query" + }, + "thumbnails": { + "type": "string", + "description": "Thumbnail specification", + "location": "query" + } + }, + "parameterOrder": [ + "source", + "accountId", + "productIdType", + "productId" + ], + "response": { + "$ref": "Product" + }, + "scopes": [ + "https://www.googleapis.com/auth/shoppingapi" + ] + }, + "list": { + "id": "shopping.products.list", + "path": "{source}/products", + "httpMethod": "GET", + "description": "Returns a list of products and content modules", + "parameters": { + "attributeFilter": { + "type": "string", + "description": "Comma separated list of attributes to return", + "location": "query" + }, + "availability": { + "type": "string", + "description": "Comma separated list of availabilities (outOfStock, limited, inStock, backOrder, preOrder, onDisplayToOrder) to return", + "location": "query" + }, + "boostBy": { + "type": "string", + "description": "Boosting specification", + "location": "query" + }, + "categories.enabled": { + "type": "boolean", + "description": "Whether to return category information", + "location": "query" + }, + "categories.include": { + "type": "string", + "description": "Category specification", + "location": "query" + }, + "categories.useGcsConfig": { + "type": "boolean", + "description": "This parameter is currently ignored", + "location": "query" + }, + "categoryRecommendations.category": { + "type": "string", + "description": "Category for which to retrieve recommendations", + "location": "query" + }, + "categoryRecommendations.enabled": { + "type": "boolean", + "description": "Whether to return category recommendation information", + "location": "query" + }, + "categoryRecommendations.include": { + "type": "string", + "description": "Category recommendation specification", + "location": "query" + }, + "categoryRecommendations.useGcsConfig": { + "type": "boolean", + "description": "This parameter is currently ignored", + "location": "query" + }, + "channels": { + "type": "string", + "description": "Channels specification", + "location": "query" + }, + "clickTracking": { + "type": "boolean", + "description": "Whether to add a click tracking parameter to offer URLs", + "location": "query" + }, + "country": { + "type": "string", + "description": "Country restriction (ISO 3166)", + "location": "query" + }, + "crowdBy": { + "type": "string", + "description": "Crowding specification", + "location": "query" + }, + "currency": { + "type": "string", + "description": "Currency restriction (ISO 4217)", + "location": "query" + }, + "extras.enabled": { + "type": "boolean", + "description": "Whether to return extra information.", + "location": "query" + }, + "extras.info": { + "type": "string", + "description": "What extra information to return.", + "location": "query" + }, + "facets.discover": { + "type": "string", + "description": "Facets to discover", + "location": "query" + }, + "facets.enabled": { + "type": "boolean", + "description": "Whether to return facet information", + "location": "query" + }, + "facets.include": { + "type": "string", + "description": "Facets to include (applies when useGcsConfig == false)", + "location": "query" + }, + "facets.includeEmptyBuckets": { + "type": "boolean", + "description": "Return empty facet buckets.", + "location": "query" + }, + "facets.useGcsConfig": { + "type": "boolean", + "description": "Whether to return facet information as configured in the GCS account", + "location": "query" + }, + "language": { + "type": "string", + "description": "Language restriction (BCP 47)", + "location": "query" + }, + "location": { + "type": "string", + "description": "Location used to determine tax and shipping", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of results to return", + "format": "uint32", + "location": "query" + }, + "maxVariants": { + "type": "integer", + "description": "Maximum number of variant results to return per result", + "format": "int32", + "location": "query" + }, + "promotions.enabled": { + "type": "boolean", + "description": "Whether to return promotion information", + "location": "query" + }, + "promotions.useGcsConfig": { + "type": "boolean", + "description": "Whether to return promotion information as configured in the GCS account", + "location": "query" + }, + "q": { + "type": "string", + "description": "Search query", + "location": "query" + }, + "rankBy": { + "type": "string", + "description": "Ranking specification", + "location": "query" + }, + "redirects.enabled": { + "type": "boolean", + "description": "Whether to return redirect information", + "location": "query" + }, + "redirects.useGcsConfig": { + "type": "boolean", + "description": "Whether to return redirect information as configured in the GCS account", + "location": "query" + }, + "restrictBy": { + "type": "string", + "description": "Restriction specification", + "location": "query" + }, + "source": { + "type": "string", + "description": "Query source", + "required": true, + "location": "path" + }, + "spelling.enabled": { + "type": "boolean", + "description": "Whether to return spelling suggestions", + "location": "query" + }, + "spelling.useGcsConfig": { + "type": "boolean", + "description": "This parameter is currently ignored", + "location": "query" + }, + "startIndex": { + "type": "integer", + "description": "Index (1-based) of first product to return", + "format": "uint32", + "location": "query" + }, + "taxonomy": { + "type": "string", + "description": "Taxonomy name", + "location": "query" + }, + "thumbnails": { + "type": "string", + "description": "Image thumbnails specification", + "location": "query" + }, + "useCase": { + "type": "string", + "description": "One of CommerceSearchUseCase, ShoppingApiUseCase", + "location": "query" + } + }, + "parameterOrder": [ + "source" + ], + "response": { + "$ref": "Products" + }, + "scopes": [ + "https://www.googleapis.com/auth/shoppingapi" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-gen.go b/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-gen.go new file mode 100644 index 0000000000000..7f806fe649b6a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/shopping/v1/shopping-gen.go @@ -0,0 +1,1459 @@ +// Package shopping provides access to the Search API For Shopping. +// +// See https://developers.google.com/shopping-search/v1/getting_started +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/shopping/v1" +// ... +// shoppingService, err := shopping.New(oauthHttpClient) +package shopping + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "shopping:v1" +const apiName = "shopping" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/shopping/search/v1/" + +// OAuth2 scopes used by this API. +const ( + // View your product data + ShoppingapiScope = "https://www.googleapis.com/auth/shoppingapi" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client} + s.Products = NewProductsService(s) + return s, nil +} + +type Service struct { + client *http.Client + + Products *ProductsService +} + +func NewProductsService(s *Service) *ProductsService { + rs := &ProductsService{s: s} + return rs +} + +type ProductsService struct { + s *Service +} + +type Product struct { + // Categories: List of categories for product. + Categories []*ShoppingModelCategoryJsonV1 `json:"categories,omitempty"` + + // Debug: Google internal. + Debug *ShoppingModelDebugJsonV1 `json:"debug,omitempty"` + + // Id: Id of product. + Id string `json:"id,omitempty"` + + // Kind: The kind of item, always shopping#product. + Kind string `json:"kind,omitempty"` + + // Product: Product. + Product *ShoppingModelProductJsonV1 `json:"product,omitempty"` + + // Recommendations: Recommendations for product. + Recommendations []*ShoppingModelRecommendationsJsonV1 `json:"recommendations,omitempty"` + + // RequestId: Unique identifier for this request. + RequestId string `json:"requestId,omitempty"` + + // SelfLink: Self link of product when generated for a lookup request. + // Self link of product when generated for a search request. + SelfLink string `json:"selfLink,omitempty"` +} + +type Products struct { + // Categories: List of categories. + Categories []*ShoppingModelCategoryJsonV1 `json:"categories,omitempty"` + + // CategoryRecommendations: Recommendations for category. + CategoryRecommendations []*ShoppingModelRecommendationsJsonV1 `json:"categoryRecommendations,omitempty"` + + // CurrentItemCount: Current item count. + CurrentItemCount int64 `json:"currentItemCount,omitempty"` + + // Debug: Google internal. + Debug *ShoppingModelDebugJsonV1 `json:"debug,omitempty"` + + // Etag: Etag of feed. + Etag string `json:"etag,omitempty"` + + // Extras: List of extras. + Extras *ShoppingModelExtrasJsonV1 `json:"extras,omitempty"` + + // Facets: List of facets. + Facets []*ProductsFacets `json:"facets,omitempty"` + + // Id: Id of feed. + Id string `json:"id,omitempty"` + + // Items: List of returned products. + Items []*Product `json:"items,omitempty"` + + // ItemsPerPage: Number of items per page of results. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: The fixed string "shopping#products". The kind of feed + // returned. + Kind string `json:"kind,omitempty"` + + // NextLink: Next link of feed. + NextLink string `json:"nextLink,omitempty"` + + // PreviousLink: Previous link of feed. + PreviousLink string `json:"previousLink,omitempty"` + + // Promotions: List of promotions. + Promotions []*ProductsPromotions `json:"promotions,omitempty"` + + // Redirects: Redirects. + Redirects []string `json:"redirects,omitempty"` + + // RequestId: Unique identifier for this request. + RequestId string `json:"requestId,omitempty"` + + // SelfLink: Self link of feed. + SelfLink string `json:"selfLink,omitempty"` + + // Spelling: Spelling. + Spelling *ProductsSpelling `json:"spelling,omitempty"` + + // StartIndex: 1-based index of the first item in the search results. + StartIndex int64 `json:"startIndex,omitempty"` + + // Stores: List of returned stores. + Stores []*ProductsStores `json:"stores,omitempty"` + + // TotalItems: Total number of search results. + TotalItems int64 `json:"totalItems,omitempty"` +} + +type ProductsFacets struct { + // Buckets: List of Buckets within facet. + Buckets []*ProductsFacetsBuckets `json:"buckets,omitempty"` + + // Count: Number of products matching the query that have a value for + // the facet's property or attribute. + Count int64 `json:"count,omitempty"` + + // DisplayName: Display name of facet. + DisplayName string `json:"displayName,omitempty"` + + // Name: Name of the facet's attribute (omitted for property facets). + Name string `json:"name,omitempty"` + + // Property: Property of facet (omitted for attribute facets). + Property string `json:"property,omitempty"` + + // Type: Type of facet's attribute (omitted for property facets, one of: + // text, bool, int, float). + Type string `json:"type,omitempty"` + + // Unit: Unit of the facet's property or attribute (omitted if the + // facet's property or attribute has no unit). + Unit string `json:"unit,omitempty"` +} + +type ProductsFacetsBuckets struct { + // Count: Number of products matching the query that have a value for + // the facet's property or attribute that matches the bucket. + Count int64 `json:"count,omitempty"` + + // Max: Upper bound of the bucket (omitted for value buckets or if the + // range has no upper bound). + Max interface{} `json:"max,omitempty"` + + // MaxExclusive: Whether the upper bound of the bucket is exclusive + // (omitted for value buckets or if the range has no upper bound). + MaxExclusive bool `json:"maxExclusive,omitempty"` + + // Min: Lower bound of the bucket (omitted for value buckets or if the + // range has no lower bound). + Min interface{} `json:"min,omitempty"` + + // MinExclusive: Whether the lower bound of the bucket is exclusive + // (omitted for value buckets or if the range has no lower bound). + MinExclusive bool `json:"minExclusive,omitempty"` + + // Value: Value of the bucket (omitted for range buckets). + Value interface{} `json:"value,omitempty"` +} + +type ProductsPromotions struct { + // CustomFields: List of custom fields of promotion. + CustomFields []*ProductsPromotionsCustomFields `json:"customFields,omitempty"` + + // CustomHtml: Custom HTML of promotion (omitted if type is not custom). + CustomHtml string `json:"customHtml,omitempty"` + + // Description: Description of promotion (omitted if type is not + // standard). + Description string `json:"description,omitempty"` + + // DestLink: Link to promotion (omitted if type is not standard). + DestLink string `json:"destLink,omitempty"` + + // ImageLink: Link to promotion image (omitted if type is not standard). + ImageLink string `json:"imageLink,omitempty"` + + // Name: Name of promotion (omitted if type is not standard). + Name string `json:"name,omitempty"` + + // Product: Product of promotion (omitted if type is not product). + Product *ShoppingModelProductJsonV1 `json:"product,omitempty"` + + // Type: Type of promotion (one of: standard, product, custom). + Type string `json:"type,omitempty"` +} + +type ProductsPromotionsCustomFields struct { + // Name: Name of field. + Name string `json:"name,omitempty"` + + // Value: Value of field. + Value string `json:"value,omitempty"` +} + +type ProductsSpelling struct { + // Suggestion: Suggestion for spelling. + Suggestion string `json:"suggestion,omitempty"` +} + +type ProductsStores struct { + // Address: Address of store. + Address string `json:"address,omitempty"` + + // Location: Location of store. + Location string `json:"location,omitempty"` + + // Name: Name of merchant. + Name string `json:"name,omitempty"` + + // StoreCode: Merchant-supplied store code. + StoreCode string `json:"storeCode,omitempty"` + + // StoreId: Id of store. + StoreId string `json:"storeId,omitempty"` + + // StoreName: Name of store. + StoreName string `json:"storeName,omitempty"` + + // Telephone: Telephone number of store. + Telephone string `json:"telephone,omitempty"` +} + +type ShoppingModelCategoryJsonV1 struct { + // Id: Id of category. + Id string `json:"id,omitempty"` + + // Parents: Ids of the parents of the category. + Parents []string `json:"parents,omitempty"` + + // ShortName: Short name of category. + ShortName string `json:"shortName,omitempty"` + + // Url: URL of category. + Url string `json:"url,omitempty"` +} + +type ShoppingModelDebugJsonV1 struct { + // BackendTimes: Google internal + BackendTimes []*ShoppingModelDebugJsonV1BackendTimes `json:"backendTimes,omitempty"` + + // ElapsedMillis: Google internal. + ElapsedMillis int64 `json:"elapsedMillis,omitempty,string"` + + // FacetsRequest: Google internal. + FacetsRequest string `json:"facetsRequest,omitempty"` + + // FacetsResponse: Google internal. + FacetsResponse string `json:"facetsResponse,omitempty"` + + // RdcResponse: Google internal. + RdcResponse string `json:"rdcResponse,omitempty"` + + // RecommendedItemsRequest: Google internal. + RecommendedItemsRequest string `json:"recommendedItemsRequest,omitempty"` + + // RecommendedItemsResponse: Google internal. + RecommendedItemsResponse string `json:"recommendedItemsResponse,omitempty"` + + // SearchRequest: Google internal. + SearchRequest string `json:"searchRequest,omitempty"` + + // SearchResponse: Google internal. + SearchResponse string `json:"searchResponse,omitempty"` +} + +type ShoppingModelDebugJsonV1BackendTimes struct { + // ElapsedMillis: Google internal + ElapsedMillis int64 `json:"elapsedMillis,omitempty,string"` + + // HostName: Google internal + HostName string `json:"hostName,omitempty"` + + // Name: Google internal + Name string `json:"name,omitempty"` + + // ServerMillis: Google internal + ServerMillis int64 `json:"serverMillis,omitempty,string"` +} + +type ShoppingModelExtrasJsonV1 struct { + FacetRules []*ShoppingModelExtrasJsonV1FacetRules `json:"facetRules,omitempty"` + + // RankingRules: Names of boost (ranking) rules applicable to this + // search. + RankingRules []*ShoppingModelExtrasJsonV1RankingRules `json:"rankingRules,omitempty"` +} + +type ShoppingModelExtrasJsonV1FacetRules struct { + Name string `json:"name,omitempty"` +} + +type ShoppingModelExtrasJsonV1RankingRules struct { + Name string `json:"name,omitempty"` +} + +type ShoppingModelProductJsonV1 struct { + // Attributes: Attributes of product (available only with a cx source). + Attributes []*ShoppingModelProductJsonV1Attributes `json:"attributes,omitempty"` + + // Author: Author of product. + Author *ShoppingModelProductJsonV1Author `json:"author,omitempty"` + + // Brand: Brand of product. + Brand string `json:"brand,omitempty"` + + // Categories: Categories of product according to the selected taxonomy, + // omitted if no taxonomy is selected. + Categories []string `json:"categories,omitempty"` + + // Condition: Condition of product (one of: new, refurbished, used). + Condition string `json:"condition,omitempty"` + + // Country: ISO 3166 code of target country of product. + Country string `json:"country,omitempty"` + + // CreationTime: RFC 3339 formatted creation time and date of product. + CreationTime string `json:"creationTime,omitempty"` + + // Description: Description of product. + Description string `json:"description,omitempty"` + + // GoogleId: Google id of product. + GoogleId uint64 `json:"googleId,omitempty,string"` + + // Gtin: The first GTIN of the product. Deprecated in favor of "gtins". + Gtin string `json:"gtin,omitempty"` + + // Gtins: List of all the product's GTINs (in GTIN-14 format). + Gtins []string `json:"gtins,omitempty"` + + // Images: Images of product. + Images []*ShoppingModelProductJsonV1Images `json:"images,omitempty"` + + // Internal16: Google Internal. Attribute names are deliberately vague. + Internal16 *ShoppingModelProductJsonV1Internal16 `json:"internal16,omitempty"` + + // Inventories: Inventories of product. + Inventories []*ShoppingModelProductJsonV1Inventories `json:"inventories,omitempty"` + + // Language: BCP 47 language tag of language of product. + Language string `json:"language,omitempty"` + + // Link: Link to product. + Link string `json:"link,omitempty"` + + // ModificationTime: RFC 3339 formatted modification time and date of + // product. + ModificationTime string `json:"modificationTime,omitempty"` + + // Mpns: List of all the product's MPNs. + Mpns []string `json:"mpns,omitempty"` + + // ProvidedId: Merchant-provided id of product (available only with a cx + // source). + ProvidedId string `json:"providedId,omitempty"` + + // QueryMatched: Whether this product matched the user query. Only set + // for the variant offers (if any) attached to a product offer. + QueryMatched bool `json:"queryMatched,omitempty"` + + // Score: Google Internal + Score float64 `json:"score,omitempty"` + + // Title: Title of product. + Title string `json:"title,omitempty"` + + // TotalMatchingVariants: The number of variant offers returned that + // matched the query. + TotalMatchingVariants int64 `json:"totalMatchingVariants,omitempty"` + + // Variants: A list of variant offers associated with this product. + Variants []*ShoppingModelProductJsonV1Variants `json:"variants,omitempty"` +} + +type ShoppingModelProductJsonV1Attributes struct { + // DisplayName: Display Name of prodct attribute. + DisplayName string `json:"displayName,omitempty"` + + // Name: Name of product attribute. + Name string `json:"name,omitempty"` + + // Type: Type of product attribute (one of: text, bool, int, float, + // dateRange, url). + Type string `json:"type,omitempty"` + + // Unit: Unit of product attribute. + Unit string `json:"unit,omitempty"` + + // Value: Value of product attribute. + Value interface{} `json:"value,omitempty"` +} + +type ShoppingModelProductJsonV1Author struct { + // AccountId: Account id of product author. + AccountId uint64 `json:"accountId,omitempty,string"` + + // Name: Name of product author. + Name string `json:"name,omitempty"` +} + +type ShoppingModelProductJsonV1Images struct { + // Link: Link to product image. + Link string `json:"link,omitempty"` + + Status string `json:"status,omitempty"` + + // Thumbnails: Thumbnails of product image. + Thumbnails []*ShoppingModelProductJsonV1ImagesThumbnails `json:"thumbnails,omitempty"` +} + +type ShoppingModelProductJsonV1ImagesThumbnails struct { + // Content: Content of thumbnail (only available for the first thumbnail + // of the top results if SAYT is enabled). + Content string `json:"content,omitempty"` + + // Height: Height of thumbnail (omitted if not specified in the + // request). + Height int64 `json:"height,omitempty"` + + // Link: Link to thumbnail. + Link string `json:"link,omitempty"` + + // Width: Width of thumbnail (omitted if not specified in the request). + Width int64 `json:"width,omitempty"` +} + +type ShoppingModelProductJsonV1Internal16 struct { + Length int64 `json:"length,omitempty"` + + Number int64 `json:"number,omitempty"` + + Size int64 `json:"size,omitempty,string"` +} + +type ShoppingModelProductJsonV1Inventories struct { + // Availability: Availability of product inventory. + Availability string `json:"availability,omitempty"` + + // Channel: Channel of product inventory (one of: online, local). + Channel string `json:"channel,omitempty"` + + // Currency: Currency of product inventory (an ISO 4217 alphabetic + // code). + Currency string `json:"currency,omitempty"` + + // Distance: Distance of product inventory. + Distance float64 `json:"distance,omitempty"` + + // DistanceUnit: Distance unit of product inventory. + DistanceUnit string `json:"distanceUnit,omitempty"` + + // InstallmentMonths: Number of months for installment price. + InstallmentMonths int64 `json:"installmentMonths,omitempty"` + + // InstallmentPrice: Installment price of product inventory. + InstallmentPrice float64 `json:"installmentPrice,omitempty"` + + // OriginalPrice: Original price of product inventory. Only returned for + // products that are on sale. + OriginalPrice float64 `json:"originalPrice,omitempty"` + + // Price: Price of product inventory. + Price float64 `json:"price,omitempty"` + + // SaleEndDate: Sale end date. + SaleEndDate string `json:"saleEndDate,omitempty"` + + // SalePrice: Sale price of product inventory. + SalePrice float64 `json:"salePrice,omitempty"` + + // SaleStartDate: Sale start date. + SaleStartDate string `json:"saleStartDate,omitempty"` + + // Shipping: Shipping cost of product inventory. + Shipping float64 `json:"shipping,omitempty"` + + // StoreId: Store ID of product inventory. + StoreId string `json:"storeId,omitempty"` + + // Tax: Tax of product inventory. + Tax float64 `json:"tax,omitempty"` +} + +type ShoppingModelProductJsonV1Variants struct { + // Variant: The detailed offer data for a particular variant offer. + Variant *ShoppingModelProductJsonV1 `json:"variant,omitempty"` +} + +type ShoppingModelRecommendationsJsonV1 struct { + // RecommendationList: List of recommendations. + RecommendationList []*ShoppingModelRecommendationsJsonV1RecommendationList `json:"recommendationList,omitempty"` + + // Type: Type of recommendation list (for offer-based recommendations, + // one of: all, purchaseToPurchase, visitToVisit, visitToPurchase, + // relatedItems, visuallySimilarItems; for category-based + // recommendations, one of: all, categoryMostVisited, + // categoryBestSeller). + Type string `json:"type,omitempty"` +} + +type ShoppingModelRecommendationsJsonV1RecommendationList struct { + // Product: Recommended product. + Product *ShoppingModelProductJsonV1 `json:"product,omitempty"` +} + +// method id "shopping.products.get": + +type ProductsGetCall struct { + s *Service + source string + accountId int64 + productIdType string + productId string + opt_ map[string]interface{} +} + +// Get: Returns a single product +func (r *ProductsService) Get(source string, accountId int64, productIdType string, productId string) *ProductsGetCall { + c := &ProductsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.source = source + c.accountId = accountId + c.productIdType = productIdType + c.productId = productId + return c +} + +// AttributeFilter sets the optional parameter "attributeFilter": Comma +// separated list of attributes to return +func (c *ProductsGetCall) AttributeFilter(attributeFilter string) *ProductsGetCall { + c.opt_["attributeFilter"] = attributeFilter + return c +} + +// CategoriesEnabled sets the optional parameter "categories.enabled": +// Whether to return category information +func (c *ProductsGetCall) CategoriesEnabled(categoriesEnabled bool) *ProductsGetCall { + c.opt_["categories.enabled"] = categoriesEnabled + return c +} + +// CategoriesInclude sets the optional parameter "categories.include": +// Category specification +func (c *ProductsGetCall) CategoriesInclude(categoriesInclude string) *ProductsGetCall { + c.opt_["categories.include"] = categoriesInclude + return c +} + +// CategoriesUseGcsConfig sets the optional parameter +// "categories.useGcsConfig": This parameter is currently ignored +func (c *ProductsGetCall) CategoriesUseGcsConfig(categoriesUseGcsConfig bool) *ProductsGetCall { + c.opt_["categories.useGcsConfig"] = categoriesUseGcsConfig + return c +} + +// Location sets the optional parameter "location": Location used to +// determine tax and shipping +func (c *ProductsGetCall) Location(location string) *ProductsGetCall { + c.opt_["location"] = location + return c +} + +// RecommendationsEnabled sets the optional parameter +// "recommendations.enabled": Whether to return recommendation +// information +func (c *ProductsGetCall) RecommendationsEnabled(recommendationsEnabled bool) *ProductsGetCall { + c.opt_["recommendations.enabled"] = recommendationsEnabled + return c +} + +// RecommendationsInclude sets the optional parameter +// "recommendations.include": Recommendation specification +func (c *ProductsGetCall) RecommendationsInclude(recommendationsInclude string) *ProductsGetCall { + c.opt_["recommendations.include"] = recommendationsInclude + return c +} + +// RecommendationsUseGcsConfig sets the optional parameter +// "recommendations.useGcsConfig": This parameter is currently ignored +func (c *ProductsGetCall) RecommendationsUseGcsConfig(recommendationsUseGcsConfig bool) *ProductsGetCall { + c.opt_["recommendations.useGcsConfig"] = recommendationsUseGcsConfig + return c +} + +// Taxonomy sets the optional parameter "taxonomy": Merchant taxonomy +func (c *ProductsGetCall) Taxonomy(taxonomy string) *ProductsGetCall { + c.opt_["taxonomy"] = taxonomy + return c +} + +// Thumbnails sets the optional parameter "thumbnails": Thumbnail +// specification +func (c *ProductsGetCall) Thumbnails(thumbnails string) *ProductsGetCall { + c.opt_["thumbnails"] = thumbnails + return c +} + +func (c *ProductsGetCall) Do() (*Product, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["attributeFilter"]; ok { + params.Set("attributeFilter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.enabled"]; ok { + params.Set("categories.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.include"]; ok { + params.Set("categories.include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.useGcsConfig"]; ok { + params.Set("categories.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["location"]; ok { + params.Set("location", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["recommendations.enabled"]; ok { + params.Set("recommendations.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["recommendations.include"]; ok { + params.Set("recommendations.include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["recommendations.useGcsConfig"]; ok { + params.Set("recommendations.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["taxonomy"]; ok { + params.Set("taxonomy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["thumbnails"]; ok { + params.Set("thumbnails", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/shopping/search/v1/", "{source}/products/{accountId}/{productIdType}/{productId}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{source}", url.QueryEscape(c.source), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{accountId}", strconv.FormatInt(c.accountId, 10), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{productIdType}", url.QueryEscape(c.productIdType), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{productId}", url.QueryEscape(c.productId), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Product) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a single product", + // "httpMethod": "GET", + // "id": "shopping.products.get", + // "parameterOrder": [ + // "source", + // "accountId", + // "productIdType", + // "productId" + // ], + // "parameters": { + // "accountId": { + // "description": "Merchant center account id", + // "format": "uint32", + // "location": "path", + // "required": true, + // "type": "integer" + // }, + // "attributeFilter": { + // "description": "Comma separated list of attributes to return", + // "location": "query", + // "type": "string" + // }, + // "categories.enabled": { + // "description": "Whether to return category information", + // "location": "query", + // "type": "boolean" + // }, + // "categories.include": { + // "description": "Category specification", + // "location": "query", + // "type": "string" + // }, + // "categories.useGcsConfig": { + // "description": "This parameter is currently ignored", + // "location": "query", + // "type": "boolean" + // }, + // "location": { + // "description": "Location used to determine tax and shipping", + // "location": "query", + // "type": "string" + // }, + // "productId": { + // "description": "Id of product", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "productIdType": { + // "description": "Type of productId", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "recommendations.enabled": { + // "description": "Whether to return recommendation information", + // "location": "query", + // "type": "boolean" + // }, + // "recommendations.include": { + // "description": "Recommendation specification", + // "location": "query", + // "type": "string" + // }, + // "recommendations.useGcsConfig": { + // "description": "This parameter is currently ignored", + // "location": "query", + // "type": "boolean" + // }, + // "source": { + // "description": "Query source", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taxonomy": { + // "description": "Merchant taxonomy", + // "location": "query", + // "type": "string" + // }, + // "thumbnails": { + // "description": "Thumbnail specification", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{source}/products/{accountId}/{productIdType}/{productId}", + // "response": { + // "$ref": "Product" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/shoppingapi" + // ] + // } + +} + +// method id "shopping.products.list": + +type ProductsListCall struct { + s *Service + source string + opt_ map[string]interface{} +} + +// List: Returns a list of products and content modules +func (r *ProductsService) List(source string) *ProductsListCall { + c := &ProductsListCall{s: r.s, opt_: make(map[string]interface{})} + c.source = source + return c +} + +// AttributeFilter sets the optional parameter "attributeFilter": Comma +// separated list of attributes to return +func (c *ProductsListCall) AttributeFilter(attributeFilter string) *ProductsListCall { + c.opt_["attributeFilter"] = attributeFilter + return c +} + +// Availability sets the optional parameter "availability": Comma +// separated list of availabilities (outOfStock, limited, inStock, +// backOrder, preOrder, onDisplayToOrder) to return +func (c *ProductsListCall) Availability(availability string) *ProductsListCall { + c.opt_["availability"] = availability + return c +} + +// BoostBy sets the optional parameter "boostBy": Boosting specification +func (c *ProductsListCall) BoostBy(boostBy string) *ProductsListCall { + c.opt_["boostBy"] = boostBy + return c +} + +// CategoriesEnabled sets the optional parameter "categories.enabled": +// Whether to return category information +func (c *ProductsListCall) CategoriesEnabled(categoriesEnabled bool) *ProductsListCall { + c.opt_["categories.enabled"] = categoriesEnabled + return c +} + +// CategoriesInclude sets the optional parameter "categories.include": +// Category specification +func (c *ProductsListCall) CategoriesInclude(categoriesInclude string) *ProductsListCall { + c.opt_["categories.include"] = categoriesInclude + return c +} + +// CategoriesUseGcsConfig sets the optional parameter +// "categories.useGcsConfig": This parameter is currently ignored +func (c *ProductsListCall) CategoriesUseGcsConfig(categoriesUseGcsConfig bool) *ProductsListCall { + c.opt_["categories.useGcsConfig"] = categoriesUseGcsConfig + return c +} + +// CategoryRecommendationsCategory sets the optional parameter +// "categoryRecommendations.category": Category for which to retrieve +// recommendations +func (c *ProductsListCall) CategoryRecommendationsCategory(categoryRecommendationsCategory string) *ProductsListCall { + c.opt_["categoryRecommendations.category"] = categoryRecommendationsCategory + return c +} + +// CategoryRecommendationsEnabled sets the optional parameter +// "categoryRecommendations.enabled": Whether to return category +// recommendation information +func (c *ProductsListCall) CategoryRecommendationsEnabled(categoryRecommendationsEnabled bool) *ProductsListCall { + c.opt_["categoryRecommendations.enabled"] = categoryRecommendationsEnabled + return c +} + +// CategoryRecommendationsInclude sets the optional parameter +// "categoryRecommendations.include": Category recommendation +// specification +func (c *ProductsListCall) CategoryRecommendationsInclude(categoryRecommendationsInclude string) *ProductsListCall { + c.opt_["categoryRecommendations.include"] = categoryRecommendationsInclude + return c +} + +// CategoryRecommendationsUseGcsConfig sets the optional parameter +// "categoryRecommendations.useGcsConfig": This parameter is currently +// ignored +func (c *ProductsListCall) CategoryRecommendationsUseGcsConfig(categoryRecommendationsUseGcsConfig bool) *ProductsListCall { + c.opt_["categoryRecommendations.useGcsConfig"] = categoryRecommendationsUseGcsConfig + return c +} + +// Channels sets the optional parameter "channels": Channels +// specification +func (c *ProductsListCall) Channels(channels string) *ProductsListCall { + c.opt_["channels"] = channels + return c +} + +// ClickTracking sets the optional parameter "clickTracking": Whether to +// add a click tracking parameter to offer URLs +func (c *ProductsListCall) ClickTracking(clickTracking bool) *ProductsListCall { + c.opt_["clickTracking"] = clickTracking + return c +} + +// Country sets the optional parameter "country": Country restriction +// (ISO 3166) +func (c *ProductsListCall) Country(country string) *ProductsListCall { + c.opt_["country"] = country + return c +} + +// CrowdBy sets the optional parameter "crowdBy": Crowding specification +func (c *ProductsListCall) CrowdBy(crowdBy string) *ProductsListCall { + c.opt_["crowdBy"] = crowdBy + return c +} + +// Currency sets the optional parameter "currency": Currency restriction +// (ISO 4217) +func (c *ProductsListCall) Currency(currency string) *ProductsListCall { + c.opt_["currency"] = currency + return c +} + +// ExtrasEnabled sets the optional parameter "extras.enabled": Whether +// to return extra information. +func (c *ProductsListCall) ExtrasEnabled(extrasEnabled bool) *ProductsListCall { + c.opt_["extras.enabled"] = extrasEnabled + return c +} + +// ExtrasInfo sets the optional parameter "extras.info": What extra +// information to return. +func (c *ProductsListCall) ExtrasInfo(extrasInfo string) *ProductsListCall { + c.opt_["extras.info"] = extrasInfo + return c +} + +// FacetsDiscover sets the optional parameter "facets.discover": Facets +// to discover +func (c *ProductsListCall) FacetsDiscover(facetsDiscover string) *ProductsListCall { + c.opt_["facets.discover"] = facetsDiscover + return c +} + +// FacetsEnabled sets the optional parameter "facets.enabled": Whether +// to return facet information +func (c *ProductsListCall) FacetsEnabled(facetsEnabled bool) *ProductsListCall { + c.opt_["facets.enabled"] = facetsEnabled + return c +} + +// FacetsInclude sets the optional parameter "facets.include": Facets to +// include (applies when useGcsConfig == false) +func (c *ProductsListCall) FacetsInclude(facetsInclude string) *ProductsListCall { + c.opt_["facets.include"] = facetsInclude + return c +} + +// FacetsIncludeEmptyBuckets sets the optional parameter +// "facets.includeEmptyBuckets": Return empty facet buckets. +func (c *ProductsListCall) FacetsIncludeEmptyBuckets(facetsIncludeEmptyBuckets bool) *ProductsListCall { + c.opt_["facets.includeEmptyBuckets"] = facetsIncludeEmptyBuckets + return c +} + +// FacetsUseGcsConfig sets the optional parameter "facets.useGcsConfig": +// Whether to return facet information as configured in the GCS account +func (c *ProductsListCall) FacetsUseGcsConfig(facetsUseGcsConfig bool) *ProductsListCall { + c.opt_["facets.useGcsConfig"] = facetsUseGcsConfig + return c +} + +// Language sets the optional parameter "language": Language restriction +// (BCP 47) +func (c *ProductsListCall) Language(language string) *ProductsListCall { + c.opt_["language"] = language + return c +} + +// Location sets the optional parameter "location": Location used to +// determine tax and shipping +func (c *ProductsListCall) Location(location string) *ProductsListCall { + c.opt_["location"] = location + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of results to return +func (c *ProductsListCall) MaxResults(maxResults int64) *ProductsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// MaxVariants sets the optional parameter "maxVariants": Maximum number +// of variant results to return per result +func (c *ProductsListCall) MaxVariants(maxVariants int64) *ProductsListCall { + c.opt_["maxVariants"] = maxVariants + return c +} + +// PromotionsEnabled sets the optional parameter "promotions.enabled": +// Whether to return promotion information +func (c *ProductsListCall) PromotionsEnabled(promotionsEnabled bool) *ProductsListCall { + c.opt_["promotions.enabled"] = promotionsEnabled + return c +} + +// PromotionsUseGcsConfig sets the optional parameter +// "promotions.useGcsConfig": Whether to return promotion information as +// configured in the GCS account +func (c *ProductsListCall) PromotionsUseGcsConfig(promotionsUseGcsConfig bool) *ProductsListCall { + c.opt_["promotions.useGcsConfig"] = promotionsUseGcsConfig + return c +} + +// Q sets the optional parameter "q": Search query +func (c *ProductsListCall) Q(q string) *ProductsListCall { + c.opt_["q"] = q + return c +} + +// RankBy sets the optional parameter "rankBy": Ranking specification +func (c *ProductsListCall) RankBy(rankBy string) *ProductsListCall { + c.opt_["rankBy"] = rankBy + return c +} + +// RedirectsEnabled sets the optional parameter "redirects.enabled": +// Whether to return redirect information +func (c *ProductsListCall) RedirectsEnabled(redirectsEnabled bool) *ProductsListCall { + c.opt_["redirects.enabled"] = redirectsEnabled + return c +} + +// RedirectsUseGcsConfig sets the optional parameter +// "redirects.useGcsConfig": Whether to return redirect information as +// configured in the GCS account +func (c *ProductsListCall) RedirectsUseGcsConfig(redirectsUseGcsConfig bool) *ProductsListCall { + c.opt_["redirects.useGcsConfig"] = redirectsUseGcsConfig + return c +} + +// RestrictBy sets the optional parameter "restrictBy": Restriction +// specification +func (c *ProductsListCall) RestrictBy(restrictBy string) *ProductsListCall { + c.opt_["restrictBy"] = restrictBy + return c +} + +// SpellingEnabled sets the optional parameter "spelling.enabled": +// Whether to return spelling suggestions +func (c *ProductsListCall) SpellingEnabled(spellingEnabled bool) *ProductsListCall { + c.opt_["spelling.enabled"] = spellingEnabled + return c +} + +// SpellingUseGcsConfig sets the optional parameter +// "spelling.useGcsConfig": This parameter is currently ignored +func (c *ProductsListCall) SpellingUseGcsConfig(spellingUseGcsConfig bool) *ProductsListCall { + c.opt_["spelling.useGcsConfig"] = spellingUseGcsConfig + return c +} + +// StartIndex sets the optional parameter "startIndex": Index (1-based) +// of first product to return +func (c *ProductsListCall) StartIndex(startIndex int64) *ProductsListCall { + c.opt_["startIndex"] = startIndex + return c +} + +// Taxonomy sets the optional parameter "taxonomy": Taxonomy name +func (c *ProductsListCall) Taxonomy(taxonomy string) *ProductsListCall { + c.opt_["taxonomy"] = taxonomy + return c +} + +// Thumbnails sets the optional parameter "thumbnails": Image thumbnails +// specification +func (c *ProductsListCall) Thumbnails(thumbnails string) *ProductsListCall { + c.opt_["thumbnails"] = thumbnails + return c +} + +// UseCase sets the optional parameter "useCase": One of +// CommerceSearchUseCase, ShoppingApiUseCase +func (c *ProductsListCall) UseCase(useCase string) *ProductsListCall { + c.opt_["useCase"] = useCase + return c +} + +func (c *ProductsListCall) Do() (*Products, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["attributeFilter"]; ok { + params.Set("attributeFilter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["availability"]; ok { + params.Set("availability", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["boostBy"]; ok { + params.Set("boostBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.enabled"]; ok { + params.Set("categories.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.include"]; ok { + params.Set("categories.include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categories.useGcsConfig"]; ok { + params.Set("categories.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categoryRecommendations.category"]; ok { + params.Set("categoryRecommendations.category", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categoryRecommendations.enabled"]; ok { + params.Set("categoryRecommendations.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categoryRecommendations.include"]; ok { + params.Set("categoryRecommendations.include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["categoryRecommendations.useGcsConfig"]; ok { + params.Set("categoryRecommendations.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["channels"]; ok { + params.Set("channels", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["clickTracking"]; ok { + params.Set("clickTracking", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["country"]; ok { + params.Set("country", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["crowdBy"]; ok { + params.Set("crowdBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["currency"]; ok { + params.Set("currency", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["extras.enabled"]; ok { + params.Set("extras.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["extras.info"]; ok { + params.Set("extras.info", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["facets.discover"]; ok { + params.Set("facets.discover", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["facets.enabled"]; ok { + params.Set("facets.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["facets.include"]; ok { + params.Set("facets.include", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["facets.includeEmptyBuckets"]; ok { + params.Set("facets.includeEmptyBuckets", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["facets.useGcsConfig"]; ok { + params.Set("facets.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["language"]; ok { + params.Set("language", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["location"]; ok { + params.Set("location", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxVariants"]; ok { + params.Set("maxVariants", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["promotions.enabled"]; ok { + params.Set("promotions.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["promotions.useGcsConfig"]; ok { + params.Set("promotions.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["q"]; ok { + params.Set("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["rankBy"]; ok { + params.Set("rankBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["redirects.enabled"]; ok { + params.Set("redirects.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["redirects.useGcsConfig"]; ok { + params.Set("redirects.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["restrictBy"]; ok { + params.Set("restrictBy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["spelling.enabled"]; ok { + params.Set("spelling.enabled", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["spelling.useGcsConfig"]; ok { + params.Set("spelling.useGcsConfig", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["startIndex"]; ok { + params.Set("startIndex", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["taxonomy"]; ok { + params.Set("taxonomy", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["thumbnails"]; ok { + params.Set("thumbnails", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["useCase"]; ok { + params.Set("useCase", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative("https://www.googleapis.com/shopping/search/v1/", "{source}/products") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{source}", url.QueryEscape(c.source), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Products) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns a list of products and content modules", + // "httpMethod": "GET", + // "id": "shopping.products.list", + // "parameterOrder": [ + // "source" + // ], + // "parameters": { + // "attributeFilter": { + // "description": "Comma separated list of attributes to return", + // "location": "query", + // "type": "string" + // }, + // "availability": { + // "description": "Comma separated list of availabilities (outOfStock, limited, inStock, backOrder, preOrder, onDisplayToOrder) to return", + // "location": "query", + // "type": "string" + // }, + // "boostBy": { + // "description": "Boosting specification", + // "location": "query", + // "type": "string" + // }, + // "categories.enabled": { + // "description": "Whether to return category information", + // "location": "query", + // "type": "boolean" + // }, + // "categories.include": { + // "description": "Category specification", + // "location": "query", + // "type": "string" + // }, + // "categories.useGcsConfig": { + // "description": "This parameter is currently ignored", + // "location": "query", + // "type": "boolean" + // }, + // "categoryRecommendations.category": { + // "description": "Category for which to retrieve recommendations", + // "location": "query", + // "type": "string" + // }, + // "categoryRecommendations.enabled": { + // "description": "Whether to return category recommendation information", + // "location": "query", + // "type": "boolean" + // }, + // "categoryRecommendations.include": { + // "description": "Category recommendation specification", + // "location": "query", + // "type": "string" + // }, + // "categoryRecommendations.useGcsConfig": { + // "description": "This parameter is currently ignored", + // "location": "query", + // "type": "boolean" + // }, + // "channels": { + // "description": "Channels specification", + // "location": "query", + // "type": "string" + // }, + // "clickTracking": { + // "description": "Whether to add a click tracking parameter to offer URLs", + // "location": "query", + // "type": "boolean" + // }, + // "country": { + // "description": "Country restriction (ISO 3166)", + // "location": "query", + // "type": "string" + // }, + // "crowdBy": { + // "description": "Crowding specification", + // "location": "query", + // "type": "string" + // }, + // "currency": { + // "description": "Currency restriction (ISO 4217)", + // "location": "query", + // "type": "string" + // }, + // "extras.enabled": { + // "description": "Whether to return extra information.", + // "location": "query", + // "type": "boolean" + // }, + // "extras.info": { + // "description": "What extra information to return.", + // "location": "query", + // "type": "string" + // }, + // "facets.discover": { + // "description": "Facets to discover", + // "location": "query", + // "type": "string" + // }, + // "facets.enabled": { + // "description": "Whether to return facet information", + // "location": "query", + // "type": "boolean" + // }, + // "facets.include": { + // "description": "Facets to include (applies when useGcsConfig == false)", + // "location": "query", + // "type": "string" + // }, + // "facets.includeEmptyBuckets": { + // "description": "Return empty facet buckets.", + // "location": "query", + // "type": "boolean" + // }, + // "facets.useGcsConfig": { + // "description": "Whether to return facet information as configured in the GCS account", + // "location": "query", + // "type": "boolean" + // }, + // "language": { + // "description": "Language restriction (BCP 47)", + // "location": "query", + // "type": "string" + // }, + // "location": { + // "description": "Location used to determine tax and shipping", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of results to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "maxVariants": { + // "description": "Maximum number of variant results to return per result", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "promotions.enabled": { + // "description": "Whether to return promotion information", + // "location": "query", + // "type": "boolean" + // }, + // "promotions.useGcsConfig": { + // "description": "Whether to return promotion information as configured in the GCS account", + // "location": "query", + // "type": "boolean" + // }, + // "q": { + // "description": "Search query", + // "location": "query", + // "type": "string" + // }, + // "rankBy": { + // "description": "Ranking specification", + // "location": "query", + // "type": "string" + // }, + // "redirects.enabled": { + // "description": "Whether to return redirect information", + // "location": "query", + // "type": "boolean" + // }, + // "redirects.useGcsConfig": { + // "description": "Whether to return redirect information as configured in the GCS account", + // "location": "query", + // "type": "boolean" + // }, + // "restrictBy": { + // "description": "Restriction specification", + // "location": "query", + // "type": "string" + // }, + // "source": { + // "description": "Query source", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "spelling.enabled": { + // "description": "Whether to return spelling suggestions", + // "location": "query", + // "type": "boolean" + // }, + // "spelling.useGcsConfig": { + // "description": "This parameter is currently ignored", + // "location": "query", + // "type": "boolean" + // }, + // "startIndex": { + // "description": "Index (1-based) of first product to return", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "taxonomy": { + // "description": "Taxonomy name", + // "location": "query", + // "type": "string" + // }, + // "thumbnails": { + // "description": "Image thumbnails specification", + // "location": "query", + // "type": "string" + // }, + // "useCase": { + // "description": "One of CommerceSearchUseCase, ShoppingApiUseCase", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "{source}/products", + // "response": { + // "$ref": "Products" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/shoppingapi" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-api.json b/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-api.json new file mode 100644 index 0000000000000..eff2196a2dff0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-api.json @@ -0,0 +1,320 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/T-KUOZ6MW3qGb2TywsMrS2SH2E4\"", + "discoveryVersion": "v1", + "id": "siteVerification:v1", + "name": "siteVerification", + "version": "v1", + "title": "Google Site Verification API", + "description": "Lets you programatically verify ownership of websites or domains with Google.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/site-verification/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/siteVerification/v1/", + "basePath": "/siteVerification/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "siteVerification/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "false", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/siteverification": { + "description": "Manage the list of sites and domains you control" + }, + "https://www.googleapis.com/auth/siteverification.verify_only": { + "description": "Manage your new site verifications with Google" + } + } + } + }, + "schemas": { + "SiteVerificationWebResourceGettokenRequest": { + "id": "SiteVerificationWebResourceGettokenRequest", + "type": "object", + "properties": { + "site": { + "type": "object", + "description": "The site for which a verification token will be generated.", + "properties": { + "identifier": { + "type": "string", + "description": "The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name." + }, + "type": { + "type": "string", + "description": "The type of resource to be verified. Can be SITE or INET_DOMAIN (domain name)." + } + } + }, + "verificationMethod": { + "type": "string", + "description": "The verification method that will be used to verify this site. For sites, 'FILE' or 'META' methods may be used. For domains, only 'DNS' may be used." + } + } + }, + "SiteVerificationWebResourceGettokenResponse": { + "id": "SiteVerificationWebResourceGettokenResponse", + "type": "object", + "properties": { + "method": { + "type": "string", + "description": "The verification method to use in conjunction with this token. For FILE, the token should be placed in the top-level directory of the site, stored inside a file of the same name. For META, the token should be placed in the HEAD tag of the default page that is loaded for the site. For DNS, the token should be placed in a TXT record of the domain." + }, + "token": { + "type": "string", + "description": "The verification token. The token must be placed appropriately in order for verification to succeed." + } + } + }, + "SiteVerificationWebResourceListResponse": { + "id": "SiteVerificationWebResourceListResponse", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of sites that are owned by the authenticated user.", + "items": { + "$ref": "SiteVerificationWebResourceResource" + } + } + } + }, + "SiteVerificationWebResourceResource": { + "id": "SiteVerificationWebResourceResource", + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "The string used to identify this site. This value should be used in the \"id\" portion of the REST URL for the Get, Update, and Delete operations." + }, + "owners": { + "type": "array", + "description": "The email addresses of all verified owners.", + "items": { + "type": "string" + } + }, + "site": { + "type": "object", + "description": "The address and type of a site that is verified or will be verified.", + "properties": { + "identifier": { + "type": "string", + "description": "The site identifier. If the type is set to SITE, the identifier is a URL. If the type is set to INET_DOMAIN, the site identifier is a domain name." + }, + "type": { + "type": "string", + "description": "The site type. Can be SITE or INET_DOMAIN (domain name)." + } + } + } + } + } + }, + "resources": { + "webResource": { + "methods": { + "delete": { + "id": "siteVerification.webResource.delete", + "path": "webResource/{id}", + "httpMethod": "DELETE", + "description": "Relinquish ownership of a website or domain.", + "parameters": { + "id": { + "type": "string", + "description": "The id of a verified site or domain.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/siteverification" + ] + }, + "get": { + "id": "siteVerification.webResource.get", + "path": "webResource/{id}", + "httpMethod": "GET", + "description": "Get the most current data for a website or domain.", + "parameters": { + "id": { + "type": "string", + "description": "The id of a verified site or domain.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "SiteVerificationWebResourceResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification" + ] + }, + "getToken": { + "id": "siteVerification.webResource.getToken", + "path": "token", + "httpMethod": "POST", + "description": "Get a verification token for placing on a website or domain.", + "request": { + "$ref": "SiteVerificationWebResourceGettokenRequest" + }, + "response": { + "$ref": "SiteVerificationWebResourceGettokenResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification", + "https://www.googleapis.com/auth/siteverification.verify_only" + ] + }, + "insert": { + "id": "siteVerification.webResource.insert", + "path": "webResource", + "httpMethod": "POST", + "description": "Attempt verification of a website or domain.", + "parameters": { + "verificationMethod": { + "type": "string", + "description": "The method to use for verifying a site or domain.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "verificationMethod" + ], + "request": { + "$ref": "SiteVerificationWebResourceResource" + }, + "response": { + "$ref": "SiteVerificationWebResourceResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification", + "https://www.googleapis.com/auth/siteverification.verify_only" + ] + }, + "list": { + "id": "siteVerification.webResource.list", + "path": "webResource", + "httpMethod": "GET", + "description": "Get the list of your verified websites and domains.", + "response": { + "$ref": "SiteVerificationWebResourceListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification" + ] + }, + "patch": { + "id": "siteVerification.webResource.patch", + "path": "webResource/{id}", + "httpMethod": "PATCH", + "description": "Modify the list of owners for your website or domain. This method supports patch semantics.", + "parameters": { + "id": { + "type": "string", + "description": "The id of a verified site or domain.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "SiteVerificationWebResourceResource" + }, + "response": { + "$ref": "SiteVerificationWebResourceResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification" + ] + }, + "update": { + "id": "siteVerification.webResource.update", + "path": "webResource/{id}", + "httpMethod": "PUT", + "description": "Modify the list of owners for your website or domain.", + "parameters": { + "id": { + "type": "string", + "description": "The id of a verified site or domain.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "id" + ], + "request": { + "$ref": "SiteVerificationWebResourceResource" + }, + "response": { + "$ref": "SiteVerificationWebResourceResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/siteverification" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-gen.go b/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-gen.go new file mode 100644 index 0000000000000..c3bc51df8633b --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/siteverification/v1/siteverification-gen.go @@ -0,0 +1,599 @@ +// Package siteverification provides access to the Google Site Verification API. +// +// See https://developers.google.com/site-verification/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/siteverification/v1" +// ... +// siteverificationService, err := siteverification.New(oauthHttpClient) +package siteverification + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "siteVerification:v1" +const apiName = "siteVerification" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/siteVerification/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage the list of sites and domains you control + SiteverificationScope = "https://www.googleapis.com/auth/siteverification" + + // Manage your new site verifications with Google + SiteverificationVerify_onlyScope = "https://www.googleapis.com/auth/siteverification.verify_only" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.WebResource = NewWebResourceService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + WebResource *WebResourceService +} + +func NewWebResourceService(s *Service) *WebResourceService { + rs := &WebResourceService{s: s} + return rs +} + +type WebResourceService struct { + s *Service +} + +type SiteVerificationWebResourceGettokenRequest struct { + // Site: The site for which a verification token will be generated. + Site *SiteVerificationWebResourceGettokenRequestSite `json:"site,omitempty"` + + // VerificationMethod: The verification method that will be used to + // verify this site. For sites, 'FILE' or 'META' methods may be used. + // For domains, only 'DNS' may be used. + VerificationMethod string `json:"verificationMethod,omitempty"` +} + +type SiteVerificationWebResourceGettokenRequestSite struct { + // Identifier: The site identifier. If the type is set to SITE, the + // identifier is a URL. If the type is set to INET_DOMAIN, the site + // identifier is a domain name. + Identifier string `json:"identifier,omitempty"` + + // Type: The type of resource to be verified. Can be SITE or INET_DOMAIN + // (domain name). + Type string `json:"type,omitempty"` +} + +type SiteVerificationWebResourceGettokenResponse struct { + // Method: The verification method to use in conjunction with this + // token. For FILE, the token should be placed in the top-level + // directory of the site, stored inside a file of the same name. For + // META, the token should be placed in the HEAD tag of the default page + // that is loaded for the site. For DNS, the token should be placed in a + // TXT record of the domain. + Method string `json:"method,omitempty"` + + // Token: The verification token. The token must be placed appropriately + // in order for verification to succeed. + Token string `json:"token,omitempty"` +} + +type SiteVerificationWebResourceListResponse struct { + // Items: The list of sites that are owned by the authenticated user. + Items []*SiteVerificationWebResourceResource `json:"items,omitempty"` +} + +type SiteVerificationWebResourceResource struct { + // Id: The string used to identify this site. This value should be used + // in the "id" portion of the REST URL for the Get, Update, and Delete + // operations. + Id string `json:"id,omitempty"` + + // Owners: The email addresses of all verified owners. + Owners []string `json:"owners,omitempty"` + + // Site: The address and type of a site that is verified or will be + // verified. + Site *SiteVerificationWebResourceResourceSite `json:"site,omitempty"` +} + +type SiteVerificationWebResourceResourceSite struct { + // Identifier: The site identifier. If the type is set to SITE, the + // identifier is a URL. If the type is set to INET_DOMAIN, the site + // identifier is a domain name. + Identifier string `json:"identifier,omitempty"` + + // Type: The site type. Can be SITE or INET_DOMAIN (domain name). + Type string `json:"type,omitempty"` +} + +// method id "siteVerification.webResource.delete": + +type WebResourceDeleteCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Delete: Relinquish ownership of a website or domain. +func (r *WebResourceService) Delete(id string) *WebResourceDeleteCall { + c := &WebResourceDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *WebResourceDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Relinquish ownership of a website or domain.", + // "httpMethod": "DELETE", + // "id": "siteVerification.webResource.delete", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id of a verified site or domain.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "webResource/{id}", + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification" + // ] + // } + +} + +// method id "siteVerification.webResource.get": + +type WebResourceGetCall struct { + s *Service + id string + opt_ map[string]interface{} +} + +// Get: Get the most current data for a website or domain. +func (r *WebResourceService) Get(id string) *WebResourceGetCall { + c := &WebResourceGetCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + return c +} + +func (c *WebResourceGetCall) Do() (*SiteVerificationWebResourceResource, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the most current data for a website or domain.", + // "httpMethod": "GET", + // "id": "siteVerification.webResource.get", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id of a verified site or domain.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "webResource/{id}", + // "response": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification" + // ] + // } + +} + +// method id "siteVerification.webResource.getToken": + +type WebResourceGetTokenCall struct { + s *Service + siteverificationwebresourcegettokenrequest *SiteVerificationWebResourceGettokenRequest + opt_ map[string]interface{} +} + +// GetToken: Get a verification token for placing on a website or +// domain. +func (r *WebResourceService) GetToken(siteverificationwebresourcegettokenrequest *SiteVerificationWebResourceGettokenRequest) *WebResourceGetTokenCall { + c := &WebResourceGetTokenCall{s: r.s, opt_: make(map[string]interface{})} + c.siteverificationwebresourcegettokenrequest = siteverificationwebresourcegettokenrequest + return c +} + +func (c *WebResourceGetTokenCall) Do() (*SiteVerificationWebResourceGettokenResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourcegettokenrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "token") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceGettokenResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a verification token for placing on a website or domain.", + // "httpMethod": "POST", + // "id": "siteVerification.webResource.getToken", + // "path": "token", + // "request": { + // "$ref": "SiteVerificationWebResourceGettokenRequest" + // }, + // "response": { + // "$ref": "SiteVerificationWebResourceGettokenResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification", + // "https://www.googleapis.com/auth/siteverification.verify_only" + // ] + // } + +} + +// method id "siteVerification.webResource.insert": + +type WebResourceInsertCall struct { + s *Service + verificationMethod string + siteverificationwebresourceresource *SiteVerificationWebResourceResource + opt_ map[string]interface{} +} + +// Insert: Attempt verification of a website or domain. +func (r *WebResourceService) Insert(verificationMethod string, siteverificationwebresourceresource *SiteVerificationWebResourceResource) *WebResourceInsertCall { + c := &WebResourceInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.verificationMethod = verificationMethod + c.siteverificationwebresourceresource = siteverificationwebresourceresource + return c +} + +func (c *WebResourceInsertCall) Do() (*SiteVerificationWebResourceResource, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("verificationMethod", fmt.Sprintf("%v", c.verificationMethod)) + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Attempt verification of a website or domain.", + // "httpMethod": "POST", + // "id": "siteVerification.webResource.insert", + // "parameterOrder": [ + // "verificationMethod" + // ], + // "parameters": { + // "verificationMethod": { + // "description": "The method to use for verifying a site or domain.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "webResource", + // "request": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "response": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification", + // "https://www.googleapis.com/auth/siteverification.verify_only" + // ] + // } + +} + +// method id "siteVerification.webResource.list": + +type WebResourceListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Get the list of your verified websites and domains. +func (r *WebResourceService) List() *WebResourceListCall { + c := &WebResourceListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *WebResourceListCall) Do() (*SiteVerificationWebResourceListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get the list of your verified websites and domains.", + // "httpMethod": "GET", + // "id": "siteVerification.webResource.list", + // "path": "webResource", + // "response": { + // "$ref": "SiteVerificationWebResourceListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification" + // ] + // } + +} + +// method id "siteVerification.webResource.patch": + +type WebResourcePatchCall struct { + s *Service + id string + siteverificationwebresourceresource *SiteVerificationWebResourceResource + opt_ map[string]interface{} +} + +// Patch: Modify the list of owners for your website or domain. This +// method supports patch semantics. +func (r *WebResourceService) Patch(id string, siteverificationwebresourceresource *SiteVerificationWebResourceResource) *WebResourcePatchCall { + c := &WebResourcePatchCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.siteverificationwebresourceresource = siteverificationwebresourceresource + return c +} + +func (c *WebResourcePatchCall) Do() (*SiteVerificationWebResourceResource, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Modify the list of owners for your website or domain. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "siteVerification.webResource.patch", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id of a verified site or domain.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "webResource/{id}", + // "request": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "response": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification" + // ] + // } + +} + +// method id "siteVerification.webResource.update": + +type WebResourceUpdateCall struct { + s *Service + id string + siteverificationwebresourceresource *SiteVerificationWebResourceResource + opt_ map[string]interface{} +} + +// Update: Modify the list of owners for your website or domain. +func (r *WebResourceService) Update(id string, siteverificationwebresourceresource *SiteVerificationWebResourceResource) *WebResourceUpdateCall { + c := &WebResourceUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.id = id + c.siteverificationwebresourceresource = siteverificationwebresourceresource + return c +} + +func (c *WebResourceUpdateCall) Do() (*SiteVerificationWebResourceResource, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.siteverificationwebresourceresource) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "webResource/{id}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{id}", url.QueryEscape(c.id), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SiteVerificationWebResourceResource) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Modify the list of owners for your website or domain.", + // "httpMethod": "PUT", + // "id": "siteVerification.webResource.update", + // "parameterOrder": [ + // "id" + // ], + // "parameters": { + // "id": { + // "description": "The id of a verified site or domain.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "webResource/{id}", + // "request": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "response": { + // "$ref": "SiteVerificationWebResourceResource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/siteverification" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-api.json b/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-api.json new file mode 100644 index 0000000000000..e406367a8c1d0 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-api.json @@ -0,0 +1,991 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/W1KBbX-gDHMUVgPHQ9VDTGhsP9o\"", + "discoveryVersion": "v1", + "id": "spectrum:v1explorer", + "name": "spectrum", + "version": "v1explorer", + "title": "Google Spectrum Database API", + "description": "API for spectrum-management functions.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "http://developers.google.com/spectrum", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/spectrum/v1explorer/paws/", + "basePath": "/spectrum/v1explorer/paws/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "spectrum/v1explorer/paws/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "csv", + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of text/csv", + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "AntennaCharacteristics": { + "id": "AntennaCharacteristics", + "type": "object", + "description": "Antenna characteristics provide additional information, such as the antenna height, antenna type, etc. Whether antenna characteristics must be provided in a request depends on the device type and regulatory domain.", + "properties": { + "height": { + "type": "number", + "description": "The antenna height in meters. Whether the antenna height is required depends on the device type and the regulatory domain. Note that the height may be negative.", + "format": "double" + }, + "heightType": { + "type": "string", + "description": "If the height is required, then the height type (AGL for above ground level or AMSL for above mean sea level) is also required. The default is AGL." + }, + "heightUncertainty": { + "type": "number", + "description": "The height uncertainty in meters. Whether this is required depends on the regulatory domain.", + "format": "double" + } + } + }, + "DatabaseSpec": { + "id": "DatabaseSpec", + "type": "object", + "description": "This message contains the name and URI of a database.", + "properties": { + "name": { + "type": "string", + "description": "The display name for a database." + }, + "uri": { + "type": "string", + "description": "The corresponding URI of the database." + } + } + }, + "DbUpdateSpec": { + "id": "DbUpdateSpec", + "type": "object", + "description": "This message is provided by the database to notify devices of an upcoming change to the database URI.", + "properties": { + "databases": { + "type": "array", + "description": "A required list of one or more databases. A device should update its preconfigured list of databases to replace (only) the database that provided the response with the specified entries.", + "items": { + "$ref": "DatabaseSpec" + } + } + } + }, + "DeviceCapabilities": { + "id": "DeviceCapabilities", + "type": "object", + "description": "Device capabilities provide additional information that may be used by a device to provide additional information to the database that may help it to determine available spectrum. If the database does not support device capabilities it will ignore the parameter altogether.", + "properties": { + "frequencyRanges": { + "type": "array", + "description": "An optional list of frequency ranges supported by the device. Each element must contain start and stop frequencies in which the device can operate. Channel identifiers are optional. When specified, the database should not return available spectrum that falls outside these ranges or channel IDs.", + "items": { + "$ref": "FrequencyRange" + } + } + } + }, + "DeviceDescriptor": { + "id": "DeviceDescriptor", + "type": "object", + "description": "The device descriptor contains parameters that identify the specific device, such as its manufacturer serial number, regulatory-specific identifier (e.g., FCC ID), and any other device characteristics required by regulatory domains.", + "properties": { + "etsiEnDeviceCategory": { + "type": "string", + "description": "Specifies the ETSI white space device category. Valid values are the strings master and slave. This field is case-insensitive. Consult the ETSI documentation for details about the device types." + }, + "etsiEnDeviceEmissionsClass": { + "type": "string", + "description": "Specifies the ETSI white space device emissions class. The values are represented by numeric strings, such as 1, 2, etc. Consult the ETSI documentation for details about the device types." + }, + "etsiEnDeviceType": { + "type": "string", + "description": "Specifies the ETSI white space device type. Valid values are single-letter strings, such as A, B, etc. Consult the ETSI documentation for details about the device types." + }, + "etsiEnTechnologyId": { + "type": "string", + "description": "Specifies the ETSI white space device technology identifier. The string value must not exceed 64 characters in length. Consult the ETSI documentation for details about the device types." + }, + "fccId": { + "type": "string", + "description": "Specifies the device's FCC certification identifier. The value is an identifier string whose length should not exceed 32 characters. Note that, in practice, a valid FCC ID may be limited to 19 characters." + }, + "fccTvbdDeviceType": { + "type": "string", + "description": "Specifies the TV Band White Space device type, as defined by the FCC. Valid values are FIXED, MODE_1, MODE_2." + }, + "manufacturerId": { + "type": "string", + "description": "The manufacturer's ID may be required by the regulatory domain. This should represent the name of the device manufacturer, should be consistent across all devices from the same manufacturer, and should be distinct from that of other manufacturers. The string value must not exceed 64 characters in length." + }, + "modelId": { + "type": "string", + "description": "The device's model ID may be required by the regulatory domain. The string value must not exceed 64 characters in length." + }, + "rulesetIds": { + "type": "array", + "description": "The list of identifiers for rulesets supported by the device. A database may require that the device provide this list before servicing the device requests. If the database does not support any of the rulesets specified in the list, the database may refuse to service the device requests. If present, the list must contain at least one entry.\n\nFor information about the valid requests, see section 9.2 of the PAWS specification. Currently, FccTvBandWhiteSpace-2010 is the only supported ruleset.", + "items": { + "type": "string" + } + }, + "serialNumber": { + "type": "string", + "description": "The manufacturer's device serial number; required by the applicable regulatory domain. The length of the value must not exceed 64 characters." + } + } + }, + "DeviceOwner": { + "id": "DeviceOwner", + "type": "object", + "description": "This parameter contains device-owner information required as part of device registration. The regulatory domains may require additional parameters.\n\nAll contact information must be expressed using the structure defined by the vCard format specification. Only the contact fields of vCard are supported: \n- fn: Full name of an individual \n- org: Name of the organization \n- adr: Address fields \n- tel: Telephone numbers \n- email: Email addresses \n\nNote that the vCard specification defines maximum lengths for each field.", + "properties": { + "operator": { + "$ref": "Vcard", + "description": "The vCard contact information for the device operator is optional, but may be required by specific regulatory domains." + }, + "owner": { + "$ref": "Vcard", + "description": "The vCard contact information for the individual or business that owns the device is required." + } + } + }, + "DeviceValidity": { + "id": "DeviceValidity", + "type": "object", + "description": "The device validity element describes whether a particular device is valid to operate in the regulatory domain.", + "properties": { + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "The descriptor of the device for which the validity check was requested. It will always be present." + }, + "isValid": { + "type": "boolean", + "description": "The validity status: true if the device is valid for operation, false otherwise. It will always be present." + }, + "reason": { + "type": "string", + "description": "If the device identifier is not valid, the database may include a reason. The reason may be in any language. The length of the value should not exceed 128 characters." + } + } + }, + "EventTime": { + "id": "EventTime", + "type": "object", + "description": "The start and stop times of an event. This is used to indicate the time period for which a spectrum profile is valid.\n\nBoth times are expressed using the format, YYYY-MM-DDThh:mm:ssZ, as defined in RFC3339. The times must be expressed using UTC.", + "properties": { + "startTime": { + "type": "string", + "description": "The inclusive start of the event. It will be present." + }, + "stopTime": { + "type": "string", + "description": "The exclusive end of the event. It will be present." + } + } + }, + "FrequencyRange": { + "id": "FrequencyRange", + "type": "object", + "description": "A specific range of frequencies together with the associated maximum power level and channel identifier.", + "properties": { + "channelId": { + "type": "string", + "description": "The database may include a channel identifier, when applicable. When it is included, the device should treat it as informative. The length of the identifier should not exceed 16 characters." + }, + "maxPowerDBm": { + "type": "number", + "description": "The maximum total power level (EIRP)—computed over the corresponding operating bandwidth—that is permitted within the frequency range. Depending on the context in which the frequency-range element appears, this value may be required. For example, it is required in the available-spectrum response, available-spectrum-batch response, and spectrum-use notification message, but it should not be present (it is not applicable) when the frequency range appears inside a device-capabilities message.", + "format": "double" + }, + "startHz": { + "type": "number", + "description": "The required inclusive start of the frequency range (in Hertz).", + "format": "double" + }, + "stopHz": { + "type": "number", + "description": "The required exclusive end of the frequency range (in Hertz).", + "format": "double" + } + } + }, + "GeoLocation": { + "id": "GeoLocation", + "type": "object", + "description": "This parameter is used to specify the geolocation of the device.", + "properties": { + "confidence": { + "type": "integer", + "description": "The location confidence level, as an integer percentage, may be required, depending on the regulatory domain. When the parameter is optional and not provided, its value is assumed to be 95. Valid values range from 0 to 99, since, in practice, 100-percent confidence is not achievable. The confidence value is meaningful only when geolocation refers to a point with uncertainty.", + "format": "int32" + }, + "point": { + "$ref": "GeoLocationEllipse", + "description": "If present, indicates that the geolocation represents a point. Paradoxically, a point is parameterized using an ellipse, where the center represents the location of the point and the distances along the major and minor axes represent the uncertainty. The uncertainty values may be required, depending on the regulatory domain." + }, + "region": { + "$ref": "GeoLocationPolygon", + "description": "If present, indicates that the geolocation represents a region. Database support for regions is optional." + } + } + }, + "GeoLocationEllipse": { + "id": "GeoLocationEllipse", + "type": "object", + "description": "A \"point\" with uncertainty is represented using the Ellipse shape.", + "properties": { + "center": { + "$ref": "GeoLocationPoint", + "description": "A required geo-spatial point representing the center of the ellipse." + }, + "orientation": { + "type": "number", + "description": "A floating-point number that expresses the orientation of the ellipse, representing the rotation, in degrees, of the semi-major axis from North towards the East. For example, when the uncertainty is greatest along the North-South direction, orientation is 0 degrees; conversely, if the uncertainty is greatest along the East-West direction, orientation is 90 degrees. When orientation is not present, the orientation is assumed to be 0.", + "format": "double" + }, + "semiMajorAxis": { + "type": "number", + "description": "A floating-point number that expresses the location uncertainty along the major axis of the ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is 0.", + "format": "double" + }, + "semiMinorAxis": { + "type": "number", + "description": "A floating-point number that expresses the location uncertainty along the minor axis of the ellipse. May be required by the regulatory domain. When the uncertainty is optional, the default value is 0.", + "format": "double" + } + } + }, + "GeoLocationPoint": { + "id": "GeoLocationPoint", + "type": "object", + "description": "A single geolocation on the globe.", + "properties": { + "latitude": { + "type": "number", + "description": "A required floating-point number that expresses the latitude in degrees using the WGS84 datum. For details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "A required floating-point number that expresses the longitude in degrees using the WGS84 datum. For details on this encoding, see the National Imagery and Mapping Agency's Technical Report TR8350.2.", + "format": "double" + } + } + }, + "GeoLocationPolygon": { + "id": "GeoLocationPolygon", + "type": "object", + "description": "A region is represented using the polygonal shape.", + "properties": { + "exterior": { + "type": "array", + "description": "When the geolocation describes a region, the exterior field refers to a list of latitude/longitude points that represent the vertices of a polygon. The first and last points must be the same. Thus, a minimum of four points is required. The following polygon restrictions from RFC5491 apply: \n- A connecting line shall not cross another connecting line of the same polygon. \n- The vertices must be defined in a counterclockwise order. \n- The edges of a polygon are defined by the shortest path between two points in space (not a geodesic curve). Consequently, the length between two adjacent vertices should be restricted to a maximum of 130 km. \n- All vertices are assumed to be at the same altitude. \n- Polygon shapes should be restricted to a maximum of 15 vertices (16 points that include the repeated vertex).", + "items": { + "$ref": "GeoLocationPoint" + } + } + } + }, + "GeoSpectrumSchedule": { + "id": "GeoSpectrumSchedule", + "type": "object", + "description": "The schedule of spectrum profiles available at a particular geolocation.", + "properties": { + "location": { + "$ref": "GeoLocation", + "description": "The geolocation identifies the location at which the spectrum schedule applies. It will always be present." + }, + "spectrumSchedules": { + "type": "array", + "description": "A list of available spectrum profiles and associated times. It will always be present, and at least one schedule must be included (though it may be empty if there is no available spectrum). More than one schedule may be included to represent future changes to the available spectrum.", + "items": { + "$ref": "SpectrumSchedule" + } + } + } + }, + "PawsGetSpectrumBatchRequest": { + "id": "PawsGetSpectrumBatchRequest", + "type": "object", + "description": "The request message for a batch available spectrum query protocol.", + "properties": { + "antenna": { + "$ref": "AntennaCharacteristics", + "description": "Depending on device type and regulatory domain, antenna characteristics may be required." + }, + "capabilities": { + "$ref": "DeviceCapabilities", + "description": "The master device may include its device capabilities to limit the available-spectrum batch response to the spectrum that is compatible with its capabilities. The database should not return spectrum that is incompatible with the specified capabilities." + }, + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "When the available spectrum request is made on behalf of a specific device (a master or slave device), device descriptor information for the device on whose behalf the request is made is required (in such cases, the requestType parameter must be empty). When a requestType value is specified, device descriptor information may be optional or required according to the rules of the applicable regulatory domain." + }, + "locations": { + "type": "array", + "description": "A geolocation list is required. This allows a device to specify its current location plus additional anticipated locations when allowed by the regulatory domain. At least one location must be included. Geolocation must be given as the location of the radiation center of the device's antenna. If a location specifies a region, rather than a point, the database may return an UNIMPLEMENTED error if it does not support query by region.\n\nThere is no upper limit on the number of locations included in a available spectrum batch request, but the database may restrict the number of locations it supports by returning a response with fewer locations than specified in the batch request. Note that geolocations must be those of the master device (a device with geolocation capability that makes an available spectrum batch request), whether the master device is making the request on its own behalf or on behalf of a slave device (one without geolocation capability).", + "items": { + "$ref": "GeoLocation" + } + }, + "masterDeviceDesc": { + "$ref": "DeviceDescriptor", + "description": "When an available spectrum batch request is made by the master device (a device with geolocation capability) on behalf of a slave device (a device without geolocation capability), the rules of the applicable regulatory domain may require the master device to provide its own device descriptor information (in addition to device descriptor information for the slave device in a separate parameter)." + }, + "owner": { + "$ref": "DeviceOwner", + "description": "Depending on device type and regulatory domain, device owner information may be included in an available spectrum batch request. This allows the device to register and get spectrum-availability information in a single request." + }, + "requestType": { + "type": "string", + "description": "The request type parameter is an optional parameter that can be used to modify an available spectrum batch request, but its use depends on applicable regulatory rules. For example, It may be used to request generic slave device parameters without having to specify the device descriptor for a specific device. When the requestType parameter is missing, the request is for a specific device (master or slave), and the device descriptor parameter for the device on whose behalf the batch request is made is required." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsGetSpectrumBatchResponse": { + "id": "PawsGetSpectrumBatchResponse", + "type": "object", + "description": "The response message for the batch available spectrum query contains a schedule of available spectrum for the device at multiple locations.", + "properties": { + "databaseChange": { + "$ref": "DbUpdateSpec", + "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs." + }, + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "The database must return in its available spectrum response the device descriptor information it received in the master device's available spectrum batch request." + }, + "geoSpectrumSchedules": { + "type": "array", + "description": "The available spectrum batch response must contain a geo-spectrum schedule list, The list may be empty if spectrum is not available. The database may return more than one geo-spectrum schedule to represent future changes to the available spectrum. How far in advance a schedule may be provided depends upon the applicable regulatory domain. The database may return available spectrum for fewer geolocations than requested. The device must not make assumptions about the order of the entries in the list, and must use the geolocation value in each geo-spectrum schedule entry to match available spectrum to a location.", + "items": { + "$ref": "GeoSpectrumSchedule" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsGetSpectrumBatchResponse\".", + "default": "spectrum#pawsGetSpectrumBatchResponse" + }, + "maxContiguousBwHz": { + "type": "number", + "description": "The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A regulatory domain may require the database to return this parameter. When this parameter is present in the response, the device must apply this constraint to its spectrum-selection logic to ensure that no single block of spectrum has bandwidth that exceeds this value.", + "format": "double" + }, + "maxTotalBwHz": { + "type": "number", + "description": "The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which does not need to be contiguous. A regulatory domain may require the database to return this parameter. When this parameter is present in the available spectrum batch response, the device must apply this constraint to its spectrum-selection logic to ensure that total bandwidth does not exceed this value.", + "format": "double" + }, + "needsSpectrumReport": { + "type": "boolean", + "description": "For regulatory domains that require a spectrum-usage report from devices, the database must return true for this parameter if the geo-spectrum schedules list is not empty; otherwise, the database should either return false or omit this parameter. If this parameter is present and its value is true, the device must send a spectrum use notify message to the database; otherwise, the device should not send the notification." + }, + "rulesetInfo": { + "$ref": "RulesetInfo", + "description": "The database should return ruleset information, which identifies the applicable regulatory authority and ruleset for the available spectrum batch response. If included, the device must use the corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such as maxLocationChange, take precedence over any conflicting values provided in the ruleset information returned in a prior initialization response sent by the database to the device." + }, + "timestamp": { + "type": "string", + "description": "The database includes a timestamp of the form, YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339), in its available spectrum batch response. The timestamp should be used by the device as a reference for the start and stop times specified in the response spectrum schedules." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsGetSpectrumRequest": { + "id": "PawsGetSpectrumRequest", + "type": "object", + "description": "The request message for the available spectrum query protocol which must include the device's geolocation.", + "properties": { + "antenna": { + "$ref": "AntennaCharacteristics", + "description": "Depending on device type and regulatory domain, the characteristics of the antenna may be required." + }, + "capabilities": { + "$ref": "DeviceCapabilities", + "description": "The master device may include its device capabilities to limit the available-spectrum response to the spectrum that is compatible with its capabilities. The database should not return spectrum that is incompatible with the specified capabilities." + }, + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "When the available spectrum request is made on behalf of a specific device (a master or slave device), device descriptor information for that device is required (in such cases, the requestType parameter must be empty). When a requestType value is specified, device descriptor information may be optional or required according to the rules of the applicable regulatory domain." + }, + "location": { + "$ref": "GeoLocation", + "description": "The geolocation of the master device (a device with geolocation capability that makes an available spectrum request) is required whether the master device is making the request on its own behalf or on behalf of a slave device (one without geolocation capability). The location must be the location of the radiation center of the master device's antenna. To support mobile devices, a regulatory domain may allow the anticipated position of the master device to be given instead. If the location specifies a region, rather than a point, the database may return an UNIMPLEMENTED error code if it does not support query by region." + }, + "masterDeviceDesc": { + "$ref": "DeviceDescriptor", + "description": "When an available spectrum request is made by the master device (a device with geolocation capability) on behalf of a slave device (a device without geolocation capability), the rules of the applicable regulatory domain may require the master device to provide its own device descriptor information (in addition to device descriptor information for the slave device, which is provided in a separate parameter)." + }, + "owner": { + "$ref": "DeviceOwner", + "description": "Depending on device type and regulatory domain, device owner information may be included in an available spectrum request. This allows the device to register and get spectrum-availability information in a single request." + }, + "requestType": { + "type": "string", + "description": "The request type parameter is an optional parameter that can be used to modify an available spectrum request, but its use depends on applicable regulatory rules. It may be used, for example, to request generic slave device parameters without having to specify the device descriptor for a specific device. When the requestType parameter is missing, the request is for a specific device (master or slave), and the deviceDesc parameter for the device on whose behalf the request is made is required." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsGetSpectrumResponse": { + "id": "PawsGetSpectrumResponse", + "type": "object", + "description": "The response message for the available spectrum query which contains a schedule of available spectrum for the device.", + "properties": { + "databaseChange": { + "$ref": "DbUpdateSpec", + "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs." + }, + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "The database must return, in its available spectrum response, the device descriptor information it received in the master device's available spectrum request." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsGetSpectrumResponse\".", + "default": "spectrum#pawsGetSpectrumResponse" + }, + "maxContiguousBwHz": { + "type": "number", + "description": "The database may return a constraint on the allowed maximum contiguous bandwidth (in Hertz). A regulatory domain may require the database to return this parameter. When this parameter is present in the response, the device must apply this constraint to its spectrum-selection logic to ensure that no single block of spectrum has bandwidth that exceeds this value.", + "format": "double" + }, + "maxTotalBwHz": { + "type": "number", + "description": "The database may return a constraint on the allowed maximum total bandwidth (in Hertz), which need not be contiguous. A regulatory domain may require the database to return this parameter. When this parameter is present in the available spectrum response, the device must apply this constraint to its spectrum-selection logic to ensure that total bandwidth does not exceed this value.", + "format": "double" + }, + "needsSpectrumReport": { + "type": "boolean", + "description": "For regulatory domains that require a spectrum-usage report from devices, the database must return true for this parameter if the spectrum schedule list is not empty; otherwise, the database will either return false or omit this parameter. If this parameter is present and its value is true, the device must send a spectrum use notify message to the database; otherwise, the device must not send the notification." + }, + "rulesetInfo": { + "$ref": "RulesetInfo", + "description": "The database should return ruleset information, which identifies the applicable regulatory authority and ruleset for the available spectrum response. If included, the device must use the corresponding ruleset to interpret the response. Values provided in the returned ruleset information, such as maxLocationChange, take precedence over any conflicting values provided in the ruleset information returned in a prior initialization response sent by the database to the device." + }, + "spectrumSchedules": { + "type": "array", + "description": "The available spectrum response must contain a spectrum schedule list. The list may be empty if spectrum is not available. The database may return more than one spectrum schedule to represent future changes to the available spectrum. How far in advance a schedule may be provided depends on the applicable regulatory domain.", + "items": { + "$ref": "SpectrumSchedule" + } + }, + "timestamp": { + "type": "string", + "description": "The database includes a timestamp of the form YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339) in its available spectrum response. The timestamp should be used by the device as a reference for the start and stop times specified in the response spectrum schedules." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsInitRequest": { + "id": "PawsInitRequest", + "type": "object", + "description": "The initialization request message allows the master device to initiate exchange of capabilities with the database.", + "properties": { + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "The DeviceDescriptor parameter is required. If the database does not support the device or any of the rulesets specified in the device descriptor, it must return an UNSUPPORTED error code in the error response." + }, + "location": { + "$ref": "GeoLocation", + "description": "A device's geolocation is required." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsInitResponse": { + "id": "PawsInitResponse", + "type": "object", + "description": "The initialization response message communicates database parameters to the requesting device.", + "properties": { + "databaseChange": { + "$ref": "DbUpdateSpec", + "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsInitResponse\".", + "default": "spectrum#pawsInitResponse" + }, + "rulesetInfo": { + "$ref": "RulesetInfo", + "description": "The rulesetInfo parameter must be included in the response. This parameter specifies the regulatory domain and parameters applicable to that domain. The database must include the authority field, which defines the regulatory domain for the location specified in the INIT_REQ message." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsNotifySpectrumUseRequest": { + "id": "PawsNotifySpectrumUseRequest", + "type": "object", + "description": "The spectrum-use notification message which must contain the geolocation of the Device and parameters required by the regulatory domain.", + "properties": { + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "Device descriptor information is required in the spectrum-use notification message." + }, + "location": { + "$ref": "GeoLocation", + "description": "The geolocation of the master device (the device that is sending the spectrum-use notification) to the database is required in the spectrum-use notification message." + }, + "spectra": { + "type": "array", + "description": "A spectrum list is required in the spectrum-use notification. The list specifies the spectrum that the device expects to use, which includes frequency ranges and maximum power levels. The list may be empty if the device decides not to use any of spectrum. For consistency, the psdBandwidthHz value should match that from one of the spectrum elements in the corresponding available spectrum response previously sent to the device by the database. Note that maximum power levels in the spectrum element must be expressed as power spectral density over the specified psdBandwidthHz value. The actual bandwidth to be used (as computed from the start and stop frequencies) may be different from the psdBandwidthHz value. As an example, when regulatory rules express maximum power spectral density in terms of maximum power over any 100 kHz band, then the psdBandwidthHz value should be set to 100 kHz, even though the actual bandwidth used can be 20 kHz.", + "items": { + "$ref": "SpectrumMessage" + } + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsNotifySpectrumUseResponse": { + "id": "PawsNotifySpectrumUseResponse", + "type": "object", + "description": "An empty response to the notification.", + "properties": { + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsNotifySpectrumUseResponse\".", + "default": "spectrum#pawsNotifySpectrumUseResponse" + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsRegisterRequest": { + "id": "PawsRegisterRequest", + "type": "object", + "description": "The registration request message contains the required registration parameters.", + "properties": { + "antenna": { + "$ref": "AntennaCharacteristics", + "description": "Antenna characteristics, including its height and height type." + }, + "deviceDesc": { + "$ref": "DeviceDescriptor", + "description": "A DeviceDescriptor is required." + }, + "deviceOwner": { + "$ref": "DeviceOwner", + "description": "Device owner information is required." + }, + "location": { + "$ref": "GeoLocation", + "description": "A device's geolocation is required." + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsRegisterResponse": { + "id": "PawsRegisterResponse", + "type": "object", + "description": "The registration response message simply acknowledges receipt of the request and is otherwise empty.", + "properties": { + "databaseChange": { + "$ref": "DbUpdateSpec", + "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsRegisterResponse\".", + "default": "spectrum#pawsRegisterResponse" + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsVerifyDeviceRequest": { + "id": "PawsVerifyDeviceRequest", + "type": "object", + "description": "The device validation request message.", + "properties": { + "deviceDescs": { + "type": "array", + "description": "A list of device descriptors, which specifies the slave devices to be validated, is required.", + "items": { + "$ref": "DeviceDescriptor" + } + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "PawsVerifyDeviceResponse": { + "id": "PawsVerifyDeviceResponse", + "type": "object", + "description": "The device validation response message.", + "properties": { + "databaseChange": { + "$ref": "DbUpdateSpec", + "description": "A database may include the databaseChange parameter to notify a device of a change to its database URI, providing one or more alternate database URIs. The device should use this information to update its list of pre-configured databases by (only) replacing its entry for the responding database with the list of alternate URIs." + }, + "deviceValidities": { + "type": "array", + "description": "A device validities list is required in the device validation response to report whether each slave device listed in a previous device validation request is valid. The number of entries must match the number of device descriptors listed in the previous device validation request.", + "items": { + "$ref": "DeviceValidity" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"spectrum#pawsVerifyDeviceResponse\".", + "default": "spectrum#pawsVerifyDeviceResponse" + }, + "type": { + "type": "string", + "description": "The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, ...).\n\nRequired field." + }, + "version": { + "type": "string", + "description": "The PAWS version. Must be exactly 1.0.\n\nRequired field." + } + } + }, + "RulesetInfo": { + "id": "RulesetInfo", + "type": "object", + "description": "This contains parameters for the ruleset of a regulatory domain that is communicated using the initialization and available-spectrum processes.", + "properties": { + "authority": { + "type": "string", + "description": "The regulatory domain to which the ruleset belongs is required. It must be a 2-letter country code. The device should use this to determine additional device behavior required by the associated regulatory domain." + }, + "maxLocationChange": { + "type": "number", + "description": "The maximum location change in meters is required in the initialization response, but optional otherwise. When the device changes location by more than this specified distance, it must contact the database to get the available spectrum for the new location. If the device is using spectrum that is no longer available, it must immediately cease use of the spectrum under rules for database-managed spectrum. If this value is provided within the context of an available-spectrum response, it takes precedence over the value within the initialization response.", + "format": "double" + }, + "maxPollingSecs": { + "type": "integer", + "description": "The maximum duration, in seconds, between requests for available spectrum. It is required in the initialization response, but optional otherwise. The device must contact the database to get available spectrum no less frequently than this duration. If the new spectrum information indicates that the device is using spectrum that is no longer available, it must immediately cease use of those frequencies under rules for database-managed spectrum. If this value is provided within the context of an available-spectrum response, it takes precedence over the value within the initialization response.", + "format": "int32" + }, + "rulesetIds": { + "type": "array", + "description": "The identifiers of the rulesets supported for the device's location. The database should include at least one applicable ruleset in the initialization response. The device may use the ruleset identifiers to determine parameters to include in subsequent requests. Within the context of the available-spectrum responses, the database should include the identifier of the ruleset that it used to determine the available-spectrum response. If included, the device must use the specified ruleset to interpret the response. If the device does not support the indicated ruleset, it must not operate in the spectrum governed by the ruleset.", + "items": { + "type": "string" + } + } + } + }, + "SpectrumMessage": { + "id": "SpectrumMessage", + "type": "object", + "description": "Available spectrum can be logically characterized by a list of frequency ranges and permissible power levels for each range.", + "properties": { + "bandwidth": { + "type": "number", + "description": "The bandwidth (in Hertz) for which permissible power levels are specified. For example, FCC regulation would require only one spectrum specification at 6MHz bandwidth, but Ofcom regulation would require two specifications, at 0.1MHz and 8MHz. This parameter may be empty if there is no available spectrum. It will be present otherwise.", + "format": "double" + }, + "frequencyRanges": { + "type": "array", + "description": "The list of frequency ranges and permissible power levels. The list may be empty if there is no available spectrum, otherwise it will be present.", + "items": { + "$ref": "FrequencyRange" + } + } + } + }, + "SpectrumSchedule": { + "id": "SpectrumSchedule", + "type": "object", + "description": "The spectrum schedule element combines an event time with spectrum profile to define a time period in which the profile is valid.", + "properties": { + "eventTime": { + "$ref": "EventTime", + "description": "The event time expresses when the spectrum profile is valid. It will always be present." + }, + "spectra": { + "type": "array", + "description": "A list of spectrum messages representing the usable profile. It will always be present, but may be empty when there is no available spectrum.", + "items": { + "$ref": "SpectrumMessage" + } + } + } + }, + "Vcard": { + "id": "Vcard", + "type": "object", + "description": "A vCard-in-JSON message that contains only the fields needed for PAWS: \n- fn: Full name of an individual \n- org: Name of the organization \n- adr: Address fields \n- tel: Telephone numbers \n- email: Email addresses", + "properties": { + "adr": { + "$ref": "VcardAddress", + "description": "The street address of the entity." + }, + "email": { + "$ref": "VcardTypedText", + "description": "An email address that can be used to reach the contact." + }, + "fn": { + "type": "string", + "description": "The full name of the contact person. For example: John A. Smith." + }, + "org": { + "$ref": "VcardTypedText", + "description": "The organization associated with the registering entity." + }, + "tel": { + "$ref": "VcardTelephone", + "description": "A telephone number that can be used to call the contact." + } + } + }, + "VcardAddress": { + "id": "VcardAddress", + "type": "object", + "description": "The structure used to represent a street address.", + "properties": { + "code": { + "type": "string", + "description": "The postal code associated with the address. For example: 94423." + }, + "country": { + "type": "string", + "description": "The country name. For example: US." + }, + "locality": { + "type": "string", + "description": "The city or local equivalent portion of the address. For example: San Jose." + }, + "pobox": { + "type": "string", + "description": "An optional post office box number." + }, + "region": { + "type": "string", + "description": "The state or local equivalent portion of the address. For example: CA." + }, + "street": { + "type": "string", + "description": "The street number and name. For example: 123 Any St." + } + } + }, + "VcardTelephone": { + "id": "VcardTelephone", + "type": "object", + "description": "The structure used to represent a telephone number.", + "properties": { + "uri": { + "type": "string", + "description": "A nested telephone URI of the form: tel:+1-123-456-7890." + } + } + }, + "VcardTypedText": { + "id": "VcardTypedText", + "type": "object", + "description": "The structure used to represent an organization and an email address.", + "properties": { + "text": { + "type": "string", + "description": "The text string associated with this item. For example, for an org field: ACME, inc. For an email field: smith@example.com." + } + } + } + }, + "resources": { + "paws": { + "methods": { + "getSpectrum": { + "id": "spectrum.paws.getSpectrum", + "path": "getSpectrum", + "httpMethod": "POST", + "description": "Requests information about the available spectrum for a device at a location. Requests from a fixed-mode device must include owner information so the device can be registered with the database.", + "request": { + "$ref": "PawsGetSpectrumRequest" + }, + "response": { + "$ref": "PawsGetSpectrumResponse" + } + }, + "getSpectrumBatch": { + "id": "spectrum.paws.getSpectrumBatch", + "path": "getSpectrumBatch", + "httpMethod": "POST", + "description": "The Google Spectrum Database does not support batch requests, so this method always yields an UNIMPLEMENTED error.", + "request": { + "$ref": "PawsGetSpectrumBatchRequest" + }, + "response": { + "$ref": "PawsGetSpectrumBatchResponse" + } + }, + "init": { + "id": "spectrum.paws.init", + "path": "init", + "httpMethod": "POST", + "description": "Initializes the connection between a white space device and the database.", + "request": { + "$ref": "PawsInitRequest" + }, + "response": { + "$ref": "PawsInitResponse" + } + }, + "notifySpectrumUse": { + "id": "spectrum.paws.notifySpectrumUse", + "path": "notifySpectrumUse", + "httpMethod": "POST", + "description": "Notifies the database that the device has selected certain frequency ranges for transmission. Only to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that require notification, so this always yields an UNIMPLEMENTED error.", + "request": { + "$ref": "PawsNotifySpectrumUseRequest" + }, + "response": { + "$ref": "PawsNotifySpectrumUseResponse" + } + }, + "register": { + "id": "spectrum.paws.register", + "path": "register", + "httpMethod": "POST", + "description": "The Google Spectrum Database implements registration in the getSpectrum method. As such this always returns an UNIMPLEMENTED error.", + "request": { + "$ref": "PawsRegisterRequest" + }, + "response": { + "$ref": "PawsRegisterResponse" + } + }, + "verifyDevice": { + "id": "spectrum.paws.verifyDevice", + "path": "verifyDevice", + "httpMethod": "POST", + "description": "Validates a device for white space use in accordance with regulatory rules. The Google Spectrum Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED error.", + "request": { + "$ref": "PawsVerifyDeviceRequest" + }, + "response": { + "$ref": "PawsVerifyDeviceResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-gen.go b/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-gen.go new file mode 100644 index 0000000000000..98626a13934af --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/spectrum/v1explorer/spectrum-gen.go @@ -0,0 +1,1322 @@ +// Package spectrum provides access to the Google Spectrum Database API. +// +// See http://developers.google.com/spectrum +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/spectrum/v1explorer" +// ... +// spectrumService, err := spectrum.New(oauthHttpClient) +package spectrum + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "spectrum:v1explorer" +const apiName = "spectrum" +const apiVersion = "v1explorer" +const basePath = "https://www.googleapis.com/spectrum/v1explorer/paws/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Paws = NewPawsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Paws *PawsService +} + +func NewPawsService(s *Service) *PawsService { + rs := &PawsService{s: s} + return rs +} + +type PawsService struct { + s *Service +} + +type AntennaCharacteristics struct { + // Height: The antenna height in meters. Whether the antenna height is + // required depends on the device type and the regulatory domain. Note + // that the height may be negative. + Height float64 `json:"height,omitempty"` + + // HeightType: If the height is required, then the height type (AGL for + // above ground level or AMSL for above mean sea level) is also + // required. The default is AGL. + HeightType string `json:"heightType,omitempty"` + + // HeightUncertainty: The height uncertainty in meters. Whether this is + // required depends on the regulatory domain. + HeightUncertainty float64 `json:"heightUncertainty,omitempty"` +} + +type DatabaseSpec struct { + // Name: The display name for a database. + Name string `json:"name,omitempty"` + + // Uri: The corresponding URI of the database. + Uri string `json:"uri,omitempty"` +} + +type DbUpdateSpec struct { + // Databases: A required list of one or more databases. A device should + // update its preconfigured list of databases to replace (only) the + // database that provided the response with the specified entries. + Databases []*DatabaseSpec `json:"databases,omitempty"` +} + +type DeviceCapabilities struct { + // FrequencyRanges: An optional list of frequency ranges supported by + // the device. Each element must contain start and stop frequencies in + // which the device can operate. Channel identifiers are optional. When + // specified, the database should not return available spectrum that + // falls outside these ranges or channel IDs. + FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"` +} + +type DeviceDescriptor struct { + // EtsiEnDeviceCategory: Specifies the ETSI white space device category. + // Valid values are the strings master and slave. This field is + // case-insensitive. Consult the ETSI documentation for details about + // the device types. + EtsiEnDeviceCategory string `json:"etsiEnDeviceCategory,omitempty"` + + // EtsiEnDeviceEmissionsClass: Specifies the ETSI white space device + // emissions class. The values are represented by numeric strings, such + // as 1, 2, etc. Consult the ETSI documentation for details about the + // device types. + EtsiEnDeviceEmissionsClass string `json:"etsiEnDeviceEmissionsClass,omitempty"` + + // EtsiEnDeviceType: Specifies the ETSI white space device type. Valid + // values are single-letter strings, such as A, B, etc. Consult the ETSI + // documentation for details about the device types. + EtsiEnDeviceType string `json:"etsiEnDeviceType,omitempty"` + + // EtsiEnTechnologyId: Specifies the ETSI white space device technology + // identifier. The string value must not exceed 64 characters in length. + // Consult the ETSI documentation for details about the device types. + EtsiEnTechnologyId string `json:"etsiEnTechnologyId,omitempty"` + + // FccId: Specifies the device's FCC certification identifier. The value + // is an identifier string whose length should not exceed 32 characters. + // Note that, in practice, a valid FCC ID may be limited to 19 + // characters. + FccId string `json:"fccId,omitempty"` + + // FccTvbdDeviceType: Specifies the TV Band White Space device type, as + // defined by the FCC. Valid values are FIXED, MODE_1, MODE_2. + FccTvbdDeviceType string `json:"fccTvbdDeviceType,omitempty"` + + // ManufacturerId: The manufacturer's ID may be required by the + // regulatory domain. This should represent the name of the device + // manufacturer, should be consistent across all devices from the same + // manufacturer, and should be distinct from that of other + // manufacturers. The string value must not exceed 64 characters in + // length. + ManufacturerId string `json:"manufacturerId,omitempty"` + + // ModelId: The device's model ID may be required by the regulatory + // domain. The string value must not exceed 64 characters in length. + ModelId string `json:"modelId,omitempty"` + + // RulesetIds: The list of identifiers for rulesets supported by the + // device. A database may require that the device provide this list + // before servicing the device requests. If the database does not + // support any of the rulesets specified in the list, the database may + // refuse to service the device requests. If present, the list must + // contain at least one entry. + // + // For information about the valid + // requests, see section 9.2 of the PAWS specification. Currently, + // FccTvBandWhiteSpace-2010 is the only supported ruleset. + RulesetIds []string `json:"rulesetIds,omitempty"` + + // SerialNumber: The manufacturer's device serial number; required by + // the applicable regulatory domain. The length of the value must not + // exceed 64 characters. + SerialNumber string `json:"serialNumber,omitempty"` +} + +type DeviceOwner struct { + // Operator: The vCard contact information for the device operator is + // optional, but may be required by specific regulatory domains. + Operator *Vcard `json:"operator,omitempty"` + + // Owner: The vCard contact information for the individual or business + // that owns the device is required. + Owner *Vcard `json:"owner,omitempty"` +} + +type DeviceValidity struct { + // DeviceDesc: The descriptor of the device for which the validity check + // was requested. It will always be present. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // IsValid: The validity status: true if the device is valid for + // operation, false otherwise. It will always be present. + IsValid bool `json:"isValid,omitempty"` + + // Reason: If the device identifier is not valid, the database may + // include a reason. The reason may be in any language. The length of + // the value should not exceed 128 characters. + Reason string `json:"reason,omitempty"` +} + +type EventTime struct { + // StartTime: The inclusive start of the event. It will be present. + StartTime string `json:"startTime,omitempty"` + + // StopTime: The exclusive end of the event. It will be present. + StopTime string `json:"stopTime,omitempty"` +} + +type FrequencyRange struct { + // ChannelId: The database may include a channel identifier, when + // applicable. When it is included, the device should treat it as + // informative. The length of the identifier should not exceed 16 + // characters. + ChannelId string `json:"channelId,omitempty"` + + // MaxPowerDBm: The maximum total power level (EIRP)—computed over the + // corresponding operating bandwidth—that is permitted within the + // frequency range. Depending on the context in which the + // frequency-range element appears, this value may be required. For + // example, it is required in the available-spectrum response, + // available-spectrum-batch response, and spectrum-use notification + // message, but it should not be present (it is not applicable) when the + // frequency range appears inside a device-capabilities message. + MaxPowerDBm float64 `json:"maxPowerDBm,omitempty"` + + // StartHz: The required inclusive start of the frequency range (in + // Hertz). + StartHz float64 `json:"startHz,omitempty"` + + // StopHz: The required exclusive end of the frequency range (in Hertz). + StopHz float64 `json:"stopHz,omitempty"` +} + +type GeoLocation struct { + // Confidence: The location confidence level, as an integer percentage, + // may be required, depending on the regulatory domain. When the + // parameter is optional and not provided, its value is assumed to be + // 95. Valid values range from 0 to 99, since, in practice, 100-percent + // confidence is not achievable. The confidence value is meaningful only + // when geolocation refers to a point with uncertainty. + Confidence int64 `json:"confidence,omitempty"` + + // Point: If present, indicates that the geolocation represents a point. + // Paradoxically, a point is parameterized using an ellipse, where the + // center represents the location of the point and the distances along + // the major and minor axes represent the uncertainty. The uncertainty + // values may be required, depending on the regulatory domain. + Point *GeoLocationEllipse `json:"point,omitempty"` + + // Region: If present, indicates that the geolocation represents a + // region. Database support for regions is optional. + Region *GeoLocationPolygon `json:"region,omitempty"` +} + +type GeoLocationEllipse struct { + // Center: A required geo-spatial point representing the center of the + // ellipse. + Center *GeoLocationPoint `json:"center,omitempty"` + + // Orientation: A floating-point number that expresses the orientation + // of the ellipse, representing the rotation, in degrees, of the + // semi-major axis from North towards the East. For example, when the + // uncertainty is greatest along the North-South direction, orientation + // is 0 degrees; conversely, if the uncertainty is greatest along the + // East-West direction, orientation is 90 degrees. When orientation is + // not present, the orientation is assumed to be 0. + Orientation float64 `json:"orientation,omitempty"` + + // SemiMajorAxis: A floating-point number that expresses the location + // uncertainty along the major axis of the ellipse. May be required by + // the regulatory domain. When the uncertainty is optional, the default + // value is 0. + SemiMajorAxis float64 `json:"semiMajorAxis,omitempty"` + + // SemiMinorAxis: A floating-point number that expresses the location + // uncertainty along the minor axis of the ellipse. May be required by + // the regulatory domain. When the uncertainty is optional, the default + // value is 0. + SemiMinorAxis float64 `json:"semiMinorAxis,omitempty"` +} + +type GeoLocationPoint struct { + // Latitude: A required floating-point number that expresses the + // latitude in degrees using the WGS84 datum. For details on this + // encoding, see the National Imagery and Mapping Agency's Technical + // Report TR8350.2. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: A required floating-point number that expresses the + // longitude in degrees using the WGS84 datum. For details on this + // encoding, see the National Imagery and Mapping Agency's Technical + // Report TR8350.2. + Longitude float64 `json:"longitude,omitempty"` +} + +type GeoLocationPolygon struct { + // Exterior: When the geolocation describes a region, the exterior field + // refers to a list of latitude/longitude points that represent the + // vertices of a polygon. The first and last points must be the same. + // Thus, a minimum of four points is required. The following polygon + // restrictions from RFC5491 apply: + // - A connecting line shall not + // cross another connecting line of the same polygon. + // - The vertices + // must be defined in a counterclockwise order. + // - The edges of a + // polygon are defined by the shortest path between two points in space + // (not a geodesic curve). Consequently, the length between two adjacent + // vertices should be restricted to a maximum of 130 km. + // - All vertices + // are assumed to be at the same altitude. + // - Polygon shapes should be + // restricted to a maximum of 15 vertices (16 points that include the + // repeated vertex). + Exterior []*GeoLocationPoint `json:"exterior,omitempty"` +} + +type GeoSpectrumSchedule struct { + // Location: The geolocation identifies the location at which the + // spectrum schedule applies. It will always be present. + Location *GeoLocation `json:"location,omitempty"` + + // SpectrumSchedules: A list of available spectrum profiles and + // associated times. It will always be present, and at least one + // schedule must be included (though it may be empty if there is no + // available spectrum). More than one schedule may be included to + // represent future changes to the available spectrum. + SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"` +} + +type PawsGetSpectrumBatchRequest struct { + // Antenna: Depending on device type and regulatory domain, antenna + // characteristics may be required. + Antenna *AntennaCharacteristics `json:"antenna,omitempty"` + + // Capabilities: The master device may include its device capabilities + // to limit the available-spectrum batch response to the spectrum that + // is compatible with its capabilities. The database should not return + // spectrum that is incompatible with the specified capabilities. + Capabilities *DeviceCapabilities `json:"capabilities,omitempty"` + + // DeviceDesc: When the available spectrum request is made on behalf of + // a specific device (a master or slave device), device descriptor + // information for the device on whose behalf the request is made is + // required (in such cases, the requestType parameter must be empty). + // When a requestType value is specified, device descriptor information + // may be optional or required according to the rules of the applicable + // regulatory domain. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // Locations: A geolocation list is required. This allows a device to + // specify its current location plus additional anticipated locations + // when allowed by the regulatory domain. At least one location must be + // included. Geolocation must be given as the location of the radiation + // center of the device's antenna. If a location specifies a region, + // rather than a point, the database may return an UNIMPLEMENTED error + // if it does not support query by region. + // + // There is no upper limit on + // the number of locations included in a available spectrum batch + // request, but the database may restrict the number of locations it + // supports by returning a response with fewer locations than specified + // in the batch request. Note that geolocations must be those of the + // master device (a device with geolocation capability that makes an + // available spectrum batch request), whether the master device is + // making the request on its own behalf or on behalf of a slave device + // (one without geolocation capability). + Locations []*GeoLocation `json:"locations,omitempty"` + + // MasterDeviceDesc: When an available spectrum batch request is made by + // the master device (a device with geolocation capability) on behalf of + // a slave device (a device without geolocation capability), the rules + // of the applicable regulatory domain may require the master device to + // provide its own device descriptor information (in addition to device + // descriptor information for the slave device in a separate parameter). + MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"` + + // Owner: Depending on device type and regulatory domain, device owner + // information may be included in an available spectrum batch request. + // This allows the device to register and get spectrum-availability + // information in a single request. + Owner *DeviceOwner `json:"owner,omitempty"` + + // RequestType: The request type parameter is an optional parameter that + // can be used to modify an available spectrum batch request, but its + // use depends on applicable regulatory rules. For example, It may be + // used to request generic slave device parameters without having to + // specify the device descriptor for a specific device. When the + // requestType parameter is missing, the request is for a specific + // device (master or slave), and the device descriptor parameter for the + // device on whose behalf the batch request is made is required. + RequestType string `json:"requestType,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsGetSpectrumBatchResponse struct { + // DatabaseChange: A database may include the databaseChange parameter + // to notify a device of a change to its database URI, providing one or + // more alternate database URIs. The device should use this information + // to update its list of pre-configured databases by (only) replacing + // its entry for the responding database with the list of alternate + // URIs. + DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"` + + // DeviceDesc: The database must return in its available spectrum + // response the device descriptor information it received in the master + // device's available spectrum batch request. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // GeoSpectrumSchedules: The available spectrum batch response must + // contain a geo-spectrum schedule list, The list may be empty if + // spectrum is not available. The database may return more than one + // geo-spectrum schedule to represent future changes to the available + // spectrum. How far in advance a schedule may be provided depends upon + // the applicable regulatory domain. The database may return available + // spectrum for fewer geolocations than requested. The device must not + // make assumptions about the order of the entries in the list, and must + // use the geolocation value in each geo-spectrum schedule entry to + // match available spectrum to a location. + GeoSpectrumSchedules []*GeoSpectrumSchedule `json:"geoSpectrumSchedules,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsGetSpectrumBatchResponse". + Kind string `json:"kind,omitempty"` + + // MaxContiguousBwHz: The database may return a constraint on the + // allowed maximum contiguous bandwidth (in Hertz). A regulatory domain + // may require the database to return this parameter. When this + // parameter is present in the response, the device must apply this + // constraint to its spectrum-selection logic to ensure that no single + // block of spectrum has bandwidth that exceeds this value. + MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"` + + // MaxTotalBwHz: The database may return a constraint on the allowed + // maximum total bandwidth (in Hertz), which does not need to be + // contiguous. A regulatory domain may require the database to return + // this parameter. When this parameter is present in the available + // spectrum batch response, the device must apply this constraint to its + // spectrum-selection logic to ensure that total bandwidth does not + // exceed this value. + MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"` + + // NeedsSpectrumReport: For regulatory domains that require a + // spectrum-usage report from devices, the database must return true for + // this parameter if the geo-spectrum schedules list is not empty; + // otherwise, the database should either return false or omit this + // parameter. If this parameter is present and its value is true, the + // device must send a spectrum use notify message to the database; + // otherwise, the device should not send the notification. + NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"` + + // RulesetInfo: The database should return ruleset information, which + // identifies the applicable regulatory authority and ruleset for the + // available spectrum batch response. If included, the device must use + // the corresponding ruleset to interpret the response. Values provided + // in the returned ruleset information, such as maxLocationChange, take + // precedence over any conflicting values provided in the ruleset + // information returned in a prior initialization response sent by the + // database to the device. + RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"` + + // Timestamp: The database includes a timestamp of the form, + // YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339), in its + // available spectrum batch response. The timestamp should be used by + // the device as a reference for the start and stop times specified in + // the response spectrum schedules. + Timestamp string `json:"timestamp,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsGetSpectrumRequest struct { + // Antenna: Depending on device type and regulatory domain, the + // characteristics of the antenna may be required. + Antenna *AntennaCharacteristics `json:"antenna,omitempty"` + + // Capabilities: The master device may include its device capabilities + // to limit the available-spectrum response to the spectrum that is + // compatible with its capabilities. The database should not return + // spectrum that is incompatible with the specified capabilities. + Capabilities *DeviceCapabilities `json:"capabilities,omitempty"` + + // DeviceDesc: When the available spectrum request is made on behalf of + // a specific device (a master or slave device), device descriptor + // information for that device is required (in such cases, the + // requestType parameter must be empty). When a requestType value is + // specified, device descriptor information may be optional or required + // according to the rules of the applicable regulatory domain. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // Location: The geolocation of the master device (a device with + // geolocation capability that makes an available spectrum request) is + // required whether the master device is making the request on its own + // behalf or on behalf of a slave device (one without geolocation + // capability). The location must be the location of the radiation + // center of the master device's antenna. To support mobile devices, a + // regulatory domain may allow the anticipated position of the master + // device to be given instead. If the location specifies a region, + // rather than a point, the database may return an UNIMPLEMENTED error + // code if it does not support query by region. + Location *GeoLocation `json:"location,omitempty"` + + // MasterDeviceDesc: When an available spectrum request is made by the + // master device (a device with geolocation capability) on behalf of a + // slave device (a device without geolocation capability), the rules of + // the applicable regulatory domain may require the master device to + // provide its own device descriptor information (in addition to device + // descriptor information for the slave device, which is provided in a + // separate parameter). + MasterDeviceDesc *DeviceDescriptor `json:"masterDeviceDesc,omitempty"` + + // Owner: Depending on device type and regulatory domain, device owner + // information may be included in an available spectrum request. This + // allows the device to register and get spectrum-availability + // information in a single request. + Owner *DeviceOwner `json:"owner,omitempty"` + + // RequestType: The request type parameter is an optional parameter that + // can be used to modify an available spectrum request, but its use + // depends on applicable regulatory rules. It may be used, for example, + // to request generic slave device parameters without having to specify + // the device descriptor for a specific device. When the requestType + // parameter is missing, the request is for a specific device (master or + // slave), and the deviceDesc parameter for the device on whose behalf + // the request is made is required. + RequestType string `json:"requestType,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsGetSpectrumResponse struct { + // DatabaseChange: A database may include the databaseChange parameter + // to notify a device of a change to its database URI, providing one or + // more alternate database URIs. The device should use this information + // to update its list of pre-configured databases by (only) replacing + // its entry for the responding database with the list of alternate + // URIs. + DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"` + + // DeviceDesc: The database must return, in its available spectrum + // response, the device descriptor information it received in the master + // device's available spectrum request. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsGetSpectrumResponse". + Kind string `json:"kind,omitempty"` + + // MaxContiguousBwHz: The database may return a constraint on the + // allowed maximum contiguous bandwidth (in Hertz). A regulatory domain + // may require the database to return this parameter. When this + // parameter is present in the response, the device must apply this + // constraint to its spectrum-selection logic to ensure that no single + // block of spectrum has bandwidth that exceeds this value. + MaxContiguousBwHz float64 `json:"maxContiguousBwHz,omitempty"` + + // MaxTotalBwHz: The database may return a constraint on the allowed + // maximum total bandwidth (in Hertz), which need not be contiguous. A + // regulatory domain may require the database to return this parameter. + // When this parameter is present in the available spectrum response, + // the device must apply this constraint to its spectrum-selection logic + // to ensure that total bandwidth does not exceed this value. + MaxTotalBwHz float64 `json:"maxTotalBwHz,omitempty"` + + // NeedsSpectrumReport: For regulatory domains that require a + // spectrum-usage report from devices, the database must return true for + // this parameter if the spectrum schedule list is not empty; otherwise, + // the database will either return false or omit this parameter. If this + // parameter is present and its value is true, the device must send a + // spectrum use notify message to the database; otherwise, the device + // must not send the notification. + NeedsSpectrumReport bool `json:"needsSpectrumReport,omitempty"` + + // RulesetInfo: The database should return ruleset information, which + // identifies the applicable regulatory authority and ruleset for the + // available spectrum response. If included, the device must use the + // corresponding ruleset to interpret the response. Values provided in + // the returned ruleset information, such as maxLocationChange, take + // precedence over any conflicting values provided in the ruleset + // information returned in a prior initialization response sent by the + // database to the device. + RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"` + + // SpectrumSchedules: The available spectrum response must contain a + // spectrum schedule list. The list may be empty if spectrum is not + // available. The database may return more than one spectrum schedule to + // represent future changes to the available spectrum. How far in + // advance a schedule may be provided depends on the applicable + // regulatory domain. + SpectrumSchedules []*SpectrumSchedule `json:"spectrumSchedules,omitempty"` + + // Timestamp: The database includes a timestamp of the form + // YYYY-MM-DDThh:mm:ssZ (Internet timestamp format per RFC3339) in its + // available spectrum response. The timestamp should be used by the + // device as a reference for the start and stop times specified in the + // response spectrum schedules. + Timestamp string `json:"timestamp,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsInitRequest struct { + // DeviceDesc: The DeviceDescriptor parameter is required. If the + // database does not support the device or any of the rulesets specified + // in the device descriptor, it must return an UNSUPPORTED error code in + // the error response. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // Location: A device's geolocation is required. + Location *GeoLocation `json:"location,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsInitResponse struct { + // DatabaseChange: A database may include the databaseChange parameter + // to notify a device of a change to its database URI, providing one or + // more alternate database URIs. The device should use this information + // to update its list of pre-configured databases by (only) replacing + // its entry for the responding database with the list of alternate + // URIs. + DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsInitResponse". + Kind string `json:"kind,omitempty"` + + // RulesetInfo: The rulesetInfo parameter must be included in the + // response. This parameter specifies the regulatory domain and + // parameters applicable to that domain. The database must include the + // authority field, which defines the regulatory domain for the location + // specified in the INIT_REQ message. + RulesetInfo *RulesetInfo `json:"rulesetInfo,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsNotifySpectrumUseRequest struct { + // DeviceDesc: Device descriptor information is required in the + // spectrum-use notification message. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // Location: The geolocation of the master device (the device that is + // sending the spectrum-use notification) to the database is required in + // the spectrum-use notification message. + Location *GeoLocation `json:"location,omitempty"` + + // Spectra: A spectrum list is required in the spectrum-use + // notification. The list specifies the spectrum that the device expects + // to use, which includes frequency ranges and maximum power levels. The + // list may be empty if the device decides not to use any of spectrum. + // For consistency, the psdBandwidthHz value should match that from one + // of the spectrum elements in the corresponding available spectrum + // response previously sent to the device by the database. Note that + // maximum power levels in the spectrum element must be expressed as + // power spectral density over the specified psdBandwidthHz value. The + // actual bandwidth to be used (as computed from the start and stop + // frequencies) may be different from the psdBandwidthHz value. As an + // example, when regulatory rules express maximum power spectral density + // in terms of maximum power over any 100 kHz band, then the + // psdBandwidthHz value should be set to 100 kHz, even though the actual + // bandwidth used can be 20 kHz. + Spectra []*SpectrumMessage `json:"spectra,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsNotifySpectrumUseResponse struct { + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsNotifySpectrumUseResponse". + Kind string `json:"kind,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsRegisterRequest struct { + // Antenna: Antenna characteristics, including its height and height + // type. + Antenna *AntennaCharacteristics `json:"antenna,omitempty"` + + // DeviceDesc: A DeviceDescriptor is required. + DeviceDesc *DeviceDescriptor `json:"deviceDesc,omitempty"` + + // DeviceOwner: Device owner information is required. + DeviceOwner *DeviceOwner `json:"deviceOwner,omitempty"` + + // Location: A device's geolocation is required. + Location *GeoLocation `json:"location,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsRegisterResponse struct { + // DatabaseChange: A database may include the databaseChange parameter + // to notify a device of a change to its database URI, providing one or + // more alternate database URIs. The device should use this information + // to update its list of pre-configured databases by (only) replacing + // its entry for the responding database with the list of alternate + // URIs. + DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsRegisterResponse". + Kind string `json:"kind,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsVerifyDeviceRequest struct { + // DeviceDescs: A list of device descriptors, which specifies the slave + // devices to be validated, is required. + DeviceDescs []*DeviceDescriptor `json:"deviceDescs,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type PawsVerifyDeviceResponse struct { + // DatabaseChange: A database may include the databaseChange parameter + // to notify a device of a change to its database URI, providing one or + // more alternate database URIs. The device should use this information + // to update its list of pre-configured databases by (only) replacing + // its entry for the responding database with the list of alternate + // URIs. + DatabaseChange *DbUpdateSpec `json:"databaseChange,omitempty"` + + // DeviceValidities: A device validities list is required in the device + // validation response to report whether each slave device listed in a + // previous device validation request is valid. The number of entries + // must match the number of device descriptors listed in the previous + // device validation request. + DeviceValidities []*DeviceValidity `json:"deviceValidities,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "spectrum#pawsVerifyDeviceResponse". + Kind string `json:"kind,omitempty"` + + // Type: The message type (e.g., INIT_REQ, AVAIL_SPECTRUM_REQ, + // ...). + // + // Required field. + Type string `json:"type,omitempty"` + + // Version: The PAWS version. Must be exactly 1.0. + // + // Required field. + Version string `json:"version,omitempty"` +} + +type RulesetInfo struct { + // Authority: The regulatory domain to which the ruleset belongs is + // required. It must be a 2-letter country code. The device should use + // this to determine additional device behavior required by the + // associated regulatory domain. + Authority string `json:"authority,omitempty"` + + // MaxLocationChange: The maximum location change in meters is required + // in the initialization response, but optional otherwise. When the + // device changes location by more than this specified distance, it must + // contact the database to get the available spectrum for the new + // location. If the device is using spectrum that is no longer + // available, it must immediately cease use of the spectrum under rules + // for database-managed spectrum. If this value is provided within the + // context of an available-spectrum response, it takes precedence over + // the value within the initialization response. + MaxLocationChange float64 `json:"maxLocationChange,omitempty"` + + // MaxPollingSecs: The maximum duration, in seconds, between requests + // for available spectrum. It is required in the initialization + // response, but optional otherwise. The device must contact the + // database to get available spectrum no less frequently than this + // duration. If the new spectrum information indicates that the device + // is using spectrum that is no longer available, it must immediately + // cease use of those frequencies under rules for database-managed + // spectrum. If this value is provided within the context of an + // available-spectrum response, it takes precedence over the value + // within the initialization response. + MaxPollingSecs int64 `json:"maxPollingSecs,omitempty"` + + // RulesetIds: The identifiers of the rulesets supported for the + // device's location. The database should include at least one + // applicable ruleset in the initialization response. The device may use + // the ruleset identifiers to determine parameters to include in + // subsequent requests. Within the context of the available-spectrum + // responses, the database should include the identifier of the ruleset + // that it used to determine the available-spectrum response. If + // included, the device must use the specified ruleset to interpret the + // response. If the device does not support the indicated ruleset, it + // must not operate in the spectrum governed by the ruleset. + RulesetIds []string `json:"rulesetIds,omitempty"` +} + +type SpectrumMessage struct { + // Bandwidth: The bandwidth (in Hertz) for which permissible power + // levels are specified. For example, FCC regulation would require only + // one spectrum specification at 6MHz bandwidth, but Ofcom regulation + // would require two specifications, at 0.1MHz and 8MHz. This parameter + // may be empty if there is no available spectrum. It will be present + // otherwise. + Bandwidth float64 `json:"bandwidth,omitempty"` + + // FrequencyRanges: The list of frequency ranges and permissible power + // levels. The list may be empty if there is no available spectrum, + // otherwise it will be present. + FrequencyRanges []*FrequencyRange `json:"frequencyRanges,omitempty"` +} + +type SpectrumSchedule struct { + // EventTime: The event time expresses when the spectrum profile is + // valid. It will always be present. + EventTime *EventTime `json:"eventTime,omitempty"` + + // Spectra: A list of spectrum messages representing the usable profile. + // It will always be present, but may be empty when there is no + // available spectrum. + Spectra []*SpectrumMessage `json:"spectra,omitempty"` +} + +type Vcard struct { + // Adr: The street address of the entity. + Adr *VcardAddress `json:"adr,omitempty"` + + // Email: An email address that can be used to reach the contact. + Email *VcardTypedText `json:"email,omitempty"` + + // Fn: The full name of the contact person. For example: John A. Smith. + Fn string `json:"fn,omitempty"` + + // Org: The organization associated with the registering entity. + Org *VcardTypedText `json:"org,omitempty"` + + // Tel: A telephone number that can be used to call the contact. + Tel *VcardTelephone `json:"tel,omitempty"` +} + +type VcardAddress struct { + // Code: The postal code associated with the address. For example: + // 94423. + Code string `json:"code,omitempty"` + + // Country: The country name. For example: US. + Country string `json:"country,omitempty"` + + // Locality: The city or local equivalent portion of the address. For + // example: San Jose. + Locality string `json:"locality,omitempty"` + + // Pobox: An optional post office box number. + Pobox string `json:"pobox,omitempty"` + + // Region: The state or local equivalent portion of the address. For + // example: CA. + Region string `json:"region,omitempty"` + + // Street: The street number and name. For example: 123 Any St. + Street string `json:"street,omitempty"` +} + +type VcardTelephone struct { + // Uri: A nested telephone URI of the form: tel:+1-123-456-7890. + Uri string `json:"uri,omitempty"` +} + +type VcardTypedText struct { + // Text: The text string associated with this item. For example, for an + // org field: ACME, inc. For an email field: smith@example.com. + Text string `json:"text,omitempty"` +} + +// method id "spectrum.paws.getSpectrum": + +type PawsGetSpectrumCall struct { + s *Service + pawsgetspectrumrequest *PawsGetSpectrumRequest + opt_ map[string]interface{} +} + +// GetSpectrum: Requests information about the available spectrum for a +// device at a location. Requests from a fixed-mode device must include +// owner information so the device can be registered with the database. +func (r *PawsService) GetSpectrum(pawsgetspectrumrequest *PawsGetSpectrumRequest) *PawsGetSpectrumCall { + c := &PawsGetSpectrumCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsgetspectrumrequest = pawsgetspectrumrequest + return c +} + +func (c *PawsGetSpectrumCall) Do() (*PawsGetSpectrumResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "getSpectrum") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsGetSpectrumResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Requests information about the available spectrum for a device at a location. Requests from a fixed-mode device must include owner information so the device can be registered with the database.", + // "httpMethod": "POST", + // "id": "spectrum.paws.getSpectrum", + // "path": "getSpectrum", + // "request": { + // "$ref": "PawsGetSpectrumRequest" + // }, + // "response": { + // "$ref": "PawsGetSpectrumResponse" + // } + // } + +} + +// method id "spectrum.paws.getSpectrumBatch": + +type PawsGetSpectrumBatchCall struct { + s *Service + pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest + opt_ map[string]interface{} +} + +// GetSpectrumBatch: The Google Spectrum Database does not support batch +// requests, so this method always yields an UNIMPLEMENTED error. +func (r *PawsService) GetSpectrumBatch(pawsgetspectrumbatchrequest *PawsGetSpectrumBatchRequest) *PawsGetSpectrumBatchCall { + c := &PawsGetSpectrumBatchCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsgetspectrumbatchrequest = pawsgetspectrumbatchrequest + return c +} + +func (c *PawsGetSpectrumBatchCall) Do() (*PawsGetSpectrumBatchResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsgetspectrumbatchrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "getSpectrumBatch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsGetSpectrumBatchResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "The Google Spectrum Database does not support batch requests, so this method always yields an UNIMPLEMENTED error.", + // "httpMethod": "POST", + // "id": "spectrum.paws.getSpectrumBatch", + // "path": "getSpectrumBatch", + // "request": { + // "$ref": "PawsGetSpectrumBatchRequest" + // }, + // "response": { + // "$ref": "PawsGetSpectrumBatchResponse" + // } + // } + +} + +// method id "spectrum.paws.init": + +type PawsInitCall struct { + s *Service + pawsinitrequest *PawsInitRequest + opt_ map[string]interface{} +} + +// Init: Initializes the connection between a white space device and the +// database. +func (r *PawsService) Init(pawsinitrequest *PawsInitRequest) *PawsInitCall { + c := &PawsInitCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsinitrequest = pawsinitrequest + return c +} + +func (c *PawsInitCall) Do() (*PawsInitResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsinitrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "init") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsInitResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Initializes the connection between a white space device and the database.", + // "httpMethod": "POST", + // "id": "spectrum.paws.init", + // "path": "init", + // "request": { + // "$ref": "PawsInitRequest" + // }, + // "response": { + // "$ref": "PawsInitResponse" + // } + // } + +} + +// method id "spectrum.paws.notifySpectrumUse": + +type PawsNotifySpectrumUseCall struct { + s *Service + pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest + opt_ map[string]interface{} +} + +// NotifySpectrumUse: Notifies the database that the device has selected +// certain frequency ranges for transmission. Only to be invoked when +// required by the regulator. The Google Spectrum Database does not +// operate in domains that require notification, so this always yields +// an UNIMPLEMENTED error. +func (r *PawsService) NotifySpectrumUse(pawsnotifyspectrumuserequest *PawsNotifySpectrumUseRequest) *PawsNotifySpectrumUseCall { + c := &PawsNotifySpectrumUseCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsnotifyspectrumuserequest = pawsnotifyspectrumuserequest + return c +} + +func (c *PawsNotifySpectrumUseCall) Do() (*PawsNotifySpectrumUseResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsnotifyspectrumuserequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "notifySpectrumUse") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsNotifySpectrumUseResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Notifies the database that the device has selected certain frequency ranges for transmission. Only to be invoked when required by the regulator. The Google Spectrum Database does not operate in domains that require notification, so this always yields an UNIMPLEMENTED error.", + // "httpMethod": "POST", + // "id": "spectrum.paws.notifySpectrumUse", + // "path": "notifySpectrumUse", + // "request": { + // "$ref": "PawsNotifySpectrumUseRequest" + // }, + // "response": { + // "$ref": "PawsNotifySpectrumUseResponse" + // } + // } + +} + +// method id "spectrum.paws.register": + +type PawsRegisterCall struct { + s *Service + pawsregisterrequest *PawsRegisterRequest + opt_ map[string]interface{} +} + +// Register: The Google Spectrum Database implements registration in the +// getSpectrum method. As such this always returns an UNIMPLEMENTED +// error. +func (r *PawsService) Register(pawsregisterrequest *PawsRegisterRequest) *PawsRegisterCall { + c := &PawsRegisterCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsregisterrequest = pawsregisterrequest + return c +} + +func (c *PawsRegisterCall) Do() (*PawsRegisterResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsregisterrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "register") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsRegisterResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "The Google Spectrum Database implements registration in the getSpectrum method. As such this always returns an UNIMPLEMENTED error.", + // "httpMethod": "POST", + // "id": "spectrum.paws.register", + // "path": "register", + // "request": { + // "$ref": "PawsRegisterRequest" + // }, + // "response": { + // "$ref": "PawsRegisterResponse" + // } + // } + +} + +// method id "spectrum.paws.verifyDevice": + +type PawsVerifyDeviceCall struct { + s *Service + pawsverifydevicerequest *PawsVerifyDeviceRequest + opt_ map[string]interface{} +} + +// VerifyDevice: Validates a device for white space use in accordance +// with regulatory rules. The Google Spectrum Database does not support +// master/slave configurations, so this always yields an UNIMPLEMENTED +// error. +func (r *PawsService) VerifyDevice(pawsverifydevicerequest *PawsVerifyDeviceRequest) *PawsVerifyDeviceCall { + c := &PawsVerifyDeviceCall{s: r.s, opt_: make(map[string]interface{})} + c.pawsverifydevicerequest = pawsverifydevicerequest + return c +} + +func (c *PawsVerifyDeviceCall) Do() (*PawsVerifyDeviceResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.pawsverifydevicerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "verifyDevice") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(PawsVerifyDeviceResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Validates a device for white space use in accordance with regulatory rules. The Google Spectrum Database does not support master/slave configurations, so this always yields an UNIMPLEMENTED error.", + // "httpMethod": "POST", + // "id": "spectrum.paws.verifyDevice", + // "path": "verifyDevice", + // "request": { + // "$ref": "PawsVerifyDeviceRequest" + // }, + // "response": { + // "$ref": "PawsVerifyDeviceResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-api.json b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-api.json new file mode 100644 index 0000000000000..0749584ab1ae8 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-api.json @@ -0,0 +1,1183 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/rzbC1mbXRnaKYIRTl-o1XFsAXnM\"", + "discoveryVersion": "v1", + "id": "sqladmin:v1beta1", + "name": "sqladmin", + "canonicalName": "SQL Admin", + "version": "v1beta1", + "title": "Cloud SQL Administration API", + "description": "API for Cloud SQL database instance management.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/cloud-sql/docs/admin-api/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/sql/v1beta1/", + "basePath": "/sql/v1beta1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "sql/v1beta1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + }, + "https://www.googleapis.com/auth/sqlservice.admin": { + "description": "Manage your Google SQL Service instances" + } + } + } + }, + "schemas": { + "BackupConfiguration": { + "id": "BackupConfiguration", + "type": "object", + "description": "Database instance backup configuration.", + "properties": { + "enabled": { + "type": "boolean", + "description": "Whether this configuration is enabled." + }, + "id": { + "type": "string", + "description": "Identifier for this configuration. This gets generated automatically when a backup configuration is created." + }, + "kind": { + "type": "string", + "description": "This is always sql#backupConfiguration.", + "default": "sql#backupConfiguration" + }, + "startTime": { + "type": "string", + "description": "Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM." + } + } + }, + "BackupRun": { + "id": "BackupRun", + "type": "object", + "description": "A database instance backup run resource.", + "properties": { + "backupConfiguration": { + "type": "string", + "description": "Backup Configuration identifier." + }, + "dueTime": { + "type": "string", + "description": "The due time of this run in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "endTime": { + "type": "string", + "description": "The time the backup operation completed in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "enqueuedTime": { + "type": "string", + "description": "The time the run was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "error": { + "$ref": "OperationError", + "description": "Information about why the backup operation failed. This is only present if the run has the FAILED status." + }, + "instance": { + "type": "string", + "description": "Name of the database instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#backupRun.", + "default": "sql#backupRun" + }, + "startTime": { + "type": "string", + "description": "The time the backup operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "The status of this run." + } + } + }, + "BackupRunsListResponse": { + "id": "BackupRunsListResponse", + "type": "object", + "description": "Backup run list results.", + "properties": { + "items": { + "type": "array", + "description": "A list of backup runs in reverse chronological order of the enqueued time.", + "items": { + "$ref": "BackupRun" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#backupRunsList.", + "default": "sql#backupRunsList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "DatabaseInstance": { + "id": "DatabaseInstance", + "type": "object", + "description": "A Cloud SQL instance resource.", + "properties": { + "currentDiskSize": { + "type": "string", + "description": "The current disk usage of the instance in bytes.", + "format": "int64" + }, + "databaseVersion": { + "type": "string", + "description": "The database engine type and version, for example MYSQL_5_5 for MySQL 5.5." + }, + "etag": { + "type": "string", + "description": "Etag for this resource - a version number for the settings object in this resource. This field has no effect when passed as a request parameter. Instead, the contents of this field should be passed in an 'If-Match' http header for use in optimistic locking.", + "annotations": { + "required": [ + "sql.instances.update" + ] + } + }, + "instance": { + "type": "string", + "description": "Name of the Cloud SQL instance. This does not include the project ID.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + }, + "kind": { + "type": "string", + "description": "This is always sql#instance.", + "default": "sql#instance" + }, + "maxDiskSize": { + "type": "string", + "description": "The maximum disk size of the instance in bytes.", + "format": "int64" + }, + "project": { + "type": "string", + "description": "The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + }, + "region": { + "type": "string", + "description": "The geographical region. Can be us-east1, us-central or europe-west1. Defaults to us-central. The region can not be changed after instance creation." + }, + "settings": { + "$ref": "Settings", + "description": "The user settings." + }, + "state": { + "type": "string", + "description": "The current serving state of the Cloud SQL instance. This can be one of the following.\nRUNNABLE: The instance is running, or is ready to run when accessed.\nSUSPENDED: The instance is not available, for example due to problems with billing.\nPENDING_CREATE: The instance is being created.\nMAINTENANCE: The instance is down for maintenance.\nUNKNOWN_STATE: The state of the instance is unknown." + } + } + }, + "ExportContext": { + "id": "ExportContext", + "type": "object", + "description": "Database instance export context.", + "properties": { + "database": { + "type": "array", + "description": "Databases (for example, guestbook) from which the export is made. If unspecified, all databases are exported.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#exportContext.", + "default": "sql#exportContext" + }, + "table": { + "type": "array", + "description": "Tables to export, or that were exported, from the specified database. If you specify tables, specify one and only one database.", + "items": { + "type": "string" + } + }, + "uri": { + "type": "string", + "description": "The path to the file in Google Cloud Storage where the export will be stored, or where it was already stored. The URI is in the form gs://bucketName/fileName. If the file already exists, the operation fails. If the filename ends with .gz, the contents are compressed." + } + } + }, + "ImportContext": { + "id": "ImportContext", + "type": "object", + "description": "Database instance import context.", + "properties": { + "database": { + "type": "string", + "description": "The database (for example, guestbook) to which the import is made. If not set, it is assumed that the database is specified in the file to be imported." + }, + "kind": { + "type": "string", + "description": "This is always sql#importContext.", + "default": "sql#importContext" + }, + "uri": { + "type": "array", + "description": "A path to the MySQL dump file in Google Cloud Storage from which the import is made. The URI is in the form gs://bucketName/fileName. Compressed gzip files (.gz) are also supported.", + "items": { + "type": "string" + } + } + } + }, + "InstanceOperation": { + "id": "InstanceOperation", + "type": "object", + "description": "An Operations resource contains information about database instance operations such as create, delete, and restart. Operations resources are created in response to operations that were initiated; you never create them directly.", + "properties": { + "endTime": { + "type": "string", + "description": "The time this operation finished in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "enqueuedTime": { + "type": "string", + "description": "The time this operation was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "error": { + "type": "array", + "description": "The error(s) encountered by this operation. Only set if the operation results in an error.", + "items": { + "$ref": "OperationError" + } + }, + "exportContext": { + "$ref": "ExportContext", + "description": "The context for export operation, if applicable." + }, + "importContext": { + "$ref": "ImportContext", + "description": "The context for import operation, if applicable." + }, + "instance": { + "type": "string", + "description": "Name of the database instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#instanceOperation.", + "default": "sql#instanceOperation" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + }, + "operationType": { + "type": "string", + "description": "The type of the operation. Valid values are CREATE, DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, RESTORE_VOLUME." + }, + "startTime": { + "type": "string", + "description": "The time this operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "state": { + "type": "string", + "description": "The state of an operation. Valid values are PENDING, RUNNING, DONE, UNKNOWN." + }, + "userEmailAddress": { + "type": "string", + "description": "The email address of the user who initiated this operation." + } + } + }, + "InstancesDeleteResponse": { + "id": "InstancesDeleteResponse", + "type": "object", + "description": "Database instance delete response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesDelete.", + "default": "sql#instancesDelete" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesExportRequest": { + "id": "InstancesExportRequest", + "type": "object", + "description": "Database instance export request.", + "properties": { + "exportContext": { + "$ref": "ExportContext", + "description": "Contains details about the export operation." + } + } + }, + "InstancesExportResponse": { + "id": "InstancesExportResponse", + "type": "object", + "description": "Database instance export response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesExport.", + "default": "sql#instancesExport" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesImportRequest": { + "id": "InstancesImportRequest", + "type": "object", + "description": "Database instance import request.", + "properties": { + "importContext": { + "$ref": "ImportContext", + "description": "Contains details about the import operation." + } + } + }, + "InstancesImportResponse": { + "id": "InstancesImportResponse", + "type": "object", + "description": "Database instance import response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesImport.", + "default": "sql#instancesImport" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesInsertResponse": { + "id": "InstancesInsertResponse", + "type": "object", + "description": "Database instance insert response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesInsert.", + "default": "sql#instancesInsert" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesListResponse": { + "id": "InstancesListResponse", + "type": "object", + "description": "Database instances list response.", + "properties": { + "items": { + "type": "array", + "description": "List of database instance resources.", + "items": { + "$ref": "DatabaseInstance" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#instancesList.", + "default": "sql#instancesList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "InstancesRestartResponse": { + "id": "InstancesRestartResponse", + "type": "object", + "description": "Database instance restart response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesRestart.", + "default": "sql#instancesRestart" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesRestoreBackupResponse": { + "id": "InstancesRestoreBackupResponse", + "type": "object", + "description": "Database instance restore backup response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesRestoreBackup.", + "default": "sql#instancesRestoreBackup" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesUpdateResponse": { + "id": "InstancesUpdateResponse", + "type": "object", + "description": "Database instance update response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesUpdate.", + "default": "sql#instancesUpdate" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve information about the operation." + } + } + }, + "OperationError": { + "id": "OperationError", + "type": "object", + "description": "Database instance operation error.", + "properties": { + "code": { + "type": "string", + "description": "Identifies the specific error that occurred." + }, + "kind": { + "type": "string", + "description": "This is always sql#operationError.", + "default": "sql#operationError" + } + } + }, + "OperationsListResponse": { + "id": "OperationsListResponse", + "type": "object", + "description": "Database instance list operations response.", + "properties": { + "items": { + "type": "array", + "description": "List of operation resources.", + "items": { + "$ref": "InstanceOperation" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#operationsList.", + "default": "sql#operationsList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "Settings": { + "id": "Settings", + "type": "object", + "description": "Database instance settings.", + "properties": { + "activationPolicy": { + "type": "string", + "description": "The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.\nALWAYS: The instance should always be active.\nNEVER: The instance should never be activated.\nON_DEMAND: The instance is activated upon receiving requests." + }, + "authorizedGaeApplications": { + "type": "array", + "description": "The AppEngine app ids that can access this instance.", + "items": { + "type": "string" + } + }, + "backupConfiguration": { + "type": "array", + "description": "The daily backup configuration for the instance.", + "items": { + "$ref": "BackupConfiguration" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#settings.", + "default": "sql#settings" + }, + "pricingPlan": { + "type": "string", + "description": "The pricing plan for this instance. This can be either PER_USE or PACKAGE." + }, + "replicationType": { + "type": "string", + "description": "The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS." + }, + "tier": { + "type": "string", + "description": "The tier of service for this instance, for example D1, D2. For more information, see pricing.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + } + } + }, + "Tier": { + "id": "Tier", + "type": "object", + "description": "A Google Cloud SQL service tier resource.", + "properties": { + "DiskQuota": { + "type": "string", + "description": "The maximum disk size of this tier in bytes.", + "format": "int64" + }, + "RAM": { + "type": "string", + "description": "The maximum RAM usage of this tier in bytes.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always sql#tier.", + "default": "sql#tier" + }, + "region": { + "type": "array", + "description": "The applicable regions for this tier. Can be us-east1 and europe-west1.", + "items": { + "type": "string" + } + }, + "tier": { + "type": "string", + "description": "An identifier for the service tier, for example D1, D2 etc. For related information, see Pricing." + } + } + }, + "TiersListResponse": { + "id": "TiersListResponse", + "type": "object", + "description": "Tiers list response.", + "properties": { + "items": { + "type": "array", + "description": "List of tiers.", + "items": { + "$ref": "Tier" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#tiersList.", + "default": "sql#tiersList" + } + } + } + }, + "resources": { + "backupRuns": { + "methods": { + "get": { + "id": "sql.backupRuns.get", + "path": "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}", + "httpMethod": "GET", + "description": "Retrieves a resource containing information about a backup run.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "path" + }, + "dueTime": { + "type": "string", + "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration", + "dueTime" + ], + "response": { + "$ref": "BackupRun" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.backupRuns.list", + "path": "projects/{project}/instances/{instance}/backupRuns", + "httpMethod": "GET", + "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of backup runs per response.", + "format": "int32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration" + ], + "response": { + "$ref": "BackupRunsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "instances": { + "methods": { + "delete": { + "id": "sql.instances.delete", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be deleted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "InstancesDeleteResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "export": { + "id": "sql.instances.export", + "path": "projects/{project}/instances/{instance}/export", + "httpMethod": "POST", + "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be exported.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "InstancesExportRequest" + }, + "response": { + "$ref": "InstancesExportResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "id": "sql.instances.get", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "GET", + "description": "Retrieves a resource containing information about a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "DatabaseInstance" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "import": { + "id": "sql.instances.import", + "path": "projects/{project}/instances/{instance}/import", + "httpMethod": "POST", + "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "InstancesImportRequest" + }, + "response": { + "$ref": "InstancesImportResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "insert": { + "id": "sql.instances.insert", + "path": "projects/{project}/instances", + "httpMethod": "POST", + "description": "Creates a new Cloud SQL instance.", + "parameters": { + "project": { + "type": "string", + "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesInsertResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.instances.list", + "path": "projects/{project}/instances", + "httpMethod": "GET", + "description": "Lists instances under a given project in the alphabetical order of the instance name.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of results to return per response.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project for which to list Cloud SQL instances.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstancesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "patch": { + "id": "sql.instances.patch", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "PATCH", + "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesUpdateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "restart": { + "id": "sql.instances.restart", + "path": "projects/{project}/instances/{instance}/restart", + "httpMethod": "POST", + "description": "Restarts a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be restarted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "InstancesRestartResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "restoreBackup": { + "id": "sql.instances.restoreBackup", + "path": "projects/{project}/instances/{instance}/restoreBackup", + "httpMethod": "POST", + "description": "Restores a backup of a Cloud SQL instance.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "query" + }, + "dueTime": { + "type": "string", + "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration", + "dueTime" + ], + "response": { + "$ref": "InstancesRestoreBackupResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "update": { + "id": "sql.instances.update", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "PUT", + "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "etagRequired": true, + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesUpdateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "operations": { + "methods": { + "get": { + "id": "sql.operations.get", + "path": "projects/{project}/instances/{instance}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves an instance operation that has been performed on an instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "operation": { + "type": "string", + "description": "Instance operation ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "operation" + ], + "response": { + "$ref": "InstanceOperation" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.operations.list", + "path": "projects/{project}/instances/{instance}/operations", + "httpMethod": "GET", + "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of operations per response.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "OperationsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "tiers": { + "methods": { + "list": { + "id": "sql.tiers.list", + "path": "tiers", + "httpMethod": "GET", + "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.", + "response": { + "$ref": "TiersListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-gen.go b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-gen.go new file mode 100644 index 0000000000000..a6c8714d3b499 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta1/sqladmin-gen.go @@ -0,0 +1,1775 @@ +// Package sqladmin provides access to the Cloud SQL Administration API. +// +// See https://developers.google.com/cloud-sql/docs/admin-api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/sqladmin/v1beta1" +// ... +// sqladminService, err := sqladmin.New(oauthHttpClient) +package sqladmin + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "sqladmin:v1beta1" +const apiName = "sqladmin" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/sql/v1beta1/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" + + // Manage your Google SQL Service instances + SqlserviceAdminScope = "https://www.googleapis.com/auth/sqlservice.admin" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BackupRuns = NewBackupRunsService(s) + s.Instances = NewInstancesService(s) + s.Operations = NewOperationsService(s) + s.Tiers = NewTiersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BackupRuns *BackupRunsService + + Instances *InstancesService + + Operations *OperationsService + + Tiers *TiersService +} + +func NewBackupRunsService(s *Service) *BackupRunsService { + rs := &BackupRunsService{s: s} + return rs +} + +type BackupRunsService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewOperationsService(s *Service) *OperationsService { + rs := &OperationsService{s: s} + return rs +} + +type OperationsService struct { + s *Service +} + +func NewTiersService(s *Service) *TiersService { + rs := &TiersService{s: s} + return rs +} + +type TiersService struct { + s *Service +} + +type BackupConfiguration struct { + // Enabled: Whether this configuration is enabled. + Enabled bool `json:"enabled,omitempty"` + + // Id: Identifier for this configuration. This gets generated + // automatically when a backup configuration is created. + Id string `json:"id,omitempty"` + + // Kind: This is always sql#backupConfiguration. + Kind string `json:"kind,omitempty"` + + // StartTime: Start time for the daily backup configuration in UTC + // timezone in the 24 hour format - HH:MM. + StartTime string `json:"startTime,omitempty"` +} + +type BackupRun struct { + // BackupConfiguration: Backup Configuration identifier. + BackupConfiguration string `json:"backupConfiguration,omitempty"` + + // DueTime: The due time of this run in UTC timezone in RFC 3339 format, + // for example 2012-11-15T16:19:00.094Z. + DueTime string `json:"dueTime,omitempty"` + + // EndTime: The time the backup operation completed in UTC timezone in + // RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + EndTime string `json:"endTime,omitempty"` + + // EnqueuedTime: The time the run was enqueued in UTC timezone in RFC + // 3339 format, for example 2012-11-15T16:19:00.094Z. + EnqueuedTime string `json:"enqueuedTime,omitempty"` + + // Error: Information about why the backup operation failed. This is + // only present if the run has the FAILED status. + Error *OperationError `json:"error,omitempty"` + + // Instance: Name of the database instance. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#backupRun. + Kind string `json:"kind,omitempty"` + + // StartTime: The time the backup operation actually started in UTC + // timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + StartTime string `json:"startTime,omitempty"` + + // Status: The status of this run. + Status string `json:"status,omitempty"` +} + +type BackupRunsListResponse struct { + // Items: A list of backup runs in reverse chronological order of the + // enqueued time. + Items []*BackupRun `json:"items,omitempty"` + + // Kind: This is always sql#backupRunsList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type DatabaseInstance struct { + // CurrentDiskSize: The current disk usage of the instance in bytes. + CurrentDiskSize int64 `json:"currentDiskSize,omitempty,string"` + + // DatabaseVersion: The database engine type and version, for example + // MYSQL_5_5 for MySQL 5.5. + DatabaseVersion string `json:"databaseVersion,omitempty"` + + // Etag: Etag for this resource - a version number for the settings + // object in this resource. This field has no effect when passed as a + // request parameter. Instead, the contents of this field should be + // passed in an 'If-Match' http header for use in optimistic locking. + Etag string `json:"etag,omitempty"` + + // Instance: Name of the Cloud SQL instance. This does not include the + // project ID. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#instance. + Kind string `json:"kind,omitempty"` + + // MaxDiskSize: The maximum disk size of the instance in bytes. + MaxDiskSize int64 `json:"maxDiskSize,omitempty,string"` + + // Project: The project ID of the project containing the Cloud SQL + // instance. The Google apps domain is prefixed if applicable. + Project string `json:"project,omitempty"` + + // Region: The geographical region. Can be us-east1, us-central or + // europe-west1. Defaults to us-central. The region can not be changed + // after instance creation. + Region string `json:"region,omitempty"` + + // Settings: The user settings. + Settings *Settings `json:"settings,omitempty"` + + // State: The current serving state of the Cloud SQL instance. This can + // be one of the following. + // RUNNABLE: The instance is running, or is + // ready to run when accessed. + // SUSPENDED: The instance is not available, + // for example due to problems with billing. + // PENDING_CREATE: The + // instance is being created. + // MAINTENANCE: The instance is down for + // maintenance. + // UNKNOWN_STATE: The state of the instance is unknown. + State string `json:"state,omitempty"` +} + +type ExportContext struct { + // Database: Databases (for example, guestbook) from which the export is + // made. If unspecified, all databases are exported. + Database []string `json:"database,omitempty"` + + // Kind: This is always sql#exportContext. + Kind string `json:"kind,omitempty"` + + // Table: Tables to export, or that were exported, from the specified + // database. If you specify tables, specify one and only one database. + Table []string `json:"table,omitempty"` + + // Uri: The path to the file in Google Cloud Storage where the export + // will be stored, or where it was already stored. The URI is in the + // form gs://bucketName/fileName. If the file already exists, the + // operation fails. If the filename ends with .gz, the contents are + // compressed. + Uri string `json:"uri,omitempty"` +} + +type ImportContext struct { + // Database: The database (for example, guestbook) to which the import + // is made. If not set, it is assumed that the database is specified in + // the file to be imported. + Database string `json:"database,omitempty"` + + // Kind: This is always sql#importContext. + Kind string `json:"kind,omitempty"` + + // Uri: A path to the MySQL dump file in Google Cloud Storage from which + // the import is made. The URI is in the form gs://bucketName/fileName. + // Compressed gzip files (.gz) are also supported. + Uri []string `json:"uri,omitempty"` +} + +type InstanceOperation struct { + // EndTime: The time this operation finished in UTC timezone in RFC 3339 + // format, for example 2012-11-15T16:19:00.094Z. + EndTime string `json:"endTime,omitempty"` + + // EnqueuedTime: The time this operation was enqueued in UTC timezone in + // RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + EnqueuedTime string `json:"enqueuedTime,omitempty"` + + // Error: The error(s) encountered by this operation. Only set if the + // operation results in an error. + Error []*OperationError `json:"error,omitempty"` + + // ExportContext: The context for export operation, if applicable. + ExportContext *ExportContext `json:"exportContext,omitempty"` + + // ImportContext: The context for import operation, if applicable. + ImportContext *ImportContext `json:"importContext,omitempty"` + + // Instance: Name of the database instance. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#instanceOperation. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` + + // OperationType: The type of the operation. Valid values are CREATE, + // DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, + // RESTORE_VOLUME. + OperationType string `json:"operationType,omitempty"` + + // StartTime: The time this operation actually started in UTC timezone + // in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + StartTime string `json:"startTime,omitempty"` + + // State: The state of an operation. Valid values are PENDING, RUNNING, + // DONE, UNKNOWN. + State string `json:"state,omitempty"` + + // UserEmailAddress: The email address of the user who initiated this + // operation. + UserEmailAddress string `json:"userEmailAddress,omitempty"` +} + +type InstancesDeleteResponse struct { + // Kind: This is always sql#instancesDelete. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesExportRequest struct { + // ExportContext: Contains details about the export operation. + ExportContext *ExportContext `json:"exportContext,omitempty"` +} + +type InstancesExportResponse struct { + // Kind: This is always sql#instancesExport. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesImportRequest struct { + // ImportContext: Contains details about the import operation. + ImportContext *ImportContext `json:"importContext,omitempty"` +} + +type InstancesImportResponse struct { + // Kind: This is always sql#instancesImport. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesInsertResponse struct { + // Kind: This is always sql#instancesInsert. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesListResponse struct { + // Items: List of database instance resources. + Items []*DatabaseInstance `json:"items,omitempty"` + + // Kind: This is always sql#instancesList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type InstancesRestartResponse struct { + // Kind: This is always sql#instancesRestart. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesRestoreBackupResponse struct { + // Kind: This is always sql#instancesRestoreBackup. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesUpdateResponse struct { + // Kind: This is always sql#instancesUpdate. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve information about the operation. + Operation string `json:"operation,omitempty"` +} + +type OperationError struct { + // Code: Identifies the specific error that occurred. + Code string `json:"code,omitempty"` + + // Kind: This is always sql#operationError. + Kind string `json:"kind,omitempty"` +} + +type OperationsListResponse struct { + // Items: List of operation resources. + Items []*InstanceOperation `json:"items,omitempty"` + + // Kind: This is always sql#operationsList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Settings struct { + // ActivationPolicy: The activation policy for this instance. This + // specifies when the instance should be activated and is applicable + // only when the instance state is RUNNABLE. This can be one of the + // following. + // ALWAYS: The instance should always be active. + // NEVER: The + // instance should never be activated. + // ON_DEMAND: The instance is + // activated upon receiving requests. + ActivationPolicy string `json:"activationPolicy,omitempty"` + + // AuthorizedGaeApplications: The AppEngine app ids that can access this + // instance. + AuthorizedGaeApplications []string `json:"authorizedGaeApplications,omitempty"` + + // BackupConfiguration: The daily backup configuration for the instance. + BackupConfiguration []*BackupConfiguration `json:"backupConfiguration,omitempty"` + + // Kind: This is always sql#settings. + Kind string `json:"kind,omitempty"` + + // PricingPlan: The pricing plan for this instance. This can be either + // PER_USE or PACKAGE. + PricingPlan string `json:"pricingPlan,omitempty"` + + // ReplicationType: The type of replication this instance uses. This can + // be either ASYNCHRONOUS or SYNCHRONOUS. + ReplicationType string `json:"replicationType,omitempty"` + + // Tier: The tier of service for this instance, for example D1, D2. For + // more information, see pricing. + Tier string `json:"tier,omitempty"` +} + +type Tier struct { + // DiskQuota: The maximum disk size of this tier in bytes. + DiskQuota int64 `json:"DiskQuota,omitempty,string"` + + // RAM: The maximum RAM usage of this tier in bytes. + RAM int64 `json:"RAM,omitempty,string"` + + // Kind: This is always sql#tier. + Kind string `json:"kind,omitempty"` + + // Region: The applicable regions for this tier. Can be us-east1 and + // europe-west1. + Region []string `json:"region,omitempty"` + + // Tier: An identifier for the service tier, for example D1, D2 etc. For + // related information, see Pricing. + Tier string `json:"tier,omitempty"` +} + +type TiersListResponse struct { + // Items: List of tiers. + Items []*Tier `json:"items,omitempty"` + + // Kind: This is always sql#tiersList. + Kind string `json:"kind,omitempty"` +} + +// method id "sql.backupRuns.get": + +type BackupRunsGetCall struct { + s *Service + project string + instance string + backupConfiguration string + dueTime string + opt_ map[string]interface{} +} + +// Get: Retrieves a resource containing information about a backup run. +func (r *BackupRunsService) Get(project string, instance string, backupConfiguration string, dueTime string) *BackupRunsGetCall { + c := &BackupRunsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfiguration = backupConfiguration + c.dueTime = dueTime + return c +} + +func (c *BackupRunsGetCall) Do() (*BackupRun, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("dueTime", fmt.Sprintf("%v", c.dueTime)) + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{backupConfiguration}", url.QueryEscape(c.backupConfiguration), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BackupRun) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a resource containing information about a backup run.", + // "httpMethod": "GET", + // "id": "sql.backupRuns.get", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration", + // "dueTime" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "dueTime": { + // "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}", + // "response": { + // "$ref": "BackupRun" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.backupRuns.list": + +type BackupRunsListCall struct { + s *Service + project string + instance string + backupConfiguration string + opt_ map[string]interface{} +} + +// List: Lists all backup runs associated with a given instance and +// configuration in the reverse chronological order of the enqueued +// time. +func (r *BackupRunsService) List(project string, instance string, backupConfiguration string) *BackupRunsListCall { + c := &BackupRunsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfiguration = backupConfiguration + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of backup runs per response. +func (c *BackupRunsListCall) MaxResults(maxResults int64) *BackupRunsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *BackupRunsListCall) PageToken(pageToken string) *BackupRunsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *BackupRunsListCall) Do() (*BackupRunsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfiguration)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/backupRuns") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BackupRunsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.", + // "httpMethod": "GET", + // "id": "sql.backupRuns.list", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of backup runs per response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/backupRuns", + // "response": { + // "$ref": "BackupRunsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes a Cloud SQL instance. +func (r *InstancesService) Delete(project string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*InstancesDeleteResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesDeleteResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a Cloud SQL instance.", + // "httpMethod": "DELETE", + // "id": "sql.instances.delete", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "response": { + // "$ref": "InstancesDeleteResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.export": + +type InstancesExportCall struct { + s *Service + project string + instance string + instancesexportrequest *InstancesExportRequest + opt_ map[string]interface{} +} + +// Export: Exports data from a Cloud SQL instance to a Google Cloud +// Storage bucket as a MySQL dump file. +func (r *InstancesService) Export(project string, instance string, instancesexportrequest *InstancesExportRequest) *InstancesExportCall { + c := &InstancesExportCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.instancesexportrequest = instancesexportrequest + return c +} + +func (c *InstancesExportCall) Do() (*InstancesExportResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesexportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/export") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesExportResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.", + // "httpMethod": "POST", + // "id": "sql.instances.export", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be exported.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/export", + // "request": { + // "$ref": "InstancesExportRequest" + // }, + // "response": { + // "$ref": "InstancesExportResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "sql.instances.get": + +type InstancesGetCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Get: Retrieves a resource containing information about a Cloud SQL +// instance. +func (r *InstancesService) Get(project string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*DatabaseInstance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DatabaseInstance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a resource containing information about a Cloud SQL instance.", + // "httpMethod": "GET", + // "id": "sql.instances.get", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "response": { + // "$ref": "DatabaseInstance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.import": + +type InstancesImportCall struct { + s *Service + project string + instance string + instancesimportrequest *InstancesImportRequest + opt_ map[string]interface{} +} + +// Import: Imports data into a Cloud SQL instance from a MySQL dump file +// in Google Cloud Storage. +func (r *InstancesService) Import(project string, instance string, instancesimportrequest *InstancesImportRequest) *InstancesImportCall { + c := &InstancesImportCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.instancesimportrequest = instancesimportrequest + return c +} + +func (c *InstancesImportCall) Do() (*InstancesImportResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesimportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/import") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesImportResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.", + // "httpMethod": "POST", + // "id": "sql.instances.import", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/import", + // "request": { + // "$ref": "InstancesImportRequest" + // }, + // "response": { + // "$ref": "InstancesImportResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "sql.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Insert: Creates a new Cloud SQL instance. +func (r *InstancesService) Insert(project string, databaseinstance *DatabaseInstance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesInsertCall) Do() (*InstancesInsertResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesInsertResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesInsertResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.list": + +type InstancesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Lists instances under a given project in the alphabetical order +// of the instance name. +func (r *InstancesService) List(project string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of results to return per response. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstancesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists instances under a given project in the alphabetical order of the instance name.", + // "httpMethod": "GET", + // "id": "sql.instances.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "maxResults": { + // "description": "The maximum number of results to return per response.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project for which to list Cloud SQL instances.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances", + // "response": { + // "$ref": "InstancesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.patch": + +type InstancesPatchCall struct { + s *Service + project string + instance string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Patch: Updates settings of a Cloud SQL instance. Caution: This is not +// a partial update, so you must include values for all the settings +// that you want to retain. For partial updates, use patch.. This method +// supports patch semantics. +func (r *InstancesService) Patch(project string, instance string, databaseinstance *DatabaseInstance) *InstancesPatchCall { + c := &InstancesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesPatchCall) Do() (*InstancesUpdateResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesUpdateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "sql.instances.patch", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesUpdateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.restart": + +type InstancesRestartCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Restart: Restarts a Cloud SQL instance. +func (r *InstancesService) Restart(project string, instance string) *InstancesRestartCall { + c := &InstancesRestartCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesRestartCall) Do() (*InstancesRestartResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restart") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesRestartResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Restarts a Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.restart", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be restarted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/restart", + // "response": { + // "$ref": "InstancesRestartResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.restoreBackup": + +type InstancesRestoreBackupCall struct { + s *Service + project string + instance string + backupConfigurationid string + dueTime string + opt_ map[string]interface{} +} + +// RestoreBackup: Restores a backup of a Cloud SQL instance. +func (r *InstancesService) RestoreBackup(project string, instance string, backupConfigurationid string, dueTime string) *InstancesRestoreBackupCall { + c := &InstancesRestoreBackupCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfigurationid = backupConfigurationid + c.dueTime = dueTime + return c +} + +func (c *InstancesRestoreBackupCall) Do() (*InstancesRestoreBackupResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfigurationid)) + params.Set("dueTime", fmt.Sprintf("%v", c.dueTime)) + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restoreBackup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesRestoreBackupResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Restores a backup of a Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.restoreBackup", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration", + // "dueTime" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "dueTime": { + // "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/restoreBackup", + // "response": { + // "$ref": "InstancesRestoreBackupResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.update": + +type InstancesUpdateCall struct { + s *Service + project string + instance string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Update: Updates settings of a Cloud SQL instance. Caution: This is +// not a partial update, so you must include values for all the settings +// that you want to retain. For partial updates, use patch. +func (r *InstancesService) Update(project string, instance string, databaseinstance *DatabaseInstance) *InstancesUpdateCall { + c := &InstancesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesUpdateCall) Do() (*InstancesUpdateResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesUpdateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.", + // "etagRequired": true, + // "httpMethod": "PUT", + // "id": "sql.instances.update", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesUpdateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.operations.get": + +type OperationsGetCall struct { + s *Service + project string + instance string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves an instance operation that has been performed on an +// instance. +func (r *OperationsService) Get(project string, instance string, operation string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.operation = operation + return c +} + +func (c *OperationsGetCall) Do() (*InstanceOperation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceOperation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves an instance operation that has been performed on an instance.", + // "httpMethod": "GET", + // "id": "sql.operations.get", + // "parameterOrder": [ + // "project", + // "instance", + // "operation" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "operation": { + // "description": "Instance operation ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/operations/{operation}", + // "response": { + // "$ref": "InstanceOperation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.operations.list": + +type OperationsListCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// List: Lists all instance operations that have been performed on the +// given Cloud SQL instance in the reverse chronological order of the +// start time. +func (r *OperationsService) List(project string, instance string) *OperationsListCall { + c := &OperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of operations per response. +func (c *OperationsListCall) MaxResults(maxResults int64) *OperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *OperationsListCall) Do() (*OperationsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.", + // "httpMethod": "GET", + // "id": "sql.operations.list", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of operations per response.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/operations", + // "response": { + // "$ref": "OperationsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.tiers.list": + +type TiersListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Lists all available service tiers for Google Cloud SQL, for +// example D1, D2. For related information, see Pricing. +func (r *TiersService) List() *TiersListCall { + c := &TiersListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *TiersListCall) Do() (*TiersListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "tiers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TiersListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.", + // "httpMethod": "GET", + // "id": "sql.tiers.list", + // "path": "tiers", + // "response": { + // "$ref": "TiersListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-api.json b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-api.json new file mode 100644 index 0000000000000..216f1de2e373a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-api.json @@ -0,0 +1,1865 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/CD7bDR9g9q-XnWpJ4P4rUZfTgmg\"", + "discoveryVersion": "v1", + "id": "sqladmin:v1beta3", + "name": "sqladmin", + "canonicalName": "SQL Admin", + "version": "v1beta3", + "title": "Cloud SQL Administration API", + "description": "API for Cloud SQL database instance management.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "https://developers.google.com/cloud-sql/docs/admin-api/", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/sql/v1beta3/", + "basePath": "/sql/v1beta3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "sql/v1beta3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/cloud-platform": { + "description": "View and manage your data across Google Cloud Platform services" + }, + "https://www.googleapis.com/auth/sqlservice.admin": { + "description": "Manage your Google SQL Service instances" + } + } + } + }, + "schemas": { + "BackupConfiguration": { + "id": "BackupConfiguration", + "type": "object", + "description": "Database instance backup configuration.", + "properties": { + "binaryLogEnabled": { + "type": "boolean", + "description": "Whether binary log is enabled. If backup configuration is disabled, binary log must be disabled as well." + }, + "enabled": { + "type": "boolean", + "description": "Whether this configuration is enabled." + }, + "id": { + "type": "string", + "description": "Identifier for this configuration. This gets generated automatically when a backup configuration is created." + }, + "kind": { + "type": "string", + "description": "This is always sql#backupConfiguration.", + "default": "sql#backupConfiguration" + }, + "startTime": { + "type": "string", + "description": "Start time for the daily backup configuration in UTC timezone in the 24 hour format - HH:MM." + } + } + }, + "BackupRun": { + "id": "BackupRun", + "type": "object", + "description": "A database instance backup run resource.", + "properties": { + "backupConfiguration": { + "type": "string", + "description": "Backup Configuration identifier." + }, + "dueTime": { + "type": "string", + "description": "The due time of this run in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "endTime": { + "type": "string", + "description": "The time the backup operation completed in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "enqueuedTime": { + "type": "string", + "description": "The time the run was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "error": { + "$ref": "OperationError", + "description": "Information about why the backup operation failed. This is only present if the run has the FAILED status." + }, + "instance": { + "type": "string", + "description": "Name of the database instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#backupRun.", + "default": "sql#backupRun" + }, + "startTime": { + "type": "string", + "description": "The time the backup operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "The status of this run." + } + } + }, + "BackupRunsListResponse": { + "id": "BackupRunsListResponse", + "type": "object", + "description": "Backup run list results.", + "properties": { + "items": { + "type": "array", + "description": "A list of backup runs in reverse chronological order of the enqueued time.", + "items": { + "$ref": "BackupRun" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#backupRunsList.", + "default": "sql#backupRunsList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "BinLogCoordinates": { + "id": "BinLogCoordinates", + "type": "object", + "description": "Binary log coordinates.", + "properties": { + "binLogFileName": { + "type": "string", + "description": "Name of the binary log file for a Cloud SQL instance." + }, + "binLogPosition": { + "type": "string", + "description": "Position (offset) within the binary log file.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always sql#binLogCoordinates.", + "default": "sql#binLogCoordinates" + } + } + }, + "CloneContext": { + "id": "CloneContext", + "type": "object", + "description": "Database instance clone context.", + "properties": { + "binLogCoordinates": { + "$ref": "BinLogCoordinates", + "description": "Binary log coordinates, if specified, indentify the the position up to which the source instance should be cloned. If not specified, the source instance is cloned up to the most recent binary log coordintes." + }, + "destinationInstanceName": { + "type": "string", + "description": "Name of the Cloud SQL instance to be created as a clone." + }, + "kind": { + "type": "string", + "description": "This is always sql#cloneContext.", + "default": "sql#cloneContext" + }, + "sourceInstanceName": { + "type": "string", + "description": "Name of the Cloud SQL instance to be cloned." + } + } + }, + "DatabaseFlags": { + "id": "DatabaseFlags", + "type": "object", + "description": "MySQL flags for Cloud SQL instances.", + "properties": { + "name": { + "type": "string", + "description": "The name of the flag. These flags are passed at instance startup, so include both MySQL server options and MySQL system variables. Flags should be specified with underscores, not hyphens. Refer to the official MySQL documentation on server options and system variables for descriptions of what these flags do. Acceptable values are: event_scheduler on or off (Note: The event scheduler will only work reliably if the instance activationPolicy is set to ALWAYS.) general_log on or off group_concat_max_len 4..17179869184 innodb_flush_log_at_trx_commit 0..2 innodb_lock_wait_timeout 1..1073741824 log_bin_trust_function_creators on or off log_output Can be either TABLE or NONE, FILE is not supported. log_queries_not_using_indexes on or off long_query_time 0..30000000 lower_case_table_names 0..2 max_allowed_packet 16384..1073741824 read_only on or off skip_show_database on or off slow_query_log on or off wait_timeout 1..31536000" + }, + "value": { + "type": "string", + "description": "The value of the flag. Booleans should be set using 1 for true, and 0 for false. This field must be omitted if the flag doesn't take a value." + } + } + }, + "DatabaseInstance": { + "id": "DatabaseInstance", + "type": "object", + "description": "A Cloud SQL instance resource.", + "properties": { + "currentDiskSize": { + "type": "string", + "description": "The current disk usage of the instance in bytes.", + "format": "int64" + }, + "databaseVersion": { + "type": "string", + "description": "The database engine type and version, for example MYSQL_5_5 for MySQL 5.5." + }, + "etag": { + "type": "string", + "description": "HTTP 1.1 Entity tag for the resource." + }, + "instance": { + "type": "string", + "description": "Name of the Cloud SQL instance. This does not include the project ID.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + }, + "ipAddresses": { + "type": "array", + "description": "The assigned IP addresses for the instance.", + "items": { + "$ref": "IpMapping" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#instance.", + "default": "sql#instance" + }, + "maxDiskSize": { + "type": "string", + "description": "The maximum disk size of the instance in bytes.", + "format": "int64" + }, + "project": { + "type": "string", + "description": "The project ID of the project containing the Cloud SQL instance. The Google apps domain is prefixed if applicable.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + }, + "region": { + "type": "string", + "description": "The geographical region. Can be us-east1, us-central, asia-east1 or europe-west1. Defaults to us-central. The region can not be changed after instance creation." + }, + "serverCaCert": { + "$ref": "SslCert", + "description": "SSL configuration." + }, + "settings": { + "$ref": "Settings", + "description": "The user settings." + }, + "state": { + "type": "string", + "description": "The current serving state of the Cloud SQL instance. This can be one of the following.\nRUNNABLE: The instance is running, or is ready to run when accessed.\nSUSPENDED: The instance is not available, for example due to problems with billing.\nPENDING_CREATE: The instance is being created.\nMAINTENANCE: The instance is down for maintenance.\nUNKNOWN_STATE: The state of the instance is unknown." + } + } + }, + "ExportContext": { + "id": "ExportContext", + "type": "object", + "description": "Database instance export context.", + "properties": { + "database": { + "type": "array", + "description": "Databases (for example, guestbook) from which the export is made. If unspecified, all databases are exported.", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#exportContext.", + "default": "sql#exportContext" + }, + "table": { + "type": "array", + "description": "Tables to export, or that were exported, from the specified database. If you specify tables, specify one and only one database.", + "items": { + "type": "string" + } + }, + "uri": { + "type": "string", + "description": "The path to the file in Google Cloud Storage where the export will be stored, or where it was already stored. The URI is in the form gs://bucketName/fileName. If the file already exists, the operation fails. If the filename ends with .gz, the contents are compressed." + } + } + }, + "Flag": { + "id": "Flag", + "type": "object", + "description": "A Google Cloud SQL service flag resource.", + "properties": { + "allowedStringValues": { + "type": "array", + "description": "For STRING flags, a list of strings that the value can be set to.", + "items": { + "type": "string" + } + }, + "appliesTo": { + "type": "array", + "description": "The database version this flag applies to. Currently this can only be [MYSQL_5_5].", + "items": { + "type": "string" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#flag.", + "default": "sql#flag" + }, + "maxValue": { + "type": "string", + "description": "For INTEGER flags, the maximum allowed value.", + "format": "int64" + }, + "minValue": { + "type": "string", + "description": "For INTEGER flags, the minimum allowed value.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "This is the name of the flag. Flag names always use underscores, not hyphens, e.g. max_allowed_packet" + }, + "type": { + "type": "string", + "description": "The type of the flag. Flags are typed to being BOOLEAN, STRING, INTEGER or NONE. NONE is used for flags which do not take a value, such as skip_grant_tables." + } + } + }, + "FlagsListResponse": { + "id": "FlagsListResponse", + "type": "object", + "description": "Flags list response.", + "properties": { + "items": { + "type": "array", + "description": "List of flags.", + "items": { + "$ref": "Flag" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#flagsList.", + "default": "sql#flagsList" + } + } + }, + "ImportContext": { + "id": "ImportContext", + "type": "object", + "description": "Database instance import context.", + "properties": { + "database": { + "type": "string", + "description": "The database (for example, guestbook) to which the import is made. If not set, it is assumed that the database is specified in the file to be imported." + }, + "kind": { + "type": "string", + "description": "This is always sql#importContext.", + "default": "sql#importContext" + }, + "uri": { + "type": "array", + "description": "A path to the MySQL dump file in Google Cloud Storage from which the import is made. The URI is in the form gs://bucketName/fileName. Compressed gzip files (.gz) are also supported.", + "items": { + "type": "string" + } + } + } + }, + "InstanceOperation": { + "id": "InstanceOperation", + "type": "object", + "description": "An Operations resource contains information about database instance operations such as create, delete, and restart. Operations resources are created in response to operations that were initiated; you never create them directly.", + "properties": { + "endTime": { + "type": "string", + "description": "The time this operation finished in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "enqueuedTime": { + "type": "string", + "description": "The time this operation was enqueued in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "error": { + "type": "array", + "description": "The error(s) encountered by this operation. Only set if the operation results in an error.", + "items": { + "$ref": "OperationError" + } + }, + "exportContext": { + "$ref": "ExportContext", + "description": "The context for export operation, if applicable." + }, + "importContext": { + "$ref": "ImportContext", + "description": "The context for import operation, if applicable." + }, + "instance": { + "type": "string", + "description": "Name of the database instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#instanceOperation.", + "default": "sql#instanceOperation" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + }, + "operationType": { + "type": "string", + "description": "The type of the operation. Valid values are CREATE, DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, RESTORE_VOLUME." + }, + "startTime": { + "type": "string", + "description": "The time this operation actually started in UTC timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "format": "date-time" + }, + "state": { + "type": "string", + "description": "The state of an operation. Valid values are PENDING, RUNNING, DONE, UNKNOWN." + }, + "userEmailAddress": { + "type": "string", + "description": "The email address of the user who initiated this operation." + } + } + }, + "InstanceSetRootPasswordRequest": { + "id": "InstanceSetRootPasswordRequest", + "type": "object", + "description": "Database instance set root password request.", + "properties": { + "setRootPasswordContext": { + "$ref": "SetRootPasswordContext", + "description": "Set Root Password Context." + } + } + }, + "InstancesCloneRequest": { + "id": "InstancesCloneRequest", + "type": "object", + "description": "Database instance clone request.", + "properties": { + "cloneContext": { + "$ref": "CloneContext", + "description": "Contains details about the clone operation." + } + } + }, + "InstancesCloneResponse": { + "id": "InstancesCloneResponse", + "type": "object", + "description": "Database instance clone response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesClone.", + "default": "sql#instancesClone" + }, + "operation": { + "type": "string", + "description": "An unique identifier for the operation associated with the cloned instance. You can use this identifier to retrieve the Operations resource, which has information about the operation." + } + } + }, + "InstancesDeleteResponse": { + "id": "InstancesDeleteResponse", + "type": "object", + "description": "Database instance delete response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesDelete.", + "default": "sql#instancesDelete" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesExportRequest": { + "id": "InstancesExportRequest", + "type": "object", + "description": "Database instance export request.", + "properties": { + "exportContext": { + "$ref": "ExportContext", + "description": "Contains details about the export operation." + } + } + }, + "InstancesExportResponse": { + "id": "InstancesExportResponse", + "type": "object", + "description": "Database instance export response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesExport.", + "default": "sql#instancesExport" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesImportRequest": { + "id": "InstancesImportRequest", + "type": "object", + "description": "Database instance import request.", + "properties": { + "importContext": { + "$ref": "ImportContext", + "description": "Contains details about the import operation." + } + } + }, + "InstancesImportResponse": { + "id": "InstancesImportResponse", + "type": "object", + "description": "Database instance import response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesImport.", + "default": "sql#instancesImport" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesInsertResponse": { + "id": "InstancesInsertResponse", + "type": "object", + "description": "Database instance insert response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesInsert.", + "default": "sql#instancesInsert" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesListResponse": { + "id": "InstancesListResponse", + "type": "object", + "description": "Database instances list response.", + "properties": { + "items": { + "type": "array", + "description": "List of database instance resources.", + "items": { + "$ref": "DatabaseInstance" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#instancesList.", + "default": "sql#instancesList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "InstancesResetSslConfigResponse": { + "id": "InstancesResetSslConfigResponse", + "type": "object", + "description": "Database instance resetSslConfig response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesResetSslConfig.", + "default": "sql#instancesResetSslConfig" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation. All ssl client certificates will be deleted and a new server certificate will be created. Does not take effect until the next instance restart." + } + } + }, + "InstancesRestartResponse": { + "id": "InstancesRestartResponse", + "type": "object", + "description": "Database instance restart response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesRestart.", + "default": "sql#instancesRestart" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesRestoreBackupResponse": { + "id": "InstancesRestoreBackupResponse", + "type": "object", + "description": "Database instance restore backup response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesRestoreBackup.", + "default": "sql#instancesRestoreBackup" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesSetRootPasswordResponse": { + "id": "InstancesSetRootPasswordResponse", + "type": "object", + "description": "Database instance set root password response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesSetRootPassword.", + "default": "sql#instancesSetRootPassword" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "InstancesUpdateResponse": { + "id": "InstancesUpdateResponse", + "type": "object", + "description": "Database instance update response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#instancesUpdate.", + "default": "sql#instancesUpdate" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve information about the operation." + } + } + }, + "IpConfiguration": { + "id": "IpConfiguration", + "type": "object", + "description": "IP Management configuration.", + "properties": { + "authorizedNetworks": { + "type": "array", + "description": "The list of external networks that are allowed to connect to the instance using the IP. In CIDR notation, also known as 'slash' notation (e.g. 192.168.100.0/24).", + "items": { + "type": "string" + } + }, + "enabled": { + "type": "boolean", + "description": "Whether the instance should be assigned an IP address or not." + }, + "requireSsl": { + "type": "boolean", + "description": "Whether the mysqld should default to 'REQUIRE X509' for users connecting over IP." + } + } + }, + "IpMapping": { + "id": "IpMapping", + "type": "object", + "description": "Database instance IP Mapping.", + "properties": { + "ipAddress": { + "type": "string", + "description": "The IP address assigned." + }, + "timeToRetire": { + "type": "string", + "description": "The due time for this IP to be retired in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. This field is only available when the IP is scheduled to be retired.", + "format": "date-time" + } + } + }, + "LocationPreference": { + "id": "LocationPreference", + "type": "object", + "description": "Preferred location. This specifies where a Cloud SQL instance should preferably be located, either in a specific Compute Engine zone, or co-located with an App Engine application. Note that if the preferred location is not available, the instance will be located as close as possible within the region. Only one location may be specified.", + "properties": { + "followGaeApplication": { + "type": "string", + "description": "The AppEngine application to follow, it must be in the same region as the Cloud SQL instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#locationPreference.", + "default": "sql#locationPreference" + }, + "zone": { + "type": "string", + "description": "The preferred Compute Engine zone (e.g. us-centra1-a, us-central1-b, etc.)." + } + } + }, + "OperationError": { + "id": "OperationError", + "type": "object", + "description": "Database instance operation error.", + "properties": { + "code": { + "type": "string", + "description": "Identifies the specific error that occurred." + }, + "kind": { + "type": "string", + "description": "This is always sql#operationError.", + "default": "sql#operationError" + } + } + }, + "OperationsListResponse": { + "id": "OperationsListResponse", + "type": "object", + "description": "Database instance list operations response.", + "properties": { + "items": { + "type": "array", + "description": "List of operation resources.", + "items": { + "$ref": "InstanceOperation" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#operationsList.", + "default": "sql#operationsList" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "SetRootPasswordContext": { + "id": "SetRootPasswordContext", + "type": "object", + "description": "Database instance set root password context.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#setRootUserContext.", + "default": "sql#setRootUserContext" + }, + "password": { + "type": "string", + "description": "The password for the root user." + } + } + }, + "Settings": { + "id": "Settings", + "type": "object", + "description": "Database instance settings.", + "properties": { + "activationPolicy": { + "type": "string", + "description": "The activation policy for this instance. This specifies when the instance should be activated and is applicable only when the instance state is RUNNABLE. This can be one of the following.\nALWAYS: The instance should always be active.\nNEVER: The instance should never be activated.\nON_DEMAND: The instance is activated upon receiving requests." + }, + "authorizedGaeApplications": { + "type": "array", + "description": "The AppEngine app ids that can access this instance.", + "items": { + "type": "string" + } + }, + "backupConfiguration": { + "type": "array", + "description": "The daily backup configuration for the instance.", + "items": { + "$ref": "BackupConfiguration" + } + }, + "databaseFlags": { + "type": "array", + "description": "The database flags passed to the instance at startup.", + "items": { + "$ref": "DatabaseFlags" + } + }, + "ipConfiguration": { + "$ref": "IpConfiguration", + "description": "The settings for IP Management. This allows to enable or disable the instance IP and manage which external networks can connect to the instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#settings.", + "default": "sql#settings" + }, + "locationPreference": { + "$ref": "LocationPreference", + "description": "The location preference settings. This allows the instance to be located as near as possible to either an AppEngine app or GCE zone for better perfomance." + }, + "pricingPlan": { + "type": "string", + "description": "The pricing plan for this instance. This can be either PER_USE or PACKAGE." + }, + "replicationType": { + "type": "string", + "description": "The type of replication this instance uses. This can be either ASYNCHRONOUS or SYNCHRONOUS." + }, + "settingsVersion": { + "type": "string", + "description": "The version of instance settings. This is a required field for update method to make sure concurrent updates are handled properly. During update, use the most recent settingsVersion value for this instance and do not try to update this value.", + "format": "int64", + "annotations": { + "required": [ + "sql.instances.update" + ] + } + }, + "tier": { + "type": "string", + "description": "The tier of service for this instance, for example D1, D2. For more information, see pricing.", + "annotations": { + "required": [ + "sql.instances.insert", + "sql.instances.update" + ] + } + } + } + }, + "SslCert": { + "id": "SslCert", + "type": "object", + "description": "SslCerts Resource", + "properties": { + "cert": { + "type": "string", + "description": "PEM representation." + }, + "certSerialNumber": { + "type": "string", + "description": "Serial number, as extracted from the certificate." + }, + "commonName": { + "type": "string", + "description": "User supplied name. Constrained to [a-zA-Z.-_ ]+." + }, + "createTime": { + "type": "string", + "description": "Time when the certificate was created.", + "format": "date-time" + }, + "expirationTime": { + "type": "string", + "description": "Time when the certificate expires.", + "format": "date-time" + }, + "instance": { + "type": "string", + "description": "Name of the database instance." + }, + "kind": { + "type": "string", + "description": "This is always sql#sslCert.", + "default": "sql#sslCert" + }, + "sha1Fingerprint": { + "type": "string", + "description": "Sha1 Fingerprint." + } + } + }, + "SslCertDetail": { + "id": "SslCertDetail", + "type": "object", + "description": "SslCertDetail.", + "properties": { + "certInfo": { + "$ref": "SslCert", + "description": "The public information about the cert." + }, + "certPrivateKey": { + "type": "string", + "description": "The private key for the client cert, in pem format. Keep private in order to protect your security." + } + } + }, + "SslCertsDeleteResponse": { + "id": "SslCertsDeleteResponse", + "type": "object", + "description": "SslCert delete response.", + "properties": { + "kind": { + "type": "string", + "description": "This is always sql#sslCertsDelete.", + "default": "sql#sslCertsDelete" + }, + "operation": { + "type": "string", + "description": "An identifier that uniquely identifies the operation. You can use this identifier to retrieve the Operations resource that has information about the operation." + } + } + }, + "SslCertsInsertRequest": { + "id": "SslCertsInsertRequest", + "type": "object", + "description": "SslCerts insert request.", + "properties": { + "commonName": { + "type": "string", + "description": "User supplied name. Must be a distinct name from the other certificates for this instance. New certificates will not be usable until the instance is restarted." + } + } + }, + "SslCertsInsertResponse": { + "id": "SslCertsInsertResponse", + "type": "object", + "description": "SslCert insert response.", + "properties": { + "clientCert": { + "$ref": "SslCertDetail", + "description": "The new client certificate and private key. The new certificate will not work until the instance is restarted." + }, + "kind": { + "type": "string", + "description": "This is always sql#sslCertsInsert.", + "default": "sql#sslCertsInsert" + }, + "serverCaCert": { + "$ref": "SslCert", + "description": "The server Certificate Authority's certificate. If this is missing you can force a new one to be generated by calling resetSslConfig method on instances resource.." + } + } + }, + "SslCertsListResponse": { + "id": "SslCertsListResponse", + "type": "object", + "description": "SslCerts list response.", + "properties": { + "items": { + "type": "array", + "description": "List of client certificates for the instance.", + "items": { + "$ref": "SslCert" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#sslCertsList.", + "default": "sql#sslCertsList" + } + } + }, + "Tier": { + "id": "Tier", + "type": "object", + "description": "A Google Cloud SQL service tier resource.", + "properties": { + "DiskQuota": { + "type": "string", + "description": "The maximum disk size of this tier in bytes.", + "format": "int64" + }, + "RAM": { + "type": "string", + "description": "The maximum RAM usage of this tier in bytes.", + "format": "int64" + }, + "kind": { + "type": "string", + "description": "This is always sql#tier.", + "default": "sql#tier" + }, + "region": { + "type": "array", + "description": "The applicable regions for this tier. Can be us-east1, europe-west1, or asia-east1.", + "items": { + "type": "string" + } + }, + "tier": { + "type": "string", + "description": "An identifier for the service tier, for example D1, D2 etc. For related information, see Pricing." + } + } + }, + "TiersListResponse": { + "id": "TiersListResponse", + "type": "object", + "description": "Tiers list response.", + "properties": { + "items": { + "type": "array", + "description": "List of tiers.", + "items": { + "$ref": "Tier" + } + }, + "kind": { + "type": "string", + "description": "This is always sql#tiersList.", + "default": "sql#tiersList" + } + } + } + }, + "resources": { + "backupRuns": { + "methods": { + "get": { + "id": "sql.backupRuns.get", + "path": "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}", + "httpMethod": "GET", + "description": "Retrieves a resource containing information about a backup run.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "path" + }, + "dueTime": { + "type": "string", + "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration", + "dueTime" + ], + "response": { + "$ref": "BackupRun" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.backupRuns.list", + "path": "projects/{project}/instances/{instance}/backupRuns", + "httpMethod": "GET", + "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of backup runs per response.", + "format": "int32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration" + ], + "response": { + "$ref": "BackupRunsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "flags": { + "methods": { + "list": { + "id": "sql.flags.list", + "path": "flags", + "httpMethod": "GET", + "description": "List all available database flags for Google Cloud SQL instances.", + "response": { + "$ref": "FlagsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "instances": { + "methods": { + "clone": { + "id": "sql.instances.clone", + "path": "projects/{project}/instances/clone", + "httpMethod": "POST", + "description": "Creates a Cloud SQL instance as a clone of the source instance.", + "parameters": { + "project": { + "type": "string", + "description": "Project ID of the source as well as the clone Cloud SQL instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "InstancesCloneRequest" + }, + "response": { + "$ref": "InstancesCloneResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "delete": { + "id": "sql.instances.delete", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "DELETE", + "description": "Deletes a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be deleted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "InstancesDeleteResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "export": { + "id": "sql.instances.export", + "path": "projects/{project}/instances/{instance}/export", + "httpMethod": "POST", + "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be exported.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "InstancesExportRequest" + }, + "response": { + "$ref": "InstancesExportResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "get": { + "id": "sql.instances.get", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "GET", + "description": "Retrieves a resource containing information about a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Database instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "DatabaseInstance" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "import": { + "id": "sql.instances.import", + "path": "projects/{project}/instances/{instance}/import", + "httpMethod": "POST", + "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "InstancesImportRequest" + }, + "response": { + "$ref": "InstancesImportResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/cloud-platform" + ] + }, + "insert": { + "id": "sql.instances.insert", + "path": "projects/{project}/instances", + "httpMethod": "POST", + "description": "Creates a new Cloud SQL instance.", + "parameters": { + "project": { + "type": "string", + "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesInsertResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.instances.list", + "path": "projects/{project}/instances", + "httpMethod": "GET", + "description": "Lists instances under a given project in the alphabetical order of the instance name.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "The maximum number of results to return per response.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project for which to list Cloud SQL instances.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "InstancesListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "patch": { + "id": "sql.instances.patch", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "PATCH", + "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesUpdateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "resetSslConfig": { + "id": "sql.instances.resetSslConfig", + "path": "projects/{project}/instances/{instance}/resetSslConfig", + "httpMethod": "POST", + "description": "Deletes all client certificates and generates a new server SSL certificate for the instance. The changes will not take effect until the instance is restarted. Existing instances without a server certificate will need to call this once to set a server certificate.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "InstancesResetSslConfigResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "restart": { + "id": "sql.instances.restart", + "path": "projects/{project}/instances/{instance}/restart", + "httpMethod": "POST", + "description": "Restarts a Cloud SQL instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be restarted.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "InstancesRestartResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "restoreBackup": { + "id": "sql.instances.restoreBackup", + "path": "projects/{project}/instances/{instance}/restoreBackup", + "httpMethod": "POST", + "description": "Restores a backup of a Cloud SQL instance.", + "parameters": { + "backupConfiguration": { + "type": "string", + "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.", + "required": true, + "location": "query" + }, + "dueTime": { + "type": "string", + "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + "required": true, + "location": "query" + }, + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "backupConfiguration", + "dueTime" + ], + "response": { + "$ref": "InstancesRestoreBackupResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "setRootPassword": { + "id": "sql.instances.setRootPassword", + "path": "projects/{project}/instances/{instance}/setRootPassword", + "httpMethod": "POST", + "description": "Sets the password for the root user.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "InstanceSetRootPasswordRequest" + }, + "response": { + "$ref": "InstancesSetRootPasswordResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "update": { + "id": "sql.instances.update", + "path": "projects/{project}/instances/{instance}", + "httpMethod": "PUT", + "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "etagRequired": true, + "request": { + "$ref": "DatabaseInstance" + }, + "response": { + "$ref": "InstancesUpdateResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "operations": { + "methods": { + "get": { + "id": "sql.operations.get", + "path": "projects/{project}/instances/{instance}/operations/{operation}", + "httpMethod": "GET", + "description": "Retrieves an instance operation that has been performed on an instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "operation": { + "type": "string", + "description": "Instance operation ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "operation" + ], + "response": { + "$ref": "InstanceOperation" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.operations.list", + "path": "projects/{project}/instances/{instance}/operations", + "httpMethod": "GET", + "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of operations per response.", + "format": "uint32", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "OperationsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "sslCerts": { + "methods": { + "delete": { + "id": "sql.sslCerts.delete", + "path": "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", + "httpMethod": "DELETE", + "description": "Deletes the SSL certificate. The change will not take effect until the instance is restarted.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance to be deleted.", + "required": true, + "location": "path" + }, + "sha1Fingerprint": { + "type": "string", + "description": "Sha1 FingerPrint.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "sha1Fingerprint" + ], + "response": { + "$ref": "SslCertsDeleteResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "get": { + "id": "sql.sslCerts.get", + "path": "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", + "httpMethod": "GET", + "description": "Retrieves a particular SSL certificate. Does not include the private key (required for usage). The private key must be saved from the response to initial creation.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project that contains the instance.", + "required": true, + "location": "path" + }, + "sha1Fingerprint": { + "type": "string", + "description": "Sha1 FingerPrint.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance", + "sha1Fingerprint" + ], + "response": { + "$ref": "SslCert" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "insert": { + "id": "sql.sslCerts.insert", + "path": "projects/{project}/instances/{instance}/sslCerts", + "httpMethod": "POST", + "description": "Creates an SSL certificate and returns it along with the private key and server certificate authority. The new certificate will not be usable until the instance is restarted.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "request": { + "$ref": "SslCertsInsertRequest" + }, + "response": { + "$ref": "SslCertsInsertResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + }, + "list": { + "id": "sql.sslCerts.list", + "path": "projects/{project}/instances/{instance}/sslCerts", + "httpMethod": "GET", + "description": "Lists all of the current SSL certificates for the instance.", + "parameters": { + "instance": { + "type": "string", + "description": "Cloud SQL instance ID. This does not include the project ID.", + "required": true, + "location": "path" + }, + "project": { + "type": "string", + "description": "Project ID of the project for which to list Cloud SQL instances.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "instance" + ], + "response": { + "$ref": "SslCertsListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + }, + "tiers": { + "methods": { + "list": { + "id": "sql.tiers.list", + "path": "projects/{project}/tiers", + "httpMethod": "GET", + "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.", + "parameters": { + "project": { + "type": "string", + "description": "Project ID of the project for which to list tiers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "TiersListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/sqlservice.admin" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-gen.go b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-gen.go new file mode 100644 index 0000000000000..69f34d3f00704 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/sqladmin/v1beta3/sqladmin-gen.go @@ -0,0 +1,2712 @@ +// Package sqladmin provides access to the Cloud SQL Administration API. +// +// See https://developers.google.com/cloud-sql/docs/admin-api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/sqladmin/v1beta3" +// ... +// sqladminService, err := sqladmin.New(oauthHttpClient) +package sqladmin + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "sqladmin:v1beta3" +const apiName = "sqladmin" +const apiVersion = "v1beta3" +const basePath = "https://www.googleapis.com/sql/v1beta3/" + +// OAuth2 scopes used by this API. +const ( + // View and manage your data across Google Cloud Platform services + CloudPlatformScope = "https://www.googleapis.com/auth/cloud-platform" + + // Manage your Google SQL Service instances + SqlserviceAdminScope = "https://www.googleapis.com/auth/sqlservice.admin" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BackupRuns = NewBackupRunsService(s) + s.Flags = NewFlagsService(s) + s.Instances = NewInstancesService(s) + s.Operations = NewOperationsService(s) + s.SslCerts = NewSslCertsService(s) + s.Tiers = NewTiersService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BackupRuns *BackupRunsService + + Flags *FlagsService + + Instances *InstancesService + + Operations *OperationsService + + SslCerts *SslCertsService + + Tiers *TiersService +} + +func NewBackupRunsService(s *Service) *BackupRunsService { + rs := &BackupRunsService{s: s} + return rs +} + +type BackupRunsService struct { + s *Service +} + +func NewFlagsService(s *Service) *FlagsService { + rs := &FlagsService{s: s} + return rs +} + +type FlagsService struct { + s *Service +} + +func NewInstancesService(s *Service) *InstancesService { + rs := &InstancesService{s: s} + return rs +} + +type InstancesService struct { + s *Service +} + +func NewOperationsService(s *Service) *OperationsService { + rs := &OperationsService{s: s} + return rs +} + +type OperationsService struct { + s *Service +} + +func NewSslCertsService(s *Service) *SslCertsService { + rs := &SslCertsService{s: s} + return rs +} + +type SslCertsService struct { + s *Service +} + +func NewTiersService(s *Service) *TiersService { + rs := &TiersService{s: s} + return rs +} + +type TiersService struct { + s *Service +} + +type BackupConfiguration struct { + // BinaryLogEnabled: Whether binary log is enabled. If backup + // configuration is disabled, binary log must be disabled as well. + BinaryLogEnabled bool `json:"binaryLogEnabled,omitempty"` + + // Enabled: Whether this configuration is enabled. + Enabled bool `json:"enabled,omitempty"` + + // Id: Identifier for this configuration. This gets generated + // automatically when a backup configuration is created. + Id string `json:"id,omitempty"` + + // Kind: This is always sql#backupConfiguration. + Kind string `json:"kind,omitempty"` + + // StartTime: Start time for the daily backup configuration in UTC + // timezone in the 24 hour format - HH:MM. + StartTime string `json:"startTime,omitempty"` +} + +type BackupRun struct { + // BackupConfiguration: Backup Configuration identifier. + BackupConfiguration string `json:"backupConfiguration,omitempty"` + + // DueTime: The due time of this run in UTC timezone in RFC 3339 format, + // for example 2012-11-15T16:19:00.094Z. + DueTime string `json:"dueTime,omitempty"` + + // EndTime: The time the backup operation completed in UTC timezone in + // RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + EndTime string `json:"endTime,omitempty"` + + // EnqueuedTime: The time the run was enqueued in UTC timezone in RFC + // 3339 format, for example 2012-11-15T16:19:00.094Z. + EnqueuedTime string `json:"enqueuedTime,omitempty"` + + // Error: Information about why the backup operation failed. This is + // only present if the run has the FAILED status. + Error *OperationError `json:"error,omitempty"` + + // Instance: Name of the database instance. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#backupRun. + Kind string `json:"kind,omitempty"` + + // StartTime: The time the backup operation actually started in UTC + // timezone in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + StartTime string `json:"startTime,omitempty"` + + // Status: The status of this run. + Status string `json:"status,omitempty"` +} + +type BackupRunsListResponse struct { + // Items: A list of backup runs in reverse chronological order of the + // enqueued time. + Items []*BackupRun `json:"items,omitempty"` + + // Kind: This is always sql#backupRunsList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type BinLogCoordinates struct { + // BinLogFileName: Name of the binary log file for a Cloud SQL instance. + BinLogFileName string `json:"binLogFileName,omitempty"` + + // BinLogPosition: Position (offset) within the binary log file. + BinLogPosition int64 `json:"binLogPosition,omitempty,string"` + + // Kind: This is always sql#binLogCoordinates. + Kind string `json:"kind,omitempty"` +} + +type CloneContext struct { + // BinLogCoordinates: Binary log coordinates, if specified, indentify + // the the position up to which the source instance should be cloned. If + // not specified, the source instance is cloned up to the most recent + // binary log coordintes. + BinLogCoordinates *BinLogCoordinates `json:"binLogCoordinates,omitempty"` + + // DestinationInstanceName: Name of the Cloud SQL instance to be created + // as a clone. + DestinationInstanceName string `json:"destinationInstanceName,omitempty"` + + // Kind: This is always sql#cloneContext. + Kind string `json:"kind,omitempty"` + + // SourceInstanceName: Name of the Cloud SQL instance to be cloned. + SourceInstanceName string `json:"sourceInstanceName,omitempty"` +} + +type DatabaseFlags struct { + // Name: The name of the flag. These flags are passed at instance + // startup, so include both MySQL server options and MySQL system + // variables. Flags should be specified with underscores, not hyphens. + // Refer to the official MySQL documentation on server options and + // system variables for descriptions of what these flags do. Acceptable + // values are: event_scheduler on or off (Note: The event scheduler + // will only work reliably if the instance activationPolicy is set to + // ALWAYS.) general_log on or off group_concat_max_len 4..17179869184 + // innodb_flush_log_at_trx_commit 0..2 innodb_lock_wait_timeout + // 1..1073741824 log_bin_trust_function_creators on or off log_output + // Can be either TABLE or NONE, FILE is not supported. + // log_queries_not_using_indexes on or off long_query_time 0..30000000 + // lower_case_table_names 0..2 max_allowed_packet 16384..1073741824 + // read_only on or off skip_show_database on or off slow_query_log on or + // off wait_timeout 1..31536000 + Name string `json:"name,omitempty"` + + // Value: The value of the flag. Booleans should be set using 1 for + // true, and 0 for false. This field must be omitted if the flag doesn't + // take a value. + Value string `json:"value,omitempty"` +} + +type DatabaseInstance struct { + // CurrentDiskSize: The current disk usage of the instance in bytes. + CurrentDiskSize int64 `json:"currentDiskSize,omitempty,string"` + + // DatabaseVersion: The database engine type and version, for example + // MYSQL_5_5 for MySQL 5.5. + DatabaseVersion string `json:"databaseVersion,omitempty"` + + // Etag: HTTP 1.1 Entity tag for the resource. + Etag string `json:"etag,omitempty"` + + // Instance: Name of the Cloud SQL instance. This does not include the + // project ID. + Instance string `json:"instance,omitempty"` + + // IpAddresses: The assigned IP addresses for the instance. + IpAddresses []*IpMapping `json:"ipAddresses,omitempty"` + + // Kind: This is always sql#instance. + Kind string `json:"kind,omitempty"` + + // MaxDiskSize: The maximum disk size of the instance in bytes. + MaxDiskSize int64 `json:"maxDiskSize,omitempty,string"` + + // Project: The project ID of the project containing the Cloud SQL + // instance. The Google apps domain is prefixed if applicable. + Project string `json:"project,omitempty"` + + // Region: The geographical region. Can be us-east1, us-central, + // asia-east1 or europe-west1. Defaults to us-central. The region can + // not be changed after instance creation. + Region string `json:"region,omitempty"` + + // ServerCaCert: SSL configuration. + ServerCaCert *SslCert `json:"serverCaCert,omitempty"` + + // Settings: The user settings. + Settings *Settings `json:"settings,omitempty"` + + // State: The current serving state of the Cloud SQL instance. This can + // be one of the following. + // RUNNABLE: The instance is running, or is + // ready to run when accessed. + // SUSPENDED: The instance is not available, + // for example due to problems with billing. + // PENDING_CREATE: The + // instance is being created. + // MAINTENANCE: The instance is down for + // maintenance. + // UNKNOWN_STATE: The state of the instance is unknown. + State string `json:"state,omitempty"` +} + +type ExportContext struct { + // Database: Databases (for example, guestbook) from which the export is + // made. If unspecified, all databases are exported. + Database []string `json:"database,omitempty"` + + // Kind: This is always sql#exportContext. + Kind string `json:"kind,omitempty"` + + // Table: Tables to export, or that were exported, from the specified + // database. If you specify tables, specify one and only one database. + Table []string `json:"table,omitempty"` + + // Uri: The path to the file in Google Cloud Storage where the export + // will be stored, or where it was already stored. The URI is in the + // form gs://bucketName/fileName. If the file already exists, the + // operation fails. If the filename ends with .gz, the contents are + // compressed. + Uri string `json:"uri,omitempty"` +} + +type Flag struct { + // AllowedStringValues: For STRING flags, a list of strings that the + // value can be set to. + AllowedStringValues []string `json:"allowedStringValues,omitempty"` + + // AppliesTo: The database version this flag applies to. Currently this + // can only be [MYSQL_5_5]. + AppliesTo []string `json:"appliesTo,omitempty"` + + // Kind: This is always sql#flag. + Kind string `json:"kind,omitempty"` + + // MaxValue: For INTEGER flags, the maximum allowed value. + MaxValue int64 `json:"maxValue,omitempty,string"` + + // MinValue: For INTEGER flags, the minimum allowed value. + MinValue int64 `json:"minValue,omitempty,string"` + + // Name: This is the name of the flag. Flag names always use + // underscores, not hyphens, e.g. max_allowed_packet + Name string `json:"name,omitempty"` + + // Type: The type of the flag. Flags are typed to being BOOLEAN, STRING, + // INTEGER or NONE. NONE is used for flags which do not take a value, + // such as skip_grant_tables. + Type string `json:"type,omitempty"` +} + +type FlagsListResponse struct { + // Items: List of flags. + Items []*Flag `json:"items,omitempty"` + + // Kind: This is always sql#flagsList. + Kind string `json:"kind,omitempty"` +} + +type ImportContext struct { + // Database: The database (for example, guestbook) to which the import + // is made. If not set, it is assumed that the database is specified in + // the file to be imported. + Database string `json:"database,omitempty"` + + // Kind: This is always sql#importContext. + Kind string `json:"kind,omitempty"` + + // Uri: A path to the MySQL dump file in Google Cloud Storage from which + // the import is made. The URI is in the form gs://bucketName/fileName. + // Compressed gzip files (.gz) are also supported. + Uri []string `json:"uri,omitempty"` +} + +type InstanceOperation struct { + // EndTime: The time this operation finished in UTC timezone in RFC 3339 + // format, for example 2012-11-15T16:19:00.094Z. + EndTime string `json:"endTime,omitempty"` + + // EnqueuedTime: The time this operation was enqueued in UTC timezone in + // RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + EnqueuedTime string `json:"enqueuedTime,omitempty"` + + // Error: The error(s) encountered by this operation. Only set if the + // operation results in an error. + Error []*OperationError `json:"error,omitempty"` + + // ExportContext: The context for export operation, if applicable. + ExportContext *ExportContext `json:"exportContext,omitempty"` + + // ImportContext: The context for import operation, if applicable. + ImportContext *ImportContext `json:"importContext,omitempty"` + + // Instance: Name of the database instance. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#instanceOperation. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` + + // OperationType: The type of the operation. Valid values are CREATE, + // DELETE, UPDATE, RESTART, IMPORT, EXPORT, BACKUP_VOLUME, + // RESTORE_VOLUME. + OperationType string `json:"operationType,omitempty"` + + // StartTime: The time this operation actually started in UTC timezone + // in RFC 3339 format, for example 2012-11-15T16:19:00.094Z. + StartTime string `json:"startTime,omitempty"` + + // State: The state of an operation. Valid values are PENDING, RUNNING, + // DONE, UNKNOWN. + State string `json:"state,omitempty"` + + // UserEmailAddress: The email address of the user who initiated this + // operation. + UserEmailAddress string `json:"userEmailAddress,omitempty"` +} + +type InstanceSetRootPasswordRequest struct { + // SetRootPasswordContext: Set Root Password Context. + SetRootPasswordContext *SetRootPasswordContext `json:"setRootPasswordContext,omitempty"` +} + +type InstancesCloneRequest struct { + // CloneContext: Contains details about the clone operation. + CloneContext *CloneContext `json:"cloneContext,omitempty"` +} + +type InstancesCloneResponse struct { + // Kind: This is always sql#instancesClone. + Kind string `json:"kind,omitempty"` + + // Operation: An unique identifier for the operation associated with the + // cloned instance. You can use this identifier to retrieve the + // Operations resource, which has information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesDeleteResponse struct { + // Kind: This is always sql#instancesDelete. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesExportRequest struct { + // ExportContext: Contains details about the export operation. + ExportContext *ExportContext `json:"exportContext,omitempty"` +} + +type InstancesExportResponse struct { + // Kind: This is always sql#instancesExport. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesImportRequest struct { + // ImportContext: Contains details about the import operation. + ImportContext *ImportContext `json:"importContext,omitempty"` +} + +type InstancesImportResponse struct { + // Kind: This is always sql#instancesImport. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesInsertResponse struct { + // Kind: This is always sql#instancesInsert. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesListResponse struct { + // Items: List of database instance resources. + Items []*DatabaseInstance `json:"items,omitempty"` + + // Kind: This is always sql#instancesList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type InstancesResetSslConfigResponse struct { + // Kind: This is always sql#instancesResetSslConfig. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. All ssl client certificates will be + // deleted and a new server certificate will be created. Does not take + // effect until the next instance restart. + Operation string `json:"operation,omitempty"` +} + +type InstancesRestartResponse struct { + // Kind: This is always sql#instancesRestart. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesRestoreBackupResponse struct { + // Kind: This is always sql#instancesRestoreBackup. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesSetRootPasswordResponse struct { + // Kind: This is always sql#instancesSetRootPassword. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type InstancesUpdateResponse struct { + // Kind: This is always sql#instancesUpdate. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve information about the operation. + Operation string `json:"operation,omitempty"` +} + +type IpConfiguration struct { + // AuthorizedNetworks: The list of external networks that are allowed to + // connect to the instance using the IP. In CIDR notation, also known as + // 'slash' notation (e.g. 192.168.100.0/24). + AuthorizedNetworks []string `json:"authorizedNetworks,omitempty"` + + // Enabled: Whether the instance should be assigned an IP address or + // not. + Enabled bool `json:"enabled,omitempty"` + + // RequireSsl: Whether the mysqld should default to 'REQUIRE X509' for + // users connecting over IP. + RequireSsl bool `json:"requireSsl,omitempty"` +} + +type IpMapping struct { + // IpAddress: The IP address assigned. + IpAddress string `json:"ipAddress,omitempty"` + + // TimeToRetire: The due time for this IP to be retired in RFC 3339 + // format, for example 2012-11-15T16:19:00.094Z. This field is only + // available when the IP is scheduled to be retired. + TimeToRetire string `json:"timeToRetire,omitempty"` +} + +type LocationPreference struct { + // FollowGaeApplication: The AppEngine application to follow, it must be + // in the same region as the Cloud SQL instance. + FollowGaeApplication string `json:"followGaeApplication,omitempty"` + + // Kind: This is always sql#locationPreference. + Kind string `json:"kind,omitempty"` + + // Zone: The preferred Compute Engine zone (e.g. us-centra1-a, + // us-central1-b, etc.). + Zone string `json:"zone,omitempty"` +} + +type OperationError struct { + // Code: Identifies the specific error that occurred. + Code string `json:"code,omitempty"` + + // Kind: This is always sql#operationError. + Kind string `json:"kind,omitempty"` +} + +type OperationsListResponse struct { + // Items: List of operation resources. + Items []*InstanceOperation `json:"items,omitempty"` + + // Kind: This is always sql#operationsList. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type SetRootPasswordContext struct { + // Kind: This is always sql#setRootUserContext. + Kind string `json:"kind,omitempty"` + + // Password: The password for the root user. + Password string `json:"password,omitempty"` +} + +type Settings struct { + // ActivationPolicy: The activation policy for this instance. This + // specifies when the instance should be activated and is applicable + // only when the instance state is RUNNABLE. This can be one of the + // following. + // ALWAYS: The instance should always be active. + // NEVER: The + // instance should never be activated. + // ON_DEMAND: The instance is + // activated upon receiving requests. + ActivationPolicy string `json:"activationPolicy,omitempty"` + + // AuthorizedGaeApplications: The AppEngine app ids that can access this + // instance. + AuthorizedGaeApplications []string `json:"authorizedGaeApplications,omitempty"` + + // BackupConfiguration: The daily backup configuration for the instance. + BackupConfiguration []*BackupConfiguration `json:"backupConfiguration,omitempty"` + + // DatabaseFlags: The database flags passed to the instance at startup. + DatabaseFlags []*DatabaseFlags `json:"databaseFlags,omitempty"` + + // IpConfiguration: The settings for IP Management. This allows to + // enable or disable the instance IP and manage which external networks + // can connect to the instance. + IpConfiguration *IpConfiguration `json:"ipConfiguration,omitempty"` + + // Kind: This is always sql#settings. + Kind string `json:"kind,omitempty"` + + // LocationPreference: The location preference settings. This allows the + // instance to be located as near as possible to either an AppEngine app + // or GCE zone for better perfomance. + LocationPreference *LocationPreference `json:"locationPreference,omitempty"` + + // PricingPlan: The pricing plan for this instance. This can be either + // PER_USE or PACKAGE. + PricingPlan string `json:"pricingPlan,omitempty"` + + // ReplicationType: The type of replication this instance uses. This can + // be either ASYNCHRONOUS or SYNCHRONOUS. + ReplicationType string `json:"replicationType,omitempty"` + + // SettingsVersion: The version of instance settings. This is a required + // field for update method to make sure concurrent updates are handled + // properly. During update, use the most recent settingsVersion value + // for this instance and do not try to update this value. + SettingsVersion int64 `json:"settingsVersion,omitempty,string"` + + // Tier: The tier of service for this instance, for example D1, D2. For + // more information, see pricing. + Tier string `json:"tier,omitempty"` +} + +type SslCert struct { + // Cert: PEM representation. + Cert string `json:"cert,omitempty"` + + // CertSerialNumber: Serial number, as extracted from the certificate. + CertSerialNumber string `json:"certSerialNumber,omitempty"` + + // CommonName: User supplied name. Constrained to [a-zA-Z.-_ ]+. + CommonName string `json:"commonName,omitempty"` + + // CreateTime: Time when the certificate was created. + CreateTime string `json:"createTime,omitempty"` + + // ExpirationTime: Time when the certificate expires. + ExpirationTime string `json:"expirationTime,omitempty"` + + // Instance: Name of the database instance. + Instance string `json:"instance,omitempty"` + + // Kind: This is always sql#sslCert. + Kind string `json:"kind,omitempty"` + + // Sha1Fingerprint: Sha1 Fingerprint. + Sha1Fingerprint string `json:"sha1Fingerprint,omitempty"` +} + +type SslCertDetail struct { + // CertInfo: The public information about the cert. + CertInfo *SslCert `json:"certInfo,omitempty"` + + // CertPrivateKey: The private key for the client cert, in pem format. + // Keep private in order to protect your security. + CertPrivateKey string `json:"certPrivateKey,omitempty"` +} + +type SslCertsDeleteResponse struct { + // Kind: This is always sql#sslCertsDelete. + Kind string `json:"kind,omitempty"` + + // Operation: An identifier that uniquely identifies the operation. You + // can use this identifier to retrieve the Operations resource that has + // information about the operation. + Operation string `json:"operation,omitempty"` +} + +type SslCertsInsertRequest struct { + // CommonName: User supplied name. Must be a distinct name from the + // other certificates for this instance. New certificates will not be + // usable until the instance is restarted. + CommonName string `json:"commonName,omitempty"` +} + +type SslCertsInsertResponse struct { + // ClientCert: The new client certificate and private key. The new + // certificate will not work until the instance is restarted. + ClientCert *SslCertDetail `json:"clientCert,omitempty"` + + // Kind: This is always sql#sslCertsInsert. + Kind string `json:"kind,omitempty"` + + // ServerCaCert: The server Certificate Authority's certificate. If this + // is missing you can force a new one to be generated by calling + // resetSslConfig method on instances resource.. + ServerCaCert *SslCert `json:"serverCaCert,omitempty"` +} + +type SslCertsListResponse struct { + // Items: List of client certificates for the instance. + Items []*SslCert `json:"items,omitempty"` + + // Kind: This is always sql#sslCertsList. + Kind string `json:"kind,omitempty"` +} + +type Tier struct { + // DiskQuota: The maximum disk size of this tier in bytes. + DiskQuota int64 `json:"DiskQuota,omitempty,string"` + + // RAM: The maximum RAM usage of this tier in bytes. + RAM int64 `json:"RAM,omitempty,string"` + + // Kind: This is always sql#tier. + Kind string `json:"kind,omitempty"` + + // Region: The applicable regions for this tier. Can be us-east1, + // europe-west1, or asia-east1. + Region []string `json:"region,omitempty"` + + // Tier: An identifier for the service tier, for example D1, D2 etc. For + // related information, see Pricing. + Tier string `json:"tier,omitempty"` +} + +type TiersListResponse struct { + // Items: List of tiers. + Items []*Tier `json:"items,omitempty"` + + // Kind: This is always sql#tiersList. + Kind string `json:"kind,omitempty"` +} + +// method id "sql.backupRuns.get": + +type BackupRunsGetCall struct { + s *Service + project string + instance string + backupConfiguration string + dueTime string + opt_ map[string]interface{} +} + +// Get: Retrieves a resource containing information about a backup run. +func (r *BackupRunsService) Get(project string, instance string, backupConfiguration string, dueTime string) *BackupRunsGetCall { + c := &BackupRunsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfiguration = backupConfiguration + c.dueTime = dueTime + return c +} + +func (c *BackupRunsGetCall) Do() (*BackupRun, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("dueTime", fmt.Sprintf("%v", c.dueTime)) + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{backupConfiguration}", url.QueryEscape(c.backupConfiguration), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BackupRun) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a resource containing information about a backup run.", + // "httpMethod": "GET", + // "id": "sql.backupRuns.get", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration", + // "dueTime" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "dueTime": { + // "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/backupRuns/{backupConfiguration}", + // "response": { + // "$ref": "BackupRun" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.backupRuns.list": + +type BackupRunsListCall struct { + s *Service + project string + instance string + backupConfiguration string + opt_ map[string]interface{} +} + +// List: Lists all backup runs associated with a given instance and +// configuration in the reverse chronological order of the enqueued +// time. +func (r *BackupRunsService) List(project string, instance string, backupConfiguration string) *BackupRunsListCall { + c := &BackupRunsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfiguration = backupConfiguration + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of backup runs per response. +func (c *BackupRunsListCall) MaxResults(maxResults int64) *BackupRunsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *BackupRunsListCall) PageToken(pageToken string) *BackupRunsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *BackupRunsListCall) Do() (*BackupRunsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfiguration)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/backupRuns") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BackupRunsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all backup runs associated with a given instance and configuration in the reverse chronological order of the enqueued time.", + // "httpMethod": "GET", + // "id": "sql.backupRuns.list", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "Identifier for the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of backup runs per response.", + // "format": "int32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/backupRuns", + // "response": { + // "$ref": "BackupRunsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.flags.list": + +type FlagsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List all available database flags for Google Cloud SQL +// instances. +func (r *FlagsService) List() *FlagsListCall { + c := &FlagsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +func (c *FlagsListCall) Do() (*FlagsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "flags") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(FlagsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List all available database flags for Google Cloud SQL instances.", + // "httpMethod": "GET", + // "id": "sql.flags.list", + // "path": "flags", + // "response": { + // "$ref": "FlagsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.clone": + +type InstancesCloneCall struct { + s *Service + project string + instancesclonerequest *InstancesCloneRequest + opt_ map[string]interface{} +} + +// Clone: Creates a Cloud SQL instance as a clone of the source +// instance. +func (r *InstancesService) Clone(project string, instancesclonerequest *InstancesCloneRequest) *InstancesCloneCall { + c := &InstancesCloneCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instancesclonerequest = instancesclonerequest + return c +} + +func (c *InstancesCloneCall) Do() (*InstancesCloneResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesclonerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/clone") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesCloneResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a Cloud SQL instance as a clone of the source instance.", + // "httpMethod": "POST", + // "id": "sql.instances.clone", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Project ID of the source as well as the clone Cloud SQL instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/clone", + // "request": { + // "$ref": "InstancesCloneRequest" + // }, + // "response": { + // "$ref": "InstancesCloneResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.delete": + +type InstancesDeleteCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Delete: Deletes a Cloud SQL instance. +func (r *InstancesService) Delete(project string, instance string) *InstancesDeleteCall { + c := &InstancesDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesDeleteCall) Do() (*InstancesDeleteResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesDeleteResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes a Cloud SQL instance.", + // "httpMethod": "DELETE", + // "id": "sql.instances.delete", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "response": { + // "$ref": "InstancesDeleteResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.export": + +type InstancesExportCall struct { + s *Service + project string + instance string + instancesexportrequest *InstancesExportRequest + opt_ map[string]interface{} +} + +// Export: Exports data from a Cloud SQL instance to a Google Cloud +// Storage bucket as a MySQL dump file. +func (r *InstancesService) Export(project string, instance string, instancesexportrequest *InstancesExportRequest) *InstancesExportCall { + c := &InstancesExportCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.instancesexportrequest = instancesexportrequest + return c +} + +func (c *InstancesExportCall) Do() (*InstancesExportResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesexportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/export") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesExportResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Exports data from a Cloud SQL instance to a Google Cloud Storage bucket as a MySQL dump file.", + // "httpMethod": "POST", + // "id": "sql.instances.export", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be exported.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/export", + // "request": { + // "$ref": "InstancesExportRequest" + // }, + // "response": { + // "$ref": "InstancesExportResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "sql.instances.get": + +type InstancesGetCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Get: Retrieves a resource containing information about a Cloud SQL +// instance. +func (r *InstancesService) Get(project string, instance string) *InstancesGetCall { + c := &InstancesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesGetCall) Do() (*DatabaseInstance, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DatabaseInstance) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a resource containing information about a Cloud SQL instance.", + // "httpMethod": "GET", + // "id": "sql.instances.get", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Database instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "response": { + // "$ref": "DatabaseInstance" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.import": + +type InstancesImportCall struct { + s *Service + project string + instance string + instancesimportrequest *InstancesImportRequest + opt_ map[string]interface{} +} + +// Import: Imports data into a Cloud SQL instance from a MySQL dump file +// in Google Cloud Storage. +func (r *InstancesService) Import(project string, instance string, instancesimportrequest *InstancesImportRequest) *InstancesImportCall { + c := &InstancesImportCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.instancesimportrequest = instancesimportrequest + return c +} + +func (c *InstancesImportCall) Do() (*InstancesImportResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesimportrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/import") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesImportResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Imports data into a Cloud SQL instance from a MySQL dump file in Google Cloud Storage.", + // "httpMethod": "POST", + // "id": "sql.instances.import", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/import", + // "request": { + // "$ref": "InstancesImportRequest" + // }, + // "response": { + // "$ref": "InstancesImportResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/cloud-platform" + // ] + // } + +} + +// method id "sql.instances.insert": + +type InstancesInsertCall struct { + s *Service + project string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Insert: Creates a new Cloud SQL instance. +func (r *InstancesService) Insert(project string, databaseinstance *DatabaseInstance) *InstancesInsertCall { + c := &InstancesInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesInsertCall) Do() (*InstancesInsertResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesInsertResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesInsertResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.list": + +type InstancesListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Lists instances under a given project in the alphabetical order +// of the instance name. +func (r *InstancesService) List(project string) *InstancesListCall { + c := &InstancesListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +// MaxResults sets the optional parameter "maxResults": The maximum +// number of results to return per response. +func (c *InstancesListCall) MaxResults(maxResults int64) *InstancesListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *InstancesListCall) PageToken(pageToken string) *InstancesListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *InstancesListCall) Do() (*InstancesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists instances under a given project in the alphabetical order of the instance name.", + // "httpMethod": "GET", + // "id": "sql.instances.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "maxResults": { + // "description": "The maximum number of results to return per response.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project for which to list Cloud SQL instances.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances", + // "response": { + // "$ref": "InstancesListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.patch": + +type InstancesPatchCall struct { + s *Service + project string + instance string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Patch: Updates settings of a Cloud SQL instance. Caution: This is not +// a partial update, so you must include values for all the settings +// that you want to retain. For partial updates, use patch.. This method +// supports patch semantics. +func (r *InstancesService) Patch(project string, instance string, databaseinstance *DatabaseInstance) *InstancesPatchCall { + c := &InstancesPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesPatchCall) Do() (*InstancesUpdateResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesUpdateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "sql.instances.patch", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesUpdateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.resetSslConfig": + +type InstancesResetSslConfigCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// ResetSslConfig: Deletes all client certificates and generates a new +// server SSL certificate for the instance. The changes will not take +// effect until the instance is restarted. Existing instances without a +// server certificate will need to call this once to set a server +// certificate. +func (r *InstancesService) ResetSslConfig(project string, instance string) *InstancesResetSslConfigCall { + c := &InstancesResetSslConfigCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesResetSslConfigCall) Do() (*InstancesResetSslConfigResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/resetSslConfig") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesResetSslConfigResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes all client certificates and generates a new server SSL certificate for the instance. The changes will not take effect until the instance is restarted. Existing instances without a server certificate will need to call this once to set a server certificate.", + // "httpMethod": "POST", + // "id": "sql.instances.resetSslConfig", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/resetSslConfig", + // "response": { + // "$ref": "InstancesResetSslConfigResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.restart": + +type InstancesRestartCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// Restart: Restarts a Cloud SQL instance. +func (r *InstancesService) Restart(project string, instance string) *InstancesRestartCall { + c := &InstancesRestartCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *InstancesRestartCall) Do() (*InstancesRestartResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restart") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesRestartResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Restarts a Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.restart", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be restarted.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/restart", + // "response": { + // "$ref": "InstancesRestartResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.restoreBackup": + +type InstancesRestoreBackupCall struct { + s *Service + project string + instance string + backupConfigurationid string + dueTime string + opt_ map[string]interface{} +} + +// RestoreBackup: Restores a backup of a Cloud SQL instance. +func (r *InstancesService) RestoreBackup(project string, instance string, backupConfigurationid string, dueTime string) *InstancesRestoreBackupCall { + c := &InstancesRestoreBackupCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.backupConfigurationid = backupConfigurationid + c.dueTime = dueTime + return c +} + +func (c *InstancesRestoreBackupCall) Do() (*InstancesRestoreBackupResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("backupConfiguration", fmt.Sprintf("%v", c.backupConfigurationid)) + params.Set("dueTime", fmt.Sprintf("%v", c.dueTime)) + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/restoreBackup") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesRestoreBackupResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Restores a backup of a Cloud SQL instance.", + // "httpMethod": "POST", + // "id": "sql.instances.restoreBackup", + // "parameterOrder": [ + // "project", + // "instance", + // "backupConfiguration", + // "dueTime" + // ], + // "parameters": { + // "backupConfiguration": { + // "description": "The identifier of the backup configuration. This gets generated automatically when a backup configuration is created.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "dueTime": { + // "description": "The time when this run is due to start in RFC 3339 format, for example 2012-11-15T16:19:00.094Z.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/restoreBackup", + // "response": { + // "$ref": "InstancesRestoreBackupResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.setRootPassword": + +type InstancesSetRootPasswordCall struct { + s *Service + project string + instance string + instancesetrootpasswordrequest *InstanceSetRootPasswordRequest + opt_ map[string]interface{} +} + +// SetRootPassword: Sets the password for the root user. +func (r *InstancesService) SetRootPassword(project string, instance string, instancesetrootpasswordrequest *InstanceSetRootPasswordRequest) *InstancesSetRootPasswordCall { + c := &InstancesSetRootPasswordCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.instancesetrootpasswordrequest = instancesetrootpasswordrequest + return c +} + +func (c *InstancesSetRootPasswordCall) Do() (*InstancesSetRootPasswordResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.instancesetrootpasswordrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/setRootPassword") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesSetRootPasswordResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Sets the password for the root user.", + // "httpMethod": "POST", + // "id": "sql.instances.setRootPassword", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/setRootPassword", + // "request": { + // "$ref": "InstanceSetRootPasswordRequest" + // }, + // "response": { + // "$ref": "InstancesSetRootPasswordResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.instances.update": + +type InstancesUpdateCall struct { + s *Service + project string + instance string + databaseinstance *DatabaseInstance + opt_ map[string]interface{} +} + +// Update: Updates settings of a Cloud SQL instance. Caution: This is +// not a partial update, so you must include values for all the settings +// that you want to retain. For partial updates, use patch. +func (r *InstancesService) Update(project string, instance string, databaseinstance *DatabaseInstance) *InstancesUpdateCall { + c := &InstancesUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.databaseinstance = databaseinstance + return c +} + +func (c *InstancesUpdateCall) Do() (*InstancesUpdateResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.databaseinstance) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstancesUpdateResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates settings of a Cloud SQL instance. Caution: This is not a partial update, so you must include values for all the settings that you want to retain. For partial updates, use patch.", + // "etagRequired": true, + // "httpMethod": "PUT", + // "id": "sql.instances.update", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}", + // "request": { + // "$ref": "DatabaseInstance" + // }, + // "response": { + // "$ref": "InstancesUpdateResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.operations.get": + +type OperationsGetCall struct { + s *Service + project string + instance string + operation string + opt_ map[string]interface{} +} + +// Get: Retrieves an instance operation that has been performed on an +// instance. +func (r *OperationsService) Get(project string, instance string, operation string) *OperationsGetCall { + c := &OperationsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.operation = operation + return c +} + +func (c *OperationsGetCall) Do() (*InstanceOperation, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/operations/{operation}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{operation}", url.QueryEscape(c.operation), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(InstanceOperation) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves an instance operation that has been performed on an instance.", + // "httpMethod": "GET", + // "id": "sql.operations.get", + // "parameterOrder": [ + // "project", + // "instance", + // "operation" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "operation": { + // "description": "Instance operation ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/operations/{operation}", + // "response": { + // "$ref": "InstanceOperation" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.operations.list": + +type OperationsListCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// List: Lists all instance operations that have been performed on the +// given Cloud SQL instance in the reverse chronological order of the +// start time. +func (r *OperationsService) List(project string, instance string) *OperationsListCall { + c := &OperationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of operations per response. +func (c *OperationsListCall) MaxResults(maxResults int64) *OperationsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *OperationsListCall) PageToken(pageToken string) *OperationsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *OperationsListCall) Do() (*OperationsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/operations") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(OperationsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all instance operations that have been performed on the given Cloud SQL instance in the reverse chronological order of the start time.", + // "httpMethod": "GET", + // "id": "sql.operations.list", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of operations per response.", + // "format": "uint32", + // "location": "query", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/operations", + // "response": { + // "$ref": "OperationsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.sslCerts.delete": + +type SslCertsDeleteCall struct { + s *Service + project string + instance string + sha1Fingerprint string + opt_ map[string]interface{} +} + +// Delete: Deletes the SSL certificate. The change will not take effect +// until the instance is restarted. +func (r *SslCertsService) Delete(project string, instance string, sha1Fingerprint string) *SslCertsDeleteCall { + c := &SslCertsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.sha1Fingerprint = sha1Fingerprint + return c +} + +func (c *SslCertsDeleteCall) Do() (*SslCertsDeleteResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{sha1Fingerprint}", url.QueryEscape(c.sha1Fingerprint), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SslCertsDeleteResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Deletes the SSL certificate. The change will not take effect until the instance is restarted.", + // "httpMethod": "DELETE", + // "id": "sql.sslCerts.delete", + // "parameterOrder": [ + // "project", + // "instance", + // "sha1Fingerprint" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance to be deleted.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sha1Fingerprint": { + // "description": "Sha1 FingerPrint.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", + // "response": { + // "$ref": "SslCertsDeleteResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.sslCerts.get": + +type SslCertsGetCall struct { + s *Service + project string + instance string + sha1Fingerprint string + opt_ map[string]interface{} +} + +// Get: Retrieves a particular SSL certificate. Does not include the +// private key (required for usage). The private key must be saved from +// the response to initial creation. +func (r *SslCertsService) Get(project string, instance string, sha1Fingerprint string) *SslCertsGetCall { + c := &SslCertsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.sha1Fingerprint = sha1Fingerprint + return c +} + +func (c *SslCertsGetCall) Do() (*SslCert, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{sha1Fingerprint}", url.QueryEscape(c.sha1Fingerprint), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SslCert) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a particular SSL certificate. Does not include the private key (required for usage). The private key must be saved from the response to initial creation.", + // "httpMethod": "GET", + // "id": "sql.sslCerts.get", + // "parameterOrder": [ + // "project", + // "instance", + // "sha1Fingerprint" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project that contains the instance.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sha1Fingerprint": { + // "description": "Sha1 FingerPrint.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/sslCerts/{sha1Fingerprint}", + // "response": { + // "$ref": "SslCert" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.sslCerts.insert": + +type SslCertsInsertCall struct { + s *Service + project string + instance string + sslcertsinsertrequest *SslCertsInsertRequest + opt_ map[string]interface{} +} + +// Insert: Creates an SSL certificate and returns it along with the +// private key and server certificate authority. The new certificate +// will not be usable until the instance is restarted. +func (r *SslCertsService) Insert(project string, instance string, sslcertsinsertrequest *SslCertsInsertRequest) *SslCertsInsertCall { + c := &SslCertsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + c.sslcertsinsertrequest = sslcertsinsertrequest + return c +} + +func (c *SslCertsInsertCall) Do() (*SslCertsInsertResponse, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.sslcertsinsertrequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SslCertsInsertResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates an SSL certificate and returns it along with the private key and server certificate authority. The new certificate will not be usable until the instance is restarted.", + // "httpMethod": "POST", + // "id": "sql.sslCerts.insert", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project to which the newly created Cloud SQL instances should belong.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/sslCerts", + // "request": { + // "$ref": "SslCertsInsertRequest" + // }, + // "response": { + // "$ref": "SslCertsInsertResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.sslCerts.list": + +type SslCertsListCall struct { + s *Service + project string + instance string + opt_ map[string]interface{} +} + +// List: Lists all of the current SSL certificates for the instance. +func (r *SslCertsService) List(project string, instance string) *SslCertsListCall { + c := &SslCertsListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.instance = instance + return c +} + +func (c *SslCertsListCall) Do() (*SslCertsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/instances/{instance}/sslCerts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{instance}", url.QueryEscape(c.instance), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(SslCertsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all of the current SSL certificates for the instance.", + // "httpMethod": "GET", + // "id": "sql.sslCerts.list", + // "parameterOrder": [ + // "project", + // "instance" + // ], + // "parameters": { + // "instance": { + // "description": "Cloud SQL instance ID. This does not include the project ID.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "project": { + // "description": "Project ID of the project for which to list Cloud SQL instances.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/instances/{instance}/sslCerts", + // "response": { + // "$ref": "SslCertsListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} + +// method id "sql.tiers.list": + +type TiersListCall struct { + s *Service + project string + opt_ map[string]interface{} +} + +// List: Lists all available service tiers for Google Cloud SQL, for +// example D1, D2. For related information, see Pricing. +func (r *TiersService) List(project string) *TiersListCall { + c := &TiersListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + return c +} + +func (c *TiersListCall) Do() (*TiersListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "projects/{project}/tiers") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TiersListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lists all available service tiers for Google Cloud SQL, for example D1, D2. For related information, see Pricing.", + // "httpMethod": "GET", + // "id": "sql.tiers.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "Project ID of the project for which to list tiers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "projects/{project}/tiers", + // "response": { + // "$ref": "TiersListResponse" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/sqlservice.admin" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-api.json b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-api.json new file mode 100644 index 0000000000000..e365387d50f43 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-api.json @@ -0,0 +1,1426 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/IpR4V709mf4kvv_yPnB7Gmo_IHU\"", + "discoveryVersion": "v1", + "id": "storage:v1beta1", + "name": "storage", + "version": "v1beta1", + "title": "Cloud Storage API", + "description": "Lets you store and retrieve potentially-large, immutable data objects.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", + "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" + }, + "documentationLink": "https://developers.google.com/storage/docs/json_api/", + "labels": [ + "labs" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/storage/v1beta1/", + "basePath": "/storage/v1beta1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "storage/v1beta1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "Bucket": { + "id": "Bucket", + "type": "object", + "description": "A bucket.", + "properties": { + "acl": { + "type": "array", + "description": "Access controls on the bucket.", + "items": { + "$ref": "BucketAccessControl" + }, + "annotations": { + "required": [ + "storage.buckets.update" + ] + } + }, + "defaultObjectAcl": { + "type": "array", + "description": "Default access controls to apply to new objects when no ACL is provided.", + "items": { + "$ref": "ObjectAccessControl" + } + }, + "id": { + "type": "string", + "description": "The name of the bucket.", + "annotations": { + "required": [ + "storage.buckets.insert" + ] + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For buckets, this is always storage#bucket.", + "default": "storage#bucket" + }, + "location": { + "type": "string", + "description": "The location of the bucket. Object data for objects in the bucket resides in physical storage in this location. Can be US or EU. Defaults to US." + }, + "owner": { + "type": "object", + "description": "The owner of the bucket. This will always be the project team's owner group.", + "properties": { + "entity": { + "type": "string", + "description": "The entity, in the form group-groupId." + }, + "entityId": { + "type": "string", + "description": "The ID for the entity." + } + } + }, + "projectId": { + "type": "string", + "description": "The project the bucket belongs to.", + "format": "uint64", + "annotations": { + "required": [ + "storage.buckets.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "The URI of this bucket." + }, + "timeCreated": { + "type": "string", + "description": "Creation time of the bucket in RFC 3339 format.", + "format": "date-time" + }, + "website": { + "type": "object", + "description": "The bucket's website configuration.", + "properties": { + "mainPageSuffix": { + "type": "string", + "description": "Behaves as the bucket's directory index where missing objects are treated as potential directories." + }, + "notFoundPage": { + "type": "string", + "description": "The custom object to return when a requested resource is not found." + } + } + } + } + }, + "BucketAccessControl": { + "id": "BucketAccessControl", + "type": "object", + "description": "An access-control entry.", + "properties": { + "bucket": { + "type": "string", + "description": "The name of the bucket." + }, + "domain": { + "type": "string", + "description": "The domain associated with the entity, if any." + }, + "email": { + "type": "string", + "description": "The email address associated with the entity, if any." + }, + "entity": { + "type": "string", + "description": "The entity holding the permission, in one of the following forms: \n- user-userId \n- user-email \n- group-groupId \n- group-email \n- domain-domain \n- allUsers \n- allAuthenticatedUsers Examples: \n- The user liz@example.com would be user-liz@example.com. \n- The group example@googlegroups.com would be group-example@googlegroups.com. \n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.", + "annotations": { + "required": [ + "storage.bucketAccessControls.insert" + ] + } + }, + "entityId": { + "type": "string", + "description": "The ID for the entity, if any." + }, + "id": { + "type": "string", + "description": "The ID of the access-control entry." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.", + "default": "storage#bucketAccessControl" + }, + "role": { + "type": "string", + "description": "The access permission for the entity. Can be READER, WRITER, or OWNER.", + "annotations": { + "required": [ + "storage.bucketAccessControls.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "The link to this access-control entry." + } + } + }, + "BucketAccessControls": { + "id": "BucketAccessControls", + "type": "object", + "description": "An access-control list.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "BucketAccessControl" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of bucket access control entries, this is always storage#bucketAccessControls.", + "default": "storage#bucketAccessControls" + } + } + }, + "Buckets": { + "id": "Buckets", + "type": "object", + "description": "A list of buckets.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "Bucket" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of buckets, this is always storage#buckets.", + "default": "storage#buckets" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "Object": { + "id": "Object", + "type": "object", + "description": "An object.", + "properties": { + "acl": { + "type": "array", + "description": "Access controls on the object.", + "items": { + "$ref": "ObjectAccessControl" + }, + "annotations": { + "required": [ + "storage.objects.update" + ] + } + }, + "bucket": { + "type": "string", + "description": "The bucket containing this object." + }, + "cacheControl": { + "type": "string", + "description": "Cache-Control directive for the object data." + }, + "contentDisposition": { + "type": "string", + "description": "Content-Disposition of the object data." + }, + "contentEncoding": { + "type": "string", + "description": "Content-Encoding of the object data." + }, + "contentLanguage": { + "type": "string", + "description": "Content-Language of the object data." + }, + "id": { + "type": "string", + "description": "The ID of the object." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For objects, this is always storage#object.", + "default": "storage#object" + }, + "media": { + "type": "object", + "description": "Object media data. Provided on your behalf when uploading raw media or multipart/related with an auxiliary media part.", + "properties": { + "algorithm": { + "type": "string", + "description": "Hash algorithm used. Currently only MD5 is supported. Required if a hash is provided.", + "default": "MD5" + }, + "contentType": { + "type": "string", + "description": "Content-Type of the object data.", + "annotations": { + "required": [ + "storage.objects.insert", + "storage.objects.update" + ] + } + }, + "data": { + "type": "string", + "description": "URL-safe Base64-encoded data. This property can be used to insert objects under 64KB in size, and will only be returned in response to the get method for objects so created. When this resource is returned in response to the list method, this property is omitted.", + "format": "byte", + "annotations": { + "required": [ + "storage.objects.insert" + ] + } + }, + "hash": { + "type": "string", + "description": "Hash of the data. Required if a hash algorithm is provided." + }, + "length": { + "type": "string", + "description": "Content-Length of the data in bytes.", + "format": "uint64" + }, + "link": { + "type": "string", + "description": "Media download link." + }, + "timeCreated": { + "type": "string", + "description": "Creation time of the data in RFC 3339 format.", + "format": "date-time" + } + } + }, + "metadata": { + "type": "object", + "description": "User-provided metadata, in key/value pairs.", + "additionalProperties": { + "type": "string", + "description": "An individual metadata entry." + } + }, + "name": { + "type": "string", + "description": "The name of this object. Required if not specified by URL parameter." + }, + "owner": { + "type": "object", + "description": "The owner of the object. This will always be the uploader of the object.", + "properties": { + "entity": { + "type": "string", + "description": "The entity, in the form user-userId." + }, + "entityId": { + "type": "string", + "description": "The ID for the entity." + } + } + }, + "selfLink": { + "type": "string", + "description": "The link to this object." + } + } + }, + "ObjectAccessControl": { + "id": "ObjectAccessControl", + "type": "object", + "description": "An access-control entry.", + "properties": { + "bucket": { + "type": "string", + "description": "The name of the bucket." + }, + "domain": { + "type": "string", + "description": "The domain associated with the entity, if any." + }, + "email": { + "type": "string", + "description": "The email address associated with the entity, if any." + }, + "entity": { + "type": "string", + "description": "The entity holding the permission, in one of the following forms: \n- user-userId \n- user-email \n- group-groupId \n- group-email \n- domain-domain \n- allUsers \n- allAuthenticatedUsers Examples: \n- The user liz@example.com would be user-liz@example.com. \n- The group example@googlegroups.com would be group-example@googlegroups.com. \n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.", + "annotations": { + "required": [ + "storage.objectAccessControls.insert" + ] + } + }, + "entityId": { + "type": "string", + "description": "The ID for the entity, if any." + }, + "id": { + "type": "string", + "description": "The ID of the access-control entry." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For object access control entries, this is always storage#objectAccessControl.", + "default": "storage#objectAccessControl" + }, + "object": { + "type": "string", + "description": "The name of the object." + }, + "role": { + "type": "string", + "description": "The access permission for the entity. Can be READER or OWNER.", + "annotations": { + "required": [ + "storage.objectAccessControls.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "The link to this access-control entry." + } + } + }, + "ObjectAccessControls": { + "id": "ObjectAccessControls", + "type": "object", + "description": "An access-control list.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "ObjectAccessControl" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of object access control entries, this is always storage#objectAccessControls.", + "default": "storage#objectAccessControls" + } + } + }, + "Objects": { + "id": "Objects", + "type": "object", + "description": "A list of objects.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "Object" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of objects, this is always storage#objects.", + "default": "storage#objects" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "prefixes": { + "type": "array", + "description": "The list of prefixes of objects matching-but-not-listed up to and including the requested delimiter.", + "items": { + "type": "string" + } + } + } + } + }, + "resources": { + "bucketAccessControls": { + "methods": { + "delete": { + "id": "storage.bucketAccessControls.delete", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "DELETE", + "description": "Deletes the ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "get": { + "id": "storage.bucketAccessControls.get", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "GET", + "description": "Returns the ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "insert": { + "id": "storage.bucketAccessControls.insert", + "path": "b/{bucket}/acl", + "httpMethod": "POST", + "description": "Creates a new ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "list": { + "id": "storage.bucketAccessControls.list", + "path": "b/{bucket}/acl", + "httpMethod": "GET", + "description": "Retrieves ACL entries on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "BucketAccessControls" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "patch": { + "id": "storage.bucketAccessControls.patch", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "PATCH", + "description": "Updates an ACL entry on the specified bucket. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "update": { + "id": "storage.bucketAccessControls.update", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "PUT", + "description": "Updates an ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + } + } + }, + "buckets": { + "methods": { + "delete": { + "id": "storage.buckets.delete", + "path": "b/{bucket}", + "httpMethod": "DELETE", + "description": "Deletes an empty bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "get": { + "id": "storage.buckets.get", + "path": "b/{bucket}", + "httpMethod": "GET", + "description": "Returns metadata for the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "insert": { + "id": "storage.buckets.insert", + "path": "b", + "httpMethod": "POST", + "description": "Creates a new bucket.", + "parameters": { + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "list": { + "id": "storage.buckets.list", + "path": "b", + "httpMethod": "GET", + "description": "Retrieves a list of buckets for a given project.", + "parameters": { + "max-results": { + "type": "integer", + "description": "Maximum number of buckets to return.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "projectId": { + "type": "string", + "description": "A valid API project identifier.", + "required": true, + "format": "uint64", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "projectId" + ], + "response": { + "$ref": "Buckets" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "patch": { + "id": "storage.buckets.patch", + "path": "b/{bucket}", + "httpMethod": "PATCH", + "description": "Updates a bucket. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "update": { + "id": "storage.buckets.update", + "path": "b/{bucket}", + "httpMethod": "PUT", + "description": "Updates a bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + } + } + }, + "objectAccessControls": { + "methods": { + "delete": { + "id": "storage.objectAccessControls.delete", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "DELETE", + "description": "Deletes the ACL entry for the specified entity on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "get": { + "id": "storage.objectAccessControls.get", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "GET", + "description": "Returns the ACL entry for the specified entity on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "insert": { + "id": "storage.objectAccessControls.insert", + "path": "b/{bucket}/o/{object}/acl", + "httpMethod": "POST", + "description": "Creates a new ACL entry on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "list": { + "id": "storage.objectAccessControls.list", + "path": "b/{bucket}/o/{object}/acl", + "httpMethod": "GET", + "description": "Retrieves ACL entries on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "response": { + "$ref": "ObjectAccessControls" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "patch": { + "id": "storage.objectAccessControls.patch", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "PATCH", + "description": "Updates an ACL entry on the specified object. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "update": { + "id": "storage.objectAccessControls.update", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "PUT", + "description": "Updates an ACL entry on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + } + } + }, + "objects": { + "methods": { + "delete": { + "id": "storage.objects.delete", + "path": "b/{bucket}/o/{object}", + "httpMethod": "DELETE", + "description": "Deletes data blobs and associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "get": { + "id": "storage.objects.get", + "path": "b/{bucket}/o/{object}", + "httpMethod": "GET", + "description": "Retrieves objects or their associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + }, + "insert": { + "id": "storage.objects.insert", + "path": "b/{bucket}/o", + "httpMethod": "POST", + "description": "Stores new data blobs and associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + "required": true, + "location": "path" + }, + "name": { + "type": "string", + "description": "Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl, unless the object resource specifies the acl property, when it defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true, + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/storage/v1beta1/b/{bucket}/o" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/storage/v1beta1/b/{bucket}/o" + } + } + } + }, + "list": { + "id": "storage.objects.list", + "path": "b/{bucket}/o", + "httpMethod": "GET", + "description": "Retrieves a list of objects matching the criteria.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which to look for objects.", + "required": true, + "location": "path" + }, + "delimiter": { + "type": "string", + "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + "location": "query" + }, + "max-results": { + "type": "integer", + "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "prefix": { + "type": "string", + "description": "Filter results to objects whose names begin with this prefix.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to no_acl.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "Objects" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsSubscription": true + }, + "patch": { + "id": "storage.objects.patch", + "path": "b/{bucket}/o/{object}", + "httpMethod": "PATCH", + "description": "Updates a data blob's associated metadata. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "update": { + "id": "storage.objects.update", + "path": "b/{bucket}/o/{object}", + "httpMethod": "PUT", + "description": "Updates a data blob's associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "no_acl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-gen.go b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-gen.go new file mode 100644 index 0000000000000..c72ebca5c15fa --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta1/storage-gen.go @@ -0,0 +1,2609 @@ +// Package storage provides access to the Cloud Storage API. +// +// See https://developers.google.com/storage/docs/json_api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/storage/v1beta1" +// ... +// storageService, err := storage.New(oauthHttpClient) +package storage + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "storage:v1beta1" +const apiName = "storage" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/storage/v1beta1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BucketAccessControls = NewBucketAccessControlsService(s) + s.Buckets = NewBucketsService(s) + s.ObjectAccessControls = NewObjectAccessControlsService(s) + s.Objects = NewObjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BucketAccessControls *BucketAccessControlsService + + Buckets *BucketsService + + ObjectAccessControls *ObjectAccessControlsService + + Objects *ObjectsService +} + +func NewBucketAccessControlsService(s *Service) *BucketAccessControlsService { + rs := &BucketAccessControlsService{s: s} + return rs +} + +type BucketAccessControlsService struct { + s *Service +} + +func NewBucketsService(s *Service) *BucketsService { + rs := &BucketsService{s: s} + return rs +} + +type BucketsService struct { + s *Service +} + +func NewObjectAccessControlsService(s *Service) *ObjectAccessControlsService { + rs := &ObjectAccessControlsService{s: s} + return rs +} + +type ObjectAccessControlsService struct { + s *Service +} + +func NewObjectsService(s *Service) *ObjectsService { + rs := &ObjectsService{s: s} + return rs +} + +type ObjectsService struct { + s *Service +} + +type Bucket struct { + // Acl: Access controls on the bucket. + Acl []*BucketAccessControl `json:"acl,omitempty"` + + // DefaultObjectAcl: Default access controls to apply to new objects + // when no ACL is provided. + DefaultObjectAcl []*ObjectAccessControl `json:"defaultObjectAcl,omitempty"` + + // Id: The name of the bucket. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For buckets, this is always + // storage#bucket. + Kind string `json:"kind,omitempty"` + + // Location: The location of the bucket. Object data for objects in the + // bucket resides in physical storage in this location. Can be US or EU. + // Defaults to US. + Location string `json:"location,omitempty"` + + // Owner: The owner of the bucket. This will always be the project + // team's owner group. + Owner *BucketOwner `json:"owner,omitempty"` + + // ProjectId: The project the bucket belongs to. + ProjectId uint64 `json:"projectId,omitempty,string"` + + // SelfLink: The URI of this bucket. + SelfLink string `json:"selfLink,omitempty"` + + // TimeCreated: Creation time of the bucket in RFC 3339 format. + TimeCreated string `json:"timeCreated,omitempty"` + + // Website: The bucket's website configuration. + Website *BucketWebsite `json:"website,omitempty"` +} + +type BucketOwner struct { + // Entity: The entity, in the form group-groupId. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity. + EntityId string `json:"entityId,omitempty"` +} + +type BucketWebsite struct { + // MainPageSuffix: Behaves as the bucket's directory index where missing + // objects are treated as potential directories. + MainPageSuffix string `json:"mainPageSuffix,omitempty"` + + // NotFoundPage: The custom object to return when a requested resource + // is not found. + NotFoundPage string `json:"notFoundPage,omitempty"` +} + +type BucketAccessControl struct { + // Bucket: The name of the bucket. + Bucket string `json:"bucket,omitempty"` + + // Domain: The domain associated with the entity, if any. + Domain string `json:"domain,omitempty"` + + // Email: The email address associated with the entity, if any. + Email string `json:"email,omitempty"` + + // Entity: The entity holding the permission, in one of the following + // forms: + // - user-userId + // - user-email + // - group-groupId + // - group-email + // + // - domain-domain + // - allUsers + // - allAuthenticatedUsers Examples: + // - + // The user liz@example.com would be user-liz@example.com. + // - The group + // example@googlegroups.com would be group-example@googlegroups.com. + // - + // To refer to all members of the Google Apps for Business domain + // example.com, the entity would be domain-example.com. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity, if any. + EntityId string `json:"entityId,omitempty"` + + // Id: The ID of the access-control entry. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For bucket access control entries, + // this is always storage#bucketAccessControl. + Kind string `json:"kind,omitempty"` + + // Role: The access permission for the entity. Can be READER, WRITER, or + // OWNER. + Role string `json:"role,omitempty"` + + // SelfLink: The link to this access-control entry. + SelfLink string `json:"selfLink,omitempty"` +} + +type BucketAccessControls struct { + // Items: The list of items. + Items []*BucketAccessControl `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of bucket access control + // entries, this is always storage#bucketAccessControls. + Kind string `json:"kind,omitempty"` +} + +type Buckets struct { + // Items: The list of items. + Items []*Bucket `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of buckets, this is always + // storage#buckets. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Object struct { + // Acl: Access controls on the object. + Acl []*ObjectAccessControl `json:"acl,omitempty"` + + // Bucket: The bucket containing this object. + Bucket string `json:"bucket,omitempty"` + + // CacheControl: Cache-Control directive for the object data. + CacheControl string `json:"cacheControl,omitempty"` + + // ContentDisposition: Content-Disposition of the object data. + ContentDisposition string `json:"contentDisposition,omitempty"` + + // ContentEncoding: Content-Encoding of the object data. + ContentEncoding string `json:"contentEncoding,omitempty"` + + // ContentLanguage: Content-Language of the object data. + ContentLanguage string `json:"contentLanguage,omitempty"` + + // Id: The ID of the object. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For objects, this is always + // storage#object. + Kind string `json:"kind,omitempty"` + + // Media: Object media data. Provided on your behalf when uploading raw + // media or multipart/related with an auxiliary media part. + Media *ObjectMedia `json:"media,omitempty"` + + // Metadata: User-provided metadata, in key/value pairs. + Metadata map[string]string `json:"metadata,omitempty"` + + // Name: The name of this object. Required if not specified by URL + // parameter. + Name string `json:"name,omitempty"` + + // Owner: The owner of the object. This will always be the uploader of + // the object. + Owner *ObjectOwner `json:"owner,omitempty"` + + // SelfLink: The link to this object. + SelfLink string `json:"selfLink,omitempty"` +} + +type ObjectMedia struct { + // Algorithm: Hash algorithm used. Currently only MD5 is supported. + // Required if a hash is provided. + Algorithm string `json:"algorithm,omitempty"` + + // ContentType: Content-Type of the object data. + ContentType string `json:"contentType,omitempty"` + + // Data: URL-safe Base64-encoded data. This property can be used to + // insert objects under 64KB in size, and will only be returned in + // response to the get method for objects so created. When this resource + // is returned in response to the list method, this property is omitted. + Data string `json:"data,omitempty"` + + // Hash: Hash of the data. Required if a hash algorithm is provided. + Hash string `json:"hash,omitempty"` + + // Length: Content-Length of the data in bytes. + Length uint64 `json:"length,omitempty,string"` + + // Link: Media download link. + Link string `json:"link,omitempty"` + + // TimeCreated: Creation time of the data in RFC 3339 format. + TimeCreated string `json:"timeCreated,omitempty"` +} + +type ObjectOwner struct { + // Entity: The entity, in the form user-userId. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity. + EntityId string `json:"entityId,omitempty"` +} + +type ObjectAccessControl struct { + // Bucket: The name of the bucket. + Bucket string `json:"bucket,omitempty"` + + // Domain: The domain associated with the entity, if any. + Domain string `json:"domain,omitempty"` + + // Email: The email address associated with the entity, if any. + Email string `json:"email,omitempty"` + + // Entity: The entity holding the permission, in one of the following + // forms: + // - user-userId + // - user-email + // - group-groupId + // - group-email + // + // - domain-domain + // - allUsers + // - allAuthenticatedUsers Examples: + // - + // The user liz@example.com would be user-liz@example.com. + // - The group + // example@googlegroups.com would be group-example@googlegroups.com. + // - + // To refer to all members of the Google Apps for Business domain + // example.com, the entity would be domain-example.com. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity, if any. + EntityId string `json:"entityId,omitempty"` + + // Id: The ID of the access-control entry. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For object access control entries, + // this is always storage#objectAccessControl. + Kind string `json:"kind,omitempty"` + + // Object: The name of the object. + Object string `json:"object,omitempty"` + + // Role: The access permission for the entity. Can be READER or OWNER. + Role string `json:"role,omitempty"` + + // SelfLink: The link to this access-control entry. + SelfLink string `json:"selfLink,omitempty"` +} + +type ObjectAccessControls struct { + // Items: The list of items. + Items []*ObjectAccessControl `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of object access control + // entries, this is always storage#objectAccessControls. + Kind string `json:"kind,omitempty"` +} + +type Objects struct { + // Items: The list of items. + Items []*Object `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of objects, this is always + // storage#objects. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Prefixes: The list of prefixes of objects matching-but-not-listed up + // to and including the requested delimiter. + Prefixes []string `json:"prefixes,omitempty"` +} + +// method id "storage.bucketAccessControls.delete": + +type BucketAccessControlsDeleteCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Delete: Deletes the ACL entry for the specified entity on the +// specified bucket. +func (r *BucketAccessControlsService) Delete(bucket string, entity string) *BucketAccessControlsDeleteCall { + c := &BucketAccessControlsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *BucketAccessControlsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "DELETE", + // "id": "storage.bucketAccessControls.delete", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.get": + +type BucketAccessControlsGetCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Get: Returns the ACL entry for the specified entity on the specified +// bucket. +func (r *BucketAccessControlsService) Get(bucket string, entity string) *BucketAccessControlsGetCall { + c := &BucketAccessControlsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *BucketAccessControlsGetCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.bucketAccessControls.get", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.insert": + +type BucketAccessControlsInsertCall struct { + s *Service + bucket string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Insert: Creates a new ACL entry on the specified bucket. +func (r *BucketAccessControlsService) Insert(bucket string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsInsertCall { + c := &BucketAccessControlsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsInsertCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new ACL entry on the specified bucket.", + // "httpMethod": "POST", + // "id": "storage.bucketAccessControls.insert", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.list": + +type BucketAccessControlsListCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// List: Retrieves ACL entries on the specified bucket. +func (r *BucketAccessControlsService) List(bucket string) *BucketAccessControlsListCall { + c := &BucketAccessControlsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +func (c *BucketAccessControlsListCall) Do() (*BucketAccessControls, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControls) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves ACL entries on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.bucketAccessControls.list", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl", + // "response": { + // "$ref": "BucketAccessControls" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.patch": + +type BucketAccessControlsPatchCall struct { + s *Service + bucket string + entity string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Patch: Updates an ACL entry on the specified bucket. This method +// supports patch semantics. +func (r *BucketAccessControlsService) Patch(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsPatchCall { + c := &BucketAccessControlsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsPatchCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified bucket. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.bucketAccessControls.patch", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.update": + +type BucketAccessControlsUpdateCall struct { + s *Service + bucket string + entity string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Update: Updates an ACL entry on the specified bucket. +func (r *BucketAccessControlsService) Update(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsUpdateCall { + c := &BucketAccessControlsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsUpdateCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified bucket.", + // "httpMethod": "PUT", + // "id": "storage.bucketAccessControls.update", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.buckets.delete": + +type BucketsDeleteCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// Delete: Deletes an empty bucket. +func (r *BucketsService) Delete(bucket string) *BucketsDeleteCall { + c := &BucketsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +func (c *BucketsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes an empty bucket.", + // "httpMethod": "DELETE", + // "id": "storage.buckets.delete", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.get": + +type BucketsGetCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// Get: Returns metadata for the specified bucket. +func (r *BucketsService) Get(bucket string) *BucketsGetCall { + c := &BucketsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl. +func (c *BucketsGetCall) Projection(projection string) *BucketsGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsGetCall) Do() (*Bucket, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns metadata for the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.buckets.get", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.insert": + +type BucketsInsertCall struct { + s *Service + bucket *Bucket + opt_ map[string]interface{} +} + +// Insert: Creates a new bucket. +func (r *BucketsService) Insert(bucket *Bucket) *BucketsInsertCall { + c := &BucketsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl, unless the bucket resource +// specifies acl or defaultObjectAcl properties, when it defaults to +// full. +func (c *BucketsInsertCall) Projection(projection string) *BucketsInsertCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsInsertCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new bucket.", + // "httpMethod": "POST", + // "id": "storage.buckets.insert", + // "parameters": { + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.list": + +type BucketsListCall struct { + s *Service + projectId uint64 + opt_ map[string]interface{} +} + +// List: Retrieves a list of buckets for a given project. +func (r *BucketsService) List(projectId uint64) *BucketsListCall { + c := &BucketsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectId = projectId + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of buckets to return. +func (c *BucketsListCall) MaxResults(maxResults int64) *BucketsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *BucketsListCall) PageToken(pageToken string) *BucketsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl. +func (c *BucketsListCall) Projection(projection string) *BucketsListCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsListCall) Do() (*Buckets, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("projectId", fmt.Sprintf("%v", c.projectId)) + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Buckets) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of buckets for a given project.", + // "httpMethod": "GET", + // "id": "storage.buckets.list", + // "parameterOrder": [ + // "projectId" + // ], + // "parameters": { + // "max-results": { + // "description": "Maximum number of buckets to return.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "projectId": { + // "description": "A valid API project identifier.", + // "format": "uint64", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b", + // "response": { + // "$ref": "Buckets" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.patch": + +type BucketsPatchCall struct { + s *Service + bucket string + bucket2 *Bucket + opt_ map[string]interface{} +} + +// Patch: Updates a bucket. This method supports patch semantics. +func (r *BucketsService) Patch(bucket string, bucket2 *Bucket) *BucketsPatchCall { + c := &BucketsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucket2 = bucket2 + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *BucketsPatchCall) Projection(projection string) *BucketsPatchCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsPatchCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a bucket. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.buckets.patch", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.update": + +type BucketsUpdateCall struct { + s *Service + bucket string + bucket2 *Bucket + opt_ map[string]interface{} +} + +// Update: Updates a bucket. +func (r *BucketsService) Update(bucket string, bucket2 *Bucket) *BucketsUpdateCall { + c := &BucketsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucket2 = bucket2 + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *BucketsUpdateCall) Projection(projection string) *BucketsUpdateCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsUpdateCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a bucket.", + // "httpMethod": "PUT", + // "id": "storage.buckets.update", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.objectAccessControls.delete": + +type ObjectAccessControlsDeleteCall struct { + s *Service + bucket string + object string + entity string + opt_ map[string]interface{} +} + +// Delete: Deletes the ACL entry for the specified entity on the +// specified object. +func (r *ObjectAccessControlsService) Delete(bucket string, object string, entity string) *ObjectAccessControlsDeleteCall { + c := &ObjectAccessControlsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + return c +} + +func (c *ObjectAccessControlsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the ACL entry for the specified entity on the specified object.", + // "httpMethod": "DELETE", + // "id": "storage.objectAccessControls.delete", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.get": + +type ObjectAccessControlsGetCall struct { + s *Service + bucket string + object string + entity string + opt_ map[string]interface{} +} + +// Get: Returns the ACL entry for the specified entity on the specified +// object. +func (r *ObjectAccessControlsService) Get(bucket string, object string, entity string) *ObjectAccessControlsGetCall { + c := &ObjectAccessControlsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + return c +} + +func (c *ObjectAccessControlsGetCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the ACL entry for the specified entity on the specified object.", + // "httpMethod": "GET", + // "id": "storage.objectAccessControls.get", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.insert": + +type ObjectAccessControlsInsertCall struct { + s *Service + bucket string + object string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Insert: Creates a new ACL entry on the specified object. +func (r *ObjectAccessControlsService) Insert(bucket string, object string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsInsertCall { + c := &ObjectAccessControlsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *ObjectAccessControlsInsertCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new ACL entry on the specified object.", + // "httpMethod": "POST", + // "id": "storage.objectAccessControls.insert", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.list": + +type ObjectAccessControlsListCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// List: Retrieves ACL entries on the specified object. +func (r *ObjectAccessControlsService) List(bucket string, object string) *ObjectAccessControlsListCall { + c := &ObjectAccessControlsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +func (c *ObjectAccessControlsListCall) Do() (*ObjectAccessControls, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControls) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves ACL entries on the specified object.", + // "httpMethod": "GET", + // "id": "storage.objectAccessControls.list", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl", + // "response": { + // "$ref": "ObjectAccessControls" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.patch": + +type ObjectAccessControlsPatchCall struct { + s *Service + bucket string + object string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Patch: Updates an ACL entry on the specified object. This method +// supports patch semantics. +func (r *ObjectAccessControlsService) Patch(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsPatchCall { + c := &ObjectAccessControlsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *ObjectAccessControlsPatchCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified object. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.objectAccessControls.patch", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.update": + +type ObjectAccessControlsUpdateCall struct { + s *Service + bucket string + object string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Update: Updates an ACL entry on the specified object. +func (r *ObjectAccessControlsService) Update(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsUpdateCall { + c := &ObjectAccessControlsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *ObjectAccessControlsUpdateCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified object.", + // "httpMethod": "PUT", + // "id": "storage.objectAccessControls.update", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objects.delete": + +type ObjectsDeleteCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// Delete: Deletes data blobs and associated metadata. +func (r *ObjectsService) Delete(bucket string, object string) *ObjectsDeleteCall { + c := &ObjectsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +func (c *ObjectsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes data blobs and associated metadata.", + // "httpMethod": "DELETE", + // "id": "storage.objects.delete", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.objects.get": + +type ObjectsGetCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// Get: Retrieves objects or their associated metadata. +func (r *ObjectsService) Get(bucket string, object string) *ObjectsGetCall { + c := &ObjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl. +func (c *ObjectsGetCall) Projection(projection string) *ObjectsGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsGetCall) Do() (*Object, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves objects or their associated metadata.", + // "httpMethod": "GET", + // "id": "storage.objects.get", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "storage.objects.insert": + +type ObjectsInsertCall struct { + s *Service + bucket string + object *Object + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Stores new data blobs and associated metadata. +func (r *ObjectsService) Insert(bucket string, object *Object) *ObjectsInsertCall { + c := &ObjectsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// Name sets the optional parameter "name": Name of the object. Required +// when the object metadata is not otherwise provided. Overrides the +// object metadata's name value, if any. +func (c *ObjectsInsertCall) Name(name string) *ObjectsInsertCall { + c.opt_["name"] = name + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl, unless the object resource +// specifies the acl property, when it defaults to full. +func (c *ObjectsInsertCall) Projection(projection string) *ObjectsInsertCall { + c.opt_["projection"] = projection + return c +} +func (c *ObjectsInsertCall) Media(r io.Reader) *ObjectsInsertCall { + c.media_ = r + return c +} + +func (c *ObjectsInsertCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Stores new data blobs and associated metadata.", + // "httpMethod": "POST", + // "id": "storage.objects.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/storage/v1beta1/b/{bucket}/o" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/storage/v1beta1/b/{bucket}/o" + // } + // } + // }, + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "name": { + // "description": "Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl, unless the object resource specifies the acl property, when it defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true, + // "supportsMediaUpload": true + // } + +} + +// method id "storage.objects.list": + +type ObjectsListCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// List: Retrieves a list of objects matching the criteria. +func (r *ObjectsService) List(bucket string) *ObjectsListCall { + c := &ObjectsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// Delimiter sets the optional parameter "delimiter": Returns results in +// a directory-like mode. items will contain only objects whose names, +// aside from the prefix, do not contain delimiter. Objects whose names, +// aside from the prefix, contain delimiter will have their name, +// truncated after the delimiter, returned in prefixes. Duplicate +// prefixes are omitted. +func (c *ObjectsListCall) Delimiter(delimiter string) *ObjectsListCall { + c.opt_["delimiter"] = delimiter + return c +} + +// MaxResults sets the optional parameter "max-results": Maximum number +// of items plus prefixes to return. As duplicate prefixes are omitted, +// fewer total results may be returned than requested. +func (c *ObjectsListCall) MaxResults(maxResults int64) *ObjectsListCall { + c.opt_["max-results"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *ObjectsListCall) PageToken(pageToken string) *ObjectsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Prefix sets the optional parameter "prefix": Filter results to +// objects whose names begin with this prefix. +func (c *ObjectsListCall) Prefix(prefix string) *ObjectsListCall { + c.opt_["prefix"] = prefix + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to no_acl. +func (c *ObjectsListCall) Projection(projection string) *ObjectsListCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsListCall) Do() (*Objects, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["delimiter"]; ok { + params.Set("delimiter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["max-results"]; ok { + params.Set("max-results", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefix"]; ok { + params.Set("prefix", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Objects) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of objects matching the criteria.", + // "httpMethod": "GET", + // "id": "storage.objects.list", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which to look for objects.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "delimiter": { + // "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + // "location": "query", + // "type": "string" + // }, + // "max-results": { + // "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "prefix": { + // "description": "Filter results to objects whose names begin with this prefix.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to no_acl.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o", + // "response": { + // "$ref": "Objects" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsSubscription": true + // } + +} + +// method id "storage.objects.patch": + +type ObjectsPatchCall struct { + s *Service + bucket string + object string + object2 *Object + opt_ map[string]interface{} +} + +// Patch: Updates a data blob's associated metadata. This method +// supports patch semantics. +func (r *ObjectsService) Patch(bucket string, object string, object2 *Object) *ObjectsPatchCall { + c := &ObjectsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.object2 = object2 + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *ObjectsPatchCall) Projection(projection string) *ObjectsPatchCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsPatchCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a data blob's associated metadata. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.objects.patch", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.objects.update": + +type ObjectsUpdateCall struct { + s *Service + bucket string + object string + object2 *Object + opt_ map[string]interface{} +} + +// Update: Updates a data blob's associated metadata. +func (r *ObjectsService) Update(bucket string, object string, object2 *Object) *ObjectsUpdateCall { + c := &ObjectsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.object2 = object2 + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *ObjectsUpdateCall) Projection(projection string) *ObjectsUpdateCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsUpdateCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a data blob's associated metadata.", + // "httpMethod": "PUT", + // "id": "storage.objects.update", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "no_acl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-api.json b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-api.json new file mode 100644 index 0000000000000..8915cf4a24e2a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-api.json @@ -0,0 +1,2344 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/1kn7iGSorTXBeUYcJymRrnSmuvg\"", + "discoveryVersion": "v1", + "id": "storage:v1beta2", + "name": "storage", + "version": "v1beta2", + "title": "Cloud Storage API", + "description": "Lets you store and retrieve potentially-large, immutable data objects.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "https://www.google.com/images/icons/product/cloud_storage-16.png", + "x32": "https://www.google.com/images/icons/product/cloud_storage-32.png" + }, + "documentationLink": "https://developers.google.com/storage/docs/json_api/", + "labels": [ + "labs" + ], + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/storage/v1beta2/", + "basePath": "/storage/v1beta2/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "storage/v1beta2/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/devstorage.full_control": { + "description": "Manage your data and permissions in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_only": { + "description": "View your data in Google Cloud Storage" + }, + "https://www.googleapis.com/auth/devstorage.read_write": { + "description": "Manage your data in Google Cloud Storage" + } + } + } + }, + "schemas": { + "Bucket": { + "id": "Bucket", + "type": "object", + "description": "A bucket.", + "properties": { + "acl": { + "type": "array", + "description": "Access controls on the bucket.", + "items": { + "$ref": "BucketAccessControl" + }, + "annotations": { + "required": [ + "storage.buckets.update" + ] + } + }, + "cors": { + "type": "array", + "description": "The bucket's Cross-Origin Resource Sharing (CORS) configuration.", + "items": { + "type": "object", + "properties": { + "maxAgeSeconds": { + "type": "integer", + "description": "The value, in seconds, to return in the Access-Control-Max-Age header used in preflight responses.", + "format": "int32" + }, + "method": { + "type": "array", + "description": "The list of HTTP methods on which to include CORS response headers, e.g. GET, OPTIONS, POST. Note, \"*\" is permitted in the list of methods, and means \"any method\".", + "items": { + "type": "string" + } + }, + "origin": { + "type": "array", + "description": "The list of Origins eligible to receive CORS response headers. Note: \"*\" is permitted in the list of origins, and means \"any Origin\".", + "items": { + "type": "string" + } + }, + "responseHeader": { + "type": "array", + "description": "The list of HTTP headers other than the simple response headers to give permission for the user-agent to share across domains.", + "items": { + "type": "string" + } + } + } + } + }, + "defaultObjectAcl": { + "type": "array", + "description": "Default access controls to apply to new objects when no ACL is provided.", + "items": { + "$ref": "ObjectAccessControl" + } + }, + "etag": { + "type": "string", + "description": "HTTP 1.1 Entity tag for the bucket." + }, + "id": { + "type": "string", + "description": "The ID of the bucket." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For buckets, this is always storage#bucket.", + "default": "storage#bucket" + }, + "lifecycle": { + "type": "object", + "description": "The bucket's lifecycle configuration. See object lifecycle management for more information.", + "properties": { + "rule": { + "type": "array", + "description": "A lifecycle management rule, which is made of an action to take and the condition(s) under which the action will be taken.", + "items": { + "type": "object", + "properties": { + "action": { + "type": "object", + "description": "The action to take.", + "properties": { + "type": { + "type": "string", + "description": "Type of the action, e.g. Delete." + } + } + }, + "condition": { + "type": "object", + "description": "The condition(s) under which the action will be taken.", + "properties": { + "age": { + "type": "integer", + "description": "Age of an object (in days). This condition is satisfied when an object reaches the specified age.", + "format": "int32" + }, + "createdBefore": { + "type": "string", + "description": "A date in RFC 3339 format with only the date part, e.g. \"2013-01-15\". This condition is satisfied when an object is created before midnight of the specified date in UTC.", + "format": "date" + }, + "isLive": { + "type": "boolean", + "description": "Relevant only for versioned objects. If the value is true, this condition matches live objects; if the value is false, it matches archived objects." + }, + "numNewerVersions": { + "type": "integer", + "description": "Relevant only for versioned objects. If the value is N, this condition is satisfied when there are at least N versions (including the live version) newer than this version of the object.", + "format": "int32" + } + } + } + } + } + } + } + }, + "location": { + "type": "string", + "description": "The location of the bucket. Object data for objects in the bucket resides in physical storage within this region. Typical values are US and EU. Defaults to US. See the developer's guide for the authoritative list." + }, + "logging": { + "type": "object", + "description": "The bucket's logging configuration, which defines the destination bucket and optional name prefix for the current bucket's logs.", + "properties": { + "logBucket": { + "type": "string", + "description": "The destination bucket where the current bucket's logs should be placed." + }, + "logObjectPrefix": { + "type": "string", + "description": "A prefix for log object names." + } + } + }, + "metageneration": { + "type": "string", + "description": "The metadata generation of this bucket.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "The name of the bucket.", + "annotations": { + "required": [ + "storage.buckets.insert" + ] + } + }, + "owner": { + "type": "object", + "description": "The owner of the bucket. This will always be the project team's owner group.", + "properties": { + "entity": { + "type": "string", + "description": "The entity, in the form group-groupId." + }, + "entityId": { + "type": "string", + "description": "The ID for the entity." + } + } + }, + "selfLink": { + "type": "string", + "description": "The URI of this bucket." + }, + "storageClass": { + "type": "string", + "description": "The bucket's storage class. This defines how objects in the bucket will be stored and determines the SLA and the cost of storage. Typical values are STANDARD and DURABLE_REDUCED_AVAILABILITY. Defaults to STANDARD. See the developer's guide for the authoritative list." + }, + "timeCreated": { + "type": "string", + "description": "Creation time of the bucket in RFC 3339 format.", + "format": "date-time" + }, + "versioning": { + "type": "object", + "description": "The bucket's versioning configuration.", + "properties": { + "enabled": { + "type": "boolean", + "description": "While set to true, versioning is fully enabled for this bucket." + } + } + }, + "website": { + "type": "object", + "description": "The bucket's website configuration.", + "properties": { + "mainPageSuffix": { + "type": "string", + "description": "Behaves as the bucket's directory index where missing objects are treated as potential directories." + }, + "notFoundPage": { + "type": "string", + "description": "The custom object to return when a requested resource is not found." + } + } + } + } + }, + "BucketAccessControl": { + "id": "BucketAccessControl", + "type": "object", + "description": "An access-control entry.", + "properties": { + "bucket": { + "type": "string", + "description": "The name of the bucket." + }, + "domain": { + "type": "string", + "description": "The domain associated with the entity, if any." + }, + "email": { + "type": "string", + "description": "The email address associated with the entity, if any." + }, + "entity": { + "type": "string", + "description": "The entity holding the permission, in one of the following forms: \n- user-userId \n- user-email \n- group-groupId \n- group-email \n- domain-domain \n- allUsers \n- allAuthenticatedUsers Examples: \n- The user liz@example.com would be user-liz@example.com. \n- The group example@googlegroups.com would be group-example@googlegroups.com. \n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com.", + "annotations": { + "required": [ + "storage.bucketAccessControls.insert" + ] + } + }, + "entityId": { + "type": "string", + "description": "The ID for the entity, if any." + }, + "etag": { + "type": "string", + "description": "HTTP 1.1 Entity tag for the access-control entry." + }, + "id": { + "type": "string", + "description": "The ID of the access-control entry." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For bucket access control entries, this is always storage#bucketAccessControl.", + "default": "storage#bucketAccessControl" + }, + "role": { + "type": "string", + "description": "The access permission for the entity. Can be READER, WRITER, or OWNER.", + "annotations": { + "required": [ + "storage.bucketAccessControls.insert" + ] + } + }, + "selfLink": { + "type": "string", + "description": "The link to this access-control entry." + } + } + }, + "BucketAccessControls": { + "id": "BucketAccessControls", + "type": "object", + "description": "An access-control list.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "BucketAccessControl" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of bucket access control entries, this is always storage#bucketAccessControls.", + "default": "storage#bucketAccessControls" + } + } + }, + "Buckets": { + "id": "Buckets", + "type": "object", + "description": "A list of buckets.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "Bucket" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of buckets, this is always storage#buckets.", + "default": "storage#buckets" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "An notification channel used to watch for resource changes.", + "properties": { + "address": { + "type": "string", + "description": "The address where notifications are delivered for this channel." + }, + "expiration": { + "type": "string", + "description": "Date and time of notification channel expiration, expressed as a Unix timestamp, in milliseconds. Optional.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "A UUID or similar unique string that identifies this channel." + }, + "kind": { + "type": "string", + "description": "Identifies this as a notification channel used to watch for changes to a resource. Value: the fixed string \"api#channel\".", + "default": "api#channel" + }, + "params": { + "type": "object", + "description": "Additional parameters controlling delivery channel behavior. Optional.", + "additionalProperties": { + "type": "string", + "description": "Declares a new parameter by name." + } + }, + "payload": { + "type": "boolean", + "description": "A Boolean value to indicate whether payload is wanted. Optional." + }, + "resourceId": { + "type": "string", + "description": "An opaque ID that identifies the resource being watched on this channel. Stable across different API versions." + }, + "resourceUri": { + "type": "string", + "description": "A version-specific identifier for the watched resource." + }, + "token": { + "type": "string", + "description": "An arbitrary string delivered to the target address with each notification delivered over this channel. Optional." + }, + "type": { + "type": "string", + "description": "The type of delivery mechanism used for this channel." + } + } + }, + "ComposeRequest": { + "id": "ComposeRequest", + "type": "object", + "description": "A Compose request.", + "properties": { + "destination": { + "$ref": "Object", + "description": "Properties of the resulting object" + }, + "kind": { + "type": "string", + "description": "The kind of item this is.", + "default": "storage#composeRequest" + }, + "sourceObjects": { + "type": "array", + "description": "The list of source objects that will be concatenated into a single object.", + "items": { + "type": "object", + "properties": { + "generation": { + "type": "string", + "description": "The generation of this object to use as the source.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "The source object's name. The source object's bucket is implicitly the destination bucket.", + "annotations": { + "required": [ + "storage.objects.compose" + ] + } + }, + "objectPreconditions": { + "type": "object", + "description": "Conditions that must be met for this operation to execute.", + "properties": { + "ifGenerationMatch": { + "type": "string", + "description": "Only perform the composition if the generation of the source object that would be used matches this value. If this value and a generation are both specified, they must be the same value or the call will fail.", + "format": "int64" + } + } + } + } + }, + "annotations": { + "required": [ + "storage.objects.compose" + ] + } + } + } + }, + "Object": { + "id": "Object", + "type": "object", + "description": "An object.", + "properties": { + "acl": { + "type": "array", + "description": "Access controls on the object.", + "items": { + "$ref": "ObjectAccessControl" + }, + "annotations": { + "required": [ + "storage.objects.update" + ] + } + }, + "bucket": { + "type": "string", + "description": "The bucket containing this object." + }, + "cacheControl": { + "type": "string", + "description": "Cache-Control directive for the object data." + }, + "componentCount": { + "type": "integer", + "description": "Number of underlying components that make up this object. Components are accumulated by compose operations and are limited to a count of 32.", + "format": "int32" + }, + "contentDisposition": { + "type": "string", + "description": "Content-Disposition of the object data." + }, + "contentEncoding": { + "type": "string", + "description": "Content-Encoding of the object data." + }, + "contentLanguage": { + "type": "string", + "description": "Content-Language of the object data." + }, + "contentType": { + "type": "string", + "description": "Content-Type of the object data.", + "annotations": { + "required": [ + "storage.objects.update" + ] + } + }, + "crc32c": { + "type": "string", + "description": "CRC32c checksum, as described in RFC 4960, Appendix B; encoded using base64." + }, + "etag": { + "type": "string", + "description": "HTTP 1.1 Entity tag for the object." + }, + "generation": { + "type": "string", + "description": "The content generation of this object. Used for object versioning.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The ID of the object." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For objects, this is always storage#object.", + "default": "storage#object" + }, + "md5Hash": { + "type": "string", + "description": "MD5 hash of the data; encoded using base64." + }, + "mediaLink": { + "type": "string", + "description": "Media download link." + }, + "metadata": { + "type": "object", + "description": "User-provided metadata, in key/value pairs.", + "additionalProperties": { + "type": "string", + "description": "An individual metadata entry." + } + }, + "metageneration": { + "type": "string", + "description": "The generation of the metadata for this object at this generation. Used for metadata versioning. Has no meaning outside of the context of this generation.", + "format": "int64" + }, + "name": { + "type": "string", + "description": "The name of this object. Required if not specified by URL parameter." + }, + "owner": { + "type": "object", + "description": "The owner of the object. This will always be the uploader of the object.", + "properties": { + "entity": { + "type": "string", + "description": "The entity, in the form user-userId." + }, + "entityId": { + "type": "string", + "description": "The ID for the entity." + } + } + }, + "selfLink": { + "type": "string", + "description": "The link to this object." + }, + "size": { + "type": "string", + "description": "Content-Length of the data in bytes.", + "format": "uint64" + }, + "storageClass": { + "type": "string", + "description": "Storage class of the object." + }, + "timeDeleted": { + "type": "string", + "description": "Deletion time of the object in RFC 3339 format. Will be returned if and only if this version of the object has been deleted.", + "format": "date-time" + }, + "updated": { + "type": "string", + "description": "Modification time of the object metadata in RFC 3339 format.", + "format": "date-time" + } + } + }, + "ObjectAccessControl": { + "id": "ObjectAccessControl", + "type": "object", + "description": "An access-control entry.", + "properties": { + "bucket": { + "type": "string", + "description": "The name of the bucket." + }, + "domain": { + "type": "string", + "description": "The domain associated with the entity, if any." + }, + "email": { + "type": "string", + "description": "The email address associated with the entity, if any." + }, + "entity": { + "type": "string", + "description": "The entity holding the permission, in one of the following forms: \n- user-userId \n- user-email \n- group-groupId \n- group-email \n- domain-domain \n- allUsers \n- allAuthenticatedUsers Examples: \n- The user liz@example.com would be user-liz@example.com. \n- The group example@googlegroups.com would be group-example@googlegroups.com. \n- To refer to all members of the Google Apps for Business domain example.com, the entity would be domain-example.com." + }, + "entityId": { + "type": "string", + "description": "The ID for the entity, if any." + }, + "etag": { + "type": "string", + "description": "HTTP 1.1 Entity tag for the access-control entry." + }, + "generation": { + "type": "string", + "description": "The content generation of the object.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "The ID of the access-control entry." + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For object access control entries, this is always storage#objectAccessControl.", + "default": "storage#objectAccessControl" + }, + "object": { + "type": "string", + "description": "The name of the object." + }, + "role": { + "type": "string", + "description": "The access permission for the entity. Can be READER or OWNER." + }, + "selfLink": { + "type": "string", + "description": "The link to this access-control entry." + } + } + }, + "ObjectAccessControls": { + "id": "ObjectAccessControls", + "type": "object", + "description": "An access-control list.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "type": "any" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of object access control entries, this is always storage#objectAccessControls.", + "default": "storage#objectAccessControls" + } + } + }, + "Objects": { + "id": "Objects", + "type": "object", + "description": "A list of objects.", + "properties": { + "items": { + "type": "array", + "description": "The list of items.", + "items": { + "$ref": "Object" + } + }, + "kind": { + "type": "string", + "description": "The kind of item this is. For lists of objects, this is always storage#objects.", + "default": "storage#objects" + }, + "nextPageToken": { + "type": "string", + "description": "The continuation token, used to page through large result sets. Provide this value in a subsequent request to return the next page of results." + }, + "prefixes": { + "type": "array", + "description": "The list of prefixes of objects matching-but-not-listed up to and including the requested delimiter.", + "items": { + "type": "string" + } + } + } + } + }, + "resources": { + "bucketAccessControls": { + "methods": { + "delete": { + "id": "storage.bucketAccessControls.delete", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "DELETE", + "description": "Permanently deletes the ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "get": { + "id": "storage.bucketAccessControls.get", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "GET", + "description": "Returns the ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "insert": { + "id": "storage.bucketAccessControls.insert", + "path": "b/{bucket}/acl", + "httpMethod": "POST", + "description": "Creates a new ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "list": { + "id": "storage.bucketAccessControls.list", + "path": "b/{bucket}/acl", + "httpMethod": "GET", + "description": "Retrieves ACL entries on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "BucketAccessControls" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "patch": { + "id": "storage.bucketAccessControls.patch", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "PATCH", + "description": "Updates an ACL entry on the specified bucket. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "update": { + "id": "storage.bucketAccessControls.update", + "path": "b/{bucket}/acl/{entity}", + "httpMethod": "PUT", + "description": "Updates an ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "BucketAccessControl" + }, + "response": { + "$ref": "BucketAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + } + } + }, + "buckets": { + "methods": { + "delete": { + "id": "storage.buckets.delete", + "path": "b/{bucket}", + "httpMethod": "DELETE", + "description": "Permanently deletes an empty bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "get": { + "id": "storage.buckets.get", + "path": "b/{bucket}", + "httpMethod": "GET", + "description": "Returns metadata for the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "insert": { + "id": "storage.buckets.insert", + "path": "b", + "httpMethod": "POST", + "description": "Creates a new bucket.", + "parameters": { + "project": { + "type": "string", + "description": "A valid API project identifier.", + "required": true, + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "project" + ], + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "list": { + "id": "storage.buckets.list", + "path": "b", + "httpMethod": "GET", + "description": "Retrieves a list of buckets for a given project.", + "parameters": { + "maxResults": { + "type": "integer", + "description": "Maximum number of buckets to return.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "project": { + "type": "string", + "description": "A valid API project identifier.", + "required": true, + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "project" + ], + "response": { + "$ref": "Buckets" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "patch": { + "id": "storage.buckets.patch", + "path": "b/{bucket}", + "httpMethod": "PATCH", + "description": "Updates a bucket. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "update": { + "id": "storage.buckets.update", + "path": "b/{bucket}", + "httpMethod": "PUT", + "description": "Updates a bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit acl and defaultObjectAcl properties." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Bucket" + }, + "response": { + "$ref": "Bucket" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + } + } + }, + "channels": { + "methods": { + "stop": { + "id": "storage.channels.stop", + "path": "channels/stop", + "httpMethod": "POST", + "description": "Stop watching resources through this channel", + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + } + } + }, + "defaultObjectAccessControls": { + "methods": { + "delete": { + "id": "storage.defaultObjectAccessControls.delete", + "path": "b/{bucket}/defaultObjectAcl/{entity}", + "httpMethod": "DELETE", + "description": "Permanently deletes the default object ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "get": { + "id": "storage.defaultObjectAccessControls.get", + "path": "b/{bucket}/defaultObjectAcl/{entity}", + "httpMethod": "GET", + "description": "Returns the default object ACL entry for the specified entity on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "insert": { + "id": "storage.defaultObjectAccessControls.insert", + "path": "b/{bucket}/defaultObjectAcl", + "httpMethod": "POST", + "description": "Creates a new default object ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "list": { + "id": "storage.defaultObjectAccessControls.list", + "path": "b/{bucket}/defaultObjectAcl", + "httpMethod": "GET", + "description": "Retrieves default object ACL entries on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "ObjectAccessControls" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "patch": { + "id": "storage.defaultObjectAccessControls.patch", + "path": "b/{bucket}/defaultObjectAcl/{entity}", + "httpMethod": "PATCH", + "description": "Updates a default object ACL entry on the specified bucket. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "update": { + "id": "storage.defaultObjectAccessControls.update", + "path": "b/{bucket}/defaultObjectAcl/{entity}", + "httpMethod": "PUT", + "description": "Updates a default object ACL entry on the specified bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + } + } + }, + "objectAccessControls": { + "methods": { + "delete": { + "id": "storage.objectAccessControls.delete", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "DELETE", + "description": "Permanently deletes the ACL entry for the specified entity on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "get": { + "id": "storage.objectAccessControls.get", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "GET", + "description": "Returns the ACL entry for the specified entity on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "insert": { + "id": "storage.objectAccessControls.insert", + "path": "b/{bucket}/o/{object}/acl", + "httpMethod": "POST", + "description": "Creates a new ACL entry on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "list": { + "id": "storage.objectAccessControls.list", + "path": "b/{bucket}/o/{object}/acl", + "httpMethod": "GET", + "description": "Retrieves ACL entries on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "response": { + "$ref": "ObjectAccessControls" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "patch": { + "id": "storage.objectAccessControls.patch", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "PATCH", + "description": "Updates an ACL entry on the specified object. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + }, + "update": { + "id": "storage.objectAccessControls.update", + "path": "b/{bucket}/o/{object}/acl/{entity}", + "httpMethod": "PUT", + "description": "Updates an ACL entry on the specified object.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of a bucket.", + "required": true, + "location": "path" + }, + "entity": { + "type": "string", + "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object", + "entity" + ], + "request": { + "$ref": "ObjectAccessControl" + }, + "response": { + "$ref": "ObjectAccessControl" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control" + ] + } + } + }, + "objects": { + "methods": { + "compose": { + "id": "storage.objects.compose", + "path": "b/{destinationBucket}/o/{destinationObject}/compose", + "httpMethod": "POST", + "description": "Concatenates a list of existing objects into a new object in the same bucket.", + "parameters": { + "destinationBucket": { + "type": "string", + "description": "Name of the bucket in which to store the new object.", + "required": true, + "location": "path" + }, + "destinationObject": { + "type": "string", + "description": "Name of the new object.", + "required": true, + "location": "path" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + } + }, + "parameterOrder": [ + "destinationBucket", + "destinationObject" + ], + "request": { + "$ref": "ComposeRequest" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + }, + "copy": { + "id": "storage.objects.copy", + "path": "b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}", + "httpMethod": "POST", + "description": "Copies an object to a destination in the same location. Optionally overrides metadata.", + "parameters": { + "destinationBucket": { + "type": "string", + "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + "required": true, + "location": "path" + }, + "destinationObject": { + "type": "string", + "description": "Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + "required": true, + "location": "path" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the destination object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifSourceGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the source object's generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifSourceGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the source object's generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifSourceMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the source object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifSourceMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the source object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + }, + "sourceBucket": { + "type": "string", + "description": "Name of the bucket in which to find the source object.", + "required": true, + "location": "path" + }, + "sourceGeneration": { + "type": "string", + "description": "If present, selects a specific revision of the source object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "sourceObject": { + "type": "string", + "description": "Name of the source object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "sourceBucket", + "sourceObject", + "destinationBucket", + "destinationObject" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + }, + "delete": { + "id": "storage.objects.delete", + "path": "b/{bucket}/o/{object}", + "httpMethod": "DELETE", + "description": "Deletes data blobs and associated metadata. Deletions are permanent if versioning is not enabled for the bucket, or if the generation parameter is used.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, permanently deletes a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "get": { + "id": "storage.objects.get", + "path": "b/{bucket}/o/{object}", + "httpMethod": "GET", + "description": "Retrieves objects or their associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + }, + "insert": { + "id": "storage.objects.insert", + "path": "b/{bucket}/o", + "httpMethod": "POST", + "description": "Stores new data blobs and associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + "required": true, + "location": "path" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "name": { + "type": "string", + "description": "Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true, + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "*/*" + ], + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/storage/v1beta2/b/{bucket}/o" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/storage/v1beta2/b/{bucket}/o" + } + } + } + }, + "list": { + "id": "storage.objects.list", + "path": "b/{bucket}/o", + "httpMethod": "GET", + "description": "Retrieves a list of objects matching the criteria.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which to look for objects.", + "required": true, + "location": "path" + }, + "delimiter": { + "type": "string", + "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "prefix": { + "type": "string", + "description": "Filter results to objects whose names begin with this prefix.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + }, + "versions": { + "type": "boolean", + "description": "If true, lists all versions of a file as distinct results.", + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "response": { + "$ref": "Objects" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsSubscription": true + }, + "patch": { + "id": "storage.objects.patch", + "path": "b/{bucket}/o/{object}", + "httpMethod": "PATCH", + "description": "Updates a data blob's associated metadata. This method supports patch semantics.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ] + }, + "update": { + "id": "storage.objects.update", + "path": "b/{bucket}/o/{object}", + "httpMethod": "PUT", + "description": "Updates a data blob's associated metadata.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which the object resides.", + "required": true, + "location": "path" + }, + "generation": { + "type": "string", + "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + "format": "uint64", + "location": "query" + }, + "ifGenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifGenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + "format": "uint64", + "location": "query" + }, + "ifMetagenerationNotMatch": { + "type": "string", + "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + "format": "uint64", + "location": "query" + }, + "object": { + "type": "string", + "description": "Name of the object.", + "required": true, + "location": "path" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to full.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + } + }, + "parameterOrder": [ + "bucket", + "object" + ], + "request": { + "$ref": "Object" + }, + "response": { + "$ref": "Object" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsMediaDownload": true + }, + "watchAll": { + "id": "storage.objects.watchAll", + "path": "b/{bucket}/o/watch", + "httpMethod": "POST", + "description": "Watch for changes on all objects in a bucket.", + "parameters": { + "bucket": { + "type": "string", + "description": "Name of the bucket in which to look for objects.", + "required": true, + "location": "path" + }, + "delimiter": { + "type": "string", + "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + "format": "uint32", + "minimum": "0", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "A previously-returned page token representing part of the larger set of results to view.", + "location": "query" + }, + "prefix": { + "type": "string", + "description": "Filter results to objects whose names begin with this prefix.", + "location": "query" + }, + "projection": { + "type": "string", + "description": "Set of properties to return. Defaults to noAcl.", + "enum": [ + "full", + "noAcl" + ], + "enumDescriptions": [ + "Include all properties.", + "Omit the acl property." + ], + "location": "query" + }, + "versions": { + "type": "boolean", + "description": "If true, lists all versions of a file as distinct results.", + "location": "query" + } + }, + "parameterOrder": [ + "bucket" + ], + "request": { + "$ref": "Channel", + "parameterName": "resource" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/devstorage.full_control", + "https://www.googleapis.com/auth/devstorage.read_only", + "https://www.googleapis.com/auth/devstorage.read_write" + ], + "supportsSubscription": true + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-gen.go b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-gen.go new file mode 100644 index 0000000000000..4a2ee427f952e --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/storage/v1beta2/storage-gen.go @@ -0,0 +1,4664 @@ +// Package storage provides access to the Cloud Storage API. +// +// See https://developers.google.com/storage/docs/json_api/ +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/storage/v1beta2" +// ... +// storageService, err := storage.New(oauthHttpClient) +package storage + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "storage:v1beta2" +const apiName = "storage" +const apiVersion = "v1beta2" +const basePath = "https://www.googleapis.com/storage/v1beta2/" + +// OAuth2 scopes used by this API. +const ( + // Manage your data and permissions in Google Cloud Storage + DevstorageFull_controlScope = "https://www.googleapis.com/auth/devstorage.full_control" + + // View your data in Google Cloud Storage + DevstorageRead_onlyScope = "https://www.googleapis.com/auth/devstorage.read_only" + + // Manage your data in Google Cloud Storage + DevstorageRead_writeScope = "https://www.googleapis.com/auth/devstorage.read_write" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.BucketAccessControls = NewBucketAccessControlsService(s) + s.Buckets = NewBucketsService(s) + s.Channels = NewChannelsService(s) + s.DefaultObjectAccessControls = NewDefaultObjectAccessControlsService(s) + s.ObjectAccessControls = NewObjectAccessControlsService(s) + s.Objects = NewObjectsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + BucketAccessControls *BucketAccessControlsService + + Buckets *BucketsService + + Channels *ChannelsService + + DefaultObjectAccessControls *DefaultObjectAccessControlsService + + ObjectAccessControls *ObjectAccessControlsService + + Objects *ObjectsService +} + +func NewBucketAccessControlsService(s *Service) *BucketAccessControlsService { + rs := &BucketAccessControlsService{s: s} + return rs +} + +type BucketAccessControlsService struct { + s *Service +} + +func NewBucketsService(s *Service) *BucketsService { + rs := &BucketsService{s: s} + return rs +} + +type BucketsService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewDefaultObjectAccessControlsService(s *Service) *DefaultObjectAccessControlsService { + rs := &DefaultObjectAccessControlsService{s: s} + return rs +} + +type DefaultObjectAccessControlsService struct { + s *Service +} + +func NewObjectAccessControlsService(s *Service) *ObjectAccessControlsService { + rs := &ObjectAccessControlsService{s: s} + return rs +} + +type ObjectAccessControlsService struct { + s *Service +} + +func NewObjectsService(s *Service) *ObjectsService { + rs := &ObjectsService{s: s} + return rs +} + +type ObjectsService struct { + s *Service +} + +type Bucket struct { + // Acl: Access controls on the bucket. + Acl []*BucketAccessControl `json:"acl,omitempty"` + + // Cors: The bucket's Cross-Origin Resource Sharing (CORS) + // configuration. + Cors []*BucketCors `json:"cors,omitempty"` + + // DefaultObjectAcl: Default access controls to apply to new objects + // when no ACL is provided. + DefaultObjectAcl []*ObjectAccessControl `json:"defaultObjectAcl,omitempty"` + + // Etag: HTTP 1.1 Entity tag for the bucket. + Etag string `json:"etag,omitempty"` + + // Id: The ID of the bucket. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For buckets, this is always + // storage#bucket. + Kind string `json:"kind,omitempty"` + + // Lifecycle: The bucket's lifecycle configuration. See object lifecycle + // management for more information. + Lifecycle *BucketLifecycle `json:"lifecycle,omitempty"` + + // Location: The location of the bucket. Object data for objects in the + // bucket resides in physical storage within this region. Typical values + // are US and EU. Defaults to US. See the developer's guide for the + // authoritative list. + Location string `json:"location,omitempty"` + + // Logging: The bucket's logging configuration, which defines the + // destination bucket and optional name prefix for the current bucket's + // logs. + Logging *BucketLogging `json:"logging,omitempty"` + + // Metageneration: The metadata generation of this bucket. + Metageneration int64 `json:"metageneration,omitempty,string"` + + // Name: The name of the bucket. + Name string `json:"name,omitempty"` + + // Owner: The owner of the bucket. This will always be the project + // team's owner group. + Owner *BucketOwner `json:"owner,omitempty"` + + // SelfLink: The URI of this bucket. + SelfLink string `json:"selfLink,omitempty"` + + // StorageClass: The bucket's storage class. This defines how objects in + // the bucket will be stored and determines the SLA and the cost of + // storage. Typical values are STANDARD and + // DURABLE_REDUCED_AVAILABILITY. Defaults to STANDARD. See the + // developer's guide for the authoritative list. + StorageClass string `json:"storageClass,omitempty"` + + // TimeCreated: Creation time of the bucket in RFC 3339 format. + TimeCreated string `json:"timeCreated,omitempty"` + + // Versioning: The bucket's versioning configuration. + Versioning *BucketVersioning `json:"versioning,omitempty"` + + // Website: The bucket's website configuration. + Website *BucketWebsite `json:"website,omitempty"` +} + +type BucketCors struct { + // MaxAgeSeconds: The value, in seconds, to return in the + // Access-Control-Max-Age header used in preflight responses. + MaxAgeSeconds int64 `json:"maxAgeSeconds,omitempty"` + + // Method: The list of HTTP methods on which to include CORS response + // headers, e.g. GET, OPTIONS, POST. Note, "*" is permitted in the list + // of methods, and means "any method". + Method []string `json:"method,omitempty"` + + // Origin: The list of Origins eligible to receive CORS response + // headers. Note: "*" is permitted in the list of origins, and means + // "any Origin". + Origin []string `json:"origin,omitempty"` + + // ResponseHeader: The list of HTTP headers other than the simple + // response headers to give permission for the user-agent to share + // across domains. + ResponseHeader []string `json:"responseHeader,omitempty"` +} + +type BucketLifecycle struct { + // Rule: A lifecycle management rule, which is made of an action to take + // and the condition(s) under which the action will be taken. + Rule []*BucketLifecycleRule `json:"rule,omitempty"` +} + +type BucketLifecycleRule struct { + // Action: The action to take. + Action *BucketLifecycleRuleAction `json:"action,omitempty"` + + // Condition: The condition(s) under which the action will be taken. + Condition *BucketLifecycleRuleCondition `json:"condition,omitempty"` +} + +type BucketLifecycleRuleAction struct { + // Type: Type of the action, e.g. Delete. + Type string `json:"type,omitempty"` +} + +type BucketLifecycleRuleCondition struct { + // Age: Age of an object (in days). This condition is satisfied when an + // object reaches the specified age. + Age int64 `json:"age,omitempty"` + + // CreatedBefore: A date in RFC 3339 format with only the date part, + // e.g. "2013-01-15". This condition is satisfied when an object is + // created before midnight of the specified date in UTC. + CreatedBefore string `json:"createdBefore,omitempty"` + + // IsLive: Relevant only for versioned objects. If the value is true, + // this condition matches live objects; if the value is false, it + // matches archived objects. + IsLive bool `json:"isLive,omitempty"` + + // NumNewerVersions: Relevant only for versioned objects. If the value + // is N, this condition is satisfied when there are at least N versions + // (including the live version) newer than this version of the object. + NumNewerVersions int64 `json:"numNewerVersions,omitempty"` +} + +type BucketLogging struct { + // LogBucket: The destination bucket where the current bucket's logs + // should be placed. + LogBucket string `json:"logBucket,omitempty"` + + // LogObjectPrefix: A prefix for log object names. + LogObjectPrefix string `json:"logObjectPrefix,omitempty"` +} + +type BucketOwner struct { + // Entity: The entity, in the form group-groupId. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity. + EntityId string `json:"entityId,omitempty"` +} + +type BucketVersioning struct { + // Enabled: While set to true, versioning is fully enabled for this + // bucket. + Enabled bool `json:"enabled,omitempty"` +} + +type BucketWebsite struct { + // MainPageSuffix: Behaves as the bucket's directory index where missing + // objects are treated as potential directories. + MainPageSuffix string `json:"mainPageSuffix,omitempty"` + + // NotFoundPage: The custom object to return when a requested resource + // is not found. + NotFoundPage string `json:"notFoundPage,omitempty"` +} + +type BucketAccessControl struct { + // Bucket: The name of the bucket. + Bucket string `json:"bucket,omitempty"` + + // Domain: The domain associated with the entity, if any. + Domain string `json:"domain,omitempty"` + + // Email: The email address associated with the entity, if any. + Email string `json:"email,omitempty"` + + // Entity: The entity holding the permission, in one of the following + // forms: + // - user-userId + // - user-email + // - group-groupId + // - group-email + // + // - domain-domain + // - allUsers + // - allAuthenticatedUsers Examples: + // - + // The user liz@example.com would be user-liz@example.com. + // - The group + // example@googlegroups.com would be group-example@googlegroups.com. + // - + // To refer to all members of the Google Apps for Business domain + // example.com, the entity would be domain-example.com. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity, if any. + EntityId string `json:"entityId,omitempty"` + + // Etag: HTTP 1.1 Entity tag for the access-control entry. + Etag string `json:"etag,omitempty"` + + // Id: The ID of the access-control entry. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For bucket access control entries, + // this is always storage#bucketAccessControl. + Kind string `json:"kind,omitempty"` + + // Role: The access permission for the entity. Can be READER, WRITER, or + // OWNER. + Role string `json:"role,omitempty"` + + // SelfLink: The link to this access-control entry. + SelfLink string `json:"selfLink,omitempty"` +} + +type BucketAccessControls struct { + // Items: The list of items. + Items []*BucketAccessControl `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of bucket access control + // entries, this is always storage#bucketAccessControls. + Kind string `json:"kind,omitempty"` +} + +type Buckets struct { + // Items: The list of items. + Items []*Bucket `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of buckets, this is always + // storage#buckets. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Channel struct { + // Address: The address where notifications are delivered for this + // channel. + Address string `json:"address,omitempty"` + + // Expiration: Date and time of notification channel expiration, + // expressed as a Unix timestamp, in milliseconds. Optional. + Expiration int64 `json:"expiration,omitempty,string"` + + // Id: A UUID or similar unique string that identifies this channel. + Id string `json:"id,omitempty"` + + // Kind: Identifies this as a notification channel used to watch for + // changes to a resource. Value: the fixed string "api#channel". + Kind string `json:"kind,omitempty"` + + // Params: Additional parameters controlling delivery channel behavior. + // Optional. + Params map[string]string `json:"params,omitempty"` + + // Payload: A Boolean value to indicate whether payload is wanted. + // Optional. + Payload bool `json:"payload,omitempty"` + + // ResourceId: An opaque ID that identifies the resource being watched + // on this channel. Stable across different API versions. + ResourceId string `json:"resourceId,omitempty"` + + // ResourceUri: A version-specific identifier for the watched resource. + ResourceUri string `json:"resourceUri,omitempty"` + + // Token: An arbitrary string delivered to the target address with each + // notification delivered over this channel. Optional. + Token string `json:"token,omitempty"` + + // Type: The type of delivery mechanism used for this channel. + Type string `json:"type,omitempty"` +} + +type ComposeRequest struct { + // Destination: Properties of the resulting object + Destination *Object `json:"destination,omitempty"` + + // Kind: The kind of item this is. + Kind string `json:"kind,omitempty"` + + // SourceObjects: The list of source objects that will be concatenated + // into a single object. + SourceObjects []*ComposeRequestSourceObjects `json:"sourceObjects,omitempty"` +} + +type ComposeRequestSourceObjects struct { + // Generation: The generation of this object to use as the source. + Generation int64 `json:"generation,omitempty,string"` + + // Name: The source object's name. The source object's bucket is + // implicitly the destination bucket. + Name string `json:"name,omitempty"` + + // ObjectPreconditions: Conditions that must be met for this operation + // to execute. + ObjectPreconditions *ComposeRequestSourceObjectsObjectPreconditions `json:"objectPreconditions,omitempty"` +} + +type ComposeRequestSourceObjectsObjectPreconditions struct { + // IfGenerationMatch: Only perform the composition if the generation of + // the source object that would be used matches this value. If this + // value and a generation are both specified, they must be the same + // value or the call will fail. + IfGenerationMatch int64 `json:"ifGenerationMatch,omitempty,string"` +} + +type Object struct { + // Acl: Access controls on the object. + Acl []*ObjectAccessControl `json:"acl,omitempty"` + + // Bucket: The bucket containing this object. + Bucket string `json:"bucket,omitempty"` + + // CacheControl: Cache-Control directive for the object data. + CacheControl string `json:"cacheControl,omitempty"` + + // ComponentCount: Number of underlying components that make up this + // object. Components are accumulated by compose operations and are + // limited to a count of 32. + ComponentCount int64 `json:"componentCount,omitempty"` + + // ContentDisposition: Content-Disposition of the object data. + ContentDisposition string `json:"contentDisposition,omitempty"` + + // ContentEncoding: Content-Encoding of the object data. + ContentEncoding string `json:"contentEncoding,omitempty"` + + // ContentLanguage: Content-Language of the object data. + ContentLanguage string `json:"contentLanguage,omitempty"` + + // ContentType: Content-Type of the object data. + ContentType string `json:"contentType,omitempty"` + + // Crc32c: CRC32c checksum, as described in RFC 4960, Appendix B; + // encoded using base64. + Crc32c string `json:"crc32c,omitempty"` + + // Etag: HTTP 1.1 Entity tag for the object. + Etag string `json:"etag,omitempty"` + + // Generation: The content generation of this object. Used for object + // versioning. + Generation int64 `json:"generation,omitempty,string"` + + // Id: The ID of the object. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For objects, this is always + // storage#object. + Kind string `json:"kind,omitempty"` + + // Md5Hash: MD5 hash of the data; encoded using base64. + Md5Hash string `json:"md5Hash,omitempty"` + + // MediaLink: Media download link. + MediaLink string `json:"mediaLink,omitempty"` + + // Metadata: User-provided metadata, in key/value pairs. + Metadata map[string]string `json:"metadata,omitempty"` + + // Metageneration: The generation of the metadata for this object at + // this generation. Used for metadata versioning. Has no meaning outside + // of the context of this generation. + Metageneration int64 `json:"metageneration,omitempty,string"` + + // Name: The name of this object. Required if not specified by URL + // parameter. + Name string `json:"name,omitempty"` + + // Owner: The owner of the object. This will always be the uploader of + // the object. + Owner *ObjectOwner `json:"owner,omitempty"` + + // SelfLink: The link to this object. + SelfLink string `json:"selfLink,omitempty"` + + // Size: Content-Length of the data in bytes. + Size uint64 `json:"size,omitempty,string"` + + // StorageClass: Storage class of the object. + StorageClass string `json:"storageClass,omitempty"` + + // TimeDeleted: Deletion time of the object in RFC 3339 format. Will be + // returned if and only if this version of the object has been deleted. + TimeDeleted string `json:"timeDeleted,omitempty"` + + // Updated: Modification time of the object metadata in RFC 3339 format. + Updated string `json:"updated,omitempty"` +} + +type ObjectOwner struct { + // Entity: The entity, in the form user-userId. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity. + EntityId string `json:"entityId,omitempty"` +} + +type ObjectAccessControl struct { + // Bucket: The name of the bucket. + Bucket string `json:"bucket,omitempty"` + + // Domain: The domain associated with the entity, if any. + Domain string `json:"domain,omitempty"` + + // Email: The email address associated with the entity, if any. + Email string `json:"email,omitempty"` + + // Entity: The entity holding the permission, in one of the following + // forms: + // - user-userId + // - user-email + // - group-groupId + // - group-email + // + // - domain-domain + // - allUsers + // - allAuthenticatedUsers Examples: + // - + // The user liz@example.com would be user-liz@example.com. + // - The group + // example@googlegroups.com would be group-example@googlegroups.com. + // - + // To refer to all members of the Google Apps for Business domain + // example.com, the entity would be domain-example.com. + Entity string `json:"entity,omitempty"` + + // EntityId: The ID for the entity, if any. + EntityId string `json:"entityId,omitempty"` + + // Etag: HTTP 1.1 Entity tag for the access-control entry. + Etag string `json:"etag,omitempty"` + + // Generation: The content generation of the object. + Generation int64 `json:"generation,omitempty,string"` + + // Id: The ID of the access-control entry. + Id string `json:"id,omitempty"` + + // Kind: The kind of item this is. For object access control entries, + // this is always storage#objectAccessControl. + Kind string `json:"kind,omitempty"` + + // Object: The name of the object. + Object string `json:"object,omitempty"` + + // Role: The access permission for the entity. Can be READER or OWNER. + Role string `json:"role,omitempty"` + + // SelfLink: The link to this access-control entry. + SelfLink string `json:"selfLink,omitempty"` +} + +type ObjectAccessControls struct { + // Items: The list of items. + Items []interface{} `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of object access control + // entries, this is always storage#objectAccessControls. + Kind string `json:"kind,omitempty"` +} + +type Objects struct { + // Items: The list of items. + Items []*Object `json:"items,omitempty"` + + // Kind: The kind of item this is. For lists of objects, this is always + // storage#objects. + Kind string `json:"kind,omitempty"` + + // NextPageToken: The continuation token, used to page through large + // result sets. Provide this value in a subsequent request to return the + // next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // Prefixes: The list of prefixes of objects matching-but-not-listed up + // to and including the requested delimiter. + Prefixes []string `json:"prefixes,omitempty"` +} + +// method id "storage.bucketAccessControls.delete": + +type BucketAccessControlsDeleteCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Delete: Permanently deletes the ACL entry for the specified entity on +// the specified bucket. +func (r *BucketAccessControlsService) Delete(bucket string, entity string) *BucketAccessControlsDeleteCall { + c := &BucketAccessControlsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *BucketAccessControlsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Permanently deletes the ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "DELETE", + // "id": "storage.bucketAccessControls.delete", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.get": + +type BucketAccessControlsGetCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Get: Returns the ACL entry for the specified entity on the specified +// bucket. +func (r *BucketAccessControlsService) Get(bucket string, entity string) *BucketAccessControlsGetCall { + c := &BucketAccessControlsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *BucketAccessControlsGetCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.bucketAccessControls.get", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.insert": + +type BucketAccessControlsInsertCall struct { + s *Service + bucket string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Insert: Creates a new ACL entry on the specified bucket. +func (r *BucketAccessControlsService) Insert(bucket string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsInsertCall { + c := &BucketAccessControlsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsInsertCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new ACL entry on the specified bucket.", + // "httpMethod": "POST", + // "id": "storage.bucketAccessControls.insert", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.list": + +type BucketAccessControlsListCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// List: Retrieves ACL entries on the specified bucket. +func (r *BucketAccessControlsService) List(bucket string) *BucketAccessControlsListCall { + c := &BucketAccessControlsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +func (c *BucketAccessControlsListCall) Do() (*BucketAccessControls, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControls) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves ACL entries on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.bucketAccessControls.list", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl", + // "response": { + // "$ref": "BucketAccessControls" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.patch": + +type BucketAccessControlsPatchCall struct { + s *Service + bucket string + entity string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Patch: Updates an ACL entry on the specified bucket. This method +// supports patch semantics. +func (r *BucketAccessControlsService) Patch(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsPatchCall { + c := &BucketAccessControlsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsPatchCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified bucket. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.bucketAccessControls.patch", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.bucketAccessControls.update": + +type BucketAccessControlsUpdateCall struct { + s *Service + bucket string + entity string + bucketaccesscontrol *BucketAccessControl + opt_ map[string]interface{} +} + +// Update: Updates an ACL entry on the specified bucket. +func (r *BucketAccessControlsService) Update(bucket string, entity string, bucketaccesscontrol *BucketAccessControl) *BucketAccessControlsUpdateCall { + c := &BucketAccessControlsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.bucketaccesscontrol = bucketaccesscontrol + return c +} + +func (c *BucketAccessControlsUpdateCall) Do() (*BucketAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucketaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(BucketAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified bucket.", + // "httpMethod": "PUT", + // "id": "storage.bucketAccessControls.update", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/acl/{entity}", + // "request": { + // "$ref": "BucketAccessControl" + // }, + // "response": { + // "$ref": "BucketAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.buckets.delete": + +type BucketsDeleteCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// Delete: Permanently deletes an empty bucket. +func (r *BucketsService) Delete(bucket string) *BucketsDeleteCall { + c := &BucketsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration matches +// the given value. +func (c *BucketsDeleteCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *BucketsDeleteCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration does not +// match the given value. +func (c *BucketsDeleteCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *BucketsDeleteCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +func (c *BucketsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Permanently deletes an empty bucket.", + // "httpMethod": "DELETE", + // "id": "storage.buckets.delete", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.get": + +type BucketsGetCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// Get: Returns metadata for the specified bucket. +func (r *BucketsService) Get(bucket string) *BucketsGetCall { + c := &BucketsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration matches +// the given value. +func (c *BucketsGetCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *BucketsGetCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration does not +// match the given value. +func (c *BucketsGetCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *BucketsGetCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl. +func (c *BucketsGetCall) Projection(projection string) *BucketsGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsGetCall) Do() (*Bucket, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns metadata for the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.buckets.get", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.insert": + +type BucketsInsertCall struct { + s *Service + projectid string + bucket *Bucket + opt_ map[string]interface{} +} + +// Insert: Creates a new bucket. +func (r *BucketsService) Insert(projectid string, bucket *Bucket) *BucketsInsertCall { + c := &BucketsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.projectid = projectid + c.bucket = bucket + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl, unless the bucket resource +// specifies acl or defaultObjectAcl properties, when it defaults to +// full. +func (c *BucketsInsertCall) Projection(projection string) *BucketsInsertCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsInsertCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("project", fmt.Sprintf("%v", c.projectid)) + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new bucket.", + // "httpMethod": "POST", + // "id": "storage.buckets.insert", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "project": { + // "description": "A valid API project identifier.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl, unless the bucket resource specifies acl or defaultObjectAcl properties, when it defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.list": + +type BucketsListCall struct { + s *Service + projectid string + opt_ map[string]interface{} +} + +// List: Retrieves a list of buckets for a given project. +func (r *BucketsService) List(projectid string) *BucketsListCall { + c := &BucketsListCall{s: r.s, opt_: make(map[string]interface{})} + c.projectid = projectid + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of buckets to return. +func (c *BucketsListCall) MaxResults(maxResults int64) *BucketsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *BucketsListCall) PageToken(pageToken string) *BucketsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl. +func (c *BucketsListCall) Projection(projection string) *BucketsListCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsListCall) Do() (*Buckets, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("project", fmt.Sprintf("%v", c.projectid)) + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Buckets) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of buckets for a given project.", + // "httpMethod": "GET", + // "id": "storage.buckets.list", + // "parameterOrder": [ + // "project" + // ], + // "parameters": { + // "maxResults": { + // "description": "Maximum number of buckets to return.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "project": { + // "description": "A valid API project identifier.", + // "location": "query", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b", + // "response": { + // "$ref": "Buckets" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.patch": + +type BucketsPatchCall struct { + s *Service + bucket string + bucket2 *Bucket + opt_ map[string]interface{} +} + +// Patch: Updates a bucket. This method supports patch semantics. +func (r *BucketsService) Patch(bucket string, bucket2 *Bucket) *BucketsPatchCall { + c := &BucketsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucket2 = bucket2 + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration matches +// the given value. +func (c *BucketsPatchCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *BucketsPatchCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration does not +// match the given value. +func (c *BucketsPatchCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *BucketsPatchCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *BucketsPatchCall) Projection(projection string) *BucketsPatchCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsPatchCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a bucket. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.buckets.patch", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.buckets.update": + +type BucketsUpdateCall struct { + s *Service + bucket string + bucket2 *Bucket + opt_ map[string]interface{} +} + +// Update: Updates a bucket. +func (r *BucketsService) Update(bucket string, bucket2 *Bucket) *BucketsUpdateCall { + c := &BucketsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.bucket2 = bucket2 + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration matches +// the given value. +func (c *BucketsUpdateCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *BucketsUpdateCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the return of the bucket metadata +// conditional on whether the bucket's current metageneration does not +// match the given value. +func (c *BucketsUpdateCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *BucketsUpdateCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *BucketsUpdateCall) Projection(projection string) *BucketsUpdateCall { + c.opt_["projection"] = projection + return c +} + +func (c *BucketsUpdateCall) Do() (*Bucket, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.bucket2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Bucket) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a bucket.", + // "httpMethod": "PUT", + // "id": "storage.buckets.update", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the return of the bucket metadata conditional on whether the bucket's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit acl and defaultObjectAcl properties." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}", + // "request": { + // "$ref": "Bucket" + // }, + // "response": { + // "$ref": "Bucket" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.channels.stop": + +type ChannelsStopCall struct { + s *Service + channel *Channel + opt_ map[string]interface{} +} + +// Stop: Stop watching resources through this channel +func (r *ChannelsService) Stop(channel *Channel) *ChannelsStopCall { + c := &ChannelsStopCall{s: r.s, opt_: make(map[string]interface{})} + c.channel = channel + return c +} + +func (c *ChannelsStopCall) Do() error { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "channels/stop") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Stop watching resources through this channel", + // "httpMethod": "POST", + // "id": "storage.channels.stop", + // "path": "channels/stop", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.delete": + +type DefaultObjectAccessControlsDeleteCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Delete: Permanently deletes the default object ACL entry for the +// specified entity on the specified bucket. +func (r *DefaultObjectAccessControlsService) Delete(bucket string, entity string) *DefaultObjectAccessControlsDeleteCall { + c := &DefaultObjectAccessControlsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *DefaultObjectAccessControlsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Permanently deletes the default object ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "DELETE", + // "id": "storage.defaultObjectAccessControls.delete", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl/{entity}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.get": + +type DefaultObjectAccessControlsGetCall struct { + s *Service + bucket string + entity string + opt_ map[string]interface{} +} + +// Get: Returns the default object ACL entry for the specified entity on +// the specified bucket. +func (r *DefaultObjectAccessControlsService) Get(bucket string, entity string) *DefaultObjectAccessControlsGetCall { + c := &DefaultObjectAccessControlsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + return c +} + +func (c *DefaultObjectAccessControlsGetCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the default object ACL entry for the specified entity on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.defaultObjectAccessControls.get", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl/{entity}", + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.insert": + +type DefaultObjectAccessControlsInsertCall struct { + s *Service + bucket string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Insert: Creates a new default object ACL entry on the specified +// bucket. +func (r *DefaultObjectAccessControlsService) Insert(bucket string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsInsertCall { + c := &DefaultObjectAccessControlsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *DefaultObjectAccessControlsInsertCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new default object ACL entry on the specified bucket.", + // "httpMethod": "POST", + // "id": "storage.defaultObjectAccessControls.insert", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.list": + +type DefaultObjectAccessControlsListCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// List: Retrieves default object ACL entries on the specified bucket. +func (r *DefaultObjectAccessControlsService) List(bucket string) *DefaultObjectAccessControlsListCall { + c := &DefaultObjectAccessControlsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the destination object's current metageneration matches the given +// value. +func (c *DefaultObjectAccessControlsListCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *DefaultObjectAccessControlsListCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the destination object's current metageneration does not +// match the given value. +func (c *DefaultObjectAccessControlsListCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *DefaultObjectAccessControlsListCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +func (c *DefaultObjectAccessControlsListCall) Do() (*ObjectAccessControls, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControls) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves default object ACL entries on the specified bucket.", + // "httpMethod": "GET", + // "id": "storage.defaultObjectAccessControls.list", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the destination object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the destination object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl", + // "response": { + // "$ref": "ObjectAccessControls" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.patch": + +type DefaultObjectAccessControlsPatchCall struct { + s *Service + bucket string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Patch: Updates a default object ACL entry on the specified bucket. +// This method supports patch semantics. +func (r *DefaultObjectAccessControlsService) Patch(bucket string, entity string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsPatchCall { + c := &DefaultObjectAccessControlsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *DefaultObjectAccessControlsPatchCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a default object ACL entry on the specified bucket. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.defaultObjectAccessControls.patch", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.defaultObjectAccessControls.update": + +type DefaultObjectAccessControlsUpdateCall struct { + s *Service + bucket string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Update: Updates a default object ACL entry on the specified bucket. +func (r *DefaultObjectAccessControlsService) Update(bucket string, entity string, objectaccesscontrol *ObjectAccessControl) *DefaultObjectAccessControlsUpdateCall { + c := &DefaultObjectAccessControlsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +func (c *DefaultObjectAccessControlsUpdateCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/defaultObjectAcl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a default object ACL entry on the specified bucket.", + // "httpMethod": "PUT", + // "id": "storage.defaultObjectAccessControls.update", + // "parameterOrder": [ + // "bucket", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/defaultObjectAcl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.delete": + +type ObjectAccessControlsDeleteCall struct { + s *Service + bucket string + object string + entity string + opt_ map[string]interface{} +} + +// Delete: Permanently deletes the ACL entry for the specified entity on +// the specified object. +func (r *ObjectAccessControlsService) Delete(bucket string, object string, entity string) *ObjectAccessControlsDeleteCall { + c := &ObjectAccessControlsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsDeleteCall) Generation(generation uint64) *ObjectAccessControlsDeleteCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Permanently deletes the ACL entry for the specified entity on the specified object.", + // "httpMethod": "DELETE", + // "id": "storage.objectAccessControls.delete", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.get": + +type ObjectAccessControlsGetCall struct { + s *Service + bucket string + object string + entity string + opt_ map[string]interface{} +} + +// Get: Returns the ACL entry for the specified entity on the specified +// object. +func (r *ObjectAccessControlsService) Get(bucket string, object string, entity string) *ObjectAccessControlsGetCall { + c := &ObjectAccessControlsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsGetCall) Generation(generation uint64) *ObjectAccessControlsGetCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsGetCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the ACL entry for the specified entity on the specified object.", + // "httpMethod": "GET", + // "id": "storage.objectAccessControls.get", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.insert": + +type ObjectAccessControlsInsertCall struct { + s *Service + bucket string + object string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Insert: Creates a new ACL entry on the specified object. +func (r *ObjectAccessControlsService) Insert(bucket string, object string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsInsertCall { + c := &ObjectAccessControlsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.objectaccesscontrol = objectaccesscontrol + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsInsertCall) Generation(generation uint64) *ObjectAccessControlsInsertCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsInsertCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new ACL entry on the specified object.", + // "httpMethod": "POST", + // "id": "storage.objectAccessControls.insert", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.list": + +type ObjectAccessControlsListCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// List: Retrieves ACL entries on the specified object. +func (r *ObjectAccessControlsService) List(bucket string, object string) *ObjectAccessControlsListCall { + c := &ObjectAccessControlsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsListCall) Generation(generation uint64) *ObjectAccessControlsListCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsListCall) Do() (*ObjectAccessControls, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControls) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves ACL entries on the specified object.", + // "httpMethod": "GET", + // "id": "storage.objectAccessControls.list", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl", + // "response": { + // "$ref": "ObjectAccessControls" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.patch": + +type ObjectAccessControlsPatchCall struct { + s *Service + bucket string + object string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Patch: Updates an ACL entry on the specified object. This method +// supports patch semantics. +func (r *ObjectAccessControlsService) Patch(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsPatchCall { + c := &ObjectAccessControlsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsPatchCall) Generation(generation uint64) *ObjectAccessControlsPatchCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsPatchCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified object. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.objectAccessControls.patch", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objectAccessControls.update": + +type ObjectAccessControlsUpdateCall struct { + s *Service + bucket string + object string + entity string + objectaccesscontrol *ObjectAccessControl + opt_ map[string]interface{} +} + +// Update: Updates an ACL entry on the specified object. +func (r *ObjectAccessControlsService) Update(bucket string, object string, entity string, objectaccesscontrol *ObjectAccessControl) *ObjectAccessControlsUpdateCall { + c := &ObjectAccessControlsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.entity = entity + c.objectaccesscontrol = objectaccesscontrol + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectAccessControlsUpdateCall) Generation(generation uint64) *ObjectAccessControlsUpdateCall { + c.opt_["generation"] = generation + return c +} + +func (c *ObjectAccessControlsUpdateCall) Do() (*ObjectAccessControl, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.objectaccesscontrol) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}/acl/{entity}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{entity}", url.QueryEscape(c.entity), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(ObjectAccessControl) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates an ACL entry on the specified object.", + // "httpMethod": "PUT", + // "id": "storage.objectAccessControls.update", + // "parameterOrder": [ + // "bucket", + // "object", + // "entity" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of a bucket.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "entity": { + // "description": "The entity holding the permission. Can be user-userId, user-emailAddress, group-groupId, group-emailAddress, allUsers, or allAuthenticatedUsers.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}/acl/{entity}", + // "request": { + // "$ref": "ObjectAccessControl" + // }, + // "response": { + // "$ref": "ObjectAccessControl" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control" + // ] + // } + +} + +// method id "storage.objects.compose": + +type ObjectsComposeCall struct { + s *Service + destinationBucket string + destinationObject string + composerequest *ComposeRequest + opt_ map[string]interface{} +} + +// Compose: Concatenates a list of existing objects into a new object in +// the same bucket. +func (r *ObjectsService) Compose(destinationBucket string, destinationObject string, composerequest *ComposeRequest) *ObjectsComposeCall { + c := &ObjectsComposeCall{s: r.s, opt_: make(map[string]interface{})} + c.destinationBucket = destinationBucket + c.destinationObject = destinationObject + c.composerequest = composerequest + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's current +// generation matches the given value. +func (c *ObjectsComposeCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsComposeCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsComposeCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsComposeCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +func (c *ObjectsComposeCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.composerequest) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{destinationBucket}/o/{destinationObject}/compose") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{destinationBucket}", url.QueryEscape(c.destinationBucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{destinationObject}", url.QueryEscape(c.destinationObject), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Concatenates a list of existing objects into a new object in the same bucket.", + // "httpMethod": "POST", + // "id": "storage.objects.compose", + // "parameterOrder": [ + // "destinationBucket", + // "destinationObject" + // ], + // "parameters": { + // "destinationBucket": { + // "description": "Name of the bucket in which to store the new object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "destinationObject": { + // "description": "Name of the new object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{destinationBucket}/o/{destinationObject}/compose", + // "request": { + // "$ref": "ComposeRequest" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "storage.objects.copy": + +type ObjectsCopyCall struct { + s *Service + sourceBucket string + sourceObject string + destinationBucket string + destinationObject string + object *Object + opt_ map[string]interface{} +} + +// Copy: Copies an object to a destination in the same location. +// Optionally overrides metadata. +func (r *ObjectsService) Copy(sourceBucket string, sourceObject string, destinationBucket string, destinationObject string, object *Object) *ObjectsCopyCall { + c := &ObjectsCopyCall{s: r.s, opt_: make(map[string]interface{})} + c.sourceBucket = sourceBucket + c.sourceObject = sourceObject + c.destinationBucket = destinationBucket + c.destinationObject = destinationObject + c.object = object + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the destination object's +// current generation matches the given value. +func (c *ObjectsCopyCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsCopyCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the destination object's current generation does not match the given +// value. +func (c *ObjectsCopyCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsCopyCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the destination object's current metageneration matches the given +// value. +func (c *ObjectsCopyCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsCopyCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the destination object's current metageneration does not +// match the given value. +func (c *ObjectsCopyCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsCopyCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// IfSourceGenerationMatch sets the optional parameter +// "ifSourceGenerationMatch": Makes the operation conditional on whether +// the source object's generation matches the given value. +func (c *ObjectsCopyCall) IfSourceGenerationMatch(ifSourceGenerationMatch uint64) *ObjectsCopyCall { + c.opt_["ifSourceGenerationMatch"] = ifSourceGenerationMatch + return c +} + +// IfSourceGenerationNotMatch sets the optional parameter +// "ifSourceGenerationNotMatch": Makes the operation conditional on +// whether the source object's generation does not match the given +// value. +func (c *ObjectsCopyCall) IfSourceGenerationNotMatch(ifSourceGenerationNotMatch uint64) *ObjectsCopyCall { + c.opt_["ifSourceGenerationNotMatch"] = ifSourceGenerationNotMatch + return c +} + +// IfSourceMetagenerationMatch sets the optional parameter +// "ifSourceMetagenerationMatch": Makes the operation conditional on +// whether the source object's current metageneration matches the given +// value. +func (c *ObjectsCopyCall) IfSourceMetagenerationMatch(ifSourceMetagenerationMatch uint64) *ObjectsCopyCall { + c.opt_["ifSourceMetagenerationMatch"] = ifSourceMetagenerationMatch + return c +} + +// IfSourceMetagenerationNotMatch sets the optional parameter +// "ifSourceMetagenerationNotMatch": Makes the operation conditional on +// whether the source object's current metageneration does not match the +// given value. +func (c *ObjectsCopyCall) IfSourceMetagenerationNotMatch(ifSourceMetagenerationNotMatch uint64) *ObjectsCopyCall { + c.opt_["ifSourceMetagenerationNotMatch"] = ifSourceMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl, unless the object resource +// specifies the acl property, when it defaults to full. +func (c *ObjectsCopyCall) Projection(projection string) *ObjectsCopyCall { + c.opt_["projection"] = projection + return c +} + +// SourceGeneration sets the optional parameter "sourceGeneration": If +// present, selects a specific revision of the source object (as opposed +// to the latest version, the default). +func (c *ObjectsCopyCall) SourceGeneration(sourceGeneration uint64) *ObjectsCopyCall { + c.opt_["sourceGeneration"] = sourceGeneration + return c +} + +func (c *ObjectsCopyCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifSourceGenerationMatch"]; ok { + params.Set("ifSourceGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifSourceGenerationNotMatch"]; ok { + params.Set("ifSourceGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifSourceMetagenerationMatch"]; ok { + params.Set("ifSourceMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifSourceMetagenerationNotMatch"]; ok { + params.Set("ifSourceMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["sourceGeneration"]; ok { + params.Set("sourceGeneration", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{sourceBucket}", url.QueryEscape(c.sourceBucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{sourceObject}", url.QueryEscape(c.sourceObject), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{destinationBucket}", url.QueryEscape(c.destinationBucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{destinationObject}", url.QueryEscape(c.destinationObject), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Copies an object to a destination in the same location. Optionally overrides metadata.", + // "httpMethod": "POST", + // "id": "storage.objects.copy", + // "parameterOrder": [ + // "sourceBucket", + // "sourceObject", + // "destinationBucket", + // "destinationObject" + // ], + // "parameters": { + // "destinationBucket": { + // "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "destinationObject": { + // "description": "Name of the new object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the destination object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the destination object's current generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the destination object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the destination object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifSourceGenerationMatch": { + // "description": "Makes the operation conditional on whether the source object's generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifSourceGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the source object's generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifSourceMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the source object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifSourceMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the source object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // }, + // "sourceBucket": { + // "description": "Name of the bucket in which to find the source object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "sourceGeneration": { + // "description": "If present, selects a specific revision of the source object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "sourceObject": { + // "description": "Name of the source object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{sourceBucket}/o/{sourceObject}/copyTo/b/{destinationBucket}/o/{destinationObject}", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "storage.objects.delete": + +type ObjectsDeleteCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// Delete: Deletes data blobs and associated metadata. Deletions are +// permanent if versioning is not enabled for the bucket, or if the +// generation parameter is used. +func (r *ObjectsService) Delete(bucket string, object string) *ObjectsDeleteCall { + c := &ObjectsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// Generation sets the optional parameter "generation": If present, +// permanently deletes a specific revision of this object (as opposed to +// the latest version, the default). +func (c *ObjectsDeleteCall) Generation(generation uint64) *ObjectsDeleteCall { + c.opt_["generation"] = generation + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's current +// generation matches the given value. +func (c *ObjectsDeleteCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsDeleteCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the object's current generation does not match the given value. +func (c *ObjectsDeleteCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsDeleteCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsDeleteCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsDeleteCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the object's current metageneration does not match the given +// value. +func (c *ObjectsDeleteCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsDeleteCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +func (c *ObjectsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes data blobs and associated metadata. Deletions are permanent if versioning is not enabled for the bucket, or if the generation parameter is used.", + // "httpMethod": "DELETE", + // "id": "storage.objects.delete", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, permanently deletes a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.objects.get": + +type ObjectsGetCall struct { + s *Service + bucket string + object string + opt_ map[string]interface{} +} + +// Get: Retrieves objects or their associated metadata. +func (r *ObjectsService) Get(bucket string, object string) *ObjectsGetCall { + c := &ObjectsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectsGetCall) Generation(generation uint64) *ObjectsGetCall { + c.opt_["generation"] = generation + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's generation +// matches the given value. +func (c *ObjectsGetCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsGetCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the object's generation does not match the given value. +func (c *ObjectsGetCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsGetCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsGetCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsGetCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the object's current metageneration does not match the given +// value. +func (c *ObjectsGetCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsGetCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl. +func (c *ObjectsGetCall) Projection(projection string) *ObjectsGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsGetCall) Do() (*Object, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves objects or their associated metadata.", + // "httpMethod": "GET", + // "id": "storage.objects.get", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "storage.objects.insert": + +type ObjectsInsertCall struct { + s *Service + bucket string + object *Object + opt_ map[string]interface{} + media_ io.Reader +} + +// Insert: Stores new data blobs and associated metadata. +func (r *ObjectsService) Insert(bucket string, object *Object) *ObjectsInsertCall { + c := &ObjectsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's current +// generation matches the given value. +func (c *ObjectsInsertCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsInsertCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the object's current generation does not match the given value. +func (c *ObjectsInsertCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsInsertCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsInsertCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsInsertCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the object's current metageneration does not match the given +// value. +func (c *ObjectsInsertCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsInsertCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Name sets the optional parameter "name": Name of the object. Required +// when the object metadata is not otherwise provided. Overrides the +// object metadata's name value, if any. +func (c *ObjectsInsertCall) Name(name string) *ObjectsInsertCall { + c.opt_["name"] = name + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl, unless the object resource +// specifies the acl property, when it defaults to full. +func (c *ObjectsInsertCall) Projection(projection string) *ObjectsInsertCall { + c.opt_["projection"] = projection + return c +} +func (c *ObjectsInsertCall) Media(r io.Reader) *ObjectsInsertCall { + c.media_ = r + return c +} + +func (c *ObjectsInsertCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["name"]; ok { + params.Set("name", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o") + if c.media_ != nil { + urls = strings.Replace(urls, "https://www.googleapis.com/", "https://www.googleapis.com/upload/", 1) + params.Set("uploadType", "multipart") + } + urls += "?" + params.Encode() + contentLength_, hasMedia_ := googleapi.ConditionallyIncludeMedia(c.media_, &body, &ctype) + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + if hasMedia_ { + req.ContentLength = contentLength_ + } + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Stores new data blobs and associated metadata.", + // "httpMethod": "POST", + // "id": "storage.objects.insert", + // "mediaUpload": { + // "accept": [ + // "*/*" + // ], + // "protocols": { + // "resumable": { + // "multipart": true, + // "path": "/resumable/upload/storage/v1beta2/b/{bucket}/o" + // }, + // "simple": { + // "multipart": true, + // "path": "/upload/storage/v1beta2/b/{bucket}/o" + // } + // } + // }, + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which to store the new object. Overrides the provided object metadata's bucket value, if any.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "name": { + // "description": "Name of the object. Required when the object metadata is not otherwise provided. Overrides the object metadata's name value, if any.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl, unless the object resource specifies the acl property, when it defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true, + // "supportsMediaUpload": true + // } + +} + +// method id "storage.objects.list": + +type ObjectsListCall struct { + s *Service + bucket string + opt_ map[string]interface{} +} + +// List: Retrieves a list of objects matching the criteria. +func (r *ObjectsService) List(bucket string) *ObjectsListCall { + c := &ObjectsListCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + return c +} + +// Delimiter sets the optional parameter "delimiter": Returns results in +// a directory-like mode. items will contain only objects whose names, +// aside from the prefix, do not contain delimiter. Objects whose names, +// aside from the prefix, contain delimiter will have their name, +// truncated after the delimiter, returned in prefixes. Duplicate +// prefixes are omitted. +func (c *ObjectsListCall) Delimiter(delimiter string) *ObjectsListCall { + c.opt_["delimiter"] = delimiter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of items plus prefixes to return. As duplicate prefixes are omitted, +// fewer total results may be returned than requested. +func (c *ObjectsListCall) MaxResults(maxResults int64) *ObjectsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *ObjectsListCall) PageToken(pageToken string) *ObjectsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Prefix sets the optional parameter "prefix": Filter results to +// objects whose names begin with this prefix. +func (c *ObjectsListCall) Prefix(prefix string) *ObjectsListCall { + c.opt_["prefix"] = prefix + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl. +func (c *ObjectsListCall) Projection(projection string) *ObjectsListCall { + c.opt_["projection"] = projection + return c +} + +// Versions sets the optional parameter "versions": If true, lists all +// versions of a file as distinct results. +func (c *ObjectsListCall) Versions(versions bool) *ObjectsListCall { + c.opt_["versions"] = versions + return c +} + +func (c *ObjectsListCall) Do() (*Objects, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["delimiter"]; ok { + params.Set("delimiter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefix"]; ok { + params.Set("prefix", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["versions"]; ok { + params.Set("versions", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Objects) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of objects matching the criteria.", + // "httpMethod": "GET", + // "id": "storage.objects.list", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which to look for objects.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "delimiter": { + // "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "prefix": { + // "description": "Filter results to objects whose names begin with this prefix.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // }, + // "versions": { + // "description": "If true, lists all versions of a file as distinct results.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "b/{bucket}/o", + // "response": { + // "$ref": "Objects" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsSubscription": true + // } + +} + +// method id "storage.objects.patch": + +type ObjectsPatchCall struct { + s *Service + bucket string + object string + object2 *Object + opt_ map[string]interface{} +} + +// Patch: Updates a data blob's associated metadata. This method +// supports patch semantics. +func (r *ObjectsService) Patch(bucket string, object string, object2 *Object) *ObjectsPatchCall { + c := &ObjectsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.object2 = object2 + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectsPatchCall) Generation(generation uint64) *ObjectsPatchCall { + c.opt_["generation"] = generation + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's current +// generation matches the given value. +func (c *ObjectsPatchCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsPatchCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the object's current generation does not match the given value. +func (c *ObjectsPatchCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsPatchCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsPatchCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsPatchCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the object's current metageneration does not match the given +// value. +func (c *ObjectsPatchCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsPatchCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *ObjectsPatchCall) Projection(projection string) *ObjectsPatchCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsPatchCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a data blob's associated metadata. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "storage.objects.patch", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ] + // } + +} + +// method id "storage.objects.update": + +type ObjectsUpdateCall struct { + s *Service + bucket string + object string + object2 *Object + opt_ map[string]interface{} +} + +// Update: Updates a data blob's associated metadata. +func (r *ObjectsService) Update(bucket string, object string, object2 *Object) *ObjectsUpdateCall { + c := &ObjectsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.object = object + c.object2 = object2 + return c +} + +// Generation sets the optional parameter "generation": If present, +// selects a specific revision of this object (as opposed to the latest +// version, the default). +func (c *ObjectsUpdateCall) Generation(generation uint64) *ObjectsUpdateCall { + c.opt_["generation"] = generation + return c +} + +// IfGenerationMatch sets the optional parameter "ifGenerationMatch": +// Makes the operation conditional on whether the object's current +// generation matches the given value. +func (c *ObjectsUpdateCall) IfGenerationMatch(ifGenerationMatch uint64) *ObjectsUpdateCall { + c.opt_["ifGenerationMatch"] = ifGenerationMatch + return c +} + +// IfGenerationNotMatch sets the optional parameter +// "ifGenerationNotMatch": Makes the operation conditional on whether +// the object's current generation does not match the given value. +func (c *ObjectsUpdateCall) IfGenerationNotMatch(ifGenerationNotMatch uint64) *ObjectsUpdateCall { + c.opt_["ifGenerationNotMatch"] = ifGenerationNotMatch + return c +} + +// IfMetagenerationMatch sets the optional parameter +// "ifMetagenerationMatch": Makes the operation conditional on whether +// the object's current metageneration matches the given value. +func (c *ObjectsUpdateCall) IfMetagenerationMatch(ifMetagenerationMatch uint64) *ObjectsUpdateCall { + c.opt_["ifMetagenerationMatch"] = ifMetagenerationMatch + return c +} + +// IfMetagenerationNotMatch sets the optional parameter +// "ifMetagenerationNotMatch": Makes the operation conditional on +// whether the object's current metageneration does not match the given +// value. +func (c *ObjectsUpdateCall) IfMetagenerationNotMatch(ifMetagenerationNotMatch uint64) *ObjectsUpdateCall { + c.opt_["ifMetagenerationNotMatch"] = ifMetagenerationNotMatch + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to full. +func (c *ObjectsUpdateCall) Projection(projection string) *ObjectsUpdateCall { + c.opt_["projection"] = projection + return c +} + +func (c *ObjectsUpdateCall) Do() (*Object, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.object2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["generation"]; ok { + params.Set("generation", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationMatch"]; ok { + params.Set("ifGenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifGenerationNotMatch"]; ok { + params.Set("ifGenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationMatch"]; ok { + params.Set("ifMetagenerationMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["ifMetagenerationNotMatch"]; ok { + params.Set("ifMetagenerationNotMatch", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/{object}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{object}", url.QueryEscape(c.object), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Object) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates a data blob's associated metadata.", + // "httpMethod": "PUT", + // "id": "storage.objects.update", + // "parameterOrder": [ + // "bucket", + // "object" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which the object resides.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "generation": { + // "description": "If present, selects a specific revision of this object (as opposed to the latest version, the default).", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current generation matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifGenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current generation does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration matches the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "ifMetagenerationNotMatch": { + // "description": "Makes the operation conditional on whether the object's current metageneration does not match the given value.", + // "format": "uint64", + // "location": "query", + // "type": "string" + // }, + // "object": { + // "description": "Name of the object.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to full.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "b/{bucket}/o/{object}", + // "request": { + // "$ref": "Object" + // }, + // "response": { + // "$ref": "Object" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsMediaDownload": true + // } + +} + +// method id "storage.objects.watchAll": + +type ObjectsWatchAllCall struct { + s *Service + bucket string + channel *Channel + opt_ map[string]interface{} +} + +// WatchAll: Watch for changes on all objects in a bucket. +func (r *ObjectsService) WatchAll(bucket string, channel *Channel) *ObjectsWatchAllCall { + c := &ObjectsWatchAllCall{s: r.s, opt_: make(map[string]interface{})} + c.bucket = bucket + c.channel = channel + return c +} + +// Delimiter sets the optional parameter "delimiter": Returns results in +// a directory-like mode. items will contain only objects whose names, +// aside from the prefix, do not contain delimiter. Objects whose names, +// aside from the prefix, contain delimiter will have their name, +// truncated after the delimiter, returned in prefixes. Duplicate +// prefixes are omitted. +func (c *ObjectsWatchAllCall) Delimiter(delimiter string) *ObjectsWatchAllCall { + c.opt_["delimiter"] = delimiter + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of items plus prefixes to return. As duplicate prefixes are omitted, +// fewer total results may be returned than requested. +func (c *ObjectsWatchAllCall) MaxResults(maxResults int64) *ObjectsWatchAllCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": A +// previously-returned page token representing part of the larger set of +// results to view. +func (c *ObjectsWatchAllCall) PageToken(pageToken string) *ObjectsWatchAllCall { + c.opt_["pageToken"] = pageToken + return c +} + +// Prefix sets the optional parameter "prefix": Filter results to +// objects whose names begin with this prefix. +func (c *ObjectsWatchAllCall) Prefix(prefix string) *ObjectsWatchAllCall { + c.opt_["prefix"] = prefix + return c +} + +// Projection sets the optional parameter "projection": Set of +// properties to return. Defaults to noAcl. +func (c *ObjectsWatchAllCall) Projection(projection string) *ObjectsWatchAllCall { + c.opt_["projection"] = projection + return c +} + +// Versions sets the optional parameter "versions": If true, lists all +// versions of a file as distinct results. +func (c *ObjectsWatchAllCall) Versions(versions bool) *ObjectsWatchAllCall { + c.opt_["versions"] = versions + return c +} + +func (c *ObjectsWatchAllCall) Do() (*Channel, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.channel) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["delimiter"]; ok { + params.Set("delimiter", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["prefix"]; ok { + params.Set("prefix", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["versions"]; ok { + params.Set("versions", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "b/{bucket}/o/watch") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{bucket}", url.QueryEscape(c.bucket), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Channel) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Watch for changes on all objects in a bucket.", + // "httpMethod": "POST", + // "id": "storage.objects.watchAll", + // "parameterOrder": [ + // "bucket" + // ], + // "parameters": { + // "bucket": { + // "description": "Name of the bucket in which to look for objects.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "delimiter": { + // "description": "Returns results in a directory-like mode. items will contain only objects whose names, aside from the prefix, do not contain delimiter. Objects whose names, aside from the prefix, contain delimiter will have their name, truncated after the delimiter, returned in prefixes. Duplicate prefixes are omitted.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of items plus prefixes to return. As duplicate prefixes are omitted, fewer total results may be returned than requested.", + // "format": "uint32", + // "location": "query", + // "minimum": "0", + // "type": "integer" + // }, + // "pageToken": { + // "description": "A previously-returned page token representing part of the larger set of results to view.", + // "location": "query", + // "type": "string" + // }, + // "prefix": { + // "description": "Filter results to objects whose names begin with this prefix.", + // "location": "query", + // "type": "string" + // }, + // "projection": { + // "description": "Set of properties to return. Defaults to noAcl.", + // "enum": [ + // "full", + // "noAcl" + // ], + // "enumDescriptions": [ + // "Include all properties.", + // "Omit the acl property." + // ], + // "location": "query", + // "type": "string" + // }, + // "versions": { + // "description": "If true, lists all versions of a file as distinct results.", + // "location": "query", + // "type": "boolean" + // } + // }, + // "path": "b/{bucket}/o/watch", + // "request": { + // "$ref": "Channel", + // "parameterName": "resource" + // }, + // "response": { + // "$ref": "Channel" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/devstorage.full_control", + // "https://www.googleapis.com/auth/devstorage.read_only", + // "https://www.googleapis.com/auth/devstorage.read_write" + // ], + // "supportsSubscription": true + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-api.json b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-api.json new file mode 100644 index 0000000000000..417944b388e09 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-api.json @@ -0,0 +1,421 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/fu8k3FukjBIEHIV-twy8lOq39to\"", + "discoveryVersion": "v1", + "id": "taskqueue:v1beta1", + "name": "taskqueue", + "version": "v1beta1", + "title": "TaskQueue API", + "description": "Lets you access a Google App Engine Pull Task Queue over REST.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/app_engine-16.png", + "x32": "http://www.google.com/images/icons/product/app_engine-32.png" + }, + "documentationLink": "https://developers.google.com/appengine/docs/python/taskqueue/rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/taskqueue/v1beta1/projects/", + "basePath": "/taskqueue/v1beta1/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "taskqueue/v1beta1/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/taskqueue": { + "description": "Manage your Tasks and Taskqueues" + }, + "https://www.googleapis.com/auth/taskqueue.consumer": { + "description": "Consume Tasks from your Taskqueues" + } + } + } + }, + "schemas": { + "Task": { + "id": "Task", + "type": "object", + "properties": { + "enqueueTimestamp": { + "type": "string", + "description": "Time (in seconds since the epoch) at which the task was enqueued.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Name of the task." + }, + "kind": { + "type": "string", + "description": "The kind of object returned, in this case set to task.", + "default": "taskqueues#task" + }, + "leaseTimestamp": { + "type": "string", + "description": "Time (in seconds since the epoch) at which the task lease will expire. This value is 0 if the task isnt currently leased out to a worker.", + "format": "int64" + }, + "payloadBase64": { + "type": "string", + "description": "A bag of bytes which is the task payload. The payload on the JSON side is always Base64 encoded." + }, + "queueName": { + "type": "string", + "description": "Name of the queue that the task is in." + } + } + }, + "TaskQueue": { + "id": "TaskQueue", + "type": "object", + "properties": { + "acl": { + "type": "object", + "description": "ACLs that are applicable to this TaskQueue object.", + "properties": { + "adminEmails": { + "type": "array", + "description": "Email addresses of users who are \"admins\" of the TaskQueue. This means they can control the queue, eg set ACLs for the queue.", + "items": { + "type": "string" + } + }, + "consumerEmails": { + "type": "array", + "description": "Email addresses of users who can \"consume\" tasks from the TaskQueue. This means they can Dequeue and Delete tasks from the queue.", + "items": { + "type": "string" + } + }, + "producerEmails": { + "type": "array", + "description": "Email addresses of users who can \"produce\" tasks into the TaskQueue. This means they can Insert tasks into the queue.", + "items": { + "type": "string" + } + } + } + }, + "id": { + "type": "string", + "description": "Name of the taskqueue." + }, + "kind": { + "type": "string", + "description": "The kind of REST object returned, in this case taskqueue.", + "default": "taskqueues#taskqueue" + }, + "maxLeases": { + "type": "integer", + "description": "The number of times we should lease out tasks before giving up on them. If unset we lease them out forever until a worker deletes the task.", + "format": "int32" + }, + "stats": { + "type": "object", + "description": "Statistics for the TaskQueue object in question.", + "properties": { + "leasedLastHour": { + "type": "string", + "description": "Number of tasks leased in the last hour.", + "format": "int64" + }, + "leasedLastMinute": { + "type": "string", + "description": "Number of tasks leased in the last minute.", + "format": "int64" + }, + "oldestTask": { + "type": "string", + "description": "The timestamp (in seconds since the epoch) of the oldest unfinished task.", + "format": "int64" + }, + "totalTasks": { + "type": "integer", + "description": "Number of tasks in the queue.", + "format": "int32" + } + } + } + } + }, + "Tasks": { + "id": "Tasks", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The actual list of tasks returned as a result of the lease operation.", + "items": { + "$ref": "Task" + } + }, + "kind": { + "type": "string", + "description": "The kind of object returned, a list of tasks.", + "default": "taskqueue#tasks" + } + } + }, + "Tasks2": { + "id": "Tasks2", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The actual list of tasks currently active in the TaskQueue.", + "items": { + "$ref": "Task" + } + }, + "kind": { + "type": "string", + "description": "The kind of object returned, a list of tasks.", + "default": "taskqueues#tasks" + } + } + } + }, + "resources": { + "taskqueues": { + "methods": { + "get": { + "id": "taskqueue.taskqueues.get", + "path": "{project}/taskqueues/{taskqueue}", + "httpMethod": "GET", + "description": "Get detailed information about a TaskQueue.", + "parameters": { + "getStats": { + "type": "boolean", + "description": "Whether to get stats. Optional.", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The id of the taskqueue to get the properties of.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue" + ], + "response": { + "$ref": "TaskQueue" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + } + } + }, + "tasks": { + "methods": { + "delete": { + "id": "taskqueue.tasks.delete", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "DELETE", + "description": "Delete a task from a TaskQueue.", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "description": "The id of the task to delete.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue to delete a task from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task" + ], + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "get": { + "id": "taskqueue.tasks.get", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "GET", + "description": "Get a particular task from a TaskQueue.", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "description": "The task to get properties of.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue in which the task belongs.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task" + ], + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "lease": { + "id": "taskqueue.tasks.lease", + "path": "{project}/taskqueues/{taskqueue}/tasks/lease", + "httpMethod": "POST", + "description": "Lease 1 or more tasks from a TaskQueue.", + "parameters": { + "leaseSecs": { + "type": "integer", + "description": "The lease in seconds.", + "required": true, + "format": "int32", + "location": "query" + }, + "numTasks": { + "type": "integer", + "description": "The number of tasks to lease.", + "required": true, + "format": "int32", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue to lease a task from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "numTasks", + "leaseSecs" + ], + "response": { + "$ref": "Tasks" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "list": { + "id": "taskqueue.tasks.list", + "path": "{project}/taskqueues/{taskqueue}/tasks", + "httpMethod": "GET", + "description": "List Tasks in a TaskQueue", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The id of the taskqueue to list tasks from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue" + ], + "response": { + "$ref": "Tasks2" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-gen.go b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-gen.go new file mode 100644 index 0000000000000..4f80f79562c6a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta1/taskqueue-gen.go @@ -0,0 +1,602 @@ +// Package taskqueue provides access to the TaskQueue API. +// +// See https://developers.google.com/appengine/docs/python/taskqueue/rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/taskqueue/v1beta1" +// ... +// taskqueueService, err := taskqueue.New(oauthHttpClient) +package taskqueue + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "taskqueue:v1beta1" +const apiName = "taskqueue" +const apiVersion = "v1beta1" +const basePath = "https://www.googleapis.com/taskqueue/v1beta1/projects/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Tasks and Taskqueues + TaskqueueScope = "https://www.googleapis.com/auth/taskqueue" + + // Consume Tasks from your Taskqueues + TaskqueueConsumerScope = "https://www.googleapis.com/auth/taskqueue.consumer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Taskqueues = NewTaskqueuesService(s) + s.Tasks = NewTasksService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Taskqueues *TaskqueuesService + + Tasks *TasksService +} + +func NewTaskqueuesService(s *Service) *TaskqueuesService { + rs := &TaskqueuesService{s: s} + return rs +} + +type TaskqueuesService struct { + s *Service +} + +func NewTasksService(s *Service) *TasksService { + rs := &TasksService{s: s} + return rs +} + +type TasksService struct { + s *Service +} + +type Task struct { + // EnqueueTimestamp: Time (in seconds since the epoch) at which the task + // was enqueued. + EnqueueTimestamp int64 `json:"enqueueTimestamp,omitempty,string"` + + // Id: Name of the task. + Id string `json:"id,omitempty"` + + // Kind: The kind of object returned, in this case set to task. + Kind string `json:"kind,omitempty"` + + // LeaseTimestamp: Time (in seconds since the epoch) at which the task + // lease will expire. This value is 0 if the task isnt currently leased + // out to a worker. + LeaseTimestamp int64 `json:"leaseTimestamp,omitempty,string"` + + // PayloadBase64: A bag of bytes which is the task payload. The payload + // on the JSON side is always Base64 encoded. + PayloadBase64 string `json:"payloadBase64,omitempty"` + + // QueueName: Name of the queue that the task is in. + QueueName string `json:"queueName,omitempty"` +} + +type TaskQueue struct { + // Acl: ACLs that are applicable to this TaskQueue object. + Acl *TaskQueueAcl `json:"acl,omitempty"` + + // Id: Name of the taskqueue. + Id string `json:"id,omitempty"` + + // Kind: The kind of REST object returned, in this case taskqueue. + Kind string `json:"kind,omitempty"` + + // MaxLeases: The number of times we should lease out tasks before + // giving up on them. If unset we lease them out forever until a worker + // deletes the task. + MaxLeases int64 `json:"maxLeases,omitempty"` + + // Stats: Statistics for the TaskQueue object in question. + Stats *TaskQueueStats `json:"stats,omitempty"` +} + +type TaskQueueAcl struct { + // AdminEmails: Email addresses of users who are "admins" of the + // TaskQueue. This means they can control the queue, eg set ACLs for the + // queue. + AdminEmails []string `json:"adminEmails,omitempty"` + + // ConsumerEmails: Email addresses of users who can "consume" tasks from + // the TaskQueue. This means they can Dequeue and Delete tasks from the + // queue. + ConsumerEmails []string `json:"consumerEmails,omitempty"` + + // ProducerEmails: Email addresses of users who can "produce" tasks into + // the TaskQueue. This means they can Insert tasks into the queue. + ProducerEmails []string `json:"producerEmails,omitempty"` +} + +type TaskQueueStats struct { + // LeasedLastHour: Number of tasks leased in the last hour. + LeasedLastHour int64 `json:"leasedLastHour,omitempty,string"` + + // LeasedLastMinute: Number of tasks leased in the last minute. + LeasedLastMinute int64 `json:"leasedLastMinute,omitempty,string"` + + // OldestTask: The timestamp (in seconds since the epoch) of the oldest + // unfinished task. + OldestTask int64 `json:"oldestTask,omitempty,string"` + + // TotalTasks: Number of tasks in the queue. + TotalTasks int64 `json:"totalTasks,omitempty"` +} + +type Tasks struct { + // Items: The actual list of tasks returned as a result of the lease + // operation. + Items []*Task `json:"items,omitempty"` + + // Kind: The kind of object returned, a list of tasks. + Kind string `json:"kind,omitempty"` +} + +type Tasks2 struct { + // Items: The actual list of tasks currently active in the TaskQueue. + Items []*Task `json:"items,omitempty"` + + // Kind: The kind of object returned, a list of tasks. + Kind string `json:"kind,omitempty"` +} + +// method id "taskqueue.taskqueues.get": + +type TaskqueuesGetCall struct { + s *Service + project string + taskqueue string + opt_ map[string]interface{} +} + +// Get: Get detailed information about a TaskQueue. +func (r *TaskqueuesService) Get(project string, taskqueue string) *TaskqueuesGetCall { + c := &TaskqueuesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + return c +} + +// GetStats sets the optional parameter "getStats": Whether to get +// stats. +func (c *TaskqueuesGetCall) GetStats(getStats bool) *TaskqueuesGetCall { + c.opt_["getStats"] = getStats + return c +} + +func (c *TaskqueuesGetCall) Do() (*TaskQueue, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["getStats"]; ok { + params.Set("getStats", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskQueue) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get detailed information about a TaskQueue.", + // "httpMethod": "GET", + // "id": "taskqueue.taskqueues.get", + // "parameterOrder": [ + // "project", + // "taskqueue" + // ], + // "parameters": { + // "getStats": { + // "description": "Whether to get stats. Optional.", + // "location": "query", + // "type": "boolean" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The id of the taskqueue to get the properties of.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}", + // "response": { + // "$ref": "TaskQueue" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.delete": + +type TasksDeleteCall struct { + s *Service + project string + taskqueue string + task string + opt_ map[string]interface{} +} + +// Delete: Delete a task from a TaskQueue. +func (r *TasksService) Delete(project string, taskqueue string, task string) *TasksDeleteCall { + c := &TasksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + return c +} + +func (c *TasksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a task from a TaskQueue.", + // "httpMethod": "DELETE", + // "id": "taskqueue.tasks.delete", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "description": "The id of the task to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue to delete a task from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.get": + +type TasksGetCall struct { + s *Service + project string + taskqueue string + task string + opt_ map[string]interface{} +} + +// Get: Get a particular task from a TaskQueue. +func (r *TasksService) Get(project string, taskqueue string, task string) *TasksGetCall { + c := &TasksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + return c +} + +func (c *TasksGetCall) Do() (*Task, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a particular task from a TaskQueue.", + // "httpMethod": "GET", + // "id": "taskqueue.tasks.get", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "description": "The task to get properties of.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue in which the task belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.lease": + +type TasksLeaseCall struct { + s *Service + project string + taskqueue string + numTasks int64 + leaseSecs int64 + opt_ map[string]interface{} +} + +// Lease: Lease 1 or more tasks from a TaskQueue. +func (r *TasksService) Lease(project string, taskqueue string, numTasks int64, leaseSecs int64) *TasksLeaseCall { + c := &TasksLeaseCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.numTasks = numTasks + c.leaseSecs = leaseSecs + return c +} + +func (c *TasksLeaseCall) Do() (*Tasks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("leaseSecs", fmt.Sprintf("%v", c.leaseSecs)) + params.Set("numTasks", fmt.Sprintf("%v", c.numTasks)) + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/lease") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tasks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lease 1 or more tasks from a TaskQueue.", + // "httpMethod": "POST", + // "id": "taskqueue.tasks.lease", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "numTasks", + // "leaseSecs" + // ], + // "parameters": { + // "leaseSecs": { + // "description": "The lease in seconds.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "numTasks": { + // "description": "The number of tasks to lease.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue to lease a task from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/lease", + // "response": { + // "$ref": "Tasks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.list": + +type TasksListCall struct { + s *Service + project string + taskqueue string + opt_ map[string]interface{} +} + +// List: List Tasks in a TaskQueue +func (r *TasksService) List(project string, taskqueue string) *TasksListCall { + c := &TasksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + return c +} + +func (c *TasksListCall) Do() (*Tasks2, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tasks2) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List Tasks in a TaskQueue", + // "httpMethod": "GET", + // "id": "taskqueue.tasks.list", + // "parameterOrder": [ + // "project", + // "taskqueue" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The id of the taskqueue to list tasks from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks", + // "response": { + // "$ref": "Tasks2" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-api.json b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-api.json new file mode 100644 index 0000000000000..10ef90a163ccb --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-api.json @@ -0,0 +1,568 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5Hs2SYZ6tc8V9isLu4EuE8s9_qg\"", + "discoveryVersion": "v1", + "id": "taskqueue:v1beta2", + "name": "taskqueue", + "version": "v1beta2", + "title": "TaskQueue API", + "description": "Lets you access a Google App Engine Pull Task Queue over REST.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/app_engine-16.png", + "x32": "http://www.google.com/images/icons/product/app_engine-32.png" + }, + "documentationLink": "https://developers.google.com/appengine/docs/python/taskqueue/rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/taskqueue/v1beta2/projects/", + "basePath": "/taskqueue/v1beta2/projects/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "taskqueue/v1beta2/projects/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/taskqueue": { + "description": "Manage your Tasks and Taskqueues" + }, + "https://www.googleapis.com/auth/taskqueue.consumer": { + "description": "Consume Tasks from your Taskqueues" + } + } + } + }, + "schemas": { + "Task": { + "id": "Task", + "type": "object", + "properties": { + "enqueueTimestamp": { + "type": "string", + "description": "Time (in seconds since the epoch) at which the task was enqueued.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Name of the task." + }, + "kind": { + "type": "string", + "description": "The kind of object returned, in this case set to task.", + "default": "taskqueues#task" + }, + "leaseTimestamp": { + "type": "string", + "description": "Time (in seconds since the epoch) at which the task lease will expire. This value is 0 if the task isnt currently leased out to a worker.", + "format": "int64" + }, + "payloadBase64": { + "type": "string", + "description": "A bag of bytes which is the task payload. The payload on the JSON side is always Base64 encoded." + }, + "queueName": { + "type": "string", + "description": "Name of the queue that the task is in." + }, + "retry_count": { + "type": "integer", + "description": "The number of leases applied to this task.", + "format": "int32" + }, + "tag": { + "type": "string", + "description": "Tag for the task, could be used later to lease tasks grouped by a specific tag." + } + } + }, + "TaskQueue": { + "id": "TaskQueue", + "type": "object", + "properties": { + "acl": { + "type": "object", + "description": "ACLs that are applicable to this TaskQueue object.", + "properties": { + "adminEmails": { + "type": "array", + "description": "Email addresses of users who are \"admins\" of the TaskQueue. This means they can control the queue, eg set ACLs for the queue.", + "items": { + "type": "string" + } + }, + "consumerEmails": { + "type": "array", + "description": "Email addresses of users who can \"consume\" tasks from the TaskQueue. This means they can Dequeue and Delete tasks from the queue.", + "items": { + "type": "string" + } + }, + "producerEmails": { + "type": "array", + "description": "Email addresses of users who can \"produce\" tasks into the TaskQueue. This means they can Insert tasks into the queue.", + "items": { + "type": "string" + } + } + } + }, + "id": { + "type": "string", + "description": "Name of the taskqueue." + }, + "kind": { + "type": "string", + "description": "The kind of REST object returned, in this case taskqueue.", + "default": "taskqueues#taskqueue" + }, + "maxLeases": { + "type": "integer", + "description": "The number of times we should lease out tasks before giving up on them. If unset we lease them out forever until a worker deletes the task.", + "format": "int32" + }, + "stats": { + "type": "object", + "description": "Statistics for the TaskQueue object in question.", + "properties": { + "leasedLastHour": { + "type": "string", + "description": "Number of tasks leased in the last hour.", + "format": "int64" + }, + "leasedLastMinute": { + "type": "string", + "description": "Number of tasks leased in the last minute.", + "format": "int64" + }, + "oldestTask": { + "type": "string", + "description": "The timestamp (in seconds since the epoch) of the oldest unfinished task.", + "format": "int64" + }, + "totalTasks": { + "type": "integer", + "description": "Number of tasks in the queue.", + "format": "int32" + } + } + } + } + }, + "Tasks": { + "id": "Tasks", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The actual list of tasks returned as a result of the lease operation.", + "items": { + "$ref": "Task" + } + }, + "kind": { + "type": "string", + "description": "The kind of object returned, a list of tasks.", + "default": "taskqueue#tasks" + } + } + }, + "Tasks2": { + "id": "Tasks2", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The actual list of tasks currently active in the TaskQueue.", + "items": { + "$ref": "Task" + } + }, + "kind": { + "type": "string", + "description": "The kind of object returned, a list of tasks.", + "default": "taskqueues#tasks" + } + } + } + }, + "resources": { + "taskqueues": { + "methods": { + "get": { + "id": "taskqueue.taskqueues.get", + "path": "{project}/taskqueues/{taskqueue}", + "httpMethod": "GET", + "description": "Get detailed information about a TaskQueue.", + "parameters": { + "getStats": { + "type": "boolean", + "description": "Whether to get stats. Optional.", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The id of the taskqueue to get the properties of.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue" + ], + "response": { + "$ref": "TaskQueue" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + } + } + }, + "tasks": { + "methods": { + "delete": { + "id": "taskqueue.tasks.delete", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "DELETE", + "description": "Delete a task from a TaskQueue.", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "description": "The id of the task to delete.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue to delete a task from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task" + ], + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "get": { + "id": "taskqueue.tasks.get", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "GET", + "description": "Get a particular task from a TaskQueue.", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "description": "The task to get properties of.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue in which the task belongs.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task" + ], + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "insert": { + "id": "taskqueue.tasks.insert", + "path": "{project}/taskqueues/{taskqueue}/tasks", + "httpMethod": "POST", + "description": "Insert a new task in a TaskQueue", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue to insert the task into", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "lease": { + "id": "taskqueue.tasks.lease", + "path": "{project}/taskqueues/{taskqueue}/tasks/lease", + "httpMethod": "POST", + "description": "Lease 1 or more tasks from a TaskQueue.", + "parameters": { + "groupByTag": { + "type": "boolean", + "description": "When true, all returned tasks will have the same tag", + "location": "query" + }, + "leaseSecs": { + "type": "integer", + "description": "The lease in seconds.", + "required": true, + "format": "int32", + "location": "query" + }, + "numTasks": { + "type": "integer", + "description": "The number of tasks to lease.", + "required": true, + "format": "int32", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "tag": { + "type": "string", + "description": "The tag allowed for tasks in the response. Must only be specified if group_by_tag is true. If group_by_tag is true and tag is not specified the tag will be that of the oldest task by eta, i.e. the first available tag", + "location": "query" + }, + "taskqueue": { + "type": "string", + "description": "The taskqueue to lease a task from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "numTasks", + "leaseSecs" + ], + "response": { + "$ref": "Tasks" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "list": { + "id": "taskqueue.tasks.list", + "path": "{project}/taskqueues/{taskqueue}/tasks", + "httpMethod": "GET", + "description": "List Tasks in a TaskQueue", + "parameters": { + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "description": "The id of the taskqueue to list tasks from.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue" + ], + "response": { + "$ref": "Tasks2" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "patch": { + "id": "taskqueue.tasks.patch", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "PATCH", + "description": "Update tasks that are leased out of a TaskQueue. This method supports patch semantics.", + "parameters": { + "newLeaseSeconds": { + "type": "integer", + "description": "The new lease in seconds.", + "required": true, + "format": "int32", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task", + "newLeaseSeconds" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + }, + "update": { + "id": "taskqueue.tasks.update", + "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + "httpMethod": "POST", + "description": "Update tasks that are leased out of a TaskQueue.", + "parameters": { + "newLeaseSeconds": { + "type": "integer", + "description": "The new lease in seconds.", + "required": true, + "format": "int32", + "location": "query" + }, + "project": { + "type": "string", + "description": "The project under which the queue lies.", + "required": true, + "location": "path" + }, + "task": { + "type": "string", + "required": true, + "location": "path" + }, + "taskqueue": { + "type": "string", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "project", + "taskqueue", + "task", + "newLeaseSeconds" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/taskqueue", + "https://www.googleapis.com/auth/taskqueue.consumer" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-gen.go b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-gen.go new file mode 100644 index 0000000000000..79604f3083bed --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/taskqueue/v1beta2/taskqueue-gen.go @@ -0,0 +1,938 @@ +// Package taskqueue provides access to the TaskQueue API. +// +// See https://developers.google.com/appengine/docs/python/taskqueue/rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/taskqueue/v1beta2" +// ... +// taskqueueService, err := taskqueue.New(oauthHttpClient) +package taskqueue + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "taskqueue:v1beta2" +const apiName = "taskqueue" +const apiVersion = "v1beta2" +const basePath = "https://www.googleapis.com/taskqueue/v1beta2/projects/" + +// OAuth2 scopes used by this API. +const ( + // Manage your Tasks and Taskqueues + TaskqueueScope = "https://www.googleapis.com/auth/taskqueue" + + // Consume Tasks from your Taskqueues + TaskqueueConsumerScope = "https://www.googleapis.com/auth/taskqueue.consumer" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Taskqueues = NewTaskqueuesService(s) + s.Tasks = NewTasksService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Taskqueues *TaskqueuesService + + Tasks *TasksService +} + +func NewTaskqueuesService(s *Service) *TaskqueuesService { + rs := &TaskqueuesService{s: s} + return rs +} + +type TaskqueuesService struct { + s *Service +} + +func NewTasksService(s *Service) *TasksService { + rs := &TasksService{s: s} + return rs +} + +type TasksService struct { + s *Service +} + +type Task struct { + // EnqueueTimestamp: Time (in seconds since the epoch) at which the task + // was enqueued. + EnqueueTimestamp int64 `json:"enqueueTimestamp,omitempty,string"` + + // Id: Name of the task. + Id string `json:"id,omitempty"` + + // Kind: The kind of object returned, in this case set to task. + Kind string `json:"kind,omitempty"` + + // LeaseTimestamp: Time (in seconds since the epoch) at which the task + // lease will expire. This value is 0 if the task isnt currently leased + // out to a worker. + LeaseTimestamp int64 `json:"leaseTimestamp,omitempty,string"` + + // PayloadBase64: A bag of bytes which is the task payload. The payload + // on the JSON side is always Base64 encoded. + PayloadBase64 string `json:"payloadBase64,omitempty"` + + // QueueName: Name of the queue that the task is in. + QueueName string `json:"queueName,omitempty"` + + // Retry_count: The number of leases applied to this task. + Retry_count int64 `json:"retry_count,omitempty"` + + // Tag: Tag for the task, could be used later to lease tasks grouped by + // a specific tag. + Tag string `json:"tag,omitempty"` +} + +type TaskQueue struct { + // Acl: ACLs that are applicable to this TaskQueue object. + Acl *TaskQueueAcl `json:"acl,omitempty"` + + // Id: Name of the taskqueue. + Id string `json:"id,omitempty"` + + // Kind: The kind of REST object returned, in this case taskqueue. + Kind string `json:"kind,omitempty"` + + // MaxLeases: The number of times we should lease out tasks before + // giving up on them. If unset we lease them out forever until a worker + // deletes the task. + MaxLeases int64 `json:"maxLeases,omitempty"` + + // Stats: Statistics for the TaskQueue object in question. + Stats *TaskQueueStats `json:"stats,omitempty"` +} + +type TaskQueueAcl struct { + // AdminEmails: Email addresses of users who are "admins" of the + // TaskQueue. This means they can control the queue, eg set ACLs for the + // queue. + AdminEmails []string `json:"adminEmails,omitempty"` + + // ConsumerEmails: Email addresses of users who can "consume" tasks from + // the TaskQueue. This means they can Dequeue and Delete tasks from the + // queue. + ConsumerEmails []string `json:"consumerEmails,omitempty"` + + // ProducerEmails: Email addresses of users who can "produce" tasks into + // the TaskQueue. This means they can Insert tasks into the queue. + ProducerEmails []string `json:"producerEmails,omitempty"` +} + +type TaskQueueStats struct { + // LeasedLastHour: Number of tasks leased in the last hour. + LeasedLastHour int64 `json:"leasedLastHour,omitempty,string"` + + // LeasedLastMinute: Number of tasks leased in the last minute. + LeasedLastMinute int64 `json:"leasedLastMinute,omitempty,string"` + + // OldestTask: The timestamp (in seconds since the epoch) of the oldest + // unfinished task. + OldestTask int64 `json:"oldestTask,omitempty,string"` + + // TotalTasks: Number of tasks in the queue. + TotalTasks int64 `json:"totalTasks,omitempty"` +} + +type Tasks struct { + // Items: The actual list of tasks returned as a result of the lease + // operation. + Items []*Task `json:"items,omitempty"` + + // Kind: The kind of object returned, a list of tasks. + Kind string `json:"kind,omitempty"` +} + +type Tasks2 struct { + // Items: The actual list of tasks currently active in the TaskQueue. + Items []*Task `json:"items,omitempty"` + + // Kind: The kind of object returned, a list of tasks. + Kind string `json:"kind,omitempty"` +} + +// method id "taskqueue.taskqueues.get": + +type TaskqueuesGetCall struct { + s *Service + project string + taskqueue string + opt_ map[string]interface{} +} + +// Get: Get detailed information about a TaskQueue. +func (r *TaskqueuesService) Get(project string, taskqueue string) *TaskqueuesGetCall { + c := &TaskqueuesGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + return c +} + +// GetStats sets the optional parameter "getStats": Whether to get +// stats. +func (c *TaskqueuesGetCall) GetStats(getStats bool) *TaskqueuesGetCall { + c.opt_["getStats"] = getStats + return c +} + +func (c *TaskqueuesGetCall) Do() (*TaskQueue, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["getStats"]; ok { + params.Set("getStats", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskQueue) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get detailed information about a TaskQueue.", + // "httpMethod": "GET", + // "id": "taskqueue.taskqueues.get", + // "parameterOrder": [ + // "project", + // "taskqueue" + // ], + // "parameters": { + // "getStats": { + // "description": "Whether to get stats. Optional.", + // "location": "query", + // "type": "boolean" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The id of the taskqueue to get the properties of.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}", + // "response": { + // "$ref": "TaskQueue" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.delete": + +type TasksDeleteCall struct { + s *Service + project string + taskqueue string + task string + opt_ map[string]interface{} +} + +// Delete: Delete a task from a TaskQueue. +func (r *TasksService) Delete(project string, taskqueue string, task string) *TasksDeleteCall { + c := &TasksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + return c +} + +func (c *TasksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Delete a task from a TaskQueue.", + // "httpMethod": "DELETE", + // "id": "taskqueue.tasks.delete", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "description": "The id of the task to delete.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue to delete a task from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.get": + +type TasksGetCall struct { + s *Service + project string + taskqueue string + task string + opt_ map[string]interface{} +} + +// Get: Get a particular task from a TaskQueue. +func (r *TasksService) Get(project string, taskqueue string, task string) *TasksGetCall { + c := &TasksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + return c +} + +func (c *TasksGetCall) Do() (*Task, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Get a particular task from a TaskQueue.", + // "httpMethod": "GET", + // "id": "taskqueue.tasks.get", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "description": "The task to get properties of.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue in which the task belongs.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.insert": + +type TasksInsertCall struct { + s *Service + project string + taskqueue string + task *Task + opt_ map[string]interface{} +} + +// Insert: Insert a new task in a TaskQueue +func (r *TasksService) Insert(project string, taskqueue string, task *Task) *TasksInsertCall { + c := &TasksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + return c +} + +func (c *TasksInsertCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Insert a new task in a TaskQueue", + // "httpMethod": "POST", + // "id": "taskqueue.tasks.insert", + // "parameterOrder": [ + // "project", + // "taskqueue" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue to insert the task into", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.lease": + +type TasksLeaseCall struct { + s *Service + project string + taskqueue string + numTasks int64 + leaseSecs int64 + opt_ map[string]interface{} +} + +// Lease: Lease 1 or more tasks from a TaskQueue. +func (r *TasksService) Lease(project string, taskqueue string, numTasks int64, leaseSecs int64) *TasksLeaseCall { + c := &TasksLeaseCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.numTasks = numTasks + c.leaseSecs = leaseSecs + return c +} + +// GroupByTag sets the optional parameter "groupByTag": When true, all +// returned tasks will have the same tag +func (c *TasksLeaseCall) GroupByTag(groupByTag bool) *TasksLeaseCall { + c.opt_["groupByTag"] = groupByTag + return c +} + +// Tag sets the optional parameter "tag": The tag allowed for tasks in +// the response. Must only be specified if group_by_tag is true. If +// group_by_tag is true and tag is not specified the tag will be that of +// the oldest task by eta, i.e. the first available tag +func (c *TasksLeaseCall) Tag(tag string) *TasksLeaseCall { + c.opt_["tag"] = tag + return c +} + +func (c *TasksLeaseCall) Do() (*Tasks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("leaseSecs", fmt.Sprintf("%v", c.leaseSecs)) + params.Set("numTasks", fmt.Sprintf("%v", c.numTasks)) + if v, ok := c.opt_["groupByTag"]; ok { + params.Set("groupByTag", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["tag"]; ok { + params.Set("tag", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/lease") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tasks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Lease 1 or more tasks from a TaskQueue.", + // "httpMethod": "POST", + // "id": "taskqueue.tasks.lease", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "numTasks", + // "leaseSecs" + // ], + // "parameters": { + // "groupByTag": { + // "description": "When true, all returned tasks will have the same tag", + // "location": "query", + // "type": "boolean" + // }, + // "leaseSecs": { + // "description": "The lease in seconds.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "numTasks": { + // "description": "The number of tasks to lease.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tag": { + // "description": "The tag allowed for tasks in the response. Must only be specified if group_by_tag is true. If group_by_tag is true and tag is not specified the tag will be that of the oldest task by eta, i.e. the first available tag", + // "location": "query", + // "type": "string" + // }, + // "taskqueue": { + // "description": "The taskqueue to lease a task from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/lease", + // "response": { + // "$ref": "Tasks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.list": + +type TasksListCall struct { + s *Service + project string + taskqueue string + opt_ map[string]interface{} +} + +// List: List Tasks in a TaskQueue +func (r *TasksService) List(project string, taskqueue string) *TasksListCall { + c := &TasksListCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + return c +} + +func (c *TasksListCall) Do() (*Tasks2, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tasks2) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List Tasks in a TaskQueue", + // "httpMethod": "GET", + // "id": "taskqueue.tasks.list", + // "parameterOrder": [ + // "project", + // "taskqueue" + // ], + // "parameters": { + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "description": "The id of the taskqueue to list tasks from.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks", + // "response": { + // "$ref": "Tasks2" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.patch": + +type TasksPatchCall struct { + s *Service + project string + taskqueue string + task string + newLeaseSeconds int64 + task2 *Task + opt_ map[string]interface{} +} + +// Patch: Update tasks that are leased out of a TaskQueue. This method +// supports patch semantics. +func (r *TasksService) Patch(project string, taskqueue string, task string, newLeaseSeconds int64, task2 *Task) *TasksPatchCall { + c := &TasksPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + c.newLeaseSeconds = newLeaseSeconds + c.task2 = task2 + return c +} + +func (c *TasksPatchCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("newLeaseSeconds", fmt.Sprintf("%v", c.newLeaseSeconds)) + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update tasks that are leased out of a TaskQueue. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "taskqueue.tasks.patch", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task", + // "newLeaseSeconds" + // ], + // "parameters": { + // "newLeaseSeconds": { + // "description": "The new lease in seconds.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} + +// method id "taskqueue.tasks.update": + +type TasksUpdateCall struct { + s *Service + project string + taskqueue string + task string + newLeaseSeconds int64 + task2 *Task + opt_ map[string]interface{} +} + +// Update: Update tasks that are leased out of a TaskQueue. +func (r *TasksService) Update(project string, taskqueue string, task string, newLeaseSeconds int64, task2 *Task) *TasksUpdateCall { + c := &TasksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.project = project + c.taskqueue = taskqueue + c.task = task + c.newLeaseSeconds = newLeaseSeconds + c.task2 = task2 + return c +} + +func (c *TasksUpdateCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task2) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + params.Set("newLeaseSeconds", fmt.Sprintf("%v", c.newLeaseSeconds)) + urls := googleapi.ResolveRelative(c.s.BasePath, "{project}/taskqueues/{taskqueue}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{project}", url.QueryEscape(c.project), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{taskqueue}", url.QueryEscape(c.taskqueue), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.task), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Update tasks that are leased out of a TaskQueue.", + // "httpMethod": "POST", + // "id": "taskqueue.tasks.update", + // "parameterOrder": [ + // "project", + // "taskqueue", + // "task", + // "newLeaseSeconds" + // ], + // "parameters": { + // "newLeaseSeconds": { + // "description": "The new lease in seconds.", + // "format": "int32", + // "location": "query", + // "required": true, + // "type": "integer" + // }, + // "project": { + // "description": "The project under which the queue lies.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "task": { + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "taskqueue": { + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "{project}/taskqueues/{taskqueue}/tasks/{task}", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/taskqueue", + // "https://www.googleapis.com/auth/taskqueue.consumer" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-api.json b/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-api.json new file mode 100644 index 0000000000000..54932b1c48ecf --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-api.json @@ -0,0 +1,695 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/5PpVnub_x8uBzIigVf3YlGXAlmA\"", + "discoveryVersion": "v1", + "id": "tasks:v1", + "name": "tasks", + "version": "v1", + "title": "Tasks API", + "description": "Lets you manage your tasks and task lists.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/tasks-16.png", + "x32": "http://www.google.com/images/icons/product/tasks-32.png" + }, + "documentationLink": "https://developers.google.com/google-apps/tasks/firstapp", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/tasks/v1/", + "basePath": "/tasks/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "tasks/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/tasks": { + "description": "Manage your tasks" + }, + "https://www.googleapis.com/auth/tasks.readonly": { + "description": "View your tasks" + } + } + } + }, + "schemas": { + "Task": { + "id": "Task", + "type": "object", + "properties": { + "completed": { + "type": "string", + "description": "Completion date of the task (as a RFC 3339 timestamp). This field is omitted if the task has not been completed.", + "format": "date-time" + }, + "deleted": { + "type": "boolean", + "description": "Flag indicating whether the task has been deleted. The default if False." + }, + "due": { + "type": "string", + "description": "Due date of the task (as a RFC 3339 timestamp). Optional.", + "format": "date-time" + }, + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "hidden": { + "type": "boolean", + "description": "Flag indicating whether the task is hidden. This is the case if the task had been marked completed when the task list was last cleared. The default is False. This field is read-only." + }, + "id": { + "type": "string", + "description": "Task identifier." + }, + "kind": { + "type": "string", + "description": "Type of the resource. This is always \"tasks#task\".", + "default": "tasks#task" + }, + "links": { + "type": "array", + "description": "Collection of links. This collection is read-only.", + "items": { + "type": "object", + "properties": { + "description": { + "type": "string", + "description": "The description. In HTML speak: Everything between \u003ca\u003e and \u003c/a\u003e." + }, + "link": { + "type": "string", + "description": "The URL." + }, + "type": { + "type": "string", + "description": "Type of the link, e.g. \"email\"." + } + } + } + }, + "notes": { + "type": "string", + "description": "Notes describing the task. Optional." + }, + "parent": { + "type": "string", + "description": "Parent task identifier. This field is omitted if it is a top-level task. This field is read-only. Use the \"move\" method to move the task under a different parent or to the top level." + }, + "position": { + "type": "string", + "description": "String indicating the position of the task among its sibling tasks under the same parent task or at the top level. If this string is greater than another task's corresponding position string according to lexicographical ordering, the task is positioned after the other task under the same parent task (or at the top level). This field is read-only. Use the \"move\" method to move the task to another position." + }, + "selfLink": { + "type": "string", + "description": "URL pointing to this task. Used to retrieve, update, or delete this task." + }, + "status": { + "type": "string", + "description": "Status of the task. This is either \"needsAction\" or \"completed\"." + }, + "title": { + "type": "string", + "description": "Title of the task." + }, + "updated": { + "type": "string", + "description": "Last modification time of the task (as a RFC 3339 timestamp).", + "format": "date-time" + } + } + }, + "TaskList": { + "id": "TaskList", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "id": { + "type": "string", + "description": "Task list identifier." + }, + "kind": { + "type": "string", + "description": "Type of the resource. This is always \"tasks#taskList\".", + "default": "tasks#taskList" + }, + "selfLink": { + "type": "string", + "description": "URL pointing to this task list. Used to retrieve, update, or delete this task list." + }, + "title": { + "type": "string", + "description": "Title of the task list." + }, + "updated": { + "type": "string", + "description": "Last modification time of the task list (as a RFC 3339 timestamp).", + "format": "date-time" + } + } + }, + "TaskLists": { + "id": "TaskLists", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "Collection of task lists.", + "items": { + "$ref": "TaskList" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource. This is always \"tasks#taskLists\".", + "default": "tasks#taskLists" + }, + "nextPageToken": { + "type": "string", + "description": "Token that can be used to request the next page of this result." + } + } + }, + "Tasks": { + "id": "Tasks", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "ETag of the resource." + }, + "items": { + "type": "array", + "description": "Collection of tasks.", + "items": { + "$ref": "Task" + } + }, + "kind": { + "type": "string", + "description": "Type of the resource. This is always \"tasks#tasks\".", + "default": "tasks#tasks" + }, + "nextPageToken": { + "type": "string", + "description": "Token used to access the next page of this result." + } + } + } + }, + "resources": { + "tasklists": { + "methods": { + "delete": { + "id": "tasks.tasklists.delete", + "path": "users/@me/lists/{tasklist}", + "httpMethod": "DELETE", + "description": "Deletes the authenticated user's specified task list.", + "parameters": { + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "get": { + "id": "tasks.tasklists.get", + "path": "users/@me/lists/{tasklist}", + "httpMethod": "GET", + "description": "Returns the authenticated user's specified task list.", + "parameters": { + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "response": { + "$ref": "TaskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks", + "https://www.googleapis.com/auth/tasks.readonly" + ] + }, + "insert": { + "id": "tasks.tasklists.insert", + "path": "users/@me/lists", + "httpMethod": "POST", + "description": "Creates a new task list and adds it to the authenticated user's task lists.", + "request": { + "$ref": "TaskList" + }, + "response": { + "$ref": "TaskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "list": { + "id": "tasks.tasklists.list", + "path": "users/@me/lists", + "httpMethod": "GET", + "description": "Returns all the authenticated user's task lists.", + "parameters": { + "maxResults": { + "type": "string", + "description": "Maximum number of task lists returned on one page. Optional. The default is 100.", + "format": "int64", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying the result page to return. Optional.", + "location": "query" + } + }, + "response": { + "$ref": "TaskLists" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks", + "https://www.googleapis.com/auth/tasks.readonly" + ] + }, + "patch": { + "id": "tasks.tasklists.patch", + "path": "users/@me/lists/{tasklist}", + "httpMethod": "PATCH", + "description": "Updates the authenticated user's specified task list. This method supports patch semantics.", + "parameters": { + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "request": { + "$ref": "TaskList" + }, + "response": { + "$ref": "TaskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "update": { + "id": "tasks.tasklists.update", + "path": "users/@me/lists/{tasklist}", + "httpMethod": "PUT", + "description": "Updates the authenticated user's specified task list.", + "parameters": { + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "request": { + "$ref": "TaskList" + }, + "response": { + "$ref": "TaskList" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + } + } + }, + "tasks": { + "methods": { + "clear": { + "id": "tasks.tasks.clear", + "path": "lists/{tasklist}/clear", + "httpMethod": "POST", + "description": "Clears all completed tasks from the specified task list. The affected tasks will be marked as 'hidden' and no longer be returned by default when retrieving all tasks for a task list.", + "parameters": { + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "delete": { + "id": "tasks.tasks.delete", + "path": "lists/{tasklist}/tasks/{task}", + "httpMethod": "DELETE", + "description": "Deletes the specified task from the task list.", + "parameters": { + "task": { + "type": "string", + "description": "Task identifier.", + "required": true, + "location": "path" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist", + "task" + ], + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "get": { + "id": "tasks.tasks.get", + "path": "lists/{tasklist}/tasks/{task}", + "httpMethod": "GET", + "description": "Returns the specified task.", + "parameters": { + "task": { + "type": "string", + "description": "Task identifier.", + "required": true, + "location": "path" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist", + "task" + ], + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks", + "https://www.googleapis.com/auth/tasks.readonly" + ] + }, + "insert": { + "id": "tasks.tasks.insert", + "path": "lists/{tasklist}/tasks", + "httpMethod": "POST", + "description": "Creates a new task on the specified task list.", + "parameters": { + "parent": { + "type": "string", + "description": "Parent task identifier. If the task is created at the top level, this parameter is omitted. Optional.", + "location": "query" + }, + "previous": { + "type": "string", + "description": "Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted. Optional.", + "location": "query" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "list": { + "id": "tasks.tasks.list", + "path": "lists/{tasklist}/tasks", + "httpMethod": "GET", + "description": "Returns all tasks in the specified task list.", + "parameters": { + "completedMax": { + "type": "string", + "description": "Upper bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.", + "location": "query" + }, + "completedMin": { + "type": "string", + "description": "Lower bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.", + "location": "query" + }, + "dueMax": { + "type": "string", + "description": "Upper bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.", + "location": "query" + }, + "dueMin": { + "type": "string", + "description": "Lower bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.", + "location": "query" + }, + "maxResults": { + "type": "string", + "description": "Maximum number of task lists returned on one page. Optional. The default is 100.", + "format": "int64", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "Token specifying the result page to return. Optional.", + "location": "query" + }, + "showCompleted": { + "type": "boolean", + "description": "Flag indicating whether completed tasks are returned in the result. Optional. The default is True.", + "location": "query" + }, + "showDeleted": { + "type": "boolean", + "description": "Flag indicating whether deleted tasks are returned in the result. Optional. The default is False.", + "location": "query" + }, + "showHidden": { + "type": "boolean", + "description": "Flag indicating whether hidden tasks are returned in the result. Optional. The default is False.", + "location": "query" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + }, + "updatedMin": { + "type": "string", + "description": "Lower bound for a task's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + "location": "query" + } + }, + "parameterOrder": [ + "tasklist" + ], + "response": { + "$ref": "Tasks" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks", + "https://www.googleapis.com/auth/tasks.readonly" + ] + }, + "move": { + "id": "tasks.tasks.move", + "path": "lists/{tasklist}/tasks/{task}/move", + "httpMethod": "POST", + "description": "Moves the specified task to another position in the task list. This can include putting it as a child task under a new parent and/or move it to a different position among its sibling tasks.", + "parameters": { + "parent": { + "type": "string", + "description": "New parent task identifier. If the task is moved to the top level, this parameter is omitted. Optional.", + "location": "query" + }, + "previous": { + "type": "string", + "description": "New previous sibling task identifier. If the task is moved to the first position among its siblings, this parameter is omitted. Optional.", + "location": "query" + }, + "task": { + "type": "string", + "description": "Task identifier.", + "required": true, + "location": "path" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist", + "task" + ], + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "patch": { + "id": "tasks.tasks.patch", + "path": "lists/{tasklist}/tasks/{task}", + "httpMethod": "PATCH", + "description": "Updates the specified task. This method supports patch semantics.", + "parameters": { + "task": { + "type": "string", + "description": "Task identifier.", + "required": true, + "location": "path" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist", + "task" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + }, + "update": { + "id": "tasks.tasks.update", + "path": "lists/{tasklist}/tasks/{task}", + "httpMethod": "PUT", + "description": "Updates the specified task.", + "parameters": { + "task": { + "type": "string", + "description": "Task identifier.", + "required": true, + "location": "path" + }, + "tasklist": { + "type": "string", + "description": "Task list identifier.", + "required": true, + "location": "path" + } + }, + "parameterOrder": [ + "tasklist", + "task" + ], + "request": { + "$ref": "Task" + }, + "response": { + "$ref": "Task" + }, + "scopes": [ + "https://www.googleapis.com/auth/tasks" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-gen.go b/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-gen.go new file mode 100644 index 0000000000000..bcac0356e4a18 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/tasks/v1/tasks-gen.go @@ -0,0 +1,1440 @@ +// Package tasks provides access to the Tasks API. +// +// See https://developers.google.com/google-apps/tasks/firstapp +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/tasks/v1" +// ... +// tasksService, err := tasks.New(oauthHttpClient) +package tasks + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "tasks:v1" +const apiName = "tasks" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/tasks/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your tasks + TasksScope = "https://www.googleapis.com/auth/tasks" + + // View your tasks + TasksReadonlyScope = "https://www.googleapis.com/auth/tasks.readonly" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Tasklists = NewTasklistsService(s) + s.Tasks = NewTasksService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Tasklists *TasklistsService + + Tasks *TasksService +} + +func NewTasklistsService(s *Service) *TasklistsService { + rs := &TasklistsService{s: s} + return rs +} + +type TasklistsService struct { + s *Service +} + +func NewTasksService(s *Service) *TasksService { + rs := &TasksService{s: s} + return rs +} + +type TasksService struct { + s *Service +} + +type Task struct { + // Completed: Completion date of the task (as a RFC 3339 timestamp). + // This field is omitted if the task has not been completed. + Completed string `json:"completed,omitempty"` + + // Deleted: Flag indicating whether the task has been deleted. The + // default if False. + Deleted bool `json:"deleted,omitempty"` + + // Due: Due date of the task (as a RFC 3339 timestamp). Optional. + Due string `json:"due,omitempty"` + + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Hidden: Flag indicating whether the task is hidden. This is the case + // if the task had been marked completed when the task list was last + // cleared. The default is False. This field is read-only. + Hidden bool `json:"hidden,omitempty"` + + // Id: Task identifier. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource. This is always "tasks#task". + Kind string `json:"kind,omitempty"` + + // Links: Collection of links. This collection is read-only. + Links []*TaskLinks `json:"links,omitempty"` + + // Notes: Notes describing the task. Optional. + Notes string `json:"notes,omitempty"` + + // Parent: Parent task identifier. This field is omitted if it is a + // top-level task. This field is read-only. Use the "move" method to + // move the task under a different parent or to the top level. + Parent string `json:"parent,omitempty"` + + // Position: String indicating the position of the task among its + // sibling tasks under the same parent task or at the top level. If this + // string is greater than another task's corresponding position string + // according to lexicographical ordering, the task is positioned after + // the other task under the same parent task (or at the top level). This + // field is read-only. Use the "move" method to move the task to another + // position. + Position string `json:"position,omitempty"` + + // SelfLink: URL pointing to this task. Used to retrieve, update, or + // delete this task. + SelfLink string `json:"selfLink,omitempty"` + + // Status: Status of the task. This is either "needsAction" or + // "completed". + Status string `json:"status,omitempty"` + + // Title: Title of the task. + Title string `json:"title,omitempty"` + + // Updated: Last modification time of the task (as a RFC 3339 + // timestamp). + Updated string `json:"updated,omitempty"` +} + +type TaskLinks struct { + // Description: The description. In HTML speak: Everything between
+ // and . + Description string `json:"description,omitempty"` + + // Link: The URL. + Link string `json:"link,omitempty"` + + // Type: Type of the link, e.g. "email". + Type string `json:"type,omitempty"` +} + +type TaskList struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Id: Task list identifier. + Id string `json:"id,omitempty"` + + // Kind: Type of the resource. This is always "tasks#taskList". + Kind string `json:"kind,omitempty"` + + // SelfLink: URL pointing to this task list. Used to retrieve, update, + // or delete this task list. + SelfLink string `json:"selfLink,omitempty"` + + // Title: Title of the task list. + Title string `json:"title,omitempty"` + + // Updated: Last modification time of the task list (as a RFC 3339 + // timestamp). + Updated string `json:"updated,omitempty"` +} + +type TaskLists struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: Collection of task lists. + Items []*TaskList `json:"items,omitempty"` + + // Kind: Type of the resource. This is always "tasks#taskLists". + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token that can be used to request the next page of + // this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +type Tasks struct { + // Etag: ETag of the resource. + Etag string `json:"etag,omitempty"` + + // Items: Collection of tasks. + Items []*Task `json:"items,omitempty"` + + // Kind: Type of the resource. This is always "tasks#tasks". + Kind string `json:"kind,omitempty"` + + // NextPageToken: Token used to access the next page of this result. + NextPageToken string `json:"nextPageToken,omitempty"` +} + +// method id "tasks.tasklists.delete": + +type TasklistsDeleteCall struct { + s *Service + tasklistid string + opt_ map[string]interface{} +} + +// Delete: Deletes the authenticated user's specified task list. +func (r *TasklistsService) Delete(tasklistid string) *TasklistsDeleteCall { + c := &TasklistsDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + return c +} + +func (c *TasklistsDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists/{tasklist}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the authenticated user's specified task list.", + // "httpMethod": "DELETE", + // "id": "tasks.tasklists.delete", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/@me/lists/{tasklist}", + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasklists.get": + +type TasklistsGetCall struct { + s *Service + tasklistid string + opt_ map[string]interface{} +} + +// Get: Returns the authenticated user's specified task list. +func (r *TasklistsService) Get(tasklistid string) *TasklistsGetCall { + c := &TasklistsGetCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + return c +} + +func (c *TasklistsGetCall) Do() (*TaskList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists/{tasklist}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the authenticated user's specified task list.", + // "httpMethod": "GET", + // "id": "tasks.tasklists.get", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/@me/lists/{tasklist}", + // "response": { + // "$ref": "TaskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks", + // "https://www.googleapis.com/auth/tasks.readonly" + // ] + // } + +} + +// method id "tasks.tasklists.insert": + +type TasklistsInsertCall struct { + s *Service + tasklist *TaskList + opt_ map[string]interface{} +} + +// Insert: Creates a new task list and adds it to the authenticated +// user's task lists. +func (r *TasklistsService) Insert(tasklist *TaskList) *TasklistsInsertCall { + c := &TasklistsInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklist = tasklist + return c +} + +func (c *TasklistsInsertCall) Do() (*TaskList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new task list and adds it to the authenticated user's task lists.", + // "httpMethod": "POST", + // "id": "tasks.tasklists.insert", + // "path": "users/@me/lists", + // "request": { + // "$ref": "TaskList" + // }, + // "response": { + // "$ref": "TaskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasklists.list": + +type TasklistsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Returns all the authenticated user's task lists. +func (r *TasklistsService) List() *TasklistsListCall { + c := &TasklistsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of task lists returned on one page. The default is 100. +func (c *TasklistsListCall) MaxResults(maxResults int64) *TasklistsListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// the result page to return. +func (c *TasklistsListCall) PageToken(pageToken string) *TasklistsListCall { + c.opt_["pageToken"] = pageToken + return c +} + +func (c *TasklistsListCall) Do() (*TaskLists, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskLists) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns all the authenticated user's task lists.", + // "httpMethod": "GET", + // "id": "tasks.tasklists.list", + // "parameters": { + // "maxResults": { + // "description": "Maximum number of task lists returned on one page. Optional. The default is 100.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying the result page to return. Optional.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "users/@me/lists", + // "response": { + // "$ref": "TaskLists" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks", + // "https://www.googleapis.com/auth/tasks.readonly" + // ] + // } + +} + +// method id "tasks.tasklists.patch": + +type TasklistsPatchCall struct { + s *Service + tasklistid string + tasklist *TaskList + opt_ map[string]interface{} +} + +// Patch: Updates the authenticated user's specified task list. This +// method supports patch semantics. +func (r *TasklistsService) Patch(tasklistid string, tasklist *TaskList) *TasklistsPatchCall { + c := &TasklistsPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.tasklist = tasklist + return c +} + +func (c *TasklistsPatchCall) Do() (*TaskList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists/{tasklist}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the authenticated user's specified task list. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "tasks.tasklists.patch", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/@me/lists/{tasklist}", + // "request": { + // "$ref": "TaskList" + // }, + // "response": { + // "$ref": "TaskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasklists.update": + +type TasklistsUpdateCall struct { + s *Service + tasklistid string + tasklist *TaskList + opt_ map[string]interface{} +} + +// Update: Updates the authenticated user's specified task list. +func (r *TasklistsService) Update(tasklistid string, tasklist *TaskList) *TasklistsUpdateCall { + c := &TasklistsUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.tasklist = tasklist + return c +} + +func (c *TasklistsUpdateCall) Do() (*TaskList, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.tasklist) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "users/@me/lists/{tasklist}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TaskList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the authenticated user's specified task list.", + // "httpMethod": "PUT", + // "id": "tasks.tasklists.update", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "users/@me/lists/{tasklist}", + // "request": { + // "$ref": "TaskList" + // }, + // "response": { + // "$ref": "TaskList" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.clear": + +type TasksClearCall struct { + s *Service + tasklistid string + opt_ map[string]interface{} +} + +// Clear: Clears all completed tasks from the specified task list. The +// affected tasks will be marked as 'hidden' and no longer be returned +// by default when retrieving all tasks for a task list. +func (r *TasksService) Clear(tasklistid string) *TasksClearCall { + c := &TasksClearCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + return c +} + +func (c *TasksClearCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/clear") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Clears all completed tasks from the specified task list. The affected tasks will be marked as 'hidden' and no longer be returned by default when retrieving all tasks for a task list.", + // "httpMethod": "POST", + // "id": "tasks.tasks.clear", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/clear", + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.delete": + +type TasksDeleteCall struct { + s *Service + tasklistid string + taskid string + opt_ map[string]interface{} +} + +// Delete: Deletes the specified task from the task list. +func (r *TasksService) Delete(tasklistid string, taskid string) *TasksDeleteCall { + c := &TasksDeleteCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.taskid = taskid + return c +} + +func (c *TasksDeleteCall) Do() error { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("DELETE", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.taskid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return err + } + return nil + // { + // "description": "Deletes the specified task from the task list.", + // "httpMethod": "DELETE", + // "id": "tasks.tasks.delete", + // "parameterOrder": [ + // "tasklist", + // "task" + // ], + // "parameters": { + // "task": { + // "description": "Task identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks/{task}", + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.get": + +type TasksGetCall struct { + s *Service + tasklistid string + taskid string + opt_ map[string]interface{} +} + +// Get: Returns the specified task. +func (r *TasksService) Get(tasklistid string, taskid string) *TasksGetCall { + c := &TasksGetCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.taskid = taskid + return c +} + +func (c *TasksGetCall) Do() (*Task, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.taskid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns the specified task.", + // "httpMethod": "GET", + // "id": "tasks.tasks.get", + // "parameterOrder": [ + // "tasklist", + // "task" + // ], + // "parameters": { + // "task": { + // "description": "Task identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks/{task}", + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks", + // "https://www.googleapis.com/auth/tasks.readonly" + // ] + // } + +} + +// method id "tasks.tasks.insert": + +type TasksInsertCall struct { + s *Service + tasklistid string + task *Task + opt_ map[string]interface{} +} + +// Insert: Creates a new task on the specified task list. +func (r *TasksService) Insert(tasklistid string, task *Task) *TasksInsertCall { + c := &TasksInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.task = task + return c +} + +// Parent sets the optional parameter "parent": Parent task identifier. +// If the task is created at the top level, this parameter is omitted. +func (c *TasksInsertCall) Parent(parent string) *TasksInsertCall { + c.opt_["parent"] = parent + return c +} + +// Previous sets the optional parameter "previous": Previous sibling +// task identifier. If the task is created at the first position among +// its siblings, this parameter is omitted. +func (c *TasksInsertCall) Previous(previous string) *TasksInsertCall { + c.opt_["previous"] = previous + return c +} + +func (c *TasksInsertCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["parent"]; ok { + params.Set("parent", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["previous"]; ok { + params.Set("previous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new task on the specified task list.", + // "httpMethod": "POST", + // "id": "tasks.tasks.insert", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "parent": { + // "description": "Parent task identifier. If the task is created at the top level, this parameter is omitted. Optional.", + // "location": "query", + // "type": "string" + // }, + // "previous": { + // "description": "Previous sibling task identifier. If the task is created at the first position among its siblings, this parameter is omitted. Optional.", + // "location": "query", + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.list": + +type TasksListCall struct { + s *Service + tasklistid string + opt_ map[string]interface{} +} + +// List: Returns all tasks in the specified task list. +func (r *TasksService) List(tasklistid string) *TasksListCall { + c := &TasksListCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + return c +} + +// CompletedMax sets the optional parameter "completedMax": Upper bound +// for a task's completion date (as a RFC 3339 timestamp) to filter by. +// The default is not to filter by completion date. +func (c *TasksListCall) CompletedMax(completedMax string) *TasksListCall { + c.opt_["completedMax"] = completedMax + return c +} + +// CompletedMin sets the optional parameter "completedMin": Lower bound +// for a task's completion date (as a RFC 3339 timestamp) to filter by. +// The default is not to filter by completion date. +func (c *TasksListCall) CompletedMin(completedMin string) *TasksListCall { + c.opt_["completedMin"] = completedMin + return c +} + +// DueMax sets the optional parameter "dueMax": Upper bound for a task's +// due date (as a RFC 3339 timestamp) to filter by. The default is not +// to filter by due date. +func (c *TasksListCall) DueMax(dueMax string) *TasksListCall { + c.opt_["dueMax"] = dueMax + return c +} + +// DueMin sets the optional parameter "dueMin": Lower bound for a task's +// due date (as a RFC 3339 timestamp) to filter by. The default is not +// to filter by due date. +func (c *TasksListCall) DueMin(dueMin string) *TasksListCall { + c.opt_["dueMin"] = dueMin + return c +} + +// MaxResults sets the optional parameter "maxResults": Maximum number +// of task lists returned on one page. The default is 100. +func (c *TasksListCall) MaxResults(maxResults int64) *TasksListCall { + c.opt_["maxResults"] = maxResults + return c +} + +// PageToken sets the optional parameter "pageToken": Token specifying +// the result page to return. +func (c *TasksListCall) PageToken(pageToken string) *TasksListCall { + c.opt_["pageToken"] = pageToken + return c +} + +// ShowCompleted sets the optional parameter "showCompleted": Flag +// indicating whether completed tasks are returned in the result. The +// default is True. +func (c *TasksListCall) ShowCompleted(showCompleted bool) *TasksListCall { + c.opt_["showCompleted"] = showCompleted + return c +} + +// ShowDeleted sets the optional parameter "showDeleted": Flag +// indicating whether deleted tasks are returned in the result. The +// default is False. +func (c *TasksListCall) ShowDeleted(showDeleted bool) *TasksListCall { + c.opt_["showDeleted"] = showDeleted + return c +} + +// ShowHidden sets the optional parameter "showHidden": Flag indicating +// whether hidden tasks are returned in the result. The default is +// False. +func (c *TasksListCall) ShowHidden(showHidden bool) *TasksListCall { + c.opt_["showHidden"] = showHidden + return c +} + +// UpdatedMin sets the optional parameter "updatedMin": Lower bound for +// a task's last modification time (as a RFC 3339 timestamp) to filter +// by. The default is not to filter by last modification time. +func (c *TasksListCall) UpdatedMin(updatedMin string) *TasksListCall { + c.opt_["updatedMin"] = updatedMin + return c +} + +func (c *TasksListCall) Do() (*Tasks, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["completedMax"]; ok { + params.Set("completedMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["completedMin"]; ok { + params.Set("completedMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dueMax"]; ok { + params.Set("dueMax", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["dueMin"]; ok { + params.Set("dueMin", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["maxResults"]; ok { + params.Set("maxResults", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["pageToken"]; ok { + params.Set("pageToken", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showCompleted"]; ok { + params.Set("showCompleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showDeleted"]; ok { + params.Set("showDeleted", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["showHidden"]; ok { + params.Set("showHidden", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["updatedMin"]; ok { + params.Set("updatedMin", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Tasks) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns all tasks in the specified task list.", + // "httpMethod": "GET", + // "id": "tasks.tasks.list", + // "parameterOrder": [ + // "tasklist" + // ], + // "parameters": { + // "completedMax": { + // "description": "Upper bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.", + // "location": "query", + // "type": "string" + // }, + // "completedMin": { + // "description": "Lower bound for a task's completion date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by completion date.", + // "location": "query", + // "type": "string" + // }, + // "dueMax": { + // "description": "Upper bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.", + // "location": "query", + // "type": "string" + // }, + // "dueMin": { + // "description": "Lower bound for a task's due date (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by due date.", + // "location": "query", + // "type": "string" + // }, + // "maxResults": { + // "description": "Maximum number of task lists returned on one page. Optional. The default is 100.", + // "format": "int64", + // "location": "query", + // "type": "string" + // }, + // "pageToken": { + // "description": "Token specifying the result page to return. Optional.", + // "location": "query", + // "type": "string" + // }, + // "showCompleted": { + // "description": "Flag indicating whether completed tasks are returned in the result. Optional. The default is True.", + // "location": "query", + // "type": "boolean" + // }, + // "showDeleted": { + // "description": "Flag indicating whether deleted tasks are returned in the result. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "showHidden": { + // "description": "Flag indicating whether hidden tasks are returned in the result. Optional. The default is False.", + // "location": "query", + // "type": "boolean" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "updatedMin": { + // "description": "Lower bound for a task's last modification time (as a RFC 3339 timestamp) to filter by. Optional. The default is not to filter by last modification time.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks", + // "response": { + // "$ref": "Tasks" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks", + // "https://www.googleapis.com/auth/tasks.readonly" + // ] + // } + +} + +// method id "tasks.tasks.move": + +type TasksMoveCall struct { + s *Service + tasklistid string + taskid string + opt_ map[string]interface{} +} + +// Move: Moves the specified task to another position in the task list. +// This can include putting it as a child task under a new parent and/or +// move it to a different position among its sibling tasks. +func (r *TasksService) Move(tasklistid string, taskid string) *TasksMoveCall { + c := &TasksMoveCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.taskid = taskid + return c +} + +// Parent sets the optional parameter "parent": New parent task +// identifier. If the task is moved to the top level, this parameter is +// omitted. +func (c *TasksMoveCall) Parent(parent string) *TasksMoveCall { + c.opt_["parent"] = parent + return c +} + +// Previous sets the optional parameter "previous": New previous sibling +// task identifier. If the task is moved to the first position among its +// siblings, this parameter is omitted. +func (c *TasksMoveCall) Previous(previous string) *TasksMoveCall { + c.opt_["previous"] = previous + return c +} + +func (c *TasksMoveCall) Do() (*Task, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["parent"]; ok { + params.Set("parent", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["previous"]; ok { + params.Set("previous", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}/move") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.taskid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Moves the specified task to another position in the task list. This can include putting it as a child task under a new parent and/or move it to a different position among its sibling tasks.", + // "httpMethod": "POST", + // "id": "tasks.tasks.move", + // "parameterOrder": [ + // "tasklist", + // "task" + // ], + // "parameters": { + // "parent": { + // "description": "New parent task identifier. If the task is moved to the top level, this parameter is omitted. Optional.", + // "location": "query", + // "type": "string" + // }, + // "previous": { + // "description": "New previous sibling task identifier. If the task is moved to the first position among its siblings, this parameter is omitted. Optional.", + // "location": "query", + // "type": "string" + // }, + // "task": { + // "description": "Task identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks/{task}/move", + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.patch": + +type TasksPatchCall struct { + s *Service + tasklistid string + taskid string + task *Task + opt_ map[string]interface{} +} + +// Patch: Updates the specified task. This method supports patch +// semantics. +func (r *TasksService) Patch(tasklistid string, taskid string, task *Task) *TasksPatchCall { + c := &TasksPatchCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.taskid = taskid + c.task = task + return c +} + +func (c *TasksPatchCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PATCH", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.taskid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified task. This method supports patch semantics.", + // "httpMethod": "PATCH", + // "id": "tasks.tasks.patch", + // "parameterOrder": [ + // "tasklist", + // "task" + // ], + // "parameters": { + // "task": { + // "description": "Task identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks/{task}", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} + +// method id "tasks.tasks.update": + +type TasksUpdateCall struct { + s *Service + tasklistid string + taskid string + task *Task + opt_ map[string]interface{} +} + +// Update: Updates the specified task. +func (r *TasksService) Update(tasklistid string, taskid string, task *Task) *TasksUpdateCall { + c := &TasksUpdateCall{s: r.s, opt_: make(map[string]interface{})} + c.tasklistid = tasklistid + c.taskid = taskid + c.task = task + return c +} + +func (c *TasksUpdateCall) Do() (*Task, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.task) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "lists/{tasklist}/tasks/{task}") + urls += "?" + params.Encode() + req, _ := http.NewRequest("PUT", urls, body) + req.URL.Path = strings.Replace(req.URL.Path, "{tasklist}", url.QueryEscape(c.tasklistid), 1) + req.URL.Path = strings.Replace(req.URL.Path, "{task}", url.QueryEscape(c.taskid), 1) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Task) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Updates the specified task.", + // "httpMethod": "PUT", + // "id": "tasks.tasks.update", + // "parameterOrder": [ + // "tasklist", + // "task" + // ], + // "parameters": { + // "task": { + // "description": "Task identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // }, + // "tasklist": { + // "description": "Task list identifier.", + // "location": "path", + // "required": true, + // "type": "string" + // } + // }, + // "path": "lists/{tasklist}/tasks/{task}", + // "request": { + // "$ref": "Task" + // }, + // "response": { + // "$ref": "Task" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/tasks" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-api.json b/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-api.json new file mode 100644 index 0000000000000..804f49543f640 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-api.json @@ -0,0 +1,266 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/4Ip-FKZqF7Vovq8mU1yMUQ2gvUM\"", + "discoveryVersion": "v1", + "id": "translate:v2", + "name": "translate", + "version": "v2", + "title": "Translate API", + "description": "Lets you translate text from one language to another", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/translate-16.png", + "x32": "http://www.google.com/images/icons/product/translate-32.png" + }, + "documentationLink": "https://developers.google.com/translate/v2/using_rest", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/language/translate/", + "basePath": "/language/translate/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "language/translate/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "features": [ + "dataWrapper" + ], + "schemas": { + "DetectionsListResponse": { + "id": "DetectionsListResponse", + "type": "object", + "properties": { + "detections": { + "type": "array", + "description": "A detections contains detection results of several text", + "items": { + "$ref": "DetectionsResource" + } + } + } + }, + "DetectionsResource": { + "id": "DetectionsResource", + "type": "array", + "description": "An array of languages which we detect for the given text The most likely language list first.", + "items": { + "type": "object", + "properties": { + "confidence": { + "type": "number", + "description": "The confidence of the detection resul of this language.", + "format": "float" + }, + "isReliable": { + "type": "boolean", + "description": "A boolean to indicate is the language detection result reliable." + }, + "language": { + "type": "string", + "description": "The language we detect" + } + } + } + }, + "LanguagesListResponse": { + "id": "LanguagesListResponse", + "type": "object", + "properties": { + "languages": { + "type": "array", + "description": "List of source/target languages supported by the translation API. If target parameter is unspecified, the list is sorted by the ASCII code point order of the language code. If target parameter is specified, the list is sorted by the collation order of the language name in the target language.", + "items": { + "$ref": "LanguagesResource" + } + } + } + }, + "LanguagesResource": { + "id": "LanguagesResource", + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "The language code." + }, + "name": { + "type": "string", + "description": "The localized name of the language if target parameter is given." + } + } + }, + "TranslationsListResponse": { + "id": "TranslationsListResponse", + "type": "object", + "properties": { + "translations": { + "type": "array", + "description": "Translations contains list of translation results of given text", + "items": { + "$ref": "TranslationsResource" + } + } + } + }, + "TranslationsResource": { + "id": "TranslationsResource", + "type": "object", + "properties": { + "detectedSourceLanguage": { + "type": "string", + "description": "Detected source language if source parameter is unspecified." + }, + "translatedText": { + "type": "string", + "description": "The translation." + } + } + } + }, + "resources": { + "detections": { + "methods": { + "list": { + "id": "language.detections.list", + "path": "v2/detect", + "httpMethod": "GET", + "description": "Detect the language of text.", + "parameters": { + "q": { + "type": "string", + "description": "The text to detect", + "required": true, + "repeated": true, + "location": "query" + } + }, + "parameterOrder": [ + "q" + ], + "response": { + "$ref": "DetectionsListResponse" + } + } + } + }, + "languages": { + "methods": { + "list": { + "id": "language.languages.list", + "path": "v2/languages", + "httpMethod": "GET", + "description": "List the source/target languages supported by the API", + "parameters": { + "target": { + "type": "string", + "description": "the language and collation in which the localized results should be returned", + "location": "query" + } + }, + "response": { + "$ref": "LanguagesListResponse" + } + } + } + }, + "translations": { + "methods": { + "list": { + "id": "language.translations.list", + "path": "v2", + "httpMethod": "GET", + "description": "Returns text translations from one language to another.", + "parameters": { + "cid": { + "type": "string", + "description": "The customization id for translate", + "repeated": true, + "location": "query" + }, + "format": { + "type": "string", + "description": "The format of the text", + "enum": [ + "html", + "text" + ], + "enumDescriptions": [ + "Specifies the input is in HTML", + "Specifies the input is in plain textual format" + ], + "location": "query" + }, + "q": { + "type": "string", + "description": "The text to translate", + "required": true, + "repeated": true, + "location": "query" + }, + "source": { + "type": "string", + "description": "The source language of the text", + "location": "query" + }, + "target": { + "type": "string", + "description": "The target language into which the text should be translated", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "q", + "target" + ], + "response": { + "$ref": "TranslationsListResponse" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-gen.go b/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-gen.go new file mode 100644 index 0000000000000..5303094ff1c8a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/translate/v2/translate-gen.go @@ -0,0 +1,394 @@ +// Package translate provides access to the Translate API. +// +// See https://developers.google.com/translate/v2/using_rest +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/translate/v2" +// ... +// translateService, err := translate.New(oauthHttpClient) +package translate + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "translate:v2" +const apiName = "translate" +const apiVersion = "v2" +const basePath = "https://www.googleapis.com/language/translate/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Detections = NewDetectionsService(s) + s.Languages = NewLanguagesService(s) + s.Translations = NewTranslationsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Detections *DetectionsService + + Languages *LanguagesService + + Translations *TranslationsService +} + +func NewDetectionsService(s *Service) *DetectionsService { + rs := &DetectionsService{s: s} + return rs +} + +type DetectionsService struct { + s *Service +} + +func NewLanguagesService(s *Service) *LanguagesService { + rs := &LanguagesService{s: s} + return rs +} + +type LanguagesService struct { + s *Service +} + +func NewTranslationsService(s *Service) *TranslationsService { + rs := &TranslationsService{s: s} + return rs +} + +type TranslationsService struct { + s *Service +} + +type DetectionsListResponse struct { + // Detections: A detections contains detection results of several text + Detections [][]*DetectionsResourceItem `json:"detections,omitempty"` +} + +type DetectionsResourceItem struct { + // Confidence: The confidence of the detection resul of this language. + Confidence float64 `json:"confidence,omitempty"` + + // IsReliable: A boolean to indicate is the language detection result + // reliable. + IsReliable bool `json:"isReliable,omitempty"` + + // Language: The language we detect + Language string `json:"language,omitempty"` +} + +type LanguagesListResponse struct { + // Languages: List of source/target languages supported by the + // translation API. If target parameter is unspecified, the list is + // sorted by the ASCII code point order of the language code. If target + // parameter is specified, the list is sorted by the collation order of + // the language name in the target language. + Languages []*LanguagesResource `json:"languages,omitempty"` +} + +type LanguagesResource struct { + // Language: The language code. + Language string `json:"language,omitempty"` + + // Name: The localized name of the language if target parameter is + // given. + Name string `json:"name,omitempty"` +} + +type TranslationsListResponse struct { + // Translations: Translations contains list of translation results of + // given text + Translations []*TranslationsResource `json:"translations,omitempty"` +} + +type TranslationsResource struct { + // DetectedSourceLanguage: Detected source language if source parameter + // is unspecified. + DetectedSourceLanguage string `json:"detectedSourceLanguage,omitempty"` + + // TranslatedText: The translation. + TranslatedText string `json:"translatedText,omitempty"` +} + +// method id "language.detections.list": + +type DetectionsListCall struct { + s *Service + q []string + opt_ map[string]interface{} +} + +// List: Detect the language of text. +func (r *DetectionsService) List(q []string) *DetectionsListCall { + c := &DetectionsListCall{s: r.s, opt_: make(map[string]interface{})} + c.q = q + return c +} + +func (c *DetectionsListCall) Do() (*DetectionsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + for _, v := range c.q { + params.Add("q", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "v2/detect") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(DetectionsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Detect the language of text.", + // "httpMethod": "GET", + // "id": "language.detections.list", + // "parameterOrder": [ + // "q" + // ], + // "parameters": { + // "q": { + // "description": "The text to detect", + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // } + // }, + // "path": "v2/detect", + // "response": { + // "$ref": "DetectionsListResponse" + // } + // } + +} + +// method id "language.languages.list": + +type LanguagesListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: List the source/target languages supported by the API +func (r *LanguagesService) List() *LanguagesListCall { + c := &LanguagesListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Target sets the optional parameter "target": the language and +// collation in which the localized results should be returned +func (c *LanguagesListCall) Target(target string) *LanguagesListCall { + c.opt_["target"] = target + return c +} + +func (c *LanguagesListCall) Do() (*LanguagesListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["target"]; ok { + params.Set("target", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "v2/languages") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(LanguagesListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "List the source/target languages supported by the API", + // "httpMethod": "GET", + // "id": "language.languages.list", + // "parameters": { + // "target": { + // "description": "the language and collation in which the localized results should be returned", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "v2/languages", + // "response": { + // "$ref": "LanguagesListResponse" + // } + // } + +} + +// method id "language.translations.list": + +type TranslationsListCall struct { + s *Service + q []string + target string + opt_ map[string]interface{} +} + +// List: Returns text translations from one language to another. +func (r *TranslationsService) List(q []string, target string) *TranslationsListCall { + c := &TranslationsListCall{s: r.s, opt_: make(map[string]interface{})} + c.q = q + c.target = target + return c +} + +// Cid sets the optional parameter "cid": The customization id for +// translate +func (c *TranslationsListCall) Cid(cid string) *TranslationsListCall { + c.opt_["cid"] = cid + return c +} + +// Format sets the optional parameter "format": The format of the text +func (c *TranslationsListCall) Format(format string) *TranslationsListCall { + c.opt_["format"] = format + return c +} + +// Source sets the optional parameter "source": The source language of +// the text +func (c *TranslationsListCall) Source(source string) *TranslationsListCall { + c.opt_["source"] = source + return c +} + +func (c *TranslationsListCall) Do() (*TranslationsListResponse, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("target", fmt.Sprintf("%v", c.target)) + for _, v := range c.q { + params.Add("q", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["cid"]; ok { + params.Set("cid", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["format"]; ok { + params.Set("format", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["source"]; ok { + params.Set("source", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "v2") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(TranslationsListResponse) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Returns text translations from one language to another.", + // "httpMethod": "GET", + // "id": "language.translations.list", + // "parameterOrder": [ + // "q", + // "target" + // ], + // "parameters": { + // "cid": { + // "description": "The customization id for translate", + // "location": "query", + // "repeated": true, + // "type": "string" + // }, + // "format": { + // "description": "The format of the text", + // "enum": [ + // "html", + // "text" + // ], + // "enumDescriptions": [ + // "Specifies the input is in HTML", + // "Specifies the input is in plain textual format" + // ], + // "location": "query", + // "type": "string" + // }, + // "q": { + // "description": "The text to translate", + // "location": "query", + // "repeated": true, + // "required": true, + // "type": "string" + // }, + // "source": { + // "description": "The source language of the text", + // "location": "query", + // "type": "string" + // }, + // "target": { + // "description": "The target language into which the text should be translated", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "v2", + // "response": { + // "$ref": "TranslationsListResponse" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-api.json b/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-api.json new file mode 100644 index 0000000000000..1032529eec538 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-api.json @@ -0,0 +1,315 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/T4bB77XUfbpGWn7xKXxC7yFKgeE\"", + "discoveryVersion": "v1", + "id": "urlshortener:v1", + "name": "urlshortener", + "version": "v1", + "title": "URL Shortener API", + "description": "Lets you create, inspect, and manage goo.gl short URLs", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/search-16.gif", + "x32": "http://www.google.com/images/icons/product/search-32.gif" + }, + "documentationLink": "http://code.google.com/apis/urlshortener/v1/getting_started.html", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/urlshortener/v1/", + "basePath": "/urlshortener/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "urlshortener/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/urlshortener": { + "description": "Manage your goo.gl short URLs" + } + } + } + }, + "schemas": { + "AnalyticsSnapshot": { + "id": "AnalyticsSnapshot", + "type": "object", + "properties": { + "browsers": { + "type": "array", + "description": "Top browsers, e.g. \"Chrome\"; sorted by (descending) click counts. Only present if this data is available.", + "items": { + "$ref": "StringCount" + } + }, + "countries": { + "type": "array", + "description": "Top countries (expressed as country codes), e.g. \"US\" or \"DE\"; sorted by (descending) click counts. Only present if this data is available.", + "items": { + "$ref": "StringCount" + } + }, + "longUrlClicks": { + "type": "string", + "description": "Number of clicks on all goo.gl short URLs pointing to this long URL.", + "format": "int64" + }, + "platforms": { + "type": "array", + "description": "Top platforms or OSes, e.g. \"Windows\"; sorted by (descending) click counts. Only present if this data is available.", + "items": { + "$ref": "StringCount" + } + }, + "referrers": { + "type": "array", + "description": "Top referring hosts, e.g. \"www.google.com\"; sorted by (descending) click counts. Only present if this data is available.", + "items": { + "$ref": "StringCount" + } + }, + "shortUrlClicks": { + "type": "string", + "description": "Number of clicks on this short URL.", + "format": "int64" + } + } + }, + "AnalyticsSummary": { + "id": "AnalyticsSummary", + "type": "object", + "properties": { + "allTime": { + "$ref": "AnalyticsSnapshot", + "description": "Click analytics over all time." + }, + "day": { + "$ref": "AnalyticsSnapshot", + "description": "Click analytics over the last day." + }, + "month": { + "$ref": "AnalyticsSnapshot", + "description": "Click analytics over the last month." + }, + "twoHours": { + "$ref": "AnalyticsSnapshot", + "description": "Click analytics over the last two hours." + }, + "week": { + "$ref": "AnalyticsSnapshot", + "description": "Click analytics over the last week." + } + } + }, + "StringCount": { + "id": "StringCount", + "type": "object", + "properties": { + "count": { + "type": "string", + "description": "Number of clicks for this top entry, e.g. for this particular country or browser.", + "format": "int64" + }, + "id": { + "type": "string", + "description": "Label assigned to this top entry, e.g. \"US\" or \"Chrome\"." + } + } + }, + "Url": { + "id": "Url", + "type": "object", + "properties": { + "analytics": { + "$ref": "AnalyticsSummary", + "description": "A summary of the click analytics for the short and long URL. Might not be present if not requested or currently unavailable." + }, + "created": { + "type": "string", + "description": "Time the short URL was created; ISO 8601 representation using the yyyy-MM-dd'T'HH:mm:ss.SSSZZ format, e.g. \"2010-10-14T19:01:24.944+00:00\"." + }, + "id": { + "type": "string", + "description": "Short URL, e.g. \"http://goo.gl/l6MS\"." + }, + "kind": { + "type": "string", + "description": "The fixed string \"urlshortener#url\".", + "default": "urlshortener#url" + }, + "longUrl": { + "type": "string", + "description": "Long URL, e.g. \"http://www.google.com/\". Might not be present if the status is \"REMOVED\"." + }, + "status": { + "type": "string", + "description": "Status of the target URL. Possible values: \"OK\", \"MALWARE\", \"PHISHING\", or \"REMOVED\". A URL might be marked \"REMOVED\" if it was flagged as spam, for example." + } + } + }, + "UrlHistory": { + "id": "UrlHistory", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "A list of URL resources.", + "items": { + "$ref": "Url" + } + }, + "itemsPerPage": { + "type": "integer", + "description": "Number of items returned with each full \"page\" of results. Note that the last page could have fewer items than the \"itemsPerPage\" value.", + "format": "int32" + }, + "kind": { + "type": "string", + "description": "The fixed string \"urlshortener#urlHistory\".", + "default": "urlshortener#urlHistory" + }, + "nextPageToken": { + "type": "string", + "description": "A token to provide to get the next page of results." + }, + "totalItems": { + "type": "integer", + "description": "Total number of short URLs associated with this user (may be approximate).", + "format": "int32" + } + } + } + }, + "resources": { + "url": { + "methods": { + "get": { + "id": "urlshortener.url.get", + "path": "url", + "httpMethod": "GET", + "description": "Expands a short URL or gets creation time and analytics.", + "parameters": { + "projection": { + "type": "string", + "description": "Additional information to return.", + "enum": [ + "ANALYTICS_CLICKS", + "ANALYTICS_TOP_STRINGS", + "FULL" + ], + "enumDescriptions": [ + "Returns only click counts.", + "Returns only top string counts.", + "Returns the creation timestamp and all available analytics." + ], + "location": "query" + }, + "shortUrl": { + "type": "string", + "description": "The short URL, including the protocol.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "shortUrl" + ], + "response": { + "$ref": "Url" + } + }, + "insert": { + "id": "urlshortener.url.insert", + "path": "url", + "httpMethod": "POST", + "description": "Creates a new short URL.", + "request": { + "$ref": "Url" + }, + "response": { + "$ref": "Url" + }, + "scopes": [ + "https://www.googleapis.com/auth/urlshortener" + ] + }, + "list": { + "id": "urlshortener.url.list", + "path": "url/history", + "httpMethod": "GET", + "description": "Retrieves a list of URLs shortened by a user.", + "parameters": { + "projection": { + "type": "string", + "description": "Additional information to return.", + "enum": [ + "ANALYTICS_CLICKS", + "FULL" + ], + "enumDescriptions": [ + "Returns short URL click counts.", + "Returns short URL click counts." + ], + "location": "query" + }, + "start-token": { + "type": "string", + "description": "Token for requesting successive pages of results.", + "location": "query" + } + }, + "response": { + "$ref": "UrlHistory" + }, + "scopes": [ + "https://www.googleapis.com/auth/urlshortener" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-gen.go b/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-gen.go new file mode 100644 index 0000000000000..7dc58e0068e69 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/urlshortener/v1/urlshortener-gen.go @@ -0,0 +1,406 @@ +// Package urlshortener provides access to the URL Shortener API. +// +// See http://code.google.com/apis/urlshortener/v1/getting_started.html +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/urlshortener/v1" +// ... +// urlshortenerService, err := urlshortener.New(oauthHttpClient) +package urlshortener + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "urlshortener:v1" +const apiName = "urlshortener" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/urlshortener/v1/" + +// OAuth2 scopes used by this API. +const ( + // Manage your goo.gl short URLs + UrlshortenerScope = "https://www.googleapis.com/auth/urlshortener" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Url = NewUrlService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Url *UrlService +} + +func NewUrlService(s *Service) *UrlService { + rs := &UrlService{s: s} + return rs +} + +type UrlService struct { + s *Service +} + +type AnalyticsSnapshot struct { + // Browsers: Top browsers, e.g. "Chrome"; sorted by (descending) click + // counts. Only present if this data is available. + Browsers []*StringCount `json:"browsers,omitempty"` + + // Countries: Top countries (expressed as country codes), e.g. "US" or + // "DE"; sorted by (descending) click counts. Only present if this data + // is available. + Countries []*StringCount `json:"countries,omitempty"` + + // LongUrlClicks: Number of clicks on all goo.gl short URLs pointing to + // this long URL. + LongUrlClicks int64 `json:"longUrlClicks,omitempty,string"` + + // Platforms: Top platforms or OSes, e.g. "Windows"; sorted by + // (descending) click counts. Only present if this data is available. + Platforms []*StringCount `json:"platforms,omitempty"` + + // Referrers: Top referring hosts, e.g. "www.google.com"; sorted by + // (descending) click counts. Only present if this data is available. + Referrers []*StringCount `json:"referrers,omitempty"` + + // ShortUrlClicks: Number of clicks on this short URL. + ShortUrlClicks int64 `json:"shortUrlClicks,omitempty,string"` +} + +type AnalyticsSummary struct { + // AllTime: Click analytics over all time. + AllTime *AnalyticsSnapshot `json:"allTime,omitempty"` + + // Day: Click analytics over the last day. + Day *AnalyticsSnapshot `json:"day,omitempty"` + + // Month: Click analytics over the last month. + Month *AnalyticsSnapshot `json:"month,omitempty"` + + // TwoHours: Click analytics over the last two hours. + TwoHours *AnalyticsSnapshot `json:"twoHours,omitempty"` + + // Week: Click analytics over the last week. + Week *AnalyticsSnapshot `json:"week,omitempty"` +} + +type StringCount struct { + // Count: Number of clicks for this top entry, e.g. for this particular + // country or browser. + Count int64 `json:"count,omitempty,string"` + + // Id: Label assigned to this top entry, e.g. "US" or "Chrome". + Id string `json:"id,omitempty"` +} + +type Url struct { + // Analytics: A summary of the click analytics for the short and long + // URL. Might not be present if not requested or currently unavailable. + Analytics *AnalyticsSummary `json:"analytics,omitempty"` + + // Created: Time the short URL was created; ISO 8601 representation + // using the yyyy-MM-dd'T'HH:mm:ss.SSSZZ format, e.g. + // "2010-10-14T19:01:24.944+00:00". + Created string `json:"created,omitempty"` + + // Id: Short URL, e.g. "http://goo.gl/l6MS". + Id string `json:"id,omitempty"` + + // Kind: The fixed string "urlshortener#url". + Kind string `json:"kind,omitempty"` + + // LongUrl: Long URL, e.g. "http://www.google.com/". Might not be + // present if the status is "REMOVED". + LongUrl string `json:"longUrl,omitempty"` + + // Status: Status of the target URL. Possible values: "OK", "MALWARE", + // "PHISHING", or "REMOVED". A URL might be marked "REMOVED" if it was + // flagged as spam, for example. + Status string `json:"status,omitempty"` +} + +type UrlHistory struct { + // Items: A list of URL resources. + Items []*Url `json:"items,omitempty"` + + // ItemsPerPage: Number of items returned with each full "page" of + // results. Note that the last page could have fewer items than the + // "itemsPerPage" value. + ItemsPerPage int64 `json:"itemsPerPage,omitempty"` + + // Kind: The fixed string "urlshortener#urlHistory". + Kind string `json:"kind,omitempty"` + + // NextPageToken: A token to provide to get the next page of results. + NextPageToken string `json:"nextPageToken,omitempty"` + + // TotalItems: Total number of short URLs associated with this user (may + // be approximate). + TotalItems int64 `json:"totalItems,omitempty"` +} + +// method id "urlshortener.url.get": + +type UrlGetCall struct { + s *Service + shortUrl string + opt_ map[string]interface{} +} + +// Get: Expands a short URL or gets creation time and analytics. +func (r *UrlService) Get(shortUrl string) *UrlGetCall { + c := &UrlGetCall{s: r.s, opt_: make(map[string]interface{})} + c.shortUrl = shortUrl + return c +} + +// Projection sets the optional parameter "projection": Additional +// information to return. +func (c *UrlGetCall) Projection(projection string) *UrlGetCall { + c.opt_["projection"] = projection + return c +} + +func (c *UrlGetCall) Do() (*Url, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + params.Set("shortUrl", fmt.Sprintf("%v", c.shortUrl)) + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "url") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Url) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Expands a short URL or gets creation time and analytics.", + // "httpMethod": "GET", + // "id": "urlshortener.url.get", + // "parameterOrder": [ + // "shortUrl" + // ], + // "parameters": { + // "projection": { + // "description": "Additional information to return.", + // "enum": [ + // "ANALYTICS_CLICKS", + // "ANALYTICS_TOP_STRINGS", + // "FULL" + // ], + // "enumDescriptions": [ + // "Returns only click counts.", + // "Returns only top string counts.", + // "Returns the creation timestamp and all available analytics." + // ], + // "location": "query", + // "type": "string" + // }, + // "shortUrl": { + // "description": "The short URL, including the protocol.", + // "location": "query", + // "required": true, + // "type": "string" + // } + // }, + // "path": "url", + // "response": { + // "$ref": "Url" + // } + // } + +} + +// method id "urlshortener.url.insert": + +type UrlInsertCall struct { + s *Service + url *Url + opt_ map[string]interface{} +} + +// Insert: Creates a new short URL. +func (r *UrlService) Insert(url *Url) *UrlInsertCall { + c := &UrlInsertCall{s: r.s, opt_: make(map[string]interface{})} + c.url = url + return c +} + +func (c *UrlInsertCall) Do() (*Url, error) { + var body io.Reader = nil + body, err := googleapi.WithoutDataWrapper.JSONReader(c.url) + if err != nil { + return nil, err + } + ctype := "application/json" + params := make(url.Values) + params.Set("alt", "json") + urls := googleapi.ResolveRelative(c.s.BasePath, "url") + urls += "?" + params.Encode() + req, _ := http.NewRequest("POST", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("Content-Type", ctype) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(Url) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Creates a new short URL.", + // "httpMethod": "POST", + // "id": "urlshortener.url.insert", + // "path": "url", + // "request": { + // "$ref": "Url" + // }, + // "response": { + // "$ref": "Url" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/urlshortener" + // ] + // } + +} + +// method id "urlshortener.url.list": + +type UrlListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves a list of URLs shortened by a user. +func (r *UrlService) List() *UrlListCall { + c := &UrlListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Projection sets the optional parameter "projection": Additional +// information to return. +func (c *UrlListCall) Projection(projection string) *UrlListCall { + c.opt_["projection"] = projection + return c +} + +// StartToken sets the optional parameter "start-token": Token for +// requesting successive pages of results. +func (c *UrlListCall) StartToken(startToken string) *UrlListCall { + c.opt_["start-token"] = startToken + return c +} + +func (c *UrlListCall) Do() (*UrlHistory, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["projection"]; ok { + params.Set("projection", fmt.Sprintf("%v", v)) + } + if v, ok := c.opt_["start-token"]; ok { + params.Set("start-token", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "url/history") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(UrlHistory) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves a list of URLs shortened by a user.", + // "httpMethod": "GET", + // "id": "urlshortener.url.list", + // "parameters": { + // "projection": { + // "description": "Additional information to return.", + // "enum": [ + // "ANALYTICS_CLICKS", + // "FULL" + // ], + // "enumDescriptions": [ + // "Returns short URL click counts.", + // "Returns short URL click counts." + // ], + // "location": "query", + // "type": "string" + // }, + // "start-token": { + // "description": "Token for requesting successive pages of results.", + // "location": "query", + // "type": "string" + // } + // }, + // "path": "url/history", + // "response": { + // "$ref": "UrlHistory" + // }, + // "scopes": [ + // "https://www.googleapis.com/auth/urlshortener" + // ] + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-api.json b/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-api.json new file mode 100644 index 0000000000000..e77f8d69ae654 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-api.json @@ -0,0 +1,174 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/oPNy63UO0fYNZSm0s2bZIqE4DWs\"", + "discoveryVersion": "v1", + "id": "webfonts:v1", + "name": "webfonts", + "version": "v1", + "title": "Google Fonts Developer API", + "description": "The Google Fonts Developer API.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/feature/font_api-16.png", + "x32": "http://www.google.com/images/icons/feature/font_api-32.gif" + }, + "documentationLink": "https://developers.google.com/fonts/docs/developer_api", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/webfonts/v1/", + "basePath": "/webfonts/v1/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "webfonts/v1/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "schemas": { + "Webfont": { + "id": "Webfont", + "type": "object", + "properties": { + "category": { + "type": "string", + "description": "The category of the font." + }, + "family": { + "type": "string", + "description": "The name of the font." + }, + "files": { + "type": "object", + "description": "The font files (with all supported scripts) for each one of the available variants, as a key : value map.", + "additionalProperties": { + "type": "string", + "description": "The font file URL (value) for an specific variant (key)." + } + }, + "kind": { + "type": "string", + "description": "This kind represents a webfont object in the webfonts service.", + "default": "webfonts#webfont" + }, + "lastModified": { + "type": "string", + "description": "The date (format \"yyyy-MM-dd\") the font was modified for the last time.", + "format": "date" + }, + "subsets": { + "type": "array", + "description": "The scripts supported by the font.", + "items": { + "type": "string" + } + }, + "variants": { + "type": "array", + "description": "The available variants for the font.", + "items": { + "type": "string" + } + }, + "version": { + "type": "string", + "description": "The font version." + } + } + }, + "WebfontList": { + "id": "WebfontList", + "type": "object", + "properties": { + "items": { + "type": "array", + "description": "The list of fonts currently served by the Google Fonts API.", + "items": { + "$ref": "Webfont" + } + }, + "kind": { + "type": "string", + "description": "This kind represents a list of webfont objects in the webfonts service.", + "default": "webfonts#webfontList" + } + } + } + }, + "resources": { + "webfonts": { + "methods": { + "list": { + "id": "webfonts.webfonts.list", + "path": "webfonts", + "httpMethod": "GET", + "description": "Retrieves the list of fonts currently served by the Google Fonts Developer API", + "parameters": { + "sort": { + "type": "string", + "description": "Enables sorting of the list", + "enum": [ + "alpha", + "date", + "popularity", + "style", + "trending" + ], + "enumDescriptions": [ + "Sort alphabetically", + "Sort by date added", + "Sort by popularity", + "Sort by number of styles", + "Sort by trending" + ], + "location": "query" + } + }, + "response": { + "$ref": "WebfontList" + } + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-gen.go b/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-gen.go new file mode 100644 index 0000000000000..2b087bceea746 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/webfonts/v1/webfonts-gen.go @@ -0,0 +1,180 @@ +// Package webfonts provides access to the Google Fonts Developer API. +// +// See https://developers.google.com/fonts/docs/developer_api +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/webfonts/v1" +// ... +// webfontsService, err := webfonts.New(oauthHttpClient) +package webfonts + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "webfonts:v1" +const apiName = "webfonts" +const apiVersion = "v1" +const basePath = "https://www.googleapis.com/webfonts/v1/" + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Webfonts = NewWebfontsService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Webfonts *WebfontsService +} + +func NewWebfontsService(s *Service) *WebfontsService { + rs := &WebfontsService{s: s} + return rs +} + +type WebfontsService struct { + s *Service +} + +type Webfont struct { + // Category: The category of the font. + Category string `json:"category,omitempty"` + + // Family: The name of the font. + Family string `json:"family,omitempty"` + + // Files: The font files (with all supported scripts) for each one of + // the available variants, as a key : value map. + Files map[string]string `json:"files,omitempty"` + + // Kind: This kind represents a webfont object in the webfonts service. + Kind string `json:"kind,omitempty"` + + // LastModified: The date (format "yyyy-MM-dd") the font was modified + // for the last time. + LastModified string `json:"lastModified,omitempty"` + + // Subsets: The scripts supported by the font. + Subsets []string `json:"subsets,omitempty"` + + // Variants: The available variants for the font. + Variants []string `json:"variants,omitempty"` + + // Version: The font version. + Version string `json:"version,omitempty"` +} + +type WebfontList struct { + // Items: The list of fonts currently served by the Google Fonts API. + Items []*Webfont `json:"items,omitempty"` + + // Kind: This kind represents a list of webfont objects in the webfonts + // service. + Kind string `json:"kind,omitempty"` +} + +// method id "webfonts.webfonts.list": + +type WebfontsListCall struct { + s *Service + opt_ map[string]interface{} +} + +// List: Retrieves the list of fonts currently served by the Google +// Fonts Developer API +func (r *WebfontsService) List() *WebfontsListCall { + c := &WebfontsListCall{s: r.s, opt_: make(map[string]interface{})} + return c +} + +// Sort sets the optional parameter "sort": Enables sorting of the list +func (c *WebfontsListCall) Sort(sort string) *WebfontsListCall { + c.opt_["sort"] = sort + return c +} + +func (c *WebfontsListCall) Do() (*WebfontList, error) { + var body io.Reader = nil + params := make(url.Values) + params.Set("alt", "json") + if v, ok := c.opt_["sort"]; ok { + params.Set("sort", fmt.Sprintf("%v", v)) + } + urls := googleapi.ResolveRelative(c.s.BasePath, "webfonts") + urls += "?" + params.Encode() + req, _ := http.NewRequest("GET", urls, body) + googleapi.SetOpaque(req.URL) + req.Header.Set("User-Agent", "google-api-go-client/0.5") + res, err := c.s.client.Do(req) + if err != nil { + return nil, err + } + defer googleapi.CloseBody(res) + if err := googleapi.CheckResponse(res); err != nil { + return nil, err + } + ret := new(WebfontList) + if err := json.NewDecoder(res.Body).Decode(ret); err != nil { + return nil, err + } + return ret, nil + // { + // "description": "Retrieves the list of fonts currently served by the Google Fonts Developer API", + // "httpMethod": "GET", + // "id": "webfonts.webfonts.list", + // "parameters": { + // "sort": { + // "description": "Enables sorting of the list", + // "enum": [ + // "alpha", + // "date", + // "popularity", + // "style", + // "trending" + // ], + // "enumDescriptions": [ + // "Sort alphabetically", + // "Sort by date added", + // "Sort by popularity", + // "Sort by number of styles", + // "Sort by trending" + // ], + // "location": "query", + // "type": "string" + // } + // }, + // "path": "webfonts", + // "response": { + // "$ref": "WebfontList" + // } + // } + +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-api.json b/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-api.json new file mode 100644 index 0000000000000..87ddad6362841 --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-api.json @@ -0,0 +1,6619 @@ +{ + "kind": "discovery#restDescription", + "etag": "\"kEk3sFj6Ef5_yR1-H3bAO6qw9mI/zcpG0fjFy3jg5hXoSMJXXIEGriY\"", + "discoveryVersion": "v1", + "id": "youtube:v3", + "name": "youtube", + "canonicalName": "YouTube", + "version": "v3", + "title": "YouTube Data API", + "description": "Programmatic access to YouTube features.", + "ownerDomain": "google.com", + "ownerName": "Google", + "icons": { + "x16": "http://www.google.com/images/icons/product/youtube-16.png", + "x32": "http://www.google.com/images/icons/product/youtube-32.png" + }, + "documentationLink": "https://developers.google.com/youtube/v3", + "protocol": "rest", + "baseUrl": "https://www.googleapis.com/youtube/v3/", + "basePath": "/youtube/v3/", + "rootUrl": "https://www.googleapis.com/", + "servicePath": "youtube/v3/", + "batchPath": "batch", + "parameters": { + "alt": { + "type": "string", + "description": "Data format for the response.", + "default": "json", + "enum": [ + "json" + ], + "enumDescriptions": [ + "Responses with Content-Type of application/json" + ], + "location": "query" + }, + "fields": { + "type": "string", + "description": "Selector specifying which fields to include in a partial response.", + "location": "query" + }, + "key": { + "type": "string", + "description": "API key. Your API key identifies your project and provides you with API access, quota, and reports. Required unless you provide an OAuth 2.0 token.", + "location": "query" + }, + "oauth_token": { + "type": "string", + "description": "OAuth 2.0 token for the current user.", + "location": "query" + }, + "prettyPrint": { + "type": "boolean", + "description": "Returns response with indentations and line breaks.", + "default": "true", + "location": "query" + }, + "quotaUser": { + "type": "string", + "description": "Available to use for quota purposes for server-side applications. Can be any arbitrary string assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.", + "location": "query" + }, + "userIp": { + "type": "string", + "description": "IP address of the site where the request originates. Use this if you want to enforce per-user limits.", + "location": "query" + } + }, + "auth": { + "oauth2": { + "scopes": { + "https://www.googleapis.com/auth/youtube": { + "description": "Manage your YouTube account" + }, + "https://www.googleapis.com/auth/youtube.readonly": { + "description": "View your YouTube account" + }, + "https://www.googleapis.com/auth/youtube.upload": { + "description": "Manage your YouTube videos" + }, + "https://www.googleapis.com/auth/youtubepartner": { + "description": "View and manage your assets and associated content on YouTube" + }, + "https://www.googleapis.com/auth/youtubepartner-channel-audit": { + "description": "View private information of your YouTube channel relevant during the audit process with a YouTube partner" + } + } + } + }, + "schemas": { + "AccessPolicy": { + "id": "AccessPolicy", + "type": "object", + "description": "Rights management policy for YouTube resources.", + "properties": { + "allowed": { + "type": "boolean", + "description": "The value of allowed indicates whether the access to the policy is allowed or denied by default." + }, + "exception": { + "type": "array", + "description": "A list of region codes that identify countries where the default policy do not apply.", + "items": { + "type": "string" + } + } + } + }, + "Activity": { + "id": "Activity", + "type": "object", + "description": "An activity resource contains information about an action that a particular channel, or user, has taken on YouTube.The actions reported in activity feeds include rating a video, sharing a video, marking a video as a favorite, commenting on a video, uploading a video, and so forth. Each activity resource identifies the type of action, the channel associated with the action, and the resource(s) associated with the action, such as the video that was rated or uploaded.", + "properties": { + "contentDetails": { + "$ref": "ActivityContentDetails", + "description": "The contentDetails object contains information about the content associated with the activity. For example, if the snippet.type value is videoRated, then the contentDetails object's content identifies the rated video." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the activity." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#activity\".", + "default": "youtube#activity" + }, + "snippet": { + "$ref": "ActivitySnippet", + "description": "The snippet object contains basic details about the activity, including the activity's type and group ID." + } + } + }, + "ActivityContentDetails": { + "id": "ActivityContentDetails", + "type": "object", + "description": "Details about the content of an activity: the video that was shared, the channel that was subscribed to, etc.", + "properties": { + "bulletin": { + "$ref": "ActivityContentDetailsBulletin", + "description": "The bulletin object contains details about a channel bulletin post. This object is only present if the snippet.type is bulletin." + }, + "channelItem": { + "$ref": "ActivityContentDetailsChannelItem", + "description": "The channelItem object contains details about a resource which was added to a channel. This property is only present if the snippet.type is channelItem." + }, + "comment": { + "$ref": "ActivityContentDetailsComment", + "description": "The comment object contains information about a resource that received a comment. This property is only present if the snippet.type is comment." + }, + "favorite": { + "$ref": "ActivityContentDetailsFavorite", + "description": "The favorite object contains information about a video that was marked as a favorite video. This property is only present if the snippet.type is favorite." + }, + "like": { + "$ref": "ActivityContentDetailsLike", + "description": "The like object contains information about a resource that received a positive (like) rating. This property is only present if the snippet.type is like." + }, + "playlistItem": { + "$ref": "ActivityContentDetailsPlaylistItem", + "description": "The playlistItem object contains information about a new playlist item. This property is only present if the snippet.type is playlistItem." + }, + "promotedItem": { + "$ref": "ActivityContentDetailsPromotedItem", + "description": "The promotedItem object contains details about a resource which is being promoted. This property is only present if the snippet.type is promotedItem." + }, + "recommendation": { + "$ref": "ActivityContentDetailsRecommendation", + "description": "The recommendation object contains information about a recommended resource. This property is only present if the snippet.type is recommendation." + }, + "social": { + "$ref": "ActivityContentDetailsSocial", + "description": "The social object contains details about a social network post. This property is only present if the snippet.type is social." + }, + "subscription": { + "$ref": "ActivityContentDetailsSubscription", + "description": "The subscription object contains information about a channel that a user subscribed to. This property is only present if the snippet.type is subscription." + }, + "upload": { + "$ref": "ActivityContentDetailsUpload", + "description": "The upload object contains information about the uploaded video. This property is only present if the snippet.type is upload." + } + } + }, + "ActivityContentDetailsBulletin": { + "id": "ActivityContentDetailsBulletin", + "type": "object", + "description": "Details about a channel bulletin post.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the resource associated with a bulletin post." + } + } + }, + "ActivityContentDetailsChannelItem": { + "id": "ActivityContentDetailsChannelItem", + "type": "object", + "description": "Details about a resource which was added to a channel.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the resource that was added to the channel." + } + } + }, + "ActivityContentDetailsComment": { + "id": "ActivityContentDetailsComment", + "type": "object", + "description": "Information about a resource that received a comment.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the resource associated with the comment." + } + } + }, + "ActivityContentDetailsFavorite": { + "id": "ActivityContentDetailsFavorite", + "type": "object", + "description": "Information about a video that was marked as a favorite video.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the resource that was marked as a favorite." + } + } + }, + "ActivityContentDetailsLike": { + "id": "ActivityContentDetailsLike", + "type": "object", + "description": "Information about a resource that received a positive (like) rating.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the rated resource." + } + } + }, + "ActivityContentDetailsPlaylistItem": { + "id": "ActivityContentDetailsPlaylistItem", + "type": "object", + "description": "Information about a new playlist item.", + "properties": { + "playlistId": { + "type": "string", + "description": "The value that YouTube uses to uniquely identify the playlist." + }, + "playlistItemId": { + "type": "string", + "description": "ID of the item within the playlist." + }, + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information about the resource that was added to the playlist." + } + } + }, + "ActivityContentDetailsPromotedItem": { + "id": "ActivityContentDetailsPromotedItem", + "type": "object", + "description": "Details about a resource which is being promoted.", + "properties": { + "adTag": { + "type": "string", + "description": "The URL the client should fetch to request a promoted item." + }, + "clickTrackingUrl": { + "type": "string", + "description": "The URL the client should ping to indicate that the user clicked through on this promoted item." + }, + "creativeViewUrl": { + "type": "string", + "description": "The URL the client should ping to indicate that the user was shown this promoted item." + }, + "ctaType": { + "type": "string", + "description": "The type of call-to-action, a message to the user indicating action that can be taken.", + "enum": [ + "unspecified", + "visitAdvertiserSite" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "customCtaButtonText": { + "type": "string", + "description": "The custom call-to-action button text. If specified, it will override the default button text for the cta_type." + }, + "descriptionText": { + "type": "string", + "description": "The text description to accompany the promoted item." + }, + "destinationUrl": { + "type": "string", + "description": "The URL the client should direct the user to, if the user chooses to visit the advertiser's website." + }, + "forecastingUrl": { + "type": "array", + "description": "The list of forecasting URLs. The client should ping all of these URLs when a promoted item is not available, to indicate that a promoted item could have been shown.", + "items": { + "type": "string" + } + }, + "impressionUrl": { + "type": "array", + "description": "The list of impression URLs. The client should ping all of these URLs to indicate that the user was shown this promoted item.", + "items": { + "type": "string" + } + }, + "videoId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the promoted video." + } + } + }, + "ActivityContentDetailsRecommendation": { + "id": "ActivityContentDetailsRecommendation", + "type": "object", + "description": "Information that identifies the recommended resource.", + "properties": { + "reason": { + "type": "string", + "description": "The reason that the resource is recommended to the user.", + "enum": [ + "unspecified", + "videoFavorited", + "videoLiked", + "videoWatched" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the recommended resource." + }, + "seedResourceId": { + "$ref": "ResourceId", + "description": "The seedResourceId object contains information about the resource that caused the recommendation." + } + } + }, + "ActivityContentDetailsSocial": { + "id": "ActivityContentDetailsSocial", + "type": "object", + "description": "Details about a social network post.", + "properties": { + "author": { + "type": "string", + "description": "The author of the social network post." + }, + "imageUrl": { + "type": "string", + "description": "An image of the post's author." + }, + "referenceUrl": { + "type": "string", + "description": "The URL of the social network post." + }, + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object encapsulates information that identifies the resource associated with a social network post." + }, + "type": { + "type": "string", + "description": "The name of the social network.", + "enum": [ + "facebook", + "googlePlus", + "twitter", + "unspecified" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + } + } + }, + "ActivityContentDetailsSubscription": { + "id": "ActivityContentDetailsSubscription", + "type": "object", + "description": "Information about a channel that a user subscribed to.", + "properties": { + "resourceId": { + "$ref": "ResourceId", + "description": "The resourceId object contains information that identifies the resource that the user subscribed to." + } + } + }, + "ActivityContentDetailsUpload": { + "id": "ActivityContentDetailsUpload", + "type": "object", + "description": "Information about the uploaded video.", + "properties": { + "videoId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the uploaded video." + } + } + }, + "ActivityListResponse": { + "id": "ActivityListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of activities, or events, that match the request criteria.", + "items": { + "$ref": "Activity" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#activityListResponse\".", + "default": "youtube#activityListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "ActivitySnippet": { + "id": "ActivitySnippet", + "type": "object", + "description": "Basic details about an activity, including title, description, thumbnails, activity type and group.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel associated with the activity." + }, + "channelTitle": { + "type": "string", + "description": "Channel title for the channel responsible for this activity" + }, + "description": { + "type": "string", + "description": "The description of the resource primarily associated with the activity.", + "annotations": { + "required": [ + "youtube.activities.insert" + ] + } + }, + "groupId": { + "type": "string", + "description": "The group ID associated with the activity. A group ID identifies user events that are associated with the same user and resource. For example, if a user rates a video and marks the same video as a favorite, the entries for those events would have the same group ID in the user's activity feed. In your user interface, you can avoid repetition by grouping events with the same groupId value." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the resource that is primarily associated with the activity. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The title of the resource primarily associated with the activity." + }, + "type": { + "type": "string", + "description": "The type of activity that the resource describes.", + "enum": [ + "bulletin", + "channelItem", + "comment", + "favorite", + "like", + "playlistItem", + "promotedItem", + "recommendation", + "social", + "subscription", + "upload" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + } + }, + "CdnSettings": { + "id": "CdnSettings", + "type": "object", + "description": "Brief description of the live stream cdn settings.", + "properties": { + "format": { + "type": "string", + "description": "The format of the video stream that you are sending to Youtube.", + "annotations": { + "required": [ + "youtube.liveStreams.insert", + "youtube.liveStreams.update" + ] + } + }, + "ingestionInfo": { + "$ref": "IngestionInfo", + "description": "The ingestionInfo object contains information that YouTube provides that you need to transmit your RTMP or HTTP stream to YouTube." + }, + "ingestionType": { + "type": "string", + "description": "The method or protocol used to transmit the video stream.", + "enum": [ + "rtmp" + ], + "enumDescriptions": [ + "" + ], + "annotations": { + "required": [ + "youtube.liveStreams.insert", + "youtube.liveStreams.update" + ] + } + } + } + }, + "Channel": { + "id": "Channel", + "type": "object", + "description": "A channel resource contains information about a YouTube channel.", + "properties": { + "auditDetails": { + "$ref": "ChannelAuditDetails", + "description": "The auditionDetails object encapsulates channel data that is relevant for YouTube Partners during the audition process." + }, + "brandingSettings": { + "$ref": "ChannelBrandingSettings", + "description": "The brandingSettings object encapsulates information about the branding of the channel." + }, + "contentDetails": { + "$ref": "ChannelContentDetails", + "description": "The contentDetails object encapsulates information about the channel's content." + }, + "contentOwnerDetails": { + "$ref": "ChannelContentOwnerDetails", + "description": "The contentOwnerDetails object encapsulates channel data that is relevant for YouTube Partners linked with the channel." + }, + "conversionPings": { + "$ref": "ChannelConversionPings", + "description": "The conversionPings object encapsulates information about conversion pings that need to be respected by the channel." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel." + }, + "invideoPromotion": { + "$ref": "InvideoPromotion", + "description": "The invideoPromotion object encapsulates information about promotion campaign associated with the channel." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channel\".", + "default": "youtube#channel" + }, + "snippet": { + "$ref": "ChannelSnippet", + "description": "The snippet object contains basic details about the channel, such as its title, description, and thumbnail images." + }, + "statistics": { + "$ref": "ChannelStatistics", + "description": "The statistics object encapsulates statistics for the channel." + }, + "status": { + "$ref": "ChannelStatus", + "description": "The status object encapsulates information about the privacy status of the channel." + }, + "topicDetails": { + "$ref": "ChannelTopicDetails", + "description": "The topicDetails object encapsulates information about Freebase topics associated with the channel." + } + } + }, + "ChannelAuditDetails": { + "id": "ChannelAuditDetails", + "type": "object", + "description": "The auditDetails object encapsulates channel data that is relevant for YouTube Partners during the audit process.", + "properties": { + "communityGuidelinesGoodStanding": { + "type": "boolean", + "description": "Whether or not the channel respects the community guidelines." + }, + "contentIdClaimsGoodStanding": { + "type": "boolean", + "description": "Whether or not the channel has any unresolved claims." + }, + "copyrightStrikesGoodStanding": { + "type": "boolean", + "description": "Whether or not the channel has any copyright strikes." + }, + "overallGoodStanding": { + "type": "boolean", + "description": "Describes the general state of the channel. This field will always show if there are any issues whatsoever with the channel. Currently this field represents the result of the logical and operation over the community guidelines good standing, the copyright strikes good standing and the content ID claims good standing, but this may change in the future." + } + } + }, + "ChannelBannerResource": { + "id": "ChannelBannerResource", + "type": "object", + "description": "A channel banner returned as the response to a channel_banner.insert call.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelBannerResource\".", + "default": "youtube#channelBannerResource" + }, + "url": { + "type": "string", + "description": "The URL of this banner image." + } + } + }, + "ChannelBrandingSettings": { + "id": "ChannelBrandingSettings", + "type": "object", + "description": "Branding properties of a YouTube channel.", + "properties": { + "channel": { + "$ref": "ChannelSettings", + "description": "Branding properties for the channel view." + }, + "hints": { + "type": "array", + "description": "Additional experimental branding properties.", + "items": { + "$ref": "PropertyValue" + } + }, + "image": { + "$ref": "ImageSettings", + "description": "Branding properties for branding images." + }, + "watch": { + "$ref": "WatchSettings", + "description": "Branding properties for the watch page." + } + } + }, + "ChannelContentDetails": { + "id": "ChannelContentDetails", + "type": "object", + "description": "Details about the content of a channel.", + "properties": { + "googlePlusUserId": { + "type": "string", + "description": "The googlePlusUserId object identifies the Google+ profile ID associated with this channel." + }, + "relatedPlaylists": { + "type": "object", + "properties": { + "favorites": { + "type": "string", + "description": "The ID of the playlist that contains the channel\"s favorite videos. Use the playlistItems.insert and playlistItems.delete to add or remove items from that list." + }, + "likes": { + "type": "string", + "description": "The ID of the playlist that contains the channel\"s liked videos. Use the playlistItems.insert and playlistItems.delete to add or remove items from that list." + }, + "uploads": { + "type": "string", + "description": "The ID of the playlist that contains the channel\"s uploaded videos. Use the videos.insert method to upload new videos and the videos.delete method to delete previously uploaded videos." + }, + "watchHistory": { + "type": "string", + "description": "The ID of the playlist that contains the channel\"s watch history. Use the playlistItems.insert and playlistItems.delete to add or remove items from that list." + }, + "watchLater": { + "type": "string", + "description": "The ID of the playlist that contains the channel\"s watch later playlist. Use the playlistItems.insert and playlistItems.delete to add or remove items from that list." + } + } + } + } + }, + "ChannelContentOwnerDetails": { + "id": "ChannelContentOwnerDetails", + "type": "object", + "description": "The contentOwnerDetails object encapsulates channel data that is relevant for YouTube Partners linked with the channel.", + "properties": { + "contentOwner": { + "type": "string", + "description": "The ID of the content owner linked to the channel." + }, + "timeLinked": { + "type": "string", + "description": "The date and time of when the channel was linked to the content owner. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + } + } + }, + "ChannelConversionPing": { + "id": "ChannelConversionPing", + "type": "object", + "description": "Pings that the app shall fire (authenticated by biscotti cookie). Each ping has a context, in which the app must fire the ping, and a url identifying the ping.", + "properties": { + "context": { + "type": "string", + "description": "Defines the context of the ping.", + "enum": [ + "cview", + "subscribe", + "unsubscribe" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "conversionUrl": { + "type": "string", + "description": "The url (without the schema) that the player shall send the ping to. It's at caller's descretion to decide which schema to use (http vs https) Example of a returned url: //googleads.g.doubleclick.net/pagead/ viewthroughconversion/962985656/?data=path%3DtHe_path%3Btype%3D cview%3Butuid%3DGISQtTNGYqaYl4sKxoVvKA&labe=default The caller must append biscotti authentication (ms param in case of mobile, for example) to this ping." + } + } + }, + "ChannelConversionPings": { + "id": "ChannelConversionPings", + "type": "object", + "description": "The conversionPings object encapsulates information about conversion pings that need to be respected by the channel.", + "properties": { + "pings": { + "type": "array", + "description": "Pings that the app shall fire (authenticated by biscotti cookie). Each ping has a context, in which the app must fire the ping, and a url identifying the ping.", + "items": { + "$ref": "ChannelConversionPing" + } + } + } + }, + "ChannelListResponse": { + "id": "ChannelListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of channels that match the request criteria.", + "items": { + "$ref": "Channel" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelListResponse\".", + "default": "youtube#channelListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "ChannelSection": { + "id": "ChannelSection", + "type": "object", + "description": "TODO(lxz) follow up with adiamondstein@ to fullfill the doc before deploying", + "properties": { + "contentDetails": { + "$ref": "ChannelSectionContentDetails", + "description": "The contentDetails object contains details about the ChannelSection content, such as playlists and channels." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the ChannelSection." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelSection\".", + "default": "youtube#channelSection" + }, + "snippet": { + "$ref": "ChannelSectionSnippet", + "description": "The snippet object contains basic details about the ChannelSection, such as its type, style and title." + } + } + }, + "ChannelSectionContentDetails": { + "id": "ChannelSectionContentDetails", + "type": "object", + "description": "Details about a channelsection, including playlists and channels.", + "properties": { + "channels": { + "type": "array", + "description": "The channel ids for type multiple_channels.", + "items": { + "type": "string" + } + }, + "playlists": { + "type": "array", + "description": "The playlist ids for type single_playlist and multiple_playlists. For singlePlaylist, only one playlistId is allowed.", + "items": { + "type": "string" + } + } + } + }, + "ChannelSectionListResponse": { + "id": "ChannelSectionListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of ChannelSections that match the request criteria.", + "items": { + "$ref": "ChannelSection" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#channelSectionListResponse\".", + "default": "youtube#channelSectionListResponse" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "ChannelSectionSnippet": { + "id": "ChannelSectionSnippet", + "type": "object", + "description": "Basic details about a channelsection, including title, style and position.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel that published the channelSection." + }, + "position": { + "type": "integer", + "description": "The position of the channelSection in the channel.", + "format": "uint32" + }, + "style": { + "type": "string", + "description": "The style of the channelSection.", + "enum": [ + "channelsectionStyleUndefined", + "horizontalRow", + "verticalList" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "title": { + "type": "string", + "description": "The channelSection's title for multiple_playlists and multiple_channels." + }, + "type": { + "type": "string", + "description": "The type of the channelSection.", + "enum": [ + "allPlaylists", + "channelsectionTypeUndefined", + "completedEvents", + "likedPlaylists", + "likes", + "liveEvents", + "multipleChannels", + "multiplePlaylists", + "popularUploads", + "recentActivity", + "recentPosts", + "recentUploads", + "singlePlaylist", + "upcomingEvents" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + } + } + }, + "ChannelSettings": { + "id": "ChannelSettings", + "type": "object", + "description": "Branding properties for the channel view.", + "properties": { + "defaultTab": { + "type": "string", + "description": "Which content tab users should see when viewing the channel." + }, + "description": { + "type": "string", + "description": "Specifies the channel description." + }, + "featuredChannelsTitle": { + "type": "string", + "description": "Title for the featured channels tab." + }, + "featuredChannelsUrls": { + "type": "array", + "description": "The list of featured channels.", + "items": { + "type": "string" + } + }, + "keywords": { + "type": "string", + "description": "Lists keywords associated with the channel, comma-separated." + }, + "moderateComments": { + "type": "boolean", + "description": "Whether user-submitted comments left on the channel page need to be approved by the channel owner to be publicly visible." + }, + "profileColor": { + "type": "string", + "description": "A prominent color that can be rendered on this channel page." + }, + "showBrowseView": { + "type": "boolean", + "description": "Whether the tab to browse the videos should be displayed." + }, + "showRelatedChannels": { + "type": "boolean", + "description": "Whether related channels should be proposed." + }, + "title": { + "type": "string", + "description": "Specifies the channel title." + }, + "trackingAnalyticsAccountId": { + "type": "string", + "description": "The ID for a Google Analytics account to track and measure traffic to the channels." + }, + "unsubscribedTrailer": { + "type": "string", + "description": "The trailer of the channel, for users that are not subscribers." + } + } + }, + "ChannelSnippet": { + "id": "ChannelSnippet", + "type": "object", + "description": "Basic details about a channel, including title, description and thumbnails.", + "properties": { + "description": { + "type": "string", + "description": "The description of the channel." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the channel was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the channel. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The channel's title." + } + } + }, + "ChannelStatistics": { + "id": "ChannelStatistics", + "type": "object", + "description": "Statistics about a channel: number of subscribers, number of videos in the channel, etc.", + "properties": { + "commentCount": { + "type": "string", + "description": "The number of comments for the channel.", + "format": "uint64" + }, + "hiddenSubscriberCount": { + "type": "boolean", + "description": "Whether or not the number of subscribers is shown for this user." + }, + "subscriberCount": { + "type": "string", + "description": "The number of subscribers that the channel has.", + "format": "uint64" + }, + "videoCount": { + "type": "string", + "description": "The number of videos uploaded to the channel.", + "format": "uint64" + }, + "viewCount": { + "type": "string", + "description": "The number of times the channel has been viewed.", + "format": "uint64" + } + } + }, + "ChannelStatus": { + "id": "ChannelStatus", + "type": "object", + "description": "JSON template for the status part of a channel.", + "properties": { + "isLinked": { + "type": "boolean", + "description": "If true, then the user is linked to either a YouTube username or G+ account. Otherwise, the user doesn't have a public YouTube identity." + }, + "privacyStatus": { + "type": "string", + "description": "Privacy status of the channel.", + "enum": [ + "private", + "public", + "unlisted" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "ChannelTopicDetails": { + "id": "ChannelTopicDetails", + "type": "object", + "description": "Freebase topic information related to the channel.", + "properties": { + "topicIds": { + "type": "array", + "description": "A list of Freebase topic IDs associated with the channel. You can retrieve information about each topic using the Freebase Topic API.", + "items": { + "type": "string" + } + } + } + }, + "ContentRating": { + "id": "ContentRating", + "type": "object", + "description": "Ratings schemes. The country-specific ratings are mostly for movies and shows.", + "properties": { + "acbRating": { + "type": "string", + "description": "Rating system in Australia - Australian Classification Board", + "enum": [ + "acbC", + "acbE", + "acbG", + "acbM", + "acbMa15plus", + "acbP", + "acbPg", + "acbR18plus", + "acbUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "bbfcRating": { + "type": "string", + "description": "British Board of Film Classification", + "enum": [ + "bbfc12", + "bbfc12a", + "bbfc15", + "bbfc18", + "bbfcPg", + "bbfcR18", + "bbfcU", + "bbfcUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "catvRating": { + "type": "string", + "description": "Rating system for Canadian TV - Canadian TV Classification System", + "enum": [ + "catv14plus", + "catv18plus", + "catvC", + "catvC8", + "catvG", + "catvPg", + "catvUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "catvfrRating": { + "type": "string", + "description": "Rating system for French Canadian TV - Regie du cinema", + "enum": [ + "catvfr13plus", + "catvfr16plus", + "catvfr18plus", + "catvfr8plus", + "catvfrG", + "catvfrUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "cbfcRating": { + "type": "string", + "description": "Rating system in India - Central Board of Film Certification", + "enum": [ + "cbfcA", + "cbfcS", + "cbfcU", + "cbfcUA", + "cbfcUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "chvrsRating": { + "type": "string", + "description": "Canadian Home Video Rating System", + "enum": [ + "chvrs14a", + "chvrs18a", + "chvrsE", + "chvrsG", + "chvrsPg", + "chvrsR", + "chvrsUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "djctqRating": { + "type": "string", + "description": "Rating system in Brazil - Department of Justice, Rating, Titles and Qualification", + "enum": [ + "djctq10", + "djctq12", + "djctq14", + "djctq16", + "djctq18", + "djctqL", + "djctqUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "eirinRating": { + "type": "string", + "description": "Rating system in Japan - Eiga Rinri Kanri Iinkai", + "enum": [ + "eirinG", + "eirinPg12", + "eirinR15plus", + "eirinR18plus", + "eirinUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "fmocRating": { + "type": "string", + "description": "Rating system in France - French Minister of Culture", + "enum": [ + "fmoc10", + "fmoc12", + "fmoc16", + "fmoc18", + "fmocE", + "fmocU", + "fmocUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "fskRating": { + "type": "string", + "description": "Rating system in Germany - Voluntary Self Regulation of the Movie Industry", + "enum": [ + "fsk0", + "fsk12", + "fsk16", + "fsk18", + "fsk6", + "fskUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "icaaRating": { + "type": "string", + "description": "Rating system in Spain - Instituto de Cinematografia y de las Artes Audiovisuales", + "enum": [ + "icaa12", + "icaa13", + "icaa16", + "icaa18", + "icaa7", + "icaaApta", + "icaaUnrated", + "icaaX" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "kmrbRating": { + "type": "string", + "description": "Rating system in South Korea - Korea Media Rating Board", + "enum": [ + "kmrb12plus", + "kmrb15plus", + "kmrbAll", + "kmrbR", + "kmrbTeenr", + "kmrbUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "mibacRating": { + "type": "string", + "description": "Rating system in Italy - Ministero dei Beni e delle Attivita Culturali e del Turismo", + "enum": [ + "mibacT", + "mibacUnrated", + "mibacVap", + "mibacVm12", + "mibacVm14", + "mibacVm18" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "mpaaRating": { + "type": "string", + "description": "Motion Picture Association of America rating for the content.", + "enum": [ + "mpaaG", + "mpaaNc17", + "mpaaPg", + "mpaaPg13", + "mpaaR", + "mpaaUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "oflcRating": { + "type": "string", + "description": "Rating system in New Zealand - Office of Film and Literature Classification", + "enum": [ + "oflcG", + "oflcM", + "oflcPg", + "oflcR13", + "oflcR15", + "oflcR16", + "oflcR18", + "oflcUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "rtcRating": { + "type": "string", + "description": "Rating system in Mexico - General Directorate of Radio, Television and Cinematography", + "enum": [ + "rtcA", + "rtcAa", + "rtcB", + "rtcB15", + "rtcC", + "rtcD", + "rtcUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "russiaRating": { + "type": "string", + "description": "Rating system in Russia", + "enum": [ + "russia0", + "russia12", + "russia16", + "russia18", + "russia6", + "russiaUnrated" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "tvpgRating": { + "type": "string", + "description": "TV Parental Guidelines rating of the content.", + "enum": [ + "pg14", + "tvpgG", + "tvpgMa", + "tvpgPg", + "tvpgUnrated", + "tvpgY", + "tvpgY7", + "tvpgY7Fv" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "ytRating": { + "type": "string", + "description": "Internal YouTube rating.", + "enum": [ + "ytAgeRestricted" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "GeoPoint": { + "id": "GeoPoint", + "type": "object", + "description": "Geographical coordinates of a point, in WGS84.", + "properties": { + "altitude": { + "type": "number", + "description": "Altitude above the reference ellipsoid, in meters.", + "format": "double" + }, + "latitude": { + "type": "number", + "description": "Latitude in degrees.", + "format": "double" + }, + "longitude": { + "type": "number", + "description": "Longitude in degrees.", + "format": "double" + } + } + }, + "GuideCategory": { + "id": "GuideCategory", + "type": "object", + "description": "A guideCategory resource identifies a category that YouTube algorithmically assigns based on a channel's content or other indicators, such as the channel's popularity. The list is similar to video categories, with the difference being that a video's uploader can assign a video category but only YouTube can assign a channel category.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the guide category." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#guideCategory\".", + "default": "youtube#guideCategory" + }, + "snippet": { + "$ref": "GuideCategorySnippet", + "description": "The snippet object contains basic details about the category, such as its title." + } + } + }, + "GuideCategoryListResponse": { + "id": "GuideCategoryListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of categories that can be associated with YouTube channels. In this map, the category ID is the map key, and its value is the corresponding guideCategory resource.", + "items": { + "$ref": "GuideCategory" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#guideCategoryListResponse\".", + "default": "youtube#guideCategoryListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "GuideCategorySnippet": { + "id": "GuideCategorySnippet", + "type": "object", + "description": "Basic details about a guide category.", + "properties": { + "channelId": { + "type": "string", + "default": "UCBR8-60-B28hp2BmDPdntcQ" + }, + "title": { + "type": "string", + "description": "Description of the guide category." + } + } + }, + "I18nLanguage": { + "id": "I18nLanguage", + "type": "object", + "description": "An i18nLanguage resource identifies a UI language currently supported by YouTube.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the i18n language." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#i18nLanguage\".", + "default": "youtube#i18nLanguage" + }, + "snippet": { + "$ref": "I18nLanguageSnippet", + "description": "The snippet object contains basic details about the i18n language, such as language code and human-readable name." + } + } + }, + "I18nLanguageListResponse": { + "id": "I18nLanguageListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of supported i18n languages. In this map, the i18n language ID is the map key, and its value is the corresponding i18nLanguage resource.", + "items": { + "$ref": "I18nLanguage" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#i18nLanguageListResponse\".", + "default": "youtube#i18nLanguageListResponse" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "I18nLanguageSnippet": { + "id": "I18nLanguageSnippet", + "type": "object", + "description": "Basic details about an i18n language, such as language code and human-readable name.", + "properties": { + "hl": { + "type": "string", + "description": "A short BCP-47 code that uniquely identifies a language." + }, + "name": { + "type": "string", + "description": "The human-readable name of the language in the language itself." + } + } + }, + "I18nRegion": { + "id": "I18nRegion", + "type": "object", + "description": "A i18nRegion resource identifies a region where YouTube is available.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the i18n region." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#i18nRegion\".", + "default": "youtube#i18nRegion" + }, + "snippet": { + "$ref": "I18nRegionSnippet", + "description": "The snippet object contains basic details about the i18n region, such as region code and human-readable name." + } + } + }, + "I18nRegionListResponse": { + "id": "I18nRegionListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of regions where YouTube is available. In this map, the i18n region ID is the map key, and its value is the corresponding i18nRegion resource.", + "items": { + "$ref": "I18nRegion" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#i18nRegionListResponse\".", + "default": "youtube#i18nRegionListResponse" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "I18nRegionSnippet": { + "id": "I18nRegionSnippet", + "type": "object", + "description": "Basic details about an i18n region, such as region code and human-readable name.", + "properties": { + "gl": { + "type": "string", + "description": "The region code as a 2-letter ISO country code." + }, + "name": { + "type": "string", + "description": "The human-readable name of the region." + } + } + }, + "ImageSettings": { + "id": "ImageSettings", + "type": "object", + "description": "Branding properties for images associated with the channel.", + "properties": { + "backgroundImageUrl": { + "$ref": "LocalizedProperty", + "description": "The URL for the background image shown on the video watch page. The image should be 1200px by 615px, with a maximum file size of 128k." + }, + "bannerExternalUrl": { + "type": "string", + "description": "This is used only in update requests; if it's set, we use this URL to generate all of the above banner URLs." + }, + "bannerImageUrl": { + "type": "string", + "description": "Banner image. Desktop size (1060x175)." + }, + "bannerMobileExtraHdImageUrl": { + "type": "string", + "description": "Banner image. Mobile size high resolution (1440x395)." + }, + "bannerMobileHdImageUrl": { + "type": "string", + "description": "Banner image. Mobile size high resolution (1280x360)." + }, + "bannerMobileImageUrl": { + "type": "string", + "description": "Banner image. Mobile size (640x175)." + }, + "bannerMobileLowImageUrl": { + "type": "string", + "description": "Banner image. Mobile size low resolution (320x88)." + }, + "bannerMobileMediumHdImageUrl": { + "type": "string", + "description": "Banner image. Mobile size medium/high resolution (960x263)." + }, + "bannerTabletExtraHdImageUrl": { + "type": "string", + "description": "Banner image. Tablet size extra high resolution (2560x424)." + }, + "bannerTabletHdImageUrl": { + "type": "string", + "description": "Banner image. Tablet size high resolution (2276x377)." + }, + "bannerTabletImageUrl": { + "type": "string", + "description": "Banner image. Tablet size (1707x283)." + }, + "bannerTabletLowImageUrl": { + "type": "string", + "description": "Banner image. Tablet size low resolution (1138x188)." + }, + "bannerTvHighImageUrl": { + "type": "string", + "description": "Banner image. TV size high resolution (1920x1080)." + }, + "bannerTvImageUrl": { + "type": "string", + "description": "Banner image. TV size extra high resolution (2120x1192)." + }, + "bannerTvLowImageUrl": { + "type": "string", + "description": "Banner image. TV size low resolution (854x480)." + }, + "bannerTvMediumImageUrl": { + "type": "string", + "description": "Banner image. TV size medium resolution (1280x720)." + }, + "largeBrandedBannerImageImapScript": { + "$ref": "LocalizedProperty", + "description": "The image map script for the large banner image." + }, + "largeBrandedBannerImageUrl": { + "$ref": "LocalizedProperty", + "description": "The URL for the 854px by 70px image that appears below the video player in the expanded video view of the video watch page." + }, + "smallBrandedBannerImageImapScript": { + "$ref": "LocalizedProperty", + "description": "The image map script for the small banner image." + }, + "smallBrandedBannerImageUrl": { + "$ref": "LocalizedProperty", + "description": "The URL for the 640px by 70px banner image that appears below the video player in the default view of the video watch page." + }, + "trackingImageUrl": { + "type": "string", + "description": "The URL for a 1px by 1px tracking pixel that can be used to collect statistics for views of the channel or video pages." + }, + "watchIconImageUrl": { + "type": "string", + "description": "The URL for the image that appears above the top-left corner of the video player. This is a 25-pixel-high image with a flexible width that cannot exceed 170 pixels." + } + } + }, + "IngestionInfo": { + "id": "IngestionInfo", + "type": "object", + "description": "Describes information necessary for ingesting an RTMP or an HTTP stream.", + "properties": { + "backupIngestionAddress": { + "type": "string", + "description": "The backup ingestion URL that you should use to stream video to YouTube. You have the option of simultaneously streaming the content that you are sending to the ingestionAddress to this URL." + }, + "ingestionAddress": { + "type": "string", + "description": "The primary ingestion URL that you should use to stream video to YouTube. You must stream video to this URL.\n\nDepending on which application or tool you use to encode your video stream, you may need to enter the stream URL and stream name separately or you may need to concatenate them in the following format:\n\nSTREAM_URL/STREAM_NAME" + }, + "streamName": { + "type": "string", + "description": "The HTTP or RTMP stream name that YouTube assigns to the video stream." + } + } + }, + "InvideoBranding": { + "id": "InvideoBranding", + "type": "object", + "properties": { + "imageBytes": { + "type": "string", + "format": "byte" + }, + "imageUrl": { + "type": "string" + }, + "position": { + "$ref": "InvideoPosition" + }, + "targetChannelId": { + "type": "string" + }, + "timing": { + "$ref": "InvideoTiming" + } + } + }, + "InvideoPosition": { + "id": "InvideoPosition", + "type": "object", + "description": "Describes the spatial position of a visual widget inside a video. It is a union of various position types, out of which only will be set one.", + "properties": { + "cornerPosition": { + "type": "string", + "description": "Describes in which corner of the video the visual widget will appear.", + "enum": [ + "bottomLeft", + "bottomRight", + "topLeft", + "topRight" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "type": { + "type": "string", + "description": "Defines the position type.", + "enum": [ + "corner" + ], + "enumDescriptions": [ + "" + ] + } + } + }, + "InvideoPromotion": { + "id": "InvideoPromotion", + "type": "object", + "description": "Describes an invideo promotion campaign consisting of multiple promoted items. A campaign belongs to a single channel_id.", + "properties": { + "defaultTiming": { + "$ref": "InvideoTiming", + "description": "The default temporal position within the video where the promoted item will be displayed. Can be overriden by more specific timing in the item." + }, + "items": { + "type": "array", + "description": "List of promoted items in decreasing priority.", + "items": { + "$ref": "PromotedItem" + } + }, + "position": { + "$ref": "InvideoPosition", + "description": "The spatial position within the video where the promoted item will be displayed." + } + } + }, + "InvideoTiming": { + "id": "InvideoTiming", + "type": "object", + "description": "Describes a temporal position of a visual widget inside a video.", + "properties": { + "durationMs": { + "type": "string", + "description": "Defines the duration in milliseconds for which the promotion should be displayed. If missing, the client should use the default.", + "format": "uint64" + }, + "offsetMs": { + "type": "string", + "description": "Defines the time at which the promotion will appear. Depending on the value of type the value of the offsetMs field will represent a time offset from the start or from the end of the video, expressed in milliseconds.", + "format": "uint64" + }, + "type": { + "type": "string", + "description": "Describes a timing type. If the value is offsetFromStart, then the offsetMs field represents an offset from the start of the video. If the value is offsetFromEnd, then the offsetMs field represents an offset from the end of the video.", + "enum": [ + "offsetFromEnd", + "offsetFromStart" + ], + "enumDescriptions": [ + "", + "" + ] + } + } + }, + "LiveBroadcast": { + "id": "LiveBroadcast", + "type": "object", + "description": "A liveBroadcast resource represents an event that will be streamed, via live video, on YouTube.", + "properties": { + "contentDetails": { + "$ref": "LiveBroadcastContentDetails", + "description": "The contentDetails object contains information about the event's video content, such as whether the content can be shown in an embedded video player or if it will be archived and therefore available for viewing after the event has concluded." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube assigns to uniquely identify the broadcast.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveBroadcast\".", + "default": "youtube#liveBroadcast" + }, + "snippet": { + "$ref": "LiveBroadcastSnippet", + "description": "The snippet object contains basic details about the event, including its title, description, start time, and end time." + }, + "status": { + "$ref": "LiveBroadcastStatus", + "description": "The status object contains information about the event's status." + } + } + }, + "LiveBroadcastContentDetails": { + "id": "LiveBroadcastContentDetails", + "type": "object", + "description": "Detailed settings of a broadcast.", + "properties": { + "boundStreamId": { + "type": "string", + "description": "This value uniquely identifies the live stream bound to the broadcast." + }, + "enableClosedCaptions": { + "type": "boolean", + "description": "This setting indicates whether closed captioning is enabled for this broadcast. The ingestion URL of the closed captions is returned through the liveStreams API." + }, + "enableContentEncryption": { + "type": "boolean", + "description": "This setting indicates whether YouTube should enable content encryption for the broadcast.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "enableDvr": { + "type": "boolean", + "description": "This setting determines whether viewers can access DVR controls while watching the video. DVR controls enable the viewer to control the video playback experience by pausing, rewinding, or fast forwarding content. The default value for this property is true.\n\n\n\nImportant: You must set the value to true and also set the enableArchive property's value to true if you want to make playback available immediately after the broadcast ends.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "enableEmbed": { + "type": "boolean", + "description": "This setting indicates whether the broadcast video can be played in an embedded player. If you choose to archive the video (using the enableArchive property), this setting will also apply to the archived video.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "monitorStream": { + "$ref": "MonitorStreamInfo", + "description": "The monitorStream object contains information about the monitor stream, which the broadcaster can use to review the event content before the broadcast stream is shown publicly." + }, + "recordFromStart": { + "type": "boolean", + "description": "Automatically start recording after the event goes live. The default value for this property is true.\n\n\n\nImportant: You must also set the enableDvr property's value to true if you want the playback to be available immediately after the broadcast ends. If you set this property's value to true but do not also set the enableDvr property to true, there may be a delay of around one day before the archived video will be available for playback.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "startWithSlate": { + "type": "boolean", + "description": "This setting indicates whether the broadcast should automatically begin with an in-stream slate when you update the broadcast's status to live. After updating the status, you then need to send a liveCuepoints.insert request that sets the cuepoint's eventState to end to remove the in-stream slate and make your broadcast stream visible to viewers.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + } + } + }, + "LiveBroadcastListResponse": { + "id": "LiveBroadcastListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of broadcasts that match the request criteria.", + "items": { + "$ref": "LiveBroadcast" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveBroadcastListResponse\".", + "default": "youtube#liveBroadcastListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "LiveBroadcastSnippet": { + "id": "LiveBroadcastSnippet", + "type": "object", + "properties": { + "actualEndTime": { + "type": "string", + "description": "The date and time that the broadcast actually ended. This information is only available once the broadcast's state is complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "actualStartTime": { + "type": "string", + "description": "The date and time that the broadcast actually started. This information is only available once the broadcast's state is live. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel that is publishing the broadcast." + }, + "description": { + "type": "string", + "description": "The broadcast's description. As with the title, you can set this field by modifying the broadcast resource or by setting the description field of the corresponding video resource." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the broadcast was added to YouTube's live broadcast schedule. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "scheduledEndTime": { + "type": "string", + "description": "The date and time that the broadcast is scheduled to end. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time", + "annotations": { + "required": [ + "youtube.liveBroadcasts.insert", + "youtube.liveBroadcasts.update" + ] + } + }, + "scheduledStartTime": { + "type": "string", + "description": "The date and time that the broadcast is scheduled to start. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time", + "annotations": { + "required": [ + "youtube.liveBroadcasts.insert", + "youtube.liveBroadcasts.update" + ] + } + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the broadcast. For each nested object in this object, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The broadcast's title. Note that the broadcast represents exactly one YouTube video. You can set this field by modifying the broadcast resource or by setting the title field of the corresponding video resource.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.insert", + "youtube.liveBroadcasts.update" + ] + } + } + } + }, + "LiveBroadcastStatus": { + "id": "LiveBroadcastStatus", + "type": "object", + "properties": { + "lifeCycleStatus": { + "type": "string", + "description": "The broadcast's status. The status can be updated using the API's liveBroadcasts.transition method.", + "enum": [ + "abandoned", + "complete", + "completeStarting", + "created", + "live", + "liveStarting", + "ready", + "reclaimed", + "revoked", + "testStarting", + "testing" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "privacyStatus": { + "type": "string", + "description": "The broadcast's privacy status. Note that the broadcast represents exactly one YouTube video, so the privacy settings are identical to those supported for videos. In addition, you can set this field by modifying the broadcast resource or by setting the privacyStatus field of the corresponding video resource.", + "enum": [ + "private", + "public", + "unlisted" + ], + "enumDescriptions": [ + "", + "", + "" + ], + "annotations": { + "required": [ + "youtube.liveBroadcasts.insert", + "youtube.liveBroadcasts.update" + ] + } + }, + "recordingStatus": { + "type": "string", + "description": "The broadcast's recording status.", + "enum": [ + "notRecording", + "recorded", + "recording" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "LiveStream": { + "id": "LiveStream", + "type": "object", + "description": "A live stream describes a live ingestion point.", + "properties": { + "cdn": { + "$ref": "CdnSettings", + "description": "The cdn object defines the live stream's content delivery network (CDN) settings. These settings provide details about the manner in which you stream your content to YouTube." + }, + "contentDetails": { + "$ref": "LiveStreamContentDetails", + "description": "The content_details object contains information about the stream, including the closed captions ingestion URL." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube assigns to uniquely identify the stream.", + "annotations": { + "required": [ + "youtube.liveStreams.update" + ] + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveStream\".", + "default": "youtube#liveStream" + }, + "snippet": { + "$ref": "LiveStreamSnippet", + "description": "The snippet object contains basic details about the stream, including its channel, title, and description." + }, + "status": { + "$ref": "LiveStreamStatus", + "description": "The status object contains information about live stream's status." + } + } + }, + "LiveStreamContentDetails": { + "id": "LiveStreamContentDetails", + "type": "object", + "description": "Detailed settings of a stream.", + "properties": { + "closedCaptionsIngestionUrl": { + "type": "string", + "description": "The ingestion URL where the closed captions of this stream are sent." + } + } + }, + "LiveStreamListResponse": { + "id": "LiveStreamListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of live streams that match the request criteria.", + "items": { + "$ref": "LiveStream" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#liveStreamListResponse\".", + "default": "youtube#liveStreamListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "LiveStreamSnippet": { + "id": "LiveStreamSnippet", + "type": "object", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel that is transmitting the stream." + }, + "description": { + "type": "string", + "description": "The stream's description. The value cannot be longer than 10000 characters." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the stream was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "title": { + "type": "string", + "description": "The stream's title. The value must be between 1 and 128 characters long.", + "annotations": { + "required": [ + "youtube.liveStreams.insert", + "youtube.liveStreams.update" + ] + } + } + } + }, + "LiveStreamStatus": { + "id": "LiveStreamStatus", + "type": "object", + "description": "Brief description of the live stream status.", + "properties": { + "streamStatus": { + "type": "string", + "enum": [ + "active", + "created", + "error", + "inactive", + "ready" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + } + } + }, + "LocalizedProperty": { + "id": "LocalizedProperty", + "type": "object", + "description": "Represent a property available in different languages.", + "properties": { + "default": { + "type": "string", + "description": "Default value for the localized property." + }, + "localized": { + "type": "array", + "description": "The localized values.", + "items": { + "$ref": "LocalizedString" + } + } + } + }, + "LocalizedString": { + "id": "LocalizedString", + "type": "object", + "description": "A localized string.", + "properties": { + "language": { + "type": "string", + "description": "Language associated to this value." + }, + "value": { + "type": "string", + "description": "Value of the property." + } + } + }, + "MonitorStreamInfo": { + "id": "MonitorStreamInfo", + "type": "object", + "description": "Settings and Info of the monitor stream", + "properties": { + "broadcastStreamDelayMs": { + "type": "integer", + "description": "If you have set the enableMonitorStream property to true, then this property determines the length of the live broadcast delay.", + "format": "uint32", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + }, + "embedHtml": { + "type": "string", + "description": "HTML code that embeds a player that plays the monitor stream." + }, + "enableMonitorStream": { + "type": "boolean", + "description": "This value determines whether the monitor stream is enabled for the broadcast. If the monitor stream is enabled, then YouTube will broadcast the event content on a special stream intended only for the broadcaster's consumption. The broadcaster can use the stream to review the event content and also to identify the optimal times to insert cuepoints.\n\nYou need to set this value to true if you intend to have a broadcast delay for your event.\n\nNote: This property cannot be updated once the broadcast is in the testing or live state.", + "annotations": { + "required": [ + "youtube.liveBroadcasts.update" + ] + } + } + } + }, + "PageInfo": { + "id": "PageInfo", + "type": "object", + "description": "Paging details for lists of resources, including total number of items available and number of resources returned in a single page.", + "properties": { + "resultsPerPage": { + "type": "integer", + "description": "The number of results included in the API response.", + "format": "int32" + }, + "totalResults": { + "type": "integer", + "description": "The total number of results in the result set.", + "format": "int32" + } + } + }, + "Playlist": { + "id": "Playlist", + "type": "object", + "description": "A playlist resource represents a YouTube playlist. A playlist is a collection of videos that can be viewed sequentially and shared with other users. A playlist can contain up to 200 videos, and YouTube does not limit the number of playlists that each user creates. By default, playlists are publicly visible to other users, but playlists can be public or private.\n\nYouTube also uses playlists to identify special collections of videos for a channel, such as: \n- uploaded videos \n- favorite videos \n- positively rated (liked) videos \n- watch history \n- watch later To be more specific, these lists are associated with a channel, which is a collection of a person, group, or company's videos, playlists, and other YouTube information. You can retrieve the playlist IDs for each of these lists from the channel resource for a given channel.\n\nYou can then use the playlistItems.list method to retrieve any of those lists. You can also add or remove items from those lists by calling the playlistItems.insert and playlistItems.delete methods.", + "properties": { + "contentDetails": { + "$ref": "PlaylistContentDetails", + "description": "The contentDetails object contains information like video count." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the playlist." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlist\".", + "default": "youtube#playlist" + }, + "player": { + "$ref": "PlaylistPlayer", + "description": "The player object contains information that you would use to play the playlist in an embedded player." + }, + "snippet": { + "$ref": "PlaylistSnippet", + "description": "The snippet object contains basic details about the playlist, such as its title and description." + }, + "status": { + "$ref": "PlaylistStatus", + "description": "The status object contains status information for the playlist." + } + } + }, + "PlaylistContentDetails": { + "id": "PlaylistContentDetails", + "type": "object", + "properties": { + "itemCount": { + "type": "integer", + "description": "The number of videos in the playlist.", + "format": "uint32" + } + } + }, + "PlaylistItem": { + "id": "PlaylistItem", + "type": "object", + "description": "A playlistItem resource identifies another resource, such as a video, that is included in a playlist. In addition, the playlistItem resource contains details about the included resource that pertain specifically to how that resource is used in that playlist.\n\nYouTube uses playlists to identify special collections of videos for a channel, such as: \n- uploaded videos \n- favorite videos \n- positively rated (liked) videos \n- watch history \n- watch later To be more specific, these lists are associated with a channel, which is a collection of a person, group, or company's videos, playlists, and other YouTube information.\n\nYou can retrieve the playlist IDs for each of these lists from the channel resource for a given channel. You can then use the playlistItems.list method to retrieve any of those lists. You can also add or remove items from those lists by calling the playlistItems.insert and playlistItems.delete methods. For example, if a user gives a positive rating to a video, you would insert that video into the liked videos playlist for that user's channel.", + "properties": { + "contentDetails": { + "$ref": "PlaylistItemContentDetails", + "description": "The contentDetails object is included in the resource if the included item is a YouTube video. The object contains additional information about the video." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the playlist item." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistItem\".", + "default": "youtube#playlistItem" + }, + "snippet": { + "$ref": "PlaylistItemSnippet", + "description": "The snippet object contains basic details about the playlist item, such as its title and position in the playlist." + }, + "status": { + "$ref": "PlaylistItemStatus", + "description": "The status object contains information about the playlist item's privacy status." + } + } + }, + "PlaylistItemContentDetails": { + "id": "PlaylistItemContentDetails", + "type": "object", + "properties": { + "endAt": { + "type": "string", + "description": "The time, measured in seconds from the start of the video, when the video should stop playing. (The playlist owner can specify the times when the video should start and stop playing when the video is played in the context of the playlist.) By default, assume that the video.endTime is the end of the video." + }, + "note": { + "type": "string", + "description": "A user-generated note for this item." + }, + "startAt": { + "type": "string", + "description": "The time, measured in seconds from the start of the video, when the video should start playing. (The playlist owner can specify the times when the video should start and stop playing when the video is played in the context of the playlist.) The default value is 0." + }, + "videoId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify a video. To retrieve the video resource, set the id query parameter to this value in your API request." + } + } + }, + "PlaylistItemListResponse": { + "id": "PlaylistItemListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of playlist items that match the request criteria.", + "items": { + "$ref": "PlaylistItem" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistItemListResponse\".", + "default": "youtube#playlistItemListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "PlaylistItemSnippet": { + "id": "PlaylistItemSnippet", + "type": "object", + "description": "Basic details about a playlist, including title, description and thumbnails.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the user that added the item to the playlist." + }, + "channelTitle": { + "type": "string", + "description": "Channel title for the channel that the playlist item belongs to." + }, + "description": { + "type": "string", + "description": "The item's description." + }, + "playlistId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the playlist that the playlist item is in.", + "annotations": { + "required": [ + "youtube.playlistItems.insert", + "youtube.playlistItems.update" + ] + } + }, + "position": { + "type": "integer", + "description": "The order in which the item appears in the playlist. The value uses a zero-based index, so the first item has a position of 0, the second item has a position of 1, and so forth.", + "format": "uint32" + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the item was added to the playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "resourceId": { + "$ref": "ResourceId", + "description": "The id object contains information that can be used to uniquely identify the resource that is included in the playlist as the playlist item.", + "annotations": { + "required": [ + "youtube.playlistItems.insert", + "youtube.playlistItems.update" + ] + } + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the playlist item. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The item's title." + } + } + }, + "PlaylistItemStatus": { + "id": "PlaylistItemStatus", + "type": "object", + "description": "Information about the playlist item's privacy status.", + "properties": { + "privacyStatus": { + "type": "string", + "description": "This resource's privacy status.", + "enum": [ + "private", + "public", + "unlisted" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "PlaylistListResponse": { + "id": "PlaylistListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of playlists that match the request criteria.", + "items": { + "$ref": "Playlist" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#playlistListResponse\".", + "default": "youtube#playlistListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "PlaylistPlayer": { + "id": "PlaylistPlayer", + "type": "object", + "properties": { + "embedHtml": { + "type": "string", + "description": "An \u003ciframe\u003e tag that embeds a player that will play the playlist." + } + } + }, + "PlaylistSnippet": { + "id": "PlaylistSnippet", + "type": "object", + "description": "Basic details about a playlist, including title, description and thumbnails.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel that published the playlist." + }, + "channelTitle": { + "type": "string", + "description": "The channel title of the channel that the video belongs to." + }, + "description": { + "type": "string", + "description": "The playlist's description." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the playlist was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "tags": { + "type": "array", + "description": "Keyword tags associated with the playlist.", + "items": { + "type": "string" + } + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the playlist. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The playlist's title.", + "annotations": { + "required": [ + "youtube.playlists.insert", + "youtube.playlists.update" + ] + } + } + } + }, + "PlaylistStatus": { + "id": "PlaylistStatus", + "type": "object", + "properties": { + "privacyStatus": { + "type": "string", + "description": "The playlist's privacy status.", + "enum": [ + "private", + "public", + "unlisted" + ], + "enumDescriptions": [ + "", + "", + "" + ] + } + } + }, + "PromotedItem": { + "id": "PromotedItem", + "type": "object", + "description": "Describes a single promoted item.", + "properties": { + "customMessage": { + "type": "string", + "description": "A custom message to display for this promotion. This field is currently ignored unless the promoted item is a website." + }, + "id": { + "$ref": "PromotedItemId", + "description": "Identifies the promoted item." + }, + "promotedByContentOwner": { + "type": "boolean", + "description": "If true, the content owner's name will be used when displaying the promotion. This field can only be set when the update is made on behalf of the content owner." + }, + "timing": { + "$ref": "InvideoTiming", + "description": "The temporal position within the video where the promoted item will be displayed. If present, it overrides the default timing." + } + } + }, + "PromotedItemId": { + "id": "PromotedItemId", + "type": "object", + "description": "Describes a single promoted item id. It is a union of various possible types.", + "properties": { + "recentlyUploadedBy": { + "type": "string", + "description": "If type is recentUpload, this field identifies the channel from which to take the recent upload. If missing, the channel is assumed to be the same channel for which the invideoPromotion is set." + }, + "type": { + "type": "string", + "description": "Describes the type of the promoted item.", + "enum": [ + "recentUpload", + "video", + "website" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "videoId": { + "type": "string", + "description": "If the promoted item represents a video, this field represents the unique YouTube ID identifying it. This field will be present only if type has the value video." + }, + "websiteUrl": { + "type": "string", + "description": "If the promoted item represents a website, this field represents the url pointing to the website. This field will be present only if type has the value website." + } + } + }, + "PropertyValue": { + "id": "PropertyValue", + "type": "object", + "description": "A pair Property / Value.", + "properties": { + "property": { + "type": "string", + "description": "A property." + }, + "value": { + "type": "string", + "description": "The property's value." + } + } + }, + "ResourceId": { + "id": "ResourceId", + "type": "object", + "description": "A resource id is a generic reference that points to another YouTube resource.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the referred resource, if that resource is a channel. This property is only present if the resourceId.kind value is youtube#channel." + }, + "kind": { + "type": "string", + "description": "The type of the API resource." + }, + "playlistId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the referred resource, if that resource is a playlist. This property is only present if the resourceId.kind value is youtube#playlist." + }, + "videoId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the referred resource, if that resource is a video. This property is only present if the resourceId.kind value is youtube#video." + } + } + }, + "SearchListResponse": { + "id": "SearchListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of results that match the search criteria.", + "items": { + "$ref": "SearchResult" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#searchListResponse\".", + "default": "youtube#searchListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "SearchResult": { + "id": "SearchResult", + "type": "object", + "description": "A search result contains information about a YouTube video, channel, or playlist that matches the search parameters specified in an API request. While a search result points to a uniquely identifiable resource, like a video, it does not have its own persistent data.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "$ref": "ResourceId", + "description": "The id object contains information that can be used to uniquely identify the resource that matches the search request." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#searchResult\".", + "default": "youtube#searchResult" + }, + "snippet": { + "$ref": "SearchResultSnippet", + "description": "The snippet object contains basic details about a search result, such as its title or description. For example, if the search result is a video, then the title will be the video's title and the description will be the video's description." + } + } + }, + "SearchResultSnippet": { + "id": "SearchResultSnippet", + "type": "object", + "description": "Basic details about a search result, including title, description and thumbnails of the item referenced by the search result.", + "properties": { + "channelId": { + "type": "string", + "description": "The value that YouTube uses to uniquely identify the channel that published the resource that the search result identifies." + }, + "channelTitle": { + "type": "string", + "description": "The title of the channel that published the resource that the search result identifies." + }, + "description": { + "type": "string", + "description": "A description of the search result." + }, + "liveBroadcastContent": { + "type": "string", + "description": "It indicates if the resource (video or channel) has upcoming/active live broadcast content. Or it's \"none\" if there is not any upcoming/active live broadcasts.", + "enum": [ + "live", + "none", + "upcoming" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "publishedAt": { + "type": "string", + "description": "The creation date and time of the resource that the search result identifies. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the search result. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The title of the search result." + } + } + }, + "Subscription": { + "id": "Subscription", + "type": "object", + "description": "A subscription resource contains information about a YouTube user subscription. A subscription notifies a user when new videos are added to a channel or when another user takes one of several actions on YouTube, such as uploading a video, rating a video, or commenting on a video.", + "properties": { + "contentDetails": { + "$ref": "SubscriptionContentDetails", + "description": "The contentDetails object contains basic statistics about the subscription." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the subscription." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#subscription\".", + "default": "youtube#subscription" + }, + "snippet": { + "$ref": "SubscriptionSnippet", + "description": "The snippet object contains basic details about the subscription, including its title and the channel that the user subscribed to." + }, + "subscriberSnippet": { + "$ref": "SubscriptionSubscriberSnippet", + "description": "The subscriberSnippet object contains basic details about the sbuscriber." + } + } + }, + "SubscriptionContentDetails": { + "id": "SubscriptionContentDetails", + "type": "object", + "description": "Details about the content to witch a subscription refers.", + "properties": { + "activityType": { + "type": "string", + "description": "The type of activity this subscription is for (only uploads, everything).", + "enum": [ + "all", + "uploads" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "newItemCount": { + "type": "integer", + "description": "The number of new items in the subscription since its content was last read.", + "format": "uint32" + }, + "totalItemCount": { + "type": "integer", + "description": "The approximate number of items that the subscription points to.", + "format": "uint32" + } + } + }, + "SubscriptionListResponse": { + "id": "SubscriptionListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of subscriptions that match the request criteria.", + "items": { + "$ref": "Subscription" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#subscriptionListResponse\".", + "default": "youtube#subscriptionListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "SubscriptionSnippet": { + "id": "SubscriptionSnippet", + "type": "object", + "description": "Basic details about a subscription, including title, description and thumbnails of the subscribed item.", + "properties": { + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the subscriber's channel." + }, + "channelTitle": { + "type": "string", + "description": "Channel title for the channel that the subscription belongs to." + }, + "description": { + "type": "string", + "description": "The subscription's details." + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the subscription was created. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "resourceId": { + "$ref": "ResourceId", + "description": "The id object contains information about the channel that the user subscribed to.", + "annotations": { + "required": [ + "youtube.subscriptions.insert" + ] + } + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The subscription's title." + } + } + }, + "SubscriptionSubscriberSnippet": { + "id": "SubscriptionSubscriberSnippet", + "type": "object", + "description": "Basic details about a subscription's subscriber including title, description, channel ID and thumbnails.", + "properties": { + "channelId": { + "type": "string", + "description": "The channel ID of the subscriber." + }, + "description": { + "type": "string", + "description": "The description of the subscriber." + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "Thumbnails for this subscriber." + }, + "title": { + "type": "string", + "description": "The title of the subscriber." + } + } + }, + "Thumbnail": { + "id": "Thumbnail", + "type": "object", + "description": "A thumbnail is an image representing a YouTube resource.", + "properties": { + "height": { + "type": "integer", + "description": "(Optional) Height of the thumbnail image.", + "format": "uint32" + }, + "url": { + "type": "string", + "description": "The thumbnail image's URL." + }, + "width": { + "type": "integer", + "description": "(Optional) Width of the thumbnail image.", + "format": "uint32" + } + } + }, + "ThumbnailDetails": { + "id": "ThumbnailDetails", + "type": "object", + "description": "Internal representation of thumbnails for a YouTube resource.", + "properties": { + "default": { + "$ref": "Thumbnail", + "description": "The default image for this resource." + }, + "high": { + "$ref": "Thumbnail", + "description": "The high quality image for this resource." + }, + "maxres": { + "$ref": "Thumbnail", + "description": "The maximum resolution quality image for this resource." + }, + "medium": { + "$ref": "Thumbnail", + "description": "The medium quality image for this resource." + }, + "standard": { + "$ref": "Thumbnail", + "description": "The standard quality image for this resource." + } + } + }, + "ThumbnailSetResponse": { + "id": "ThumbnailSetResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of thumbnails.", + "items": { + "$ref": "ThumbnailDetails" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#thumbnailSetResponse\".", + "default": "youtube#thumbnailSetResponse" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "TokenPagination": { + "id": "TokenPagination", + "type": "object", + "description": "Stub token pagination template to suppress results." + }, + "Video": { + "id": "Video", + "type": "object", + "description": "A video resource represents a YouTube video.", + "properties": { + "ageGating": { + "$ref": "VideoAgeGating", + "description": "Age restriction details related to a video." + }, + "contentDetails": { + "$ref": "VideoContentDetails", + "description": "The contentDetails object contains information about the video content, including the length of the video and its aspect ratio." + }, + "conversionPings": { + "$ref": "VideoConversionPings", + "description": "The conversionPings object encapsulates information about url pings that need to be respected by the App in different video contexts." + }, + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "fileDetails": { + "$ref": "VideoFileDetails", + "description": "The fileDetails object encapsulates information about the video file that was uploaded to YouTube, including the file's resolution, duration, audio and video codecs, stream bitrates, and more. This data can only be retrieved by the video owner." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the video.", + "annotations": { + "required": [ + "youtube.videos.update" + ] + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#video\".", + "default": "youtube#video" + }, + "liveStreamingDetails": { + "$ref": "VideoLiveStreamingDetails", + "description": "The liveStreamingDetails object contains metadata about a live video broadcast. The object will only be present in a video resource if the video is an upcoming, live, or completed live broadcast." + }, + "monetizationDetails": { + "$ref": "VideoMonetizationDetails", + "description": "The monetizationDetails object encapsulates information about the monetization status of the video." + }, + "player": { + "$ref": "VideoPlayer", + "description": "The player object contains information that you would use to play the video in an embedded player." + }, + "processingDetails": { + "$ref": "VideoProcessingDetails", + "description": "The processingProgress object encapsulates information about YouTube's progress in processing the uploaded video file. The properties in the object identify the current processing status and an estimate of the time remaining until YouTube finishes processing the video. This part also indicates whether different types of data or content, such as file details or thumbnail images, are available for the video.\n\nThe processingProgress object is designed to be polled so that the video uploaded can track the progress that YouTube has made in processing the uploaded video file. This data can only be retrieved by the video owner." + }, + "projectDetails": { + "$ref": "VideoProjectDetails", + "description": "The projectDetails object contains information about the project specific video metadata." + }, + "recordingDetails": { + "$ref": "VideoRecordingDetails", + "description": "The recordingDetails object encapsulates information about the location, date and address where the video was recorded." + }, + "snippet": { + "$ref": "VideoSnippet", + "description": "The snippet object contains basic details about the video, such as its title, description, and category." + }, + "statistics": { + "$ref": "VideoStatistics", + "description": "The statistics object contains statistics about the video." + }, + "status": { + "$ref": "VideoStatus", + "description": "The status object contains information about the video's uploading, processing, and privacy statuses." + }, + "suggestions": { + "$ref": "VideoSuggestions", + "description": "The suggestions object encapsulates suggestions that identify opportunities to improve the video quality or the metadata for the uploaded video. This data can only be retrieved by the video owner." + }, + "topicDetails": { + "$ref": "VideoTopicDetails", + "description": "The topicDetails object encapsulates information about Freebase topics associated with the video." + } + } + }, + "VideoAgeGating": { + "id": "VideoAgeGating", + "type": "object", + "properties": { + "alcoholContent": { + "type": "boolean", + "description": "Indicates whether or not the video has alcoholic beverage content. Only users of legal purchasing age in a particular country, as identified by ICAP, can view the content." + }, + "restricted": { + "type": "boolean", + "description": "Age-restricted trailers. For redband trailers and adult-rated video-games. Only users aged 18+ can view the content. The the field is true the content is restricted to viewers aged 18+. Otherwise The field won't be present." + }, + "videoGameRating": { + "type": "string", + "description": "Video game rating, if any.", + "enum": [ + "anyone", + "m15Plus", + "m16Plus", + "m17Plus" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + } + } + }, + "VideoCategory": { + "id": "VideoCategory", + "type": "object", + "description": "A videoCategory resource identifies a category that has been or could be associated with uploaded videos.", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "id": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the video category." + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoCategory\".", + "default": "youtube#videoCategory" + }, + "snippet": { + "$ref": "VideoCategorySnippet", + "description": "The snippet object contains basic details about the video category, including its title." + } + } + }, + "VideoCategoryListResponse": { + "id": "VideoCategoryListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of video categories that can be associated with YouTube videos. In this map, the video category ID is the map key, and its value is the corresponding videoCategory resource.", + "items": { + "$ref": "VideoCategory" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoCategoryListResponse\".", + "default": "youtube#videoCategoryListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "VideoCategorySnippet": { + "id": "VideoCategorySnippet", + "type": "object", + "description": "Basic details about a video category, such as its localized title.", + "properties": { + "assignable": { + "type": "boolean" + }, + "channelId": { + "type": "string", + "description": "The YouTube channel that created the video category.", + "default": "UCBR8-60-B28hp2BmDPdntcQ" + }, + "title": { + "type": "string", + "description": "The video category's title." + } + } + }, + "VideoContentDetails": { + "id": "VideoContentDetails", + "type": "object", + "description": "Details about the content of a YouTube Video.", + "properties": { + "caption": { + "type": "string", + "description": "The value of captions indicates whether the video has captions or not.", + "enum": [ + "false", + "true" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "contentRating": { + "$ref": "ContentRating", + "description": "Specifies the ratings that the video received under various rating schemes." + }, + "countryRestriction": { + "$ref": "AccessPolicy", + "description": "The countryRestriction object contains information about the countries where a video is (or is not) viewable." + }, + "definition": { + "type": "string", + "description": "The value of definition indicates whether the video is available in high definition or only in standard definition.", + "enum": [ + "hd", + "sd" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "dimension": { + "type": "string", + "description": "The value of dimension indicates whether the video is available in 3D or in 2D." + }, + "duration": { + "type": "string", + "description": "The length of the video. The tag value is an ISO 8601 duration in the format PT#M#S, in which the letters PT indicate that the value specifies a period of time, and the letters M and S refer to length in minutes and seconds, respectively. The # characters preceding the M and S letters are both integers that specify the number of minutes (or seconds) of the video. For example, a value of PT15M51S indicates that the video is 15 minutes and 51 seconds long." + }, + "licensedContent": { + "type": "boolean", + "description": "The value of is_license_content indicates whether the video is licensed content." + }, + "regionRestriction": { + "$ref": "VideoContentDetailsRegionRestriction", + "description": "The regionRestriction object contains information about the countries where a video is (or is not) viewable. The object will contain either the contentDetails.regionRestriction.allowed property or the contentDetails.regionRestriction.blocked property." + } + } + }, + "VideoContentDetailsRegionRestriction": { + "id": "VideoContentDetailsRegionRestriction", + "type": "object", + "description": "DEPRECATED Region restriction of the video.", + "properties": { + "allowed": { + "type": "array", + "description": "A list of region codes that identify countries where the video is viewable. If this property is present and a country is not listed in its value, then the video is blocked from appearing in that country. If this property is present and contains an empty list, the video is blocked in all countries.", + "items": { + "type": "string" + } + }, + "blocked": { + "type": "array", + "description": "A list of region codes that identify countries where the video is blocked. If this property is present and a country is not listed in its value, then the video is viewable in that country. If this property is present and contains an empty list, the video is viewable in all countries.", + "items": { + "type": "string" + } + } + } + }, + "VideoConversionPing": { + "id": "VideoConversionPing", + "type": "object", + "properties": { + "context": { + "type": "string", + "description": "Defines the context of the ping.", + "enum": [ + "comment", + "dislike", + "like", + "share" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "conversionUrl": { + "type": "string", + "description": "The url (without the schema) that the app shall send the ping to. It's at caller's descretion to decide which schema to use (http vs https) Example of a returned url: //googleads.g.doubleclick.net/pagead/ viewthroughconversion/962985656/?data=path%3DtHe_path%3Btype%3D like%3Butuid%3DGISQtTNGYqaYl4sKxoVvKA%3Bytvid%3DUrIaJUvIQDg&labe=default The caller must append biscotti authentication (ms param in case of mobile, for example) to this ping." + } + } + }, + "VideoConversionPings": { + "id": "VideoConversionPings", + "type": "object", + "properties": { + "pings": { + "type": "array", + "description": "Pings that the app shall fire for a video (authenticated by biscotti cookie). Each ping has a context, in which the app must fire the ping, and a url identifying the ping.", + "items": { + "$ref": "VideoConversionPing" + } + } + } + }, + "VideoFileDetails": { + "id": "VideoFileDetails", + "type": "object", + "description": "Describes original video file properties, including technical details about audio and video streams, but also metadata information like content length, digitization time, or geotagging information.", + "properties": { + "audioStreams": { + "type": "array", + "description": "A list of audio streams contained in the uploaded video file. Each item in the list contains detailed metadata about an audio stream.", + "items": { + "$ref": "VideoFileDetailsAudioStream" + } + }, + "bitrateBps": { + "type": "string", + "description": "The uploaded video file's combined (video and audio) bitrate in bits per second.", + "format": "uint64" + }, + "container": { + "type": "string", + "description": "The uploaded video file's container format." + }, + "creationTime": { + "type": "string", + "description": "The date and time when the uploaded video file was created. The value is specified in ISO 8601 format. Currently, the following ISO 8601 formats are supported: \n- Date only: YYYY-MM-DD \n- Naive time: YYYY-MM-DDTHH:MM:SS \n- Time with timezone: YYYY-MM-DDTHH:MM:SS+HH:MM" + }, + "durationMs": { + "type": "string", + "description": "The length of the uploaded video in milliseconds.", + "format": "uint64" + }, + "fileName": { + "type": "string", + "description": "The uploaded file's name. This field is present whether a video file or another type of file was uploaded." + }, + "fileSize": { + "type": "string", + "description": "The uploaded file's size in bytes. This field is present whether a video file or another type of file was uploaded.", + "format": "uint64" + }, + "fileType": { + "type": "string", + "description": "The uploaded file's type as detected by YouTube's video processing engine. Currently, YouTube only processes video files, but this field is present whether a video file or another type of file was uploaded.", + "enum": [ + "archive", + "audio", + "document", + "image", + "other", + "project", + "video" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + }, + "recordingLocation": { + "$ref": "GeoPoint", + "description": "Geographic coordinates that identify the place where the uploaded video was recorded. Coordinates are defined using WGS 84." + }, + "videoStreams": { + "type": "array", + "description": "A list of video streams contained in the uploaded video file. Each item in the list contains detailed metadata about a video stream.", + "items": { + "$ref": "VideoFileDetailsVideoStream" + } + } + } + }, + "VideoFileDetailsAudioStream": { + "id": "VideoFileDetailsAudioStream", + "type": "object", + "description": "Information about an audio stream.", + "properties": { + "bitrateBps": { + "type": "string", + "description": "The audio stream's bitrate, in bits per second.", + "format": "uint64" + }, + "channelCount": { + "type": "integer", + "description": "The number of audio channels that the stream contains.", + "format": "uint32" + }, + "codec": { + "type": "string", + "description": "The audio codec that the stream uses." + }, + "vendor": { + "type": "string", + "description": "A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code." + } + } + }, + "VideoFileDetailsVideoStream": { + "id": "VideoFileDetailsVideoStream", + "type": "object", + "description": "Information about a video stream.", + "properties": { + "aspectRatio": { + "type": "number", + "description": "The video content's display aspect ratio, which specifies the aspect ratio in which the video should be displayed.", + "format": "double" + }, + "bitrateBps": { + "type": "string", + "description": "The video stream's bitrate, in bits per second.", + "format": "uint64" + }, + "codec": { + "type": "string", + "description": "The video codec that the stream uses." + }, + "frameRateFps": { + "type": "number", + "description": "The video stream's frame rate, in frames per second.", + "format": "double" + }, + "heightPixels": { + "type": "integer", + "description": "The encoded video content's height in pixels.", + "format": "uint32" + }, + "rotation": { + "type": "string", + "description": "The amount that YouTube needs to rotate the original source content to properly display the video.", + "enum": [ + "clockwise", + "counterClockwise", + "none", + "other", + "upsideDown" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + }, + "vendor": { + "type": "string", + "description": "A value that uniquely identifies a video vendor. Typically, the value is a four-letter vendor code." + }, + "widthPixels": { + "type": "integer", + "description": "The encoded video content's width in pixels. You can calculate the video's encoding aspect ratio as width_pixels / height_pixels.", + "format": "uint32" + } + } + }, + "VideoGetRatingResponse": { + "id": "VideoGetRatingResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "items": { + "type": "array", + "description": "A list of ratings that match the request criteria.", + "items": { + "$ref": "VideoRating" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoGetRatingResponse\".", + "default": "youtube#videoGetRatingResponse" + } + } + }, + "VideoListResponse": { + "id": "VideoListResponse", + "type": "object", + "properties": { + "etag": { + "type": "string", + "description": "Etag of this resource." + }, + "eventId": { + "type": "string", + "description": "Serialized EventId of the request which produced this response." + }, + "items": { + "type": "array", + "description": "A list of videos that match the request criteria.", + "items": { + "$ref": "Video" + } + }, + "kind": { + "type": "string", + "description": "Identifies what kind of resource this is. Value: the fixed string \"youtube#videoListResponse\".", + "default": "youtube#videoListResponse" + }, + "nextPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the next page in the result set." + }, + "pageInfo": { + "$ref": "PageInfo" + }, + "prevPageToken": { + "type": "string", + "description": "The token that can be used as the value of the pageToken parameter to retrieve the previous page in the result set." + }, + "tokenPagination": { + "$ref": "TokenPagination" + }, + "visitorId": { + "type": "string", + "description": "The visitorId identifies the visitor." + } + } + }, + "VideoLiveStreamingDetails": { + "id": "VideoLiveStreamingDetails", + "type": "object", + "description": "Details about the live streaming metadata.", + "properties": { + "actualEndTime": { + "type": "string", + "description": "The time that the broadcast actually ended. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This value will not be available until the broadcast is over.", + "format": "date-time" + }, + "actualStartTime": { + "type": "string", + "description": "The time that the broadcast actually started. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. This value will not be available until the broadcast begins.", + "format": "date-time" + }, + "concurrentViewers": { + "type": "string", + "description": "The number of viewers currently watching the broadcast. The property and its value will be present if the broadcast has current viewers and the broadcast owner has not hidden the viewcount for the video. Note that YouTube stops tracking the number of concurrent viewers for a broadcast when the broadcast ends. So, this property would not identify the number of viewers watching an archived video of a live broadcast that already ended.", + "format": "uint64" + }, + "scheduledEndTime": { + "type": "string", + "description": "The time that the broadcast is scheduled to end. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. If the value is empty or the property is not present, then the broadcast is scheduled to continue indefinitely.", + "format": "date-time" + }, + "scheduledStartTime": { + "type": "string", + "description": "The time that the broadcast is scheduled to begin. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + } + } + }, + "VideoMonetizationDetails": { + "id": "VideoMonetizationDetails", + "type": "object", + "description": "Details about monetization of a YouTube Video.", + "properties": { + "access": { + "$ref": "AccessPolicy", + "description": "The value of access indicates whether the video can be monetized or not." + } + } + }, + "VideoPlayer": { + "id": "VideoPlayer", + "type": "object", + "description": "Player to be used for a video playback.", + "properties": { + "embedHtml": { + "type": "string", + "description": "An \u003ciframe\u003e tag that embeds a player that will play the video." + } + } + }, + "VideoProcessingDetails": { + "id": "VideoProcessingDetails", + "type": "object", + "description": "Describes processing status and progress and availability of some other Video resource parts.", + "properties": { + "editorSuggestionsAvailability": { + "type": "string", + "description": "This value indicates whether video editing suggestions, which might improve video quality or the playback experience, are available for the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request." + }, + "fileDetailsAvailability": { + "type": "string", + "description": "This value indicates whether file details are available for the uploaded video. You can retrieve a video's file details by requesting the fileDetails part in your videos.list() request." + }, + "processingFailureReason": { + "type": "string", + "description": "The reason that YouTube failed to process the video. This property will only have a value if the processingStatus property's value is failed.", + "enum": [ + "other", + "streamingFailed", + "transcodeFailed", + "uploadFailed" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "processingIssuesAvailability": { + "type": "string", + "description": "This value indicates whether the video processing engine has generated suggestions that might improve YouTube's ability to process the the video, warnings that explain video processing problems, or errors that cause video processing problems. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request." + }, + "processingProgress": { + "$ref": "VideoProcessingDetailsProcessingProgress", + "description": "The processingProgress object contains information about the progress YouTube has made in processing the video. The values are really only relevant if the video's processing status is processing." + }, + "processingStatus": { + "type": "string", + "description": "The video's processing status. This value indicates whether YouTube was able to process the video or if the video is still being processed.", + "enum": [ + "failed", + "processing", + "succeeded", + "terminated" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "tagSuggestionsAvailability": { + "type": "string", + "description": "This value indicates whether keyword (tag) suggestions are available for the video. Tags can be added to a video's metadata to make it easier for other users to find the video. You can retrieve these suggestions by requesting the suggestions part in your videos.list() request." + }, + "thumbnailsAvailability": { + "type": "string", + "description": "This value indicates whether thumbnail images have been generated for the video." + } + } + }, + "VideoProcessingDetailsProcessingProgress": { + "id": "VideoProcessingDetailsProcessingProgress", + "type": "object", + "description": "Video processing progress and completion time estimate.", + "properties": { + "partsProcessed": { + "type": "string", + "description": "The number of parts of the video that YouTube has already processed. You can estimate the percentage of the video that YouTube has already processed by calculating:\n100 * parts_processed / parts_total\n\nNote that since the estimated number of parts could increase without a corresponding increase in the number of parts that have already been processed, it is possible that the calculated progress could periodically decrease while YouTube processes a video.", + "format": "uint64" + }, + "partsTotal": { + "type": "string", + "description": "An estimate of the total number of parts that need to be processed for the video. The number may be updated with more precise estimates while YouTube processes the video.", + "format": "uint64" + }, + "timeLeftMs": { + "type": "string", + "description": "An estimate of the amount of time, in millseconds, that YouTube needs to finish processing the video.", + "format": "uint64" + } + } + }, + "VideoProjectDetails": { + "id": "VideoProjectDetails", + "type": "object", + "description": "Project specific details about the content of a YouTube Video.", + "properties": { + "tags": { + "type": "array", + "description": "A list of project tags associated with the video during the upload.", + "items": { + "type": "string" + } + } + } + }, + "VideoRating": { + "id": "VideoRating", + "type": "object", + "properties": { + "rating": { + "type": "string", + "enum": [ + "dislike", + "like", + "none", + "unspecified" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + }, + "videoId": { + "type": "string" + } + } + }, + "VideoRecordingDetails": { + "id": "VideoRecordingDetails", + "type": "object", + "description": "Recording information associated with the video.", + "properties": { + "location": { + "$ref": "GeoPoint", + "description": "The geolocation information associated with the video." + }, + "locationDescription": { + "type": "string", + "description": "The text description of the location where the video was recorded." + }, + "recordingDate": { + "type": "string", + "description": "The date and time when the video was recorded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + } + } + }, + "VideoSnippet": { + "id": "VideoSnippet", + "type": "object", + "description": "Basic details about a video, including title, description, uploader, thumbnails and category.", + "properties": { + "categoryId": { + "type": "string", + "description": "The YouTube video category associated with the video." + }, + "channelId": { + "type": "string", + "description": "The ID that YouTube uses to uniquely identify the channel that the video was uploaded to." + }, + "channelTitle": { + "type": "string", + "description": "Channel title for the channel that the video belongs to." + }, + "description": { + "type": "string", + "description": "The video's description." + }, + "liveBroadcastContent": { + "type": "string", + "description": "Indicates if the video is an upcoming/active live broadcast. Or it's \"none\" if the video is not an upcoming/active live broadcast.", + "enum": [ + "live", + "none", + "upcoming" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "publishedAt": { + "type": "string", + "description": "The date and time that the video was uploaded. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "tags": { + "type": "array", + "description": "A list of keyword tags associated with the video. Tags may contain spaces. This field is only visible to the video's uploader.", + "items": { + "type": "string" + } + }, + "thumbnails": { + "$ref": "ThumbnailDetails", + "description": "A map of thumbnail images associated with the video. For each object in the map, the key is the name of the thumbnail image, and the value is an object that contains other information about the thumbnail." + }, + "title": { + "type": "string", + "description": "The video's title." + } + } + }, + "VideoStatistics": { + "id": "VideoStatistics", + "type": "object", + "description": "Statistics about the video, such as the number of times the video was viewed or liked.", + "properties": { + "commentCount": { + "type": "string", + "description": "The number of comments for the video.", + "format": "uint64" + }, + "dislikeCount": { + "type": "string", + "description": "The number of users who have indicated that they disliked the video by giving it a negative rating.", + "format": "uint64" + }, + "favoriteCount": { + "type": "string", + "description": "The number of users who currently have the video marked as a favorite video.", + "format": "uint64" + }, + "likeCount": { + "type": "string", + "description": "The number of users who have indicated that they liked the video by giving it a positive rating.", + "format": "uint64" + }, + "viewCount": { + "type": "string", + "description": "The number of times the video has been viewed.", + "format": "uint64" + } + } + }, + "VideoStatus": { + "id": "VideoStatus", + "type": "object", + "description": "Basic details about a video category, such as its localized title.", + "properties": { + "embeddable": { + "type": "boolean", + "description": "This value indicates if the video can be embedded on another website." + }, + "failureReason": { + "type": "string", + "description": "This value explains why a video failed to upload. This property is only present if the uploadStatus property indicates that the upload failed.", + "enum": [ + "codec", + "conversion", + "emptyFile", + "invalidFile", + "tooSmall", + "uploadAborted" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + }, + "license": { + "type": "string", + "description": "The video's license.", + "enum": [ + "creativeCommon", + "youtube" + ], + "enumDescriptions": [ + "", + "" + ] + }, + "privacyStatus": { + "type": "string", + "description": "The video's privacy status.", + "enum": [ + "private", + "public", + "unlisted" + ], + "enumDescriptions": [ + "", + "", + "" + ] + }, + "publicStatsViewable": { + "type": "boolean", + "description": "This value indicates if the extended video statistics on the watch page can be viewed by everyone. Note that the view count, likes, etc will still be visible if this is disabled." + }, + "publishAt": { + "type": "string", + "description": "The date and time when the video is scheduled to publish. It can be set only if the privacy status of the video is private. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time" + }, + "rejectionReason": { + "type": "string", + "description": "This value explains why YouTube rejected an uploaded video. This property is only present if the uploadStatus property indicates that the upload was rejected.", + "enum": [ + "claim", + "copyright", + "duplicate", + "inappropriate", + "length", + "termsOfUse", + "trademark", + "uploaderAccountClosed", + "uploaderAccountSuspended" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + "uploadStatus": { + "type": "string", + "description": "The status of the uploaded video.", + "enum": [ + "deleted", + "failed", + "processed", + "rejected", + "uploaded" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "" + ] + } + } + }, + "VideoSuggestions": { + "id": "VideoSuggestions", + "type": "object", + "description": "Specifies suggestions on how to improve video content, including encoding hints, tag suggestions, and editor suggestions.", + "properties": { + "editorSuggestions": { + "type": "array", + "description": "A list of video editing operations that might improve the video quality or playback experience of the uploaded video.", + "items": { + "type": "string", + "enum": [ + "audioQuietAudioSwap", + "videoAutoLevels", + "videoCrop", + "videoStabilize" + ], + "enumDescriptions": [ + "", + "", + "", + "" + ] + } + }, + "processingErrors": { + "type": "array", + "description": "A list of errors that will prevent YouTube from successfully processing the uploaded video video. These errors indicate that, regardless of the video's current processing status, eventually, that status will almost certainly be failed.", + "items": { + "type": "string", + "enum": [ + "archiveFile", + "audioFile", + "docFile", + "imageFile", + "notAVideoFile", + "projectFile" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "" + ] + } + }, + "processingHints": { + "type": "array", + "description": "A list of suggestions that may improve YouTube's ability to process the video.", + "items": { + "type": "string", + "enum": [ + "nonStreamableMov", + "sendBestQualityVideo" + ], + "enumDescriptions": [ + "", + "" + ] + } + }, + "processingWarnings": { + "type": "array", + "description": "A list of reasons why YouTube may have difficulty transcoding the uploaded video or that might result in an erroneous transcoding. These warnings are generated before YouTube actually processes the uploaded video file. In addition, they identify issues that are unlikely to cause the video processing to fail but that might cause problems such as sync issues, video artifacts, or a missing audio track.", + "items": { + "type": "string", + "enum": [ + "hasEditlist", + "inconsistentResolution", + "problematicAudioCodec", + "problematicVideoCodec", + "unknownAudioCodec", + "unknownContainer", + "unknownVideoCodec" + ], + "enumDescriptions": [ + "", + "", + "", + "", + "", + "", + "" + ] + } + }, + "tagSuggestions": { + "type": "array", + "description": "A list of keyword tags that could be added to the video's metadata to increase the likelihood that users will locate your video when searching or browsing on YouTube.", + "items": { + "$ref": "VideoSuggestionsTagSuggestion" + } + } + } + }, + "VideoSuggestionsTagSuggestion": { + "id": "VideoSuggestionsTagSuggestion", + "type": "object", + "description": "A single tag suggestion with it's relevance information.", + "properties": { + "categoryRestricts": { + "type": "array", + "description": "A set of video categories for which the tag is relevant. You can use this information to display appropriate tag suggestions based on the video category that the video uploader associates with the video. By default, tag suggestions are relevant for all categories if there are no restricts defined for the keyword.", + "items": { + "type": "string" + } + }, + "tag": { + "type": "string", + "description": "The keyword tag suggested for the video." + } + } + }, + "VideoTopicDetails": { + "id": "VideoTopicDetails", + "type": "object", + "description": "Freebase topic information related to the video.", + "properties": { + "relevantTopicIds": { + "type": "array", + "description": "Similar to topic_id, except that these topics are merely relevant to the video. These are topics that may be mentioned in, or appear in the video. You can retrieve information about each topic using Freebase Topic API.", + "items": { + "type": "string" + } + }, + "topicIds": { + "type": "array", + "description": "A list of Freebase topic IDs that are centrally associated with the video. These are topics that are centrally featured in the video, and it can be said that the video is mainly about each of these. You can retrieve information about each topic using the Freebase Topic API.", + "items": { + "type": "string" + } + } + } + }, + "WatchSettings": { + "id": "WatchSettings", + "type": "object", + "description": "Branding properties for the watch.", + "properties": { + "backgroundColor": { + "type": "string", + "description": "The text color for the video watch page's branded area." + }, + "featuredPlaylistId": { + "type": "string", + "description": "An ID that uniquely identifies a playlist that displays next to the video player." + }, + "textColor": { + "type": "string", + "description": "The background color for the video watch page's branded area." + } + } + } + }, + "resources": { + "activities": { + "methods": { + "insert": { + "id": "youtube.activities.insert", + "path": "activities", + "httpMethod": "POST", + "description": "Posts a bulletin for a specific channel. (The user submitting the request must be authorized to act on the channel's behalf.)\n\nNote: Even though an activity resource can contain information about actions like a user rating a video or marking a video as a favorite, you need to use other API methods to generate those activity resources. For example, you would use the API's videos.rate() method to rate a video and the playlistItems.insert() method to mark a video as a favorite.", + "parameters": { + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and contentDetails.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Activity" + }, + "response": { + "$ref": "Activity" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "list": { + "id": "youtube.activities.list", + "path": "activities", + "httpMethod": "GET", + "description": "Returns a list of channel activity events that match the request criteria. For example, you can retrieve events associated with a particular channel, events associated with the user's subscriptions and Google+ friends, or the YouTube home page feed, which is customized for each user.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter specifies a unique YouTube channel ID. The API will then return a list of that channel's activities.", + "location": "query" + }, + "home": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve the activity feed that displays on the YouTube home page for the currently authenticated user.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve a feed of the authenticated user's activities.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more activity resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a activity resource, the snippet property contains other properties that identify the type of activity, a display title for the activity, and so forth. If you set part=snippet, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + }, + "publishedAfter": { + "type": "string", + "description": "The publishedAfter parameter specifies the earliest date and time that an activity could have occurred for that activity to be included in the API response. If the parameter value specifies a day, but not a time, then any activities that occurred that day will be included in the result set. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time", + "location": "query" + }, + "publishedBefore": { + "type": "string", + "description": "The publishedBefore parameter specifies the date and time before which an activity must have occurred for that activity to be included in the API response. If the parameter value specifies a day, but not a time, then any activities that occurred that day will be excluded from the result set. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format.", + "format": "date-time", + "location": "query" + }, + "regionCode": { + "type": "string", + "description": "The regionCode parameter instructs the API to return results for the specified country. The parameter value is an ISO 3166-1 alpha-2 country code. YouTube uses this value when the authorized user's previous activity on YouTube does not provide enough information to generate the activity feed.", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "ActivityListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly" + ] + } + } + }, + "channelBanners": { + "methods": { + "insert": { + "id": "youtube.channelBanners.insert", + "path": "channelBanners/insert", + "httpMethod": "POST", + "description": "Uploads a channel banner image to YouTube. This method represents the first two steps in a three-step process to update the banner image for a channel:\n\n- Call the channelBanners.insert method to upload the binary image data to YouTube. The image must have a 16:9 aspect ratio and be at least 2120x1192 pixels.\n- Extract the url property's value from the response that the API returns for step 1.\n- Call the channels.update method to update the channel's branding settings. Set the brandingSettings.image.bannerExternalUrl property's value to the URL obtained in step 2.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "request": { + "$ref": "ChannelBannerResource" + }, + "response": { + "$ref": "ChannelBannerResource" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.upload" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream", + "image/jpeg", + "image/png" + ], + "maxSize": "6MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/youtube/v3/channelBanners/insert" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/youtube/v3/channelBanners/insert" + } + } + } + } + } + }, + "channelSections": { + "methods": { + "delete": { + "id": "youtube.channelSections.delete", + "path": "channelSections", + "httpMethod": "DELETE", + "description": "Deletes a channelSection.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube channelSection ID for the resource that is being deleted. In a channelSection resource, the id property specifies the YouTube channelSection ID.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "insert": { + "id": "youtube.channelSections.insert", + "path": "channelSections", + "httpMethod": "POST", + "description": "Adds a channelSection for the authenticated user's channel.", + "parameters": { + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and contentDetails.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "ChannelSection" + }, + "response": { + "$ref": "ChannelSection" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "list": { + "id": "youtube.channelSections.list", + "path": "channelSections", + "httpMethod": "GET", + "description": "Returns channelSection resources that match the API request criteria.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter specifies a YouTube channel ID. The API will only return that channel's channelSections.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube channelSection ID(s) for the resource(s) that are being retrieved. In a channelSection resource, the id property specifies the YouTube channelSection ID.", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve a feed of the authenticated user's channelSections.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more channelSection resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channelSection resource, the snippet property contains other properties, such as a display title for the channelSection. If you set part=snippet, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "ChannelSectionListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "update": { + "id": "youtube.channelSections.update", + "path": "channelSections", + "httpMethod": "PUT", + "description": "Update a channelSection.", + "parameters": { + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and contentDetails.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "ChannelSection" + }, + "response": { + "$ref": "ChannelSection" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "channels": { + "methods": { + "list": { + "id": "youtube.channels.list", + "path": "channels", + "httpMethod": "GET", + "description": "Returns a collection of zero or more channel resources that match the request criteria.", + "parameters": { + "categoryId": { + "type": "string", + "description": "The categoryId parameter specifies a YouTube guide category, thereby requesting YouTube channels associated with that category.", + "location": "query" + }, + "forUsername": { + "type": "string", + "description": "The forUsername parameter specifies a YouTube username, thereby requesting the channel associated with that username.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube channel ID(s) for the resource(s) that are being retrieved. In a channel resource, the id property specifies the channel's YouTube channel ID.", + "location": "query" + }, + "managedByMe": { + "type": "boolean", + "description": "Set this parameter's value to true to instruct the API to only return channels managed by the content owner that the onBehalfOfContentOwner parameter specifies. The user must be authenticated as a CMS account linked to the specified content owner and onBehalfOfContentOwner must be provided.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "Set this parameter's value to true to instruct the API to only return channels owned by the authenticated user.", + "location": "query" + }, + "mySubscribers": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve a list of channels that subscribed to the authenticated user's channel.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more channel resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, statistics, topicDetails, and invideoPromotion.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a channel resource, the contentDetails property contains other properties, such as the uploads properties. As such, if you set part=contentDetails, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "ChannelListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner", + "https://www.googleapis.com/auth/youtubepartner-channel-audit" + ] + }, + "update": { + "id": "youtube.channels.update", + "path": "channels", + "httpMethod": "PUT", + "description": "Updates a channel's metadata.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are id and invideoPromotion.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Channel" + }, + "response": { + "$ref": "Channel" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "guideCategories": { + "methods": { + "list": { + "id": "youtube.guideCategories.list", + "path": "guideCategories", + "httpMethod": "GET", + "description": "Returns a list of categories that can be associated with YouTube channels.", + "parameters": { + "hl": { + "type": "string", + "description": "The hl parameter specifies the language that will be used for text values in the API response.", + "default": "en-US", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube channel category ID(s) for the resource(s) that are being retrieved. In a guideCategory resource, the id property specifies the YouTube channel category ID.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more guideCategory resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a guideCategory resource, the snippet property contains other properties, such as the category's title. If you set part=snippet, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + }, + "regionCode": { + "type": "string", + "description": "The regionCode parameter instructs the API to return the list of guide categories available in the specified country. The parameter value is an ISO 3166-1 alpha-2 country code.", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "GuideCategoryListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "i18nLanguages": { + "methods": { + "list": { + "id": "youtube.i18nLanguages.list", + "path": "i18nLanguages", + "httpMethod": "GET", + "description": "Returns a list of supported languages.", + "parameters": { + "hl": { + "type": "string", + "description": "The hl parameter specifies the language that should be used for text values in the API response.", + "default": "en_US", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more i18nLanguage resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "I18nLanguageListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "i18nRegions": { + "methods": { + "list": { + "id": "youtube.i18nRegions.list", + "path": "i18nRegions", + "httpMethod": "GET", + "description": "Returns a list of supported regions.", + "parameters": { + "hl": { + "type": "string", + "description": "The hl parameter specifies the language that should be used for text values in the API response.", + "default": "en_US", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more i18nRegion resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "I18nRegionListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "liveBroadcasts": { + "methods": { + "bind": { + "id": "youtube.liveBroadcasts.bind", + "path": "liveBroadcasts/bind", + "httpMethod": "POST", + "description": "Binds a YouTube broadcast to a stream or removes an existing binding between a broadcast and a stream. A broadcast can only be bound to one video stream.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the unique ID of the broadcast that is being bound to a video stream.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.", + "required": true, + "location": "query" + }, + "streamId": { + "type": "string", + "description": "The streamId parameter specifies the unique ID of the video stream that is being bound to a broadcast. If this parameter is omitted, the API will remove any existing binding between the broadcast and a video stream.", + "location": "query" + } + }, + "parameterOrder": [ + "id", + "part" + ], + "response": { + "$ref": "LiveBroadcast" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "control": { + "id": "youtube.liveBroadcasts.control", + "path": "liveBroadcasts/control", + "httpMethod": "POST", + "description": "Controls the settings for a slate that can be displayed in the broadcast stream.", + "parameters": { + "displaySlate": { + "type": "boolean", + "description": "The displaySlate parameter specifies whether the slate is being enabled or disabled.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube live broadcast ID that uniquely identifies the broadcast in which the slate is being updated.", + "required": true, + "location": "query" + }, + "offsetTimeMs": { + "type": "string", + "description": "The offsetTimeMs parameter specifies a positive time offset when the specified slate change will occur. The value is measured in milliseconds from the beginning of the broadcast's monitor stream, which is the time that the testing phase for the broadcast began. Even though it is specified in milliseconds, the value is actually an approximation, and YouTube completes the requested action as closely as possible to that time.\n\nIf you do not specify a value for this parameter, then YouTube performs the action as soon as possible. See the Getting started guide for more details.\n\nImportant: You should only specify a value for this parameter if your broadcast stream is delayed.", + "format": "uint64", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.", + "required": true, + "location": "query" + }, + "walltime": { + "type": "string", + "description": "The walltime parameter specifies the wall clock time at which the specified slate change will occur.", + "format": "date-time", + "location": "query" + } + }, + "parameterOrder": [ + "id", + "part" + ], + "response": { + "$ref": "LiveBroadcast" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "delete": { + "id": "youtube.liveBroadcasts.delete", + "path": "liveBroadcasts", + "httpMethod": "DELETE", + "description": "Deletes a broadcast.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube live broadcast ID for the resource that is being deleted.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "insert": { + "id": "youtube.liveBroadcasts.insert", + "path": "liveBroadcasts", + "httpMethod": "POST", + "description": "Creates a broadcast.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part properties that you can include in the parameter value are id, snippet, contentDetails, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "LiveBroadcast" + }, + "response": { + "$ref": "LiveBroadcast" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "list": { + "id": "youtube.liveBroadcasts.list", + "path": "liveBroadcasts", + "httpMethod": "GET", + "description": "Returns a list of YouTube broadcasts that match the API request parameters.", + "parameters": { + "broadcastStatus": { + "type": "string", + "description": "The broadcastStatus parameter filters the API response to only include broadcasts with the specified status.", + "enum": [ + "active", + "all", + "completed", + "upcoming" + ], + "enumDescriptions": [ + "Return current live broadcasts.", + "Return all broadcasts.", + "Return broadcasts that have already ended.", + "Return broadcasts that have not yet started." + ], + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of YouTube broadcast IDs that identify the broadcasts being retrieved. In a liveBroadcast resource, the id property specifies the broadcast's ID.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "The mine parameter can be used to instruct the API to only return broadcasts owned by the authenticated user. Set the parameter value to true to only retrieve your own broadcasts.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "LiveBroadcastListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly" + ] + }, + "transition": { + "id": "youtube.liveBroadcasts.transition", + "path": "liveBroadcasts/transition", + "httpMethod": "POST", + "description": "Changes the status of a YouTube live broadcast and initiates any processes associated with the new status. For example, when you transition a broadcast's status to testing, YouTube starts to transmit video to that broadcast's monitor stream. Before calling this method, you should confirm that the value of the status.streamStatus property for the stream bound to your broadcast is active.", + "parameters": { + "broadcastStatus": { + "type": "string", + "description": "The broadcastStatus parameter identifies the state to which the broadcast is changing. Note that to transition a broadcast to either the testing or live state, the status.streamStatus must be active for the stream that the broadcast is bound to.", + "required": true, + "enum": [ + "complete", + "live", + "testing" + ], + "enumDescriptions": [ + "The broadcast is over. YouTube stops transmitting video.", + "The broadcast is visible to its audience. YouTube transmits video to the broadcast's monitor stream and its broadcast stream.", + "Start testing the broadcast. YouTube transmits video to the broadcast's monitor stream. Note that you can only transition a broadcast to the testing state if its contentDetails.monitorStream.enableMonitorStream property is set to true." + ], + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies the unique ID of the broadcast that is transitioning to another status.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more liveBroadcast resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "broadcastStatus", + "id", + "part" + ], + "response": { + "$ref": "LiveBroadcast" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "update": { + "id": "youtube.liveBroadcasts.update", + "path": "liveBroadcasts", + "httpMethod": "PUT", + "description": "Updates a broadcast. For example, you could modify the broadcast settings defined in the liveBroadcast resource's contentDetails object.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part properties that you can include in the parameter value are id, snippet, contentDetails, and status.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a broadcast's privacy status is defined in the status part. As such, if your request is updating a private or unlisted broadcast, and the request's part parameter value includes the status part, the broadcast's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the broadcast will revert to the default privacy setting.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "LiveBroadcast" + }, + "response": { + "$ref": "LiveBroadcast" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + } + } + }, + "liveStreams": { + "methods": { + "delete": { + "id": "youtube.liveStreams.delete", + "path": "liveStreams", + "httpMethod": "DELETE", + "description": "Deletes a video stream.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube live stream ID for the resource that is being deleted.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "insert": { + "id": "youtube.liveStreams.insert", + "path": "liveStreams", + "httpMethod": "POST", + "description": "Creates a video stream. The stream enables you to send your video to YouTube, which can then broadcast the video to your audience.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part properties that you can include in the parameter value are id, snippet, cdn, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "LiveStream" + }, + "response": { + "$ref": "LiveStream" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + }, + "list": { + "id": "youtube.liveStreams.list", + "path": "liveStreams", + "httpMethod": "GET", + "description": "Returns a list of video streams that match the API request parameters.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of YouTube stream IDs that identify the streams being retrieved. In a liveStream resource, the id property specifies the stream's ID.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set. Acceptable values are 0 to 50, inclusive. The default value is 5.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "The mine parameter can be used to instruct the API to only return streams owned by the authenticated user. Set the parameter value to true to only retrieve your own streams.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more liveStream resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, cdn, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "LiveStreamListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly" + ] + }, + "update": { + "id": "youtube.liveStreams.update", + "path": "liveStreams", + "httpMethod": "PUT", + "description": "Updates a video stream. If the properties that you want to change cannot be updated, then you need to create a new stream with the proper settings.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part properties that you can include in the parameter value are id, snippet, cdn, and status.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. If the request body does not specify a value for a mutable property, the existing value for that property will be removed.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "LiveStream" + }, + "response": { + "$ref": "LiveStream" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube" + ] + } + } + }, + "playlistItems": { + "methods": { + "delete": { + "id": "youtube.playlistItems.delete", + "path": "playlistItems", + "httpMethod": "DELETE", + "description": "Deletes a playlist item.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube playlist item ID for the playlist item that is being deleted. In a playlistItem resource, the id property specifies the playlist item's ID.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "insert": { + "id": "youtube.playlistItems.insert", + "path": "playlistItems", + "httpMethod": "POST", + "description": "Adds a resource to a playlist.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "PlaylistItem" + }, + "response": { + "$ref": "PlaylistItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "list": { + "id": "youtube.playlistItems.list", + "path": "playlistItems", + "httpMethod": "GET", + "description": "Returns a collection of playlist items that match the API request parameters. You can retrieve all of the playlist items in a specified playlist or retrieve one or more playlist items by their unique IDs.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of one or more unique playlist item IDs.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more playlistItem resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, and status.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlistItem resource, the snippet property contains numerous fields, including the title, description, position, and resourceId properties. As such, if you set part=snippet, the API response will contain all of those properties.", + "required": true, + "location": "query" + }, + "playlistId": { + "type": "string", + "description": "The playlistId parameter specifies the unique ID of the playlist for which you want to retrieve playlist items. Note that even though this is an optional parameter, every request to retrieve playlist items must specify a value for either the id parameter or the playlistId parameter.", + "location": "query" + }, + "videoId": { + "type": "string", + "description": "The videoId parameter specifies that the request should return only the playlist items that contain the specified video.", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "PlaylistItemListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ], + "supportsSubscription": true + }, + "update": { + "id": "youtube.playlistItems.update", + "path": "playlistItems", + "httpMethod": "PUT", + "description": "Modifies a playlist item. For example, you could update the item's position in the playlist.", + "parameters": { + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, and status.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a playlist item can specify a start time and end time, which identify the times portion of the video that should play when users watch the video in the playlist. If your request is updating a playlist item that sets these values, and the request's part parameter value includes the contentDetails part, the playlist item's start and end times will be updated to whatever value the request body specifies. If the request body does not specify values, the existing start and end times will be removed and replaced with the default settings.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "PlaylistItem" + }, + "response": { + "$ref": "PlaylistItem" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "playlists": { + "methods": { + "delete": { + "id": "youtube.playlists.delete", + "path": "playlists", + "httpMethod": "DELETE", + "description": "Deletes a playlist.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube playlist ID for the playlist that is being deleted. In a playlist resource, the id property specifies the playlist's ID.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "insert": { + "id": "youtube.playlists.insert", + "path": "playlists", + "httpMethod": "POST", + "description": "Creates a playlist.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and status.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Playlist" + }, + "response": { + "$ref": "Playlist" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "list": { + "id": "youtube.playlists.list", + "path": "playlists", + "httpMethod": "GET", + "description": "Returns a collection of playlists that match the API request parameters. For example, you can retrieve all playlists that the authenticated user owns, or you can retrieve one or more playlists by their unique IDs.", + "parameters": { + "channelId": { + "type": "string", + "description": "This value indicates that the API should only return the specified channel's playlists.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube playlist ID(s) for the resource(s) that are being retrieved. In a playlist resource, the id property specifies the playlist's YouTube playlist ID.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "Set this parameter's value to true to instruct the API to only return playlists owned by the authenticated user.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more playlist resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and status.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a playlist resource, the snippet property contains properties like author, title, description, tags, and timeCreated. As such, if you set part=snippet, the API response will contain all of those properties.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "PlaylistListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "update": { + "id": "youtube.playlists.update", + "path": "playlists", + "httpMethod": "PUT", + "description": "Modifies a playlist. For example, you could change a playlist's title, description, or privacy status.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and status.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a playlist's privacy setting is contained in the status part. As such, if your request is updating a private playlist, and the request's part parameter value includes the status part, the playlist's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the playlist will revert to the default privacy setting.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Playlist" + }, + "response": { + "$ref": "Playlist" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "search": { + "methods": { + "list": { + "id": "youtube.search.list", + "path": "search", + "httpMethod": "GET", + "description": "Returns a collection of search results that match the query parameters specified in the API request. By default, a search result set identifies matching video, channel, and playlist resources, but you can also configure queries to only retrieve a specific type of resource.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter indicates that the API response should only contain resources created by the channel", + "location": "query" + }, + "channelType": { + "type": "string", + "description": "The channelType parameter lets you restrict a search to a particular type of channel.", + "enum": [ + "any", + "show" + ], + "enumDescriptions": [ + "Return all channels.", + "Only retrieve shows." + ], + "location": "query" + }, + "eventType": { + "type": "string", + "description": "The eventType parameter restricts a search to broadcast events.", + "enum": [ + "completed", + "live", + "upcoming" + ], + "enumDescriptions": [ + "Only include completed broadcasts.", + "Only include active broadcasts.", + "Only include upcoming broadcasts." + ], + "location": "query" + }, + "forContentOwner": { + "type": "boolean", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe forContentOwner parameter restricts the search to only retrieve resources owned by the content owner specified by the onBehalfOfContentOwner parameter. The user must be authenticated using a CMS account linked to the specified content owner and onBehalfOfContentOwner must be provided.", + "location": "query" + }, + "forMine": { + "type": "boolean", + "description": "The forMine parameter restricts the search to only retrieve videos owned by the authenticated user. If you set this parameter to true, then the type parameter's value must also be set to video.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "order": { + "type": "string", + "description": "The order parameter specifies the method that will be used to order resources in the API response.", + "default": "SEARCH_SORT_RELEVANCE", + "enum": [ + "date", + "rating", + "relevance", + "title", + "videoCount", + "viewCount" + ], + "enumDescriptions": [ + "Resources are sorted in reverse chronological order based on the date they were created.", + "Resources are sorted from highest to lowest rating.", + "Resources are sorted based on their relevance to the search query. This is the default value for this parameter.", + "Resources are sorted alphabetically by title.", + "Channels are sorted in descending order of their number of uploaded videos.", + "Resources are sorted from highest to lowest number of views." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more search resource properties that the API response will include. The part names that you can include in the parameter value are id and snippet.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a search result, the snippet property contains other properties that identify the result's title, description, and so forth. If you set part=snippet, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + }, + "publishedAfter": { + "type": "string", + "description": "The publishedAfter parameter indicates that the API response should only contain resources created after the specified time. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).", + "format": "date-time", + "location": "query" + }, + "publishedBefore": { + "type": "string", + "description": "The publishedBefore parameter indicates that the API response should only contain resources created before the specified time. The value is an RFC 3339 formatted date-time value (1970-01-01T00:00:00Z).", + "format": "date-time", + "location": "query" + }, + "q": { + "type": "string", + "description": "The q parameter specifies the query term to search for.", + "location": "query" + }, + "regionCode": { + "type": "string", + "description": "The regionCode parameter instructs the API to return search results for the specified country. The parameter value is an ISO 3166-1 alpha-2 country code.", + "location": "query" + }, + "relatedToVideoId": { + "type": "string", + "description": "The relatedToVideoId parameter retrieves a list of videos that are related to the video that the parameter value identifies. The parameter value must be set to a YouTube video ID and, if you are using this parameter, the type parameter must be set to video.", + "location": "query" + }, + "safeSearch": { + "type": "string", + "description": "The safeSearch parameter indicates whether the search results should include restricted content as well as standard content.", + "enum": [ + "moderate", + "none", + "strict" + ], + "enumDescriptions": [ + "YouTube will filter some content from search results and, at the least, will filter content that is restricted in your locale. Based on their content, search results could be removed from search results or demoted in search results. This is the default parameter value.", + "YouTube will not filter the search result set.", + "YouTube will try to exclude all restricted content from the search result set. Based on their content, search results could be removed from search results or demoted in search results." + ], + "location": "query" + }, + "topicId": { + "type": "string", + "description": "The topicId parameter indicates that the API response should only contain resources associated with the specified topic. The value identifies a Freebase topic ID.", + "location": "query" + }, + "type": { + "type": "string", + "description": "The type parameter restricts a search query to only retrieve a particular type of resource. The value is a comma-separated list of resource types.", + "default": "video,channel,playlist", + "location": "query" + }, + "videoCaption": { + "type": "string", + "description": "The videoCaption parameter indicates whether the API should filter video search results based on whether they have captions.", + "enum": [ + "any", + "closedCaption", + "none" + ], + "enumDescriptions": [ + "Do not filter results based on caption availability.", + "Only include videos that have captions.", + "Only include videos that do not have captions." + ], + "location": "query" + }, + "videoCategoryId": { + "type": "string", + "description": "The videoCategoryId parameter filters video search results based on their category.", + "location": "query" + }, + "videoDefinition": { + "type": "string", + "description": "The videoDefinition parameter lets you restrict a search to only include either high definition (HD) or standard definition (SD) videos. HD videos are available for playback in at least 720p, though higher resolutions, like 1080p, might also be available.", + "enum": [ + "any", + "high", + "standard" + ], + "enumDescriptions": [ + "Return all videos, regardless of their resolution.", + "Only retrieve HD videos.", + "Only retrieve videos in standard definition." + ], + "location": "query" + }, + "videoDimension": { + "type": "string", + "description": "The videoDimension parameter lets you restrict a search to only retrieve 2D or 3D videos.", + "enum": [ + "2d", + "3d", + "any" + ], + "enumDescriptions": [ + "Restrict search results to exclude 3D videos.", + "Restrict search results to only include 3D videos.", + "Include both 3D and non-3D videos in returned results. This is the default value." + ], + "location": "query" + }, + "videoDuration": { + "type": "string", + "description": "The videoDuration parameter filters video search results based on their duration.", + "enum": [ + "any", + "long", + "medium", + "short" + ], + "enumDescriptions": [ + "Do not filter video search results based on their duration. This is the default value.", + "Only include videos longer than 20 minutes.", + "Only include videos that are between four and 20 minutes long (inclusive).", + "Only include videos that are less than four minutes long." + ], + "location": "query" + }, + "videoEmbeddable": { + "type": "string", + "description": "The videoEmbeddable parameter lets you to restrict a search to only videos that can be embedded into a webpage.", + "enum": [ + "any", + "true" + ], + "enumDescriptions": [ + "Return all videos, embeddable or not.", + "Only retrieve embeddable videos." + ], + "location": "query" + }, + "videoLicense": { + "type": "string", + "description": "The videoLicense parameter filters search results to only include videos with a particular license. YouTube lets video uploaders choose to attach either the Creative Commons license or the standard YouTube license to each of their videos.", + "enum": [ + "any", + "creativeCommon", + "youtube" + ], + "enumDescriptions": [ + "Return all videos, regardless of which license they have, that match the query parameters.", + "Only return videos that have a Creative Commons license. Users can reuse videos with this license in other videos that they create. Learn more.", + "Only return videos that have the standard YouTube license." + ], + "location": "query" + }, + "videoSyndicated": { + "type": "string", + "description": "The videoSyndicated parameter lets you to restrict a search to only videos that can be played outside youtube.com.", + "enum": [ + "any", + "true" + ], + "enumDescriptions": [ + "Return all videos, syndicated or not.", + "Only retrieve syndicated videos." + ], + "location": "query" + }, + "videoType": { + "type": "string", + "description": "The videoType parameter lets you restrict a search to a particular type of videos.", + "enum": [ + "any", + "episode", + "movie" + ], + "enumDescriptions": [ + "Return all videos.", + "Only retrieve episodes of shows.", + "Only retrieve movies." + ], + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "SearchListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "subscriptions": { + "methods": { + "delete": { + "id": "youtube.subscriptions.delete", + "path": "subscriptions", + "httpMethod": "DELETE", + "description": "Deletes a subscription.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube subscription ID for the resource that is being deleted. In a subscription resource, the id property specifies the YouTube subscription ID.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "insert": { + "id": "youtube.subscriptions.insert", + "path": "subscriptions", + "httpMethod": "POST", + "description": "Adds a subscription for the authenticated user's channel.", + "parameters": { + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet and contentDetails.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Subscription" + }, + "response": { + "$ref": "Subscription" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "list": { + "id": "youtube.subscriptions.list", + "path": "subscriptions", + "httpMethod": "GET", + "description": "Returns subscription resources that match the API request criteria.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter specifies a YouTube channel ID. The API will only return that channel's subscriptions.", + "location": "query" + }, + "forChannelId": { + "type": "string", + "description": "The forChannelId parameter specifies a comma-separated list of channel IDs. The API response will then only contain subscriptions matching those channels.", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube subscription ID(s) for the resource(s) that are being retrieved. In a subscription resource, the id property specifies the YouTube subscription ID.", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.", + "default": "5", + "format": "uint32", + "minimum": "0", + "maximum": "50", + "location": "query" + }, + "mine": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve a feed of the authenticated user's subscriptions.", + "location": "query" + }, + "mySubscribers": { + "type": "boolean", + "description": "Set this parameter's value to true to retrieve a feed of the subscribers of the authenticated user.", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "order": { + "type": "string", + "description": "The order parameter specifies the method that will be used to sort resources in the API response.", + "default": "SUBSCRIPTION_ORDER_RELEVANCE", + "enum": [ + "alphabetical", + "relevance", + "unread" + ], + "enumDescriptions": [ + "Sort alphabetically.", + "Sort by relevance.", + "Sort by order of activity." + ], + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more subscription resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, and contentDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a subscription resource, the snippet property contains other properties, such as a display title for the subscription. If you set part=snippet, the API response will also contain all of those nested properties.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "SubscriptionListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "thumbnails": { + "methods": { + "set": { + "id": "youtube.thumbnails.set", + "path": "thumbnails/set", + "httpMethod": "POST", + "description": "Uploads a custom video thumbnail to YouTube and sets it for a video.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.", + "location": "query" + }, + "videoId": { + "type": "string", + "description": "The videoId parameter specifies a YouTube video ID for which the custom video thumbnail is being provided.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "videoId" + ], + "response": { + "$ref": "ThumbnailSetResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.upload", + "https://www.googleapis.com/auth/youtubepartner" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream", + "image/jpeg", + "image/png" + ], + "maxSize": "2MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/youtube/v3/thumbnails/set" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/youtube/v3/thumbnails/set" + } + } + } + } + } + }, + "videoCategories": { + "methods": { + "list": { + "id": "youtube.videoCategories.list", + "path": "videoCategories", + "httpMethod": "GET", + "description": "Returns a list of categories that can be associated with YouTube videos.", + "parameters": { + "hl": { + "type": "string", + "description": "The hl parameter specifies the language that should be used for text values in the API response.", + "default": "en_US", + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of video category IDs for the resources that you are retrieving.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies the videoCategory resource parts that the API response will include. Supported values are id and snippet.", + "required": true, + "location": "query" + }, + "regionCode": { + "type": "string", + "description": "The regionCode parameter instructs the API to return the list of video categories available in the specified country. The parameter value is an ISO 3166-1 alpha-2 country code.", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "VideoCategoryListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "videos": { + "methods": { + "delete": { + "id": "youtube.videos.delete", + "path": "videos", + "httpMethod": "DELETE", + "description": "Deletes a YouTube video.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube video ID for the resource that is being deleted. In a video resource, the id property specifies the video's ID.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "getRating": { + "id": "youtube.videos.getRating", + "path": "videos/getRating", + "httpMethod": "GET", + "description": "Retrieves the ratings that the authorized user gave to a list of specified videos.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube video ID(s) for the resource(s) for which you are retrieving rating data. In a video resource, the id property specifies the video's ID.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "parameterOrder": [ + "id" + ], + "response": { + "$ref": "VideoGetRatingResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "insert": { + "id": "youtube.videos.insert", + "path": "videos", + "httpMethod": "POST", + "description": "Uploads a video to YouTube and optionally sets the video's metadata.", + "parameters": { + "autoLevels": { + "type": "boolean", + "description": "The autoLevels parameter indicates whether YouTube should automatically enhance the video's lighting and color.", + "location": "query" + }, + "notifySubscribers": { + "type": "boolean", + "description": "The notifySubscribers parameter indicates whether YouTube should send notification to subscribers about the inserted video.", + "default": "true", + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "onBehalfOfContentOwnerChannel": { + "type": "string", + "description": "This parameter can only be used in a properly authorized request. Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwnerChannel parameter specifies the YouTube channel ID of the channel to which a video is being added. This parameter is required when a request specifies a value for the onBehalfOfContentOwner parameter, and it can only be used in conjunction with that parameter. In addition, the request must be authorized using a CMS account that is linked to the content owner that the onBehalfOfContentOwner parameter specifies. Finally, the channel that the onBehalfOfContentOwnerChannel parameter value specifies must be linked to the content owner that the onBehalfOfContentOwner parameter specifies.\n\nThis parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and perform actions on behalf of the channel specified in the parameter value, without having to provide authentication credentials for each separate channel.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails. However, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.", + "required": true, + "location": "query" + }, + "stabilize": { + "type": "boolean", + "description": "The stabilize parameter indicates whether YouTube should adjust the video to remove shaky camera motions.", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Video" + }, + "response": { + "$ref": "Video" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.upload", + "https://www.googleapis.com/auth/youtubepartner" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream", + "video/*" + ], + "maxSize": "64GB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/youtube/v3/videos" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/youtube/v3/videos" + } + } + } + }, + "list": { + "id": "youtube.videos.list", + "path": "videos", + "httpMethod": "GET", + "description": "Returns a list of videos that match the API request parameters.", + "parameters": { + "chart": { + "type": "string", + "description": "The chart parameter identifies the chart that you want to retrieve.", + "enum": [ + "mostPopular" + ], + "enumDescriptions": [ + "Return the most popular videos for the specified content region and video category." + ], + "location": "query" + }, + "id": { + "type": "string", + "description": "The id parameter specifies a comma-separated list of the YouTube video ID(s) for the resource(s) that are being retrieved. In a video resource, the id property specifies the video's ID.", + "location": "query" + }, + "locale": { + "type": "string", + "description": "DEPRECATED", + "location": "query" + }, + "maxResults": { + "type": "integer", + "description": "The maxResults parameter specifies the maximum number of items that should be returned in the result set.\n\nNote: This parameter is supported for use in conjunction with the myRating parameter, but it is not supported for use in conjunction with the id parameter.", + "default": "5", + "format": "uint32", + "minimum": "1", + "maximum": "50", + "location": "query" + }, + "myRating": { + "type": "string", + "description": "Set this parameter's value to like or dislike to instruct the API to only return videos liked or disliked by the authenticated user.", + "enum": [ + "dislike", + "like" + ], + "enumDescriptions": [ + "Returns only videos disliked by the authenticated user.", + "Returns only video liked by the authenticated user." + ], + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "pageToken": { + "type": "string", + "description": "The pageToken parameter identifies a specific page in the result set that should be returned. In an API response, the nextPageToken and prevPageToken properties identify other pages that could be retrieved.\n\nNote: This parameter is supported for use in conjunction with the myRating parameter, but it is not supported for use in conjunction with the id parameter.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter specifies a comma-separated list of one or more video resource properties that the API response will include. The part names that you can include in the parameter value are id, snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nIf the parameter identifies a property that contains child properties, the child properties will be included in the response. For example, in a video resource, the snippet property contains the channelId, title, description, tags, and categoryId properties. As such, if you set part=snippet, the API response will contain all of those properties.", + "required": true, + "location": "query" + }, + "regionCode": { + "type": "string", + "description": "The regionCode parameter instructs the API to select a video chart available in the specified region. This parameter can only be used in conjunction with the chart parameter. The parameter value is an ISO 3166-1 alpha-2 country code.", + "location": "query" + }, + "videoCategoryId": { + "type": "string", + "description": "The videoCategoryId parameter identifies the video category for which the chart should be retrieved. This parameter can only be used in conjunction with the chart parameter. By default, charts are not restricted to a particular category.", + "default": "0", + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "response": { + "$ref": "VideoListResponse" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.readonly", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "rate": { + "id": "youtube.videos.rate", + "path": "videos/rate", + "httpMethod": "POST", + "description": "Add a like or dislike rating to a video or remove a rating from a video.", + "parameters": { + "id": { + "type": "string", + "description": "The id parameter specifies the YouTube video ID of the video that is being rated or having its rating removed.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "rating": { + "type": "string", + "description": "Specifies the rating to record.", + "required": true, + "enum": [ + "dislike", + "like", + "none" + ], + "enumDescriptions": [ + "Records that the authenticated user disliked the video.", + "Records that the authenticated user liked the video.", + "Removes any rating that the authenticated user had previously set for the video." + ], + "location": "query" + } + }, + "parameterOrder": [ + "id", + "rating" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + }, + "update": { + "id": "youtube.videos.update", + "path": "videos", + "httpMethod": "PUT", + "description": "Updates a video's metadata.", + "parameters": { + "onBehalfOfContentOwner": { + "type": "string", + "description": "Note: This parameter is intended exclusively for YouTube content partners.\n\nThe onBehalfOfContentOwner parameter indicates that the request's authorization credentials identify a YouTube CMS user who is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with must be linked to the specified YouTube content owner.", + "location": "query" + }, + "part": { + "type": "string", + "description": "The part parameter serves two purposes in this operation. It identifies the properties that the write operation will set as well as the properties that the API response will include.\n\nThe part names that you can include in the parameter value are snippet, contentDetails, fileDetails, liveStreamingDetails, player, processingDetails, recordingDetails, statistics, status, suggestions, and topicDetails.\n\nNote that this method will override the existing values for all of the mutable properties that are contained in any parts that the parameter value specifies. For example, a video's privacy setting is contained in the status part. As such, if your request is updating a private video, and the request's part parameter value includes the status part, the video's privacy setting will be updated to whatever value the request body specifies. If the request body does not specify a value, the existing privacy setting will be removed and the video will revert to the default privacy setting.\n\nIn addition, not all of those parts contain properties that can be set when setting or updating a video's metadata. For example, the statistics object encapsulates statistics that YouTube calculates for a video and does not contain values that you can set or modify. If the parameter value specifies a part that does not contain mutable values, that part will still be included in the API response.", + "required": true, + "location": "query" + } + }, + "parameterOrder": [ + "part" + ], + "request": { + "$ref": "Video" + }, + "response": { + "$ref": "Video" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + }, + "watermarks": { + "methods": { + "set": { + "id": "youtube.watermarks.set", + "path": "watermarks/set", + "httpMethod": "POST", + "description": "Uploads a watermark image to YouTube and sets it for a channel.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter specifies a YouTube channel ID for which the watermark is being provided.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "parameterOrder": [ + "channelId" + ], + "request": { + "$ref": "InvideoBranding" + }, + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtube.upload", + "https://www.googleapis.com/auth/youtubepartner" + ], + "supportsMediaUpload": true, + "mediaUpload": { + "accept": [ + "application/octet-stream", + "image/jpeg", + "image/png" + ], + "maxSize": "10MB", + "protocols": { + "simple": { + "multipart": true, + "path": "/upload/youtube/v3/watermarks/set" + }, + "resumable": { + "multipart": true, + "path": "/resumable/upload/youtube/v3/watermarks/set" + } + } + } + }, + "unset": { + "id": "youtube.watermarks.unset", + "path": "watermarks/unset", + "httpMethod": "POST", + "description": "Deletes a watermark.", + "parameters": { + "channelId": { + "type": "string", + "description": "The channelId parameter specifies a YouTube channel ID for which the watermark is being unset.", + "required": true, + "location": "query" + }, + "onBehalfOfContentOwner": { + "type": "string", + "description": "The onBehalfOfContentOwner parameter indicates that the authenticated user is acting on behalf of the content owner specified in the parameter value. This parameter is intended for YouTube content partners that own and manage many different YouTube channels. It allows content owners to authenticate once and get access to all their video and channel data, without having to provide authentication credentials for each individual channel. The actual CMS account that the user authenticates with needs to be linked to the specified YouTube content owner.", + "location": "query" + } + }, + "parameterOrder": [ + "channelId" + ], + "scopes": [ + "https://www.googleapis.com/auth/youtube", + "https://www.googleapis.com/auth/youtubepartner" + ] + } + } + } + } +} diff --git a/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-gen.go b/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-gen.go new file mode 100644 index 0000000000000..ddbd0a6141d8a --- /dev/null +++ b/third_party/src/code.google.com/p/google-api-go-client/youtube/v3/youtube-gen.go @@ -0,0 +1,9393 @@ +// Package youtube provides access to the YouTube Data API. +// +// See https://developers.google.com/youtube/v3 +// +// Usage example: +// +// import "code.google.com/p/google-api-go-client/youtube/v3" +// ... +// youtubeService, err := youtube.New(oauthHttpClient) +package youtube + +import ( + "bytes" + "code.google.com/p/google-api-go-client/googleapi" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "net/url" + "strconv" + "strings" +) + +// Always reference these packages, just in case the auto-generated code +// below doesn't. +var _ = bytes.NewBuffer +var _ = strconv.Itoa +var _ = fmt.Sprintf +var _ = json.NewDecoder +var _ = io.Copy +var _ = url.Parse +var _ = googleapi.Version +var _ = errors.New +var _ = strings.Replace + +const apiId = "youtube:v3" +const apiName = "youtube" +const apiVersion = "v3" +const basePath = "https://www.googleapis.com/youtube/v3/" + +// OAuth2 scopes used by this API. +const ( + // Manage your YouTube account + YoutubeScope = "https://www.googleapis.com/auth/youtube" + + // View your YouTube account + YoutubeReadonlyScope = "https://www.googleapis.com/auth/youtube.readonly" + + // Manage your YouTube videos + YoutubeUploadScope = "https://www.googleapis.com/auth/youtube.upload" + + // View and manage your assets and associated content on YouTube + YoutubepartnerScope = "https://www.googleapis.com/auth/youtubepartner" + + // View private information of your YouTube channel relevant during the + // audit process with a YouTube partner + YoutubepartnerChannelAuditScope = "https://www.googleapis.com/auth/youtubepartner-channel-audit" +) + +func New(client *http.Client) (*Service, error) { + if client == nil { + return nil, errors.New("client is nil") + } + s := &Service{client: client, BasePath: basePath} + s.Activities = NewActivitiesService(s) + s.ChannelBanners = NewChannelBannersService(s) + s.ChannelSections = NewChannelSectionsService(s) + s.Channels = NewChannelsService(s) + s.GuideCategories = NewGuideCategoriesService(s) + s.I18nLanguages = NewI18nLanguagesService(s) + s.I18nRegions = NewI18nRegionsService(s) + s.LiveBroadcasts = NewLiveBroadcastsService(s) + s.LiveStreams = NewLiveStreamsService(s) + s.PlaylistItems = NewPlaylistItemsService(s) + s.Playlists = NewPlaylistsService(s) + s.Search = NewSearchService(s) + s.Subscriptions = NewSubscriptionsService(s) + s.Thumbnails = NewThumbnailsService(s) + s.VideoCategories = NewVideoCategoriesService(s) + s.Videos = NewVideosService(s) + s.Watermarks = NewWatermarksService(s) + return s, nil +} + +type Service struct { + client *http.Client + BasePath string // API endpoint base URL + + Activities *ActivitiesService + + ChannelBanners *ChannelBannersService + + ChannelSections *ChannelSectionsService + + Channels *ChannelsService + + GuideCategories *GuideCategoriesService + + I18nLanguages *I18nLanguagesService + + I18nRegions *I18nRegionsService + + LiveBroadcasts *LiveBroadcastsService + + LiveStreams *LiveStreamsService + + PlaylistItems *PlaylistItemsService + + Playlists *PlaylistsService + + Search *SearchService + + Subscriptions *SubscriptionsService + + Thumbnails *ThumbnailsService + + VideoCategories *VideoCategoriesService + + Videos *VideosService + + Watermarks *WatermarksService +} + +func NewActivitiesService(s *Service) *ActivitiesService { + rs := &ActivitiesService{s: s} + return rs +} + +type ActivitiesService struct { + s *Service +} + +func NewChannelBannersService(s *Service) *ChannelBannersService { + rs := &ChannelBannersService{s: s} + return rs +} + +type ChannelBannersService struct { + s *Service +} + +func NewChannelSectionsService(s *Service) *ChannelSectionsService { + rs := &ChannelSectionsService{s: s} + return rs +} + +type ChannelSectionsService struct { + s *Service +} + +func NewChannelsService(s *Service) *ChannelsService { + rs := &ChannelsService{s: s} + return rs +} + +type ChannelsService struct { + s *Service +} + +func NewGuideCategoriesService(s *Service) *GuideCategoriesService { + rs := &GuideCategoriesService{s: s} + return rs +} + +type GuideCategoriesService struct { + s *Service +} + +func NewI18nLanguagesService(s *Service) *I18nLanguagesService { + rs := &I18nLanguagesService{s: s} + return rs +} + +type I18nLanguagesService struct { + s *Service +} + +func NewI18nRegionsService(s *Service) *I18nRegionsService { + rs := &I18nRegionsService{s: s} + return rs +} + +type I18nRegionsService struct { + s *Service +} + +func NewLiveBroadcastsService(s *Service) *LiveBroadcastsService { + rs := &LiveBroadcastsService{s: s} + return rs +} + +type LiveBroadcastsService struct { + s *Service +} + +func NewLiveStreamsService(s *Service) *LiveStreamsService { + rs := &LiveStreamsService{s: s} + return rs +} + +type LiveStreamsService struct { + s *Service +} + +func NewPlaylistItemsService(s *Service) *PlaylistItemsService { + rs := &PlaylistItemsService{s: s} + return rs +} + +type PlaylistItemsService struct { + s *Service +} + +func NewPlaylistsService(s *Service) *PlaylistsService { + rs := &PlaylistsService{s: s} + return rs +} + +type PlaylistsService struct { + s *Service +} + +func NewSearchService(s *Service) *SearchService { + rs := &SearchService{s: s} + return rs +} + +type SearchService struct { + s *Service +} + +func NewSubscriptionsService(s *Service) *SubscriptionsService { + rs := &SubscriptionsService{s: s} + return rs +} + +type SubscriptionsService struct { + s *Service +} + +func NewThumbnailsService(s *Service) *ThumbnailsService { + rs := &ThumbnailsService{s: s} + return rs +} + +type ThumbnailsService struct { + s *Service +} + +func NewVideoCategoriesService(s *Service) *VideoCategoriesService { + rs := &VideoCategoriesService{s: s} + return rs +} + +type VideoCategoriesService struct { + s *Service +} + +func NewVideosService(s *Service) *VideosService { + rs := &VideosService{s: s} + return rs +} + +type VideosService struct { + s *Service +} + +func NewWatermarksService(s *Service) *WatermarksService { + rs := &WatermarksService{s: s} + return rs +} + +type WatermarksService struct { + s *Service +} + +type AccessPolicy struct { + // Allowed: The value of allowed indicates whether the access to the + // policy is allowed or denied by default. + Allowed bool `json:"allowed,omitempty"` + + // Exception: A list of region codes that identify countries where the + // default policy do not apply. + Exception []string `json:"exception,omitempty"` +} + +type Activity struct { + // ContentDetails: The contentDetails object contains information about + // the content associated with the activity. For example, if the + // snippet.type value is videoRated, then the contentDetails object's + // content identifies the rated video. + ContentDetails *ActivityContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the activity. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#activity". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the + // activity, including the activity's type and group ID. + Snippet *ActivitySnippet `json:"snippet,omitempty"` +} + +type ActivityContentDetails struct { + // Bulletin: The bulletin object contains details about a channel + // bulletin post. This object is only present if the snippet.type is + // bulletin. + Bulletin *ActivityContentDetailsBulletin `json:"bulletin,omitempty"` + + // ChannelItem: The channelItem object contains details about a resource + // which was added to a channel. This property is only present if the + // snippet.type is channelItem. + ChannelItem *ActivityContentDetailsChannelItem `json:"channelItem,omitempty"` + + // Comment: The comment object contains information about a resource + // that received a comment. This property is only present if the + // snippet.type is comment. + Comment *ActivityContentDetailsComment `json:"comment,omitempty"` + + // Favorite: The favorite object contains information about a video that + // was marked as a favorite video. This property is only present if the + // snippet.type is favorite. + Favorite *ActivityContentDetailsFavorite `json:"favorite,omitempty"` + + // Like: The like object contains information about a resource that + // received a positive (like) rating. This property is only present if + // the snippet.type is like. + Like *ActivityContentDetailsLike `json:"like,omitempty"` + + // PlaylistItem: The playlistItem object contains information about a + // new playlist item. This property is only present if the snippet.type + // is playlistItem. + PlaylistItem *ActivityContentDetailsPlaylistItem `json:"playlistItem,omitempty"` + + // PromotedItem: The promotedItem object contains details about a + // resource which is being promoted. This property is only present if + // the snippet.type is promotedItem. + PromotedItem *ActivityContentDetailsPromotedItem `json:"promotedItem,omitempty"` + + // Recommendation: The recommendation object contains information about + // a recommended resource. This property is only present if the + // snippet.type is recommendation. + Recommendation *ActivityContentDetailsRecommendation `json:"recommendation,omitempty"` + + // Social: The social object contains details about a social network + // post. This property is only present if the snippet.type is social. + Social *ActivityContentDetailsSocial `json:"social,omitempty"` + + // Subscription: The subscription object contains information about a + // channel that a user subscribed to. This property is only present if + // the snippet.type is subscription. + Subscription *ActivityContentDetailsSubscription `json:"subscription,omitempty"` + + // Upload: The upload object contains information about the uploaded + // video. This property is only present if the snippet.type is upload. + Upload *ActivityContentDetailsUpload `json:"upload,omitempty"` +} + +type ActivityContentDetailsBulletin struct { + // ResourceId: The resourceId object contains information that + // identifies the resource associated with a bulletin post. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsChannelItem struct { + // ResourceId: The resourceId object contains information that + // identifies the resource that was added to the channel. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsComment struct { + // ResourceId: The resourceId object contains information that + // identifies the resource associated with the comment. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsFavorite struct { + // ResourceId: The resourceId object contains information that + // identifies the resource that was marked as a favorite. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsLike struct { + // ResourceId: The resourceId object contains information that + // identifies the rated resource. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsPlaylistItem struct { + // PlaylistId: The value that YouTube uses to uniquely identify the + // playlist. + PlaylistId string `json:"playlistId,omitempty"` + + // PlaylistItemId: ID of the item within the playlist. + PlaylistItemId string `json:"playlistItemId,omitempty"` + + // ResourceId: The resourceId object contains information about the + // resource that was added to the playlist. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsPromotedItem struct { + // AdTag: The URL the client should fetch to request a promoted item. + AdTag string `json:"adTag,omitempty"` + + // ClickTrackingUrl: The URL the client should ping to indicate that the + // user clicked through on this promoted item. + ClickTrackingUrl string `json:"clickTrackingUrl,omitempty"` + + // CreativeViewUrl: The URL the client should ping to indicate that the + // user was shown this promoted item. + CreativeViewUrl string `json:"creativeViewUrl,omitempty"` + + // CtaType: The type of call-to-action, a message to the user indicating + // action that can be taken. + CtaType string `json:"ctaType,omitempty"` + + // CustomCtaButtonText: The custom call-to-action button text. If + // specified, it will override the default button text for the cta_type. + CustomCtaButtonText string `json:"customCtaButtonText,omitempty"` + + // DescriptionText: The text description to accompany the promoted item. + DescriptionText string `json:"descriptionText,omitempty"` + + // DestinationUrl: The URL the client should direct the user to, if the + // user chooses to visit the advertiser's website. + DestinationUrl string `json:"destinationUrl,omitempty"` + + // ForecastingUrl: The list of forecasting URLs. The client should ping + // all of these URLs when a promoted item is not available, to indicate + // that a promoted item could have been shown. + ForecastingUrl []string `json:"forecastingUrl,omitempty"` + + // ImpressionUrl: The list of impression URLs. The client should ping + // all of these URLs to indicate that the user was shown this promoted + // item. + ImpressionUrl []string `json:"impressionUrl,omitempty"` + + // VideoId: The ID that YouTube uses to uniquely identify the promoted + // video. + VideoId string `json:"videoId,omitempty"` +} + +type ActivityContentDetailsRecommendation struct { + // Reason: The reason that the resource is recommended to the user. + Reason string `json:"reason,omitempty"` + + // ResourceId: The resourceId object contains information that + // identifies the recommended resource. + ResourceId *ResourceId `json:"resourceId,omitempty"` + + // SeedResourceId: The seedResourceId object contains information about + // the resource that caused the recommendation. + SeedResourceId *ResourceId `json:"seedResourceId,omitempty"` +} + +type ActivityContentDetailsSocial struct { + // Author: The author of the social network post. + Author string `json:"author,omitempty"` + + // ImageUrl: An image of the post's author. + ImageUrl string `json:"imageUrl,omitempty"` + + // ReferenceUrl: The URL of the social network post. + ReferenceUrl string `json:"referenceUrl,omitempty"` + + // ResourceId: The resourceId object encapsulates information that + // identifies the resource associated with a social network post. + ResourceId *ResourceId `json:"resourceId,omitempty"` + + // Type: The name of the social network. + Type string `json:"type,omitempty"` +} + +type ActivityContentDetailsSubscription struct { + // ResourceId: The resourceId object contains information that + // identifies the resource that the user subscribed to. + ResourceId *ResourceId `json:"resourceId,omitempty"` +} + +type ActivityContentDetailsUpload struct { + // VideoId: The ID that YouTube uses to uniquely identify the uploaded + // video. + VideoId string `json:"videoId,omitempty"` +} + +type ActivityListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of activities, or events, that match the request + // criteria. + Items []*Activity `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#activityListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type ActivitySnippet struct { + // ChannelId: The ID that YouTube uses to uniquely identify the channel + // associated with the activity. + ChannelId string `json:"channelId,omitempty"` + + // ChannelTitle: Channel title for the channel responsible for this + // activity + ChannelTitle string `json:"channelTitle,omitempty"` + + // Description: The description of the resource primarily associated + // with the activity. + Description string `json:"description,omitempty"` + + // GroupId: The group ID associated with the activity. A group ID + // identifies user events that are associated with the same user and + // resource. For example, if a user rates a video and marks the same + // video as a favorite, the entries for those events would have the same + // group ID in the user's activity feed. In your user interface, you can + // avoid repetition by grouping events with the same groupId value. + GroupId string `json:"groupId,omitempty"` + + // PublishedAt: The date and time that the video was uploaded. The value + // is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. + PublishedAt string `json:"publishedAt,omitempty"` + + // Thumbnails: A map of thumbnail images associated with the resource + // that is primarily associated with the activity. For each object in + // the map, the key is the name of the thumbnail image, and the value is + // an object that contains other information about the thumbnail. + Thumbnails *ThumbnailDetails `json:"thumbnails,omitempty"` + + // Title: The title of the resource primarily associated with the + // activity. + Title string `json:"title,omitempty"` + + // Type: The type of activity that the resource describes. + Type string `json:"type,omitempty"` +} + +type CdnSettings struct { + // Format: The format of the video stream that you are sending to + // Youtube. + Format string `json:"format,omitempty"` + + // IngestionInfo: The ingestionInfo object contains information that + // YouTube provides that you need to transmit your RTMP or HTTP stream + // to YouTube. + IngestionInfo *IngestionInfo `json:"ingestionInfo,omitempty"` + + // IngestionType: The method or protocol used to transmit the video + // stream. + IngestionType string `json:"ingestionType,omitempty"` +} + +type Channel struct { + // AuditDetails: The auditionDetails object encapsulates channel data + // that is relevant for YouTube Partners during the audition process. + AuditDetails *ChannelAuditDetails `json:"auditDetails,omitempty"` + + // BrandingSettings: The brandingSettings object encapsulates + // information about the branding of the channel. + BrandingSettings *ChannelBrandingSettings `json:"brandingSettings,omitempty"` + + // ContentDetails: The contentDetails object encapsulates information + // about the channel's content. + ContentDetails *ChannelContentDetails `json:"contentDetails,omitempty"` + + // ContentOwnerDetails: The contentOwnerDetails object encapsulates + // channel data that is relevant for YouTube Partners linked with the + // channel. + ContentOwnerDetails *ChannelContentOwnerDetails `json:"contentOwnerDetails,omitempty"` + + // ConversionPings: The conversionPings object encapsulates information + // about conversion pings that need to be respected by the channel. + ConversionPings *ChannelConversionPings `json:"conversionPings,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the channel. + Id string `json:"id,omitempty"` + + // InvideoPromotion: The invideoPromotion object encapsulates + // information about promotion campaign associated with the channel. + InvideoPromotion *InvideoPromotion `json:"invideoPromotion,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#channel". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the channel, + // such as its title, description, and thumbnail images. + Snippet *ChannelSnippet `json:"snippet,omitempty"` + + // Statistics: The statistics object encapsulates statistics for the + // channel. + Statistics *ChannelStatistics `json:"statistics,omitempty"` + + // Status: The status object encapsulates information about the privacy + // status of the channel. + Status *ChannelStatus `json:"status,omitempty"` + + // TopicDetails: The topicDetails object encapsulates information about + // Freebase topics associated with the channel. + TopicDetails *ChannelTopicDetails `json:"topicDetails,omitempty"` +} + +type ChannelAuditDetails struct { + // CommunityGuidelinesGoodStanding: Whether or not the channel respects + // the community guidelines. + CommunityGuidelinesGoodStanding bool `json:"communityGuidelinesGoodStanding,omitempty"` + + // ContentIdClaimsGoodStanding: Whether or not the channel has any + // unresolved claims. + ContentIdClaimsGoodStanding bool `json:"contentIdClaimsGoodStanding,omitempty"` + + // CopyrightStrikesGoodStanding: Whether or not the channel has any + // copyright strikes. + CopyrightStrikesGoodStanding bool `json:"copyrightStrikesGoodStanding,omitempty"` + + // OverallGoodStanding: Describes the general state of the channel. This + // field will always show if there are any issues whatsoever with the + // channel. Currently this field represents the result of the logical + // and operation over the community guidelines good standing, the + // copyright strikes good standing and the content ID claims good + // standing, but this may change in the future. + OverallGoodStanding bool `json:"overallGoodStanding,omitempty"` +} + +type ChannelBannerResource struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#channelBannerResource". + Kind string `json:"kind,omitempty"` + + // Url: The URL of this banner image. + Url string `json:"url,omitempty"` +} + +type ChannelBrandingSettings struct { + // Channel: Branding properties for the channel view. + Channel *ChannelSettings `json:"channel,omitempty"` + + // Hints: Additional experimental branding properties. + Hints []*PropertyValue `json:"hints,omitempty"` + + // Image: Branding properties for branding images. + Image *ImageSettings `json:"image,omitempty"` + + // Watch: Branding properties for the watch page. + Watch *WatchSettings `json:"watch,omitempty"` +} + +type ChannelContentDetails struct { + // GooglePlusUserId: The googlePlusUserId object identifies the Google+ + // profile ID associated with this channel. + GooglePlusUserId string `json:"googlePlusUserId,omitempty"` + + RelatedPlaylists *ChannelContentDetailsRelatedPlaylists `json:"relatedPlaylists,omitempty"` +} + +type ChannelContentDetailsRelatedPlaylists struct { + // Favorites: The ID of the playlist that contains the channel"s + // favorite videos. Use the playlistItems.insert and + // playlistItems.delete to add or remove items from that list. + Favorites string `json:"favorites,omitempty"` + + // Likes: The ID of the playlist that contains the channel"s liked + // videos. Use the playlistItems.insert and playlistItems.delete to + // add or remove items from that list. + Likes string `json:"likes,omitempty"` + + // Uploads: The ID of the playlist that contains the channel"s uploaded + // videos. Use the videos.insert method to upload new videos and the + // videos.delete method to delete previously uploaded videos. + Uploads string `json:"uploads,omitempty"` + + // WatchHistory: The ID of the playlist that contains the channel"s + // watch history. Use the playlistItems.insert and + // playlistItems.delete to add or remove items from that list. + WatchHistory string `json:"watchHistory,omitempty"` + + // WatchLater: The ID of the playlist that contains the channel"s watch + // later playlist. Use the playlistItems.insert and + // playlistItems.delete to add or remove items from that list. + WatchLater string `json:"watchLater,omitempty"` +} + +type ChannelContentOwnerDetails struct { + // ContentOwner: The ID of the content owner linked to the channel. + ContentOwner string `json:"contentOwner,omitempty"` + + // TimeLinked: The date and time of when the channel was linked to the + // content owner. The value is specified in ISO 8601 + // (YYYY-MM-DDThh:mm:ss.sZ) format. + TimeLinked string `json:"timeLinked,omitempty"` +} + +type ChannelConversionPing struct { + // Context: Defines the context of the ping. + Context string `json:"context,omitempty"` + + // ConversionUrl: The url (without the schema) that the player shall + // send the ping to. It's at caller's descretion to decide which schema + // to use (http vs https) Example of a returned url: + // //googleads.g.doubleclick.net/pagead/ + // viewthroughconversion/962985656/?data=path%3DtHe_path%3Btype%3D + // cview%3Butuid%3DGISQtTNGYqaYl4sKxoVvKA&labe=default The caller must + // append biscotti authentication (ms param in case of mobile, for + // example) to this ping. + ConversionUrl string `json:"conversionUrl,omitempty"` +} + +type ChannelConversionPings struct { + // Pings: Pings that the app shall fire (authenticated by biscotti + // cookie). Each ping has a context, in which the app must fire the + // ping, and a url identifying the ping. + Pings []*ChannelConversionPing `json:"pings,omitempty"` +} + +type ChannelListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of channels that match the request criteria. + Items []*Channel `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#channelListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type ChannelSection struct { + // ContentDetails: The contentDetails object contains details about the + // ChannelSection content, such as playlists and channels. + ContentDetails *ChannelSectionContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the ChannelSection. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#channelSection". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the + // ChannelSection, such as its type, style and title. + Snippet *ChannelSectionSnippet `json:"snippet,omitempty"` +} + +type ChannelSectionContentDetails struct { + // Channels: The channel ids for type multiple_channels. + Channels []string `json:"channels,omitempty"` + + // Playlists: The playlist ids for type single_playlist and + // multiple_playlists. For singlePlaylist, only one playlistId is + // allowed. + Playlists []string `json:"playlists,omitempty"` +} + +type ChannelSectionListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of ChannelSections that match the request criteria. + Items []*ChannelSection `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#channelSectionListResponse". + Kind string `json:"kind,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type ChannelSectionSnippet struct { + // ChannelId: The ID that YouTube uses to uniquely identify the channel + // that published the channelSection. + ChannelId string `json:"channelId,omitempty"` + + // Position: The position of the channelSection in the channel. + Position int64 `json:"position,omitempty"` + + // Style: The style of the channelSection. + Style string `json:"style,omitempty"` + + // Title: The channelSection's title for multiple_playlists and + // multiple_channels. + Title string `json:"title,omitempty"` + + // Type: The type of the channelSection. + Type string `json:"type,omitempty"` +} + +type ChannelSettings struct { + // DefaultTab: Which content tab users should see when viewing the + // channel. + DefaultTab string `json:"defaultTab,omitempty"` + + // Description: Specifies the channel description. + Description string `json:"description,omitempty"` + + // FeaturedChannelsTitle: Title for the featured channels tab. + FeaturedChannelsTitle string `json:"featuredChannelsTitle,omitempty"` + + // FeaturedChannelsUrls: The list of featured channels. + FeaturedChannelsUrls []string `json:"featuredChannelsUrls,omitempty"` + + // Keywords: Lists keywords associated with the channel, + // comma-separated. + Keywords string `json:"keywords,omitempty"` + + // ModerateComments: Whether user-submitted comments left on the channel + // page need to be approved by the channel owner to be publicly visible. + ModerateComments bool `json:"moderateComments,omitempty"` + + // ProfileColor: A prominent color that can be rendered on this channel + // page. + ProfileColor string `json:"profileColor,omitempty"` + + // ShowBrowseView: Whether the tab to browse the videos should be + // displayed. + ShowBrowseView bool `json:"showBrowseView,omitempty"` + + // ShowRelatedChannels: Whether related channels should be proposed. + ShowRelatedChannels bool `json:"showRelatedChannels,omitempty"` + + // Title: Specifies the channel title. + Title string `json:"title,omitempty"` + + // TrackingAnalyticsAccountId: The ID for a Google Analytics account to + // track and measure traffic to the channels. + TrackingAnalyticsAccountId string `json:"trackingAnalyticsAccountId,omitempty"` + + // UnsubscribedTrailer: The trailer of the channel, for users that are + // not subscribers. + UnsubscribedTrailer string `json:"unsubscribedTrailer,omitempty"` +} + +type ChannelSnippet struct { + // Description: The description of the channel. + Description string `json:"description,omitempty"` + + // PublishedAt: The date and time that the channel was created. The + // value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. + PublishedAt string `json:"publishedAt,omitempty"` + + // Thumbnails: A map of thumbnail images associated with the channel. + // For each object in the map, the key is the name of the thumbnail + // image, and the value is an object that contains other information + // about the thumbnail. + Thumbnails *ThumbnailDetails `json:"thumbnails,omitempty"` + + // Title: The channel's title. + Title string `json:"title,omitempty"` +} + +type ChannelStatistics struct { + // CommentCount: The number of comments for the channel. + CommentCount uint64 `json:"commentCount,omitempty,string"` + + // HiddenSubscriberCount: Whether or not the number of subscribers is + // shown for this user. + HiddenSubscriberCount bool `json:"hiddenSubscriberCount,omitempty"` + + // SubscriberCount: The number of subscribers that the channel has. + SubscriberCount uint64 `json:"subscriberCount,omitempty,string"` + + // VideoCount: The number of videos uploaded to the channel. + VideoCount uint64 `json:"videoCount,omitempty,string"` + + // ViewCount: The number of times the channel has been viewed. + ViewCount uint64 `json:"viewCount,omitempty,string"` +} + +type ChannelStatus struct { + // IsLinked: If true, then the user is linked to either a YouTube + // username or G+ account. Otherwise, the user doesn't have a public + // YouTube identity. + IsLinked bool `json:"isLinked,omitempty"` + + // PrivacyStatus: Privacy status of the channel. + PrivacyStatus string `json:"privacyStatus,omitempty"` +} + +type ChannelTopicDetails struct { + // TopicIds: A list of Freebase topic IDs associated with the channel. + // You can retrieve information about each topic using the Freebase + // Topic API. + TopicIds []string `json:"topicIds,omitempty"` +} + +type ContentRating struct { + // AcbRating: Rating system in Australia - Australian Classification + // Board + AcbRating string `json:"acbRating,omitempty"` + + // BbfcRating: British Board of Film Classification + BbfcRating string `json:"bbfcRating,omitempty"` + + // CatvRating: Rating system for Canadian TV - Canadian TV + // Classification System + CatvRating string `json:"catvRating,omitempty"` + + // CatvfrRating: Rating system for French Canadian TV - Regie du cinema + CatvfrRating string `json:"catvfrRating,omitempty"` + + // CbfcRating: Rating system in India - Central Board of Film + // Certification + CbfcRating string `json:"cbfcRating,omitempty"` + + // ChvrsRating: Canadian Home Video Rating System + ChvrsRating string `json:"chvrsRating,omitempty"` + + // DjctqRating: Rating system in Brazil - Department of Justice, Rating, + // Titles and Qualification + DjctqRating string `json:"djctqRating,omitempty"` + + // EirinRating: Rating system in Japan - Eiga Rinri Kanri Iinkai + EirinRating string `json:"eirinRating,omitempty"` + + // FmocRating: Rating system in France - French Minister of Culture + FmocRating string `json:"fmocRating,omitempty"` + + // FskRating: Rating system in Germany - Voluntary Self Regulation of + // the Movie Industry + FskRating string `json:"fskRating,omitempty"` + + // IcaaRating: Rating system in Spain - Instituto de Cinematografia y de + // las Artes Audiovisuales + IcaaRating string `json:"icaaRating,omitempty"` + + // KmrbRating: Rating system in South Korea - Korea Media Rating Board + KmrbRating string `json:"kmrbRating,omitempty"` + + // MibacRating: Rating system in Italy - Ministero dei Beni e delle + // Attivita Culturali e del Turismo + MibacRating string `json:"mibacRating,omitempty"` + + // MpaaRating: Motion Picture Association of America rating for the + // content. + MpaaRating string `json:"mpaaRating,omitempty"` + + // OflcRating: Rating system in New Zealand - Office of Film and + // Literature Classification + OflcRating string `json:"oflcRating,omitempty"` + + // RtcRating: Rating system in Mexico - General Directorate of Radio, + // Television and Cinematography + RtcRating string `json:"rtcRating,omitempty"` + + // RussiaRating: Rating system in Russia + RussiaRating string `json:"russiaRating,omitempty"` + + // TvpgRating: TV Parental Guidelines rating of the content. + TvpgRating string `json:"tvpgRating,omitempty"` + + // YtRating: Internal YouTube rating. + YtRating string `json:"ytRating,omitempty"` +} + +type GeoPoint struct { + // Altitude: Altitude above the reference ellipsoid, in meters. + Altitude float64 `json:"altitude,omitempty"` + + // Latitude: Latitude in degrees. + Latitude float64 `json:"latitude,omitempty"` + + // Longitude: Longitude in degrees. + Longitude float64 `json:"longitude,omitempty"` +} + +type GuideCategory struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the guide category. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#guideCategory". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the + // category, such as its title. + Snippet *GuideCategorySnippet `json:"snippet,omitempty"` +} + +type GuideCategoryListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of categories that can be associated with YouTube + // channels. In this map, the category ID is the map key, and its value + // is the corresponding guideCategory resource. + Items []*GuideCategory `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#guideCategoryListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type GuideCategorySnippet struct { + ChannelId string `json:"channelId,omitempty"` + + // Title: Description of the guide category. + Title string `json:"title,omitempty"` +} + +type I18nLanguage struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the i18n language. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#i18nLanguage". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the i18n + // language, such as language code and human-readable name. + Snippet *I18nLanguageSnippet `json:"snippet,omitempty"` +} + +type I18nLanguageListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of supported i18n languages. In this map, the i18n + // language ID is the map key, and its value is the corresponding + // i18nLanguage resource. + Items []*I18nLanguage `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#i18nLanguageListResponse". + Kind string `json:"kind,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type I18nLanguageSnippet struct { + // Hl: A short BCP-47 code that uniquely identifies a language. + Hl string `json:"hl,omitempty"` + + // Name: The human-readable name of the language in the language itself. + Name string `json:"name,omitempty"` +} + +type I18nRegion struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the i18n region. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#i18nRegion". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the i18n + // region, such as region code and human-readable name. + Snippet *I18nRegionSnippet `json:"snippet,omitempty"` +} + +type I18nRegionListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of regions where YouTube is available. In this map, the + // i18n region ID is the map key, and its value is the corresponding + // i18nRegion resource. + Items []*I18nRegion `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#i18nRegionListResponse". + Kind string `json:"kind,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type I18nRegionSnippet struct { + // Gl: The region code as a 2-letter ISO country code. + Gl string `json:"gl,omitempty"` + + // Name: The human-readable name of the region. + Name string `json:"name,omitempty"` +} + +type ImageSettings struct { + // BackgroundImageUrl: The URL for the background image shown on the + // video watch page. The image should be 1200px by 615px, with a maximum + // file size of 128k. + BackgroundImageUrl *LocalizedProperty `json:"backgroundImageUrl,omitempty"` + + // BannerExternalUrl: This is used only in update requests; if it's set, + // we use this URL to generate all of the above banner URLs. + BannerExternalUrl string `json:"bannerExternalUrl,omitempty"` + + // BannerImageUrl: Banner image. Desktop size (1060x175). + BannerImageUrl string `json:"bannerImageUrl,omitempty"` + + // BannerMobileExtraHdImageUrl: Banner image. Mobile size high + // resolution (1440x395). + BannerMobileExtraHdImageUrl string `json:"bannerMobileExtraHdImageUrl,omitempty"` + + // BannerMobileHdImageUrl: Banner image. Mobile size high resolution + // (1280x360). + BannerMobileHdImageUrl string `json:"bannerMobileHdImageUrl,omitempty"` + + // BannerMobileImageUrl: Banner image. Mobile size (640x175). + BannerMobileImageUrl string `json:"bannerMobileImageUrl,omitempty"` + + // BannerMobileLowImageUrl: Banner image. Mobile size low resolution + // (320x88). + BannerMobileLowImageUrl string `json:"bannerMobileLowImageUrl,omitempty"` + + // BannerMobileMediumHdImageUrl: Banner image. Mobile size medium/high + // resolution (960x263). + BannerMobileMediumHdImageUrl string `json:"bannerMobileMediumHdImageUrl,omitempty"` + + // BannerTabletExtraHdImageUrl: Banner image. Tablet size extra high + // resolution (2560x424). + BannerTabletExtraHdImageUrl string `json:"bannerTabletExtraHdImageUrl,omitempty"` + + // BannerTabletHdImageUrl: Banner image. Tablet size high resolution + // (2276x377). + BannerTabletHdImageUrl string `json:"bannerTabletHdImageUrl,omitempty"` + + // BannerTabletImageUrl: Banner image. Tablet size (1707x283). + BannerTabletImageUrl string `json:"bannerTabletImageUrl,omitempty"` + + // BannerTabletLowImageUrl: Banner image. Tablet size low resolution + // (1138x188). + BannerTabletLowImageUrl string `json:"bannerTabletLowImageUrl,omitempty"` + + // BannerTvHighImageUrl: Banner image. TV size high resolution + // (1920x1080). + BannerTvHighImageUrl string `json:"bannerTvHighImageUrl,omitempty"` + + // BannerTvImageUrl: Banner image. TV size extra high resolution + // (2120x1192). + BannerTvImageUrl string `json:"bannerTvImageUrl,omitempty"` + + // BannerTvLowImageUrl: Banner image. TV size low resolution (854x480). + BannerTvLowImageUrl string `json:"bannerTvLowImageUrl,omitempty"` + + // BannerTvMediumImageUrl: Banner image. TV size medium resolution + // (1280x720). + BannerTvMediumImageUrl string `json:"bannerTvMediumImageUrl,omitempty"` + + // LargeBrandedBannerImageImapScript: The image map script for the large + // banner image. + LargeBrandedBannerImageImapScript *LocalizedProperty `json:"largeBrandedBannerImageImapScript,omitempty"` + + // LargeBrandedBannerImageUrl: The URL for the 854px by 70px image that + // appears below the video player in the expanded video view of the + // video watch page. + LargeBrandedBannerImageUrl *LocalizedProperty `json:"largeBrandedBannerImageUrl,omitempty"` + + // SmallBrandedBannerImageImapScript: The image map script for the small + // banner image. + SmallBrandedBannerImageImapScript *LocalizedProperty `json:"smallBrandedBannerImageImapScript,omitempty"` + + // SmallBrandedBannerImageUrl: The URL for the 640px by 70px banner + // image that appears below the video player in the default view of the + // video watch page. + SmallBrandedBannerImageUrl *LocalizedProperty `json:"smallBrandedBannerImageUrl,omitempty"` + + // TrackingImageUrl: The URL for a 1px by 1px tracking pixel that can be + // used to collect statistics for views of the channel or video pages. + TrackingImageUrl string `json:"trackingImageUrl,omitempty"` + + // WatchIconImageUrl: The URL for the image that appears above the + // top-left corner of the video player. This is a 25-pixel-high image + // with a flexible width that cannot exceed 170 pixels. + WatchIconImageUrl string `json:"watchIconImageUrl,omitempty"` +} + +type IngestionInfo struct { + // BackupIngestionAddress: The backup ingestion URL that you should use + // to stream video to YouTube. You have the option of simultaneously + // streaming the content that you are sending to the ingestionAddress to + // this URL. + BackupIngestionAddress string `json:"backupIngestionAddress,omitempty"` + + // IngestionAddress: The primary ingestion URL that you should use to + // stream video to YouTube. You must stream video to this + // URL. + // + // Depending on which application or tool you use to encode your + // video stream, you may need to enter the stream URL and stream name + // separately or you may need to concatenate them in the following + // format: + // + // STREAM_URL/STREAM_NAME + IngestionAddress string `json:"ingestionAddress,omitempty"` + + // StreamName: The HTTP or RTMP stream name that YouTube assigns to the + // video stream. + StreamName string `json:"streamName,omitempty"` +} + +type InvideoBranding struct { + ImageBytes string `json:"imageBytes,omitempty"` + + ImageUrl string `json:"imageUrl,omitempty"` + + Position *InvideoPosition `json:"position,omitempty"` + + TargetChannelId string `json:"targetChannelId,omitempty"` + + Timing *InvideoTiming `json:"timing,omitempty"` +} + +type InvideoPosition struct { + // CornerPosition: Describes in which corner of the video the visual + // widget will appear. + CornerPosition string `json:"cornerPosition,omitempty"` + + // Type: Defines the position type. + Type string `json:"type,omitempty"` +} + +type InvideoPromotion struct { + // DefaultTiming: The default temporal position within the video where + // the promoted item will be displayed. Can be overriden by more + // specific timing in the item. + DefaultTiming *InvideoTiming `json:"defaultTiming,omitempty"` + + // Items: List of promoted items in decreasing priority. + Items []*PromotedItem `json:"items,omitempty"` + + // Position: The spatial position within the video where the promoted + // item will be displayed. + Position *InvideoPosition `json:"position,omitempty"` +} + +type InvideoTiming struct { + // DurationMs: Defines the duration in milliseconds for which the + // promotion should be displayed. If missing, the client should use the + // default. + DurationMs uint64 `json:"durationMs,omitempty,string"` + + // OffsetMs: Defines the time at which the promotion will appear. + // Depending on the value of type the value of the offsetMs field will + // represent a time offset from the start or from the end of the video, + // expressed in milliseconds. + OffsetMs uint64 `json:"offsetMs,omitempty,string"` + + // Type: Describes a timing type. If the value is offsetFromStart, then + // the offsetMs field represents an offset from the start of the video. + // If the value is offsetFromEnd, then the offsetMs field represents an + // offset from the end of the video. + Type string `json:"type,omitempty"` +} + +type LiveBroadcast struct { + // ContentDetails: The contentDetails object contains information about + // the event's video content, such as whether the content can be shown + // in an embedded video player or if it will be archived and therefore + // available for viewing after the event has concluded. + ContentDetails *LiveBroadcastContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube assigns to uniquely identify the broadcast. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#liveBroadcast". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the event, + // including its title, description, start time, and end time. + Snippet *LiveBroadcastSnippet `json:"snippet,omitempty"` + + // Status: The status object contains information about the event's + // status. + Status *LiveBroadcastStatus `json:"status,omitempty"` +} + +type LiveBroadcastContentDetails struct { + // BoundStreamId: This value uniquely identifies the live stream bound + // to the broadcast. + BoundStreamId string `json:"boundStreamId,omitempty"` + + // EnableClosedCaptions: This setting indicates whether closed + // captioning is enabled for this broadcast. The ingestion URL of the + // closed captions is returned through the liveStreams API. + EnableClosedCaptions bool `json:"enableClosedCaptions,omitempty"` + + // EnableContentEncryption: This setting indicates whether YouTube + // should enable content encryption for the broadcast. + EnableContentEncryption bool `json:"enableContentEncryption,omitempty"` + + // EnableDvr: This setting determines whether viewers can access DVR + // controls while watching the video. DVR controls enable the viewer to + // control the video playback experience by pausing, rewinding, or fast + // forwarding content. The default value for this property is + // true. + // + // + // + // Important: You must set the value to true and also set the + // enableArchive property's value to true if you want to make playback + // available immediately after the broadcast ends. + EnableDvr bool `json:"enableDvr,omitempty"` + + // EnableEmbed: This setting indicates whether the broadcast video can + // be played in an embedded player. If you choose to archive the video + // (using the enableArchive property), this setting will also apply to + // the archived video. + EnableEmbed bool `json:"enableEmbed,omitempty"` + + // MonitorStream: The monitorStream object contains information about + // the monitor stream, which the broadcaster can use to review the event + // content before the broadcast stream is shown publicly. + MonitorStream *MonitorStreamInfo `json:"monitorStream,omitempty"` + + // RecordFromStart: Automatically start recording after the event goes + // live. The default value for this property is true. + // + // + // + // Important: You + // must also set the enableDvr property's value to true if you want the + // playback to be available immediately after the broadcast ends. If you + // set this property's value to true but do not also set the enableDvr + // property to true, there may be a delay of around one day before the + // archived video will be available for playback. + RecordFromStart bool `json:"recordFromStart,omitempty"` + + // StartWithSlate: This setting indicates whether the broadcast should + // automatically begin with an in-stream slate when you update the + // broadcast's status to live. After updating the status, you then need + // to send a liveCuepoints.insert request that sets the cuepoint's + // eventState to end to remove the in-stream slate and make your + // broadcast stream visible to viewers. + StartWithSlate bool `json:"startWithSlate,omitempty"` +} + +type LiveBroadcastListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of broadcasts that match the request criteria. + Items []*LiveBroadcast `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#liveBroadcastListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type LiveBroadcastSnippet struct { + // ActualEndTime: The date and time that the broadcast actually ended. + // This information is only available once the broadcast's state is + // complete. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) + // format. + ActualEndTime string `json:"actualEndTime,omitempty"` + + // ActualStartTime: The date and time that the broadcast actually + // started. This information is only available once the broadcast's + // state is live. The value is specified in ISO 8601 + // (YYYY-MM-DDThh:mm:ss.sZ) format. + ActualStartTime string `json:"actualStartTime,omitempty"` + + // ChannelId: The ID that YouTube uses to uniquely identify the channel + // that is publishing the broadcast. + ChannelId string `json:"channelId,omitempty"` + + // Description: The broadcast's description. As with the title, you can + // set this field by modifying the broadcast resource or by setting the + // description field of the corresponding video resource. + Description string `json:"description,omitempty"` + + // PublishedAt: The date and time that the broadcast was added to + // YouTube's live broadcast schedule. The value is specified in ISO 8601 + // (YYYY-MM-DDThh:mm:ss.sZ) format. + PublishedAt string `json:"publishedAt,omitempty"` + + // ScheduledEndTime: The date and time that the broadcast is scheduled + // to end. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) + // format. + ScheduledEndTime string `json:"scheduledEndTime,omitempty"` + + // ScheduledStartTime: The date and time that the broadcast is scheduled + // to start. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) + // format. + ScheduledStartTime string `json:"scheduledStartTime,omitempty"` + + // Thumbnails: A map of thumbnail images associated with the broadcast. + // For each nested object in this object, the key is the name of the + // thumbnail image, and the value is an object that contains other + // information about the thumbnail. + Thumbnails *ThumbnailDetails `json:"thumbnails,omitempty"` + + // Title: The broadcast's title. Note that the broadcast represents + // exactly one YouTube video. You can set this field by modifying the + // broadcast resource or by setting the title field of the corresponding + // video resource. + Title string `json:"title,omitempty"` +} + +type LiveBroadcastStatus struct { + // LifeCycleStatus: The broadcast's status. The status can be updated + // using the API's liveBroadcasts.transition method. + LifeCycleStatus string `json:"lifeCycleStatus,omitempty"` + + // PrivacyStatus: The broadcast's privacy status. Note that the + // broadcast represents exactly one YouTube video, so the privacy + // settings are identical to those supported for videos. In addition, + // you can set this field by modifying the broadcast resource or by + // setting the privacyStatus field of the corresponding video resource. + PrivacyStatus string `json:"privacyStatus,omitempty"` + + // RecordingStatus: The broadcast's recording status. + RecordingStatus string `json:"recordingStatus,omitempty"` +} + +type LiveStream struct { + // Cdn: The cdn object defines the live stream's content delivery + // network (CDN) settings. These settings provide details about the + // manner in which you stream your content to YouTube. + Cdn *CdnSettings `json:"cdn,omitempty"` + + // ContentDetails: The content_details object contains information about + // the stream, including the closed captions ingestion URL. + ContentDetails *LiveStreamContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube assigns to uniquely identify the stream. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#liveStream". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the stream, + // including its channel, title, and description. + Snippet *LiveStreamSnippet `json:"snippet,omitempty"` + + // Status: The status object contains information about live stream's + // status. + Status *LiveStreamStatus `json:"status,omitempty"` +} + +type LiveStreamContentDetails struct { + // ClosedCaptionsIngestionUrl: The ingestion URL where the closed + // captions of this stream are sent. + ClosedCaptionsIngestionUrl string `json:"closedCaptionsIngestionUrl,omitempty"` +} + +type LiveStreamListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of live streams that match the request criteria. + Items []*LiveStream `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#liveStreamListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type LiveStreamSnippet struct { + // ChannelId: The ID that YouTube uses to uniquely identify the channel + // that is transmitting the stream. + ChannelId string `json:"channelId,omitempty"` + + // Description: The stream's description. The value cannot be longer + // than 10000 characters. + Description string `json:"description,omitempty"` + + // PublishedAt: The date and time that the stream was created. The value + // is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) format. + PublishedAt string `json:"publishedAt,omitempty"` + + // Title: The stream's title. The value must be between 1 and 128 + // characters long. + Title string `json:"title,omitempty"` +} + +type LiveStreamStatus struct { + StreamStatus string `json:"streamStatus,omitempty"` +} + +type LocalizedProperty struct { + // Default: Default value for the localized property. + Default string `json:"default,omitempty"` + + // Localized: The localized values. + Localized []*LocalizedString `json:"localized,omitempty"` +} + +type LocalizedString struct { + // Language: Language associated to this value. + Language string `json:"language,omitempty"` + + // Value: Value of the property. + Value string `json:"value,omitempty"` +} + +type MonitorStreamInfo struct { + // BroadcastStreamDelayMs: If you have set the enableMonitorStream + // property to true, then this property determines the length of the + // live broadcast delay. + BroadcastStreamDelayMs int64 `json:"broadcastStreamDelayMs,omitempty"` + + // EmbedHtml: HTML code that embeds a player that plays the monitor + // stream. + EmbedHtml string `json:"embedHtml,omitempty"` + + // EnableMonitorStream: This value determines whether the monitor stream + // is enabled for the broadcast. If the monitor stream is enabled, then + // YouTube will broadcast the event content on a special stream intended + // only for the broadcaster's consumption. The broadcaster can use the + // stream to review the event content and also to identify the optimal + // times to insert cuepoints. + // + // You need to set this value to true if you + // intend to have a broadcast delay for your event. + // + // Note: This property + // cannot be updated once the broadcast is in the testing or live state. + EnableMonitorStream bool `json:"enableMonitorStream,omitempty"` +} + +type PageInfo struct { + // ResultsPerPage: The number of results included in the API response. + ResultsPerPage int64 `json:"resultsPerPage,omitempty"` + + // TotalResults: The total number of results in the result set. + TotalResults int64 `json:"totalResults,omitempty"` +} + +type Playlist struct { + // ContentDetails: The contentDetails object contains information like + // video count. + ContentDetails *PlaylistContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the playlist. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#playlist". + Kind string `json:"kind,omitempty"` + + // Player: The player object contains information that you would use to + // play the playlist in an embedded player. + Player *PlaylistPlayer `json:"player,omitempty"` + + // Snippet: The snippet object contains basic details about the + // playlist, such as its title and description. + Snippet *PlaylistSnippet `json:"snippet,omitempty"` + + // Status: The status object contains status information for the + // playlist. + Status *PlaylistStatus `json:"status,omitempty"` +} + +type PlaylistContentDetails struct { + // ItemCount: The number of videos in the playlist. + ItemCount int64 `json:"itemCount,omitempty"` +} + +type PlaylistItem struct { + // ContentDetails: The contentDetails object is included in the resource + // if the included item is a YouTube video. The object contains + // additional information about the video. + ContentDetails *PlaylistItemContentDetails `json:"contentDetails,omitempty"` + + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // Id: The ID that YouTube uses to uniquely identify the playlist item. + Id string `json:"id,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#playlistItem". + Kind string `json:"kind,omitempty"` + + // Snippet: The snippet object contains basic details about the playlist + // item, such as its title and position in the playlist. + Snippet *PlaylistItemSnippet `json:"snippet,omitempty"` + + // Status: The status object contains information about the playlist + // item's privacy status. + Status *PlaylistItemStatus `json:"status,omitempty"` +} + +type PlaylistItemContentDetails struct { + // EndAt: The time, measured in seconds from the start of the video, + // when the video should stop playing. (The playlist owner can specify + // the times when the video should start and stop playing when the video + // is played in the context of the playlist.) By default, assume that + // the video.endTime is the end of the video. + EndAt string `json:"endAt,omitempty"` + + // Note: A user-generated note for this item. + Note string `json:"note,omitempty"` + + // StartAt: The time, measured in seconds from the start of the video, + // when the video should start playing. (The playlist owner can specify + // the times when the video should start and stop playing when the video + // is played in the context of the playlist.) The default value is 0. + StartAt string `json:"startAt,omitempty"` + + // VideoId: The ID that YouTube uses to uniquely identify a video. To + // retrieve the video resource, set the id query parameter to this value + // in your API request. + VideoId string `json:"videoId,omitempty"` +} + +type PlaylistItemListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of playlist items that match the request criteria. + Items []*PlaylistItem `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#playlistItemListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type PlaylistItemSnippet struct { + // ChannelId: The ID that YouTube uses to uniquely identify the user + // that added the item to the playlist. + ChannelId string `json:"channelId,omitempty"` + + // ChannelTitle: Channel title for the channel that the playlist item + // belongs to. + ChannelTitle string `json:"channelTitle,omitempty"` + + // Description: The item's description. + Description string `json:"description,omitempty"` + + // PlaylistId: The ID that YouTube uses to uniquely identify the + // playlist that the playlist item is in. + PlaylistId string `json:"playlistId,omitempty"` + + // Position: The order in which the item appears in the playlist. The + // value uses a zero-based index, so the first item has a position of 0, + // the second item has a position of 1, and so forth. + Position int64 `json:"position,omitempty"` + + // PublishedAt: The date and time that the item was added to the + // playlist. The value is specified in ISO 8601 (YYYY-MM-DDThh:mm:ss.sZ) + // format. + PublishedAt string `json:"publishedAt,omitempty"` + + // ResourceId: The id object contains information that can be used to + // uniquely identify the resource that is included in the playlist as + // the playlist item. + ResourceId *ResourceId `json:"resourceId,omitempty"` + + // Thumbnails: A map of thumbnail images associated with the playlist + // item. For each object in the map, the key is the name of the + // thumbnail image, and the value is an object that contains other + // information about the thumbnail. + Thumbnails *ThumbnailDetails `json:"thumbnails,omitempty"` + + // Title: The item's title. + Title string `json:"title,omitempty"` +} + +type PlaylistItemStatus struct { + // PrivacyStatus: This resource's privacy status. + PrivacyStatus string `json:"privacyStatus,omitempty"` +} + +type PlaylistListResponse struct { + // Etag: Etag of this resource. + Etag string `json:"etag,omitempty"` + + // EventId: Serialized EventId of the request which produced this + // response. + EventId string `json:"eventId,omitempty"` + + // Items: A list of playlists that match the request criteria. + Items []*Playlist `json:"items,omitempty"` + + // Kind: Identifies what kind of resource this is. Value: the fixed + // string "youtube#playlistListResponse". + Kind string `json:"kind,omitempty"` + + // NextPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the next page in the result set. + NextPageToken string `json:"nextPageToken,omitempty"` + + PageInfo *PageInfo `json:"pageInfo,omitempty"` + + // PrevPageToken: The token that can be used as the value of the + // pageToken parameter to retrieve the previous page in the result set. + PrevPageToken string `json:"prevPageToken,omitempty"` + + TokenPagination *TokenPagination `json:"tokenPagination,omitempty"` + + // VisitorId: The visitorId identifies the visitor. + VisitorId string `json:"visitorId,omitempty"` +} + +type PlaylistPlayer struct { + // EmbedHtml: An